Documentation

LeanPool.PointwiseComposition.CategoricalRiceShapiro.ArithmeticCode.RecursionEvaluation

Supporting results for pointwise provable equality.

Evaluation properties of primitive-recursion codes #

codePrecStep dg is the step relation of codePrec. It has n + 3 arguments: the history index, the history code, the recursion argument, and the n outer arguments. It never reads argument 2, the recursion argument: precStepArgs supplies Code.proj 0, codeBeta (Code.proj 1) (Code.proj 0), and the outer projections, none of which is Code.proj 2.

eval_codePrecStep_bound_irrel_iff records that, so a caller may change the recursion argument without disturbing the step relation. The proof is structural: InputsAgree is a conservative dependency relation on the nine Code constructors, and eval_iff_of_inputsAgree turns it into an equivalence of evaluations.

The proof of eval_codePrecStep_bound_irrel_iff does not evaluate codeBeta or any other derived constructor in the model. It inspects those codes only as syntax trees and assumes no arithmetic theory: ORingStructure M alone. The existence theorem below instead uses arithmetic evaluation and beta extension under 𝐏𝐀.

A conservative dependency relation #

Evaluation respects the dependency relation #

Closure of the dependency relation under the derived constructors #

Each lemma below inspects a code as a syntax tree only. No arithmetic meaning is attached to any of them, and codeBeta in particular is delta-reduced but never evaluated.

The recursion argument is unused by the step relation #

Bound irrelevance for the base conjunct of the recursion predicate #

The step relation of codePrec does not read the recursion argument.

The arguments of codePrecStep dg are the history index, the history code, the recursion argument, and the outer arguments. Argument 2, the recursion argument, is supplied to nothing: precStepArgs hands dg only Code.proj 0, codeBeta (Code.proj 1) (Code.proj 0), and the outer projections. A caller may therefore change it freely.

No arithmetic theory is assumed, and no code is evaluated in the model.

Sigma-one definability of one argument slot of a literal code graph #

Reading one history entry through different argument codes #

Reading a correct history #

Correct histories agree below the recursion argument #

The successor step of primitive recursion #

Evaluating codePrec df dg at a + 1 gives the value at a together with one application of the step code.

The two evaluations read different correct histories, so the proof aligns their entries by Sigma-one induction before reading the predecessor value.

Evaluating codePrec df dg at zero gives the same value for the base code.

This is the forward direction only: a successful evaluation of the recursion at zero yields a successful evaluation of df with the same output. Nothing here asserts the converse.

Totality of the step relation #

Introducing the bounded quantifier without a positive terminal step #

Totality of the correctness predicate at an arbitrary history #

Moving a history entry between the two-argument beta code and the #

assignments of codePrecPredicate

Sigma-one definability of a literal code graph in two argument slots #

Substituting terms with model parameters into a code graph preserves Sigma-one definability.

Building a correct history #

Generic existence for the recursion constructor #

codePrec df dg has a value at every recursion argument at which the base code has one and the step code is total at every index up to that argument.

The step premise is uniform in the predecessor value and is required only up to the recursion argument itself. The index a is included because the eager bounded search of codeBall evaluates the step there as well; nothing beyond a is used.

Halving #

codeDiv2 A has a value at any value of A.

codeDiv2Unary is codePrec with a zero base and an eager conditional on the parity of the recursion index as step, so eval_codePrec_exists_of_total applies: the step has a value at every index and every predecessor value. Only existence is asserted; the witness is not identified with any quotient of a.