OAI/Computability/UniqueGames/Machines/MachineProductFieldLemmas.lean
116 declarations, 0 contain sorry, 0 declared as axioms
One actual product-output field: gather the fixed number of coordinate values from the input table, evaluate their common-radix code by Horner, move the resulting word into the reversed output accumulator, and clear the gather work. All input fields and the input table are preserved.
- abbrev
OAI.UniqueGamesTheorem.Explicit.MachineProductField.Layoutline 32Source documentation
Gather's table/query/scan/scratch and coordinate tapes; then radix, two Horner accumulators, counter, scratch, isolated field output, global output.
abbrev Layout (width : Nat) := MachineProductGather.Tape width ⊕ Fin 7
Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductGather.Tape
- def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.gatherSlotsline 34 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.hornerRoleline 37 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.hornerRole_injectiveline 46 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.hornerSlotsline 58 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.clearTapesline 61 - abbrev
OAI.UniqueGamesTheorem.Explicit.MachineProductField.Labelline 65 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.entryline 69 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.instructionline 72 - structure
OAI.UniqueGamesTheorem.Explicit.MachineProductField.Readyline 87Source documentation
Conditions on real input/work stacks; arbitrary output suffixes remain permitted. The two query/scan tapes are empty at a row boundary.
structure Ready (slots : Layout width ↪ K) (base : K → List Bool) : Prop where …
Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductField.Layout
- def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.gatheredline 98 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.evaluatedline 103 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.emittedline 108 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.finalTapesline 114 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductField.stepsline 119 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.gathered_extraline 128 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.fieldTraceline 140Source documentation
Actual execution of the complete gather/Horner/emit/cleanup phase. The field equality connects only mathematical tape contents; all transition work is proved from the concrete instructions.
theorem fieldTrace (slots : Layout width ↪ K) (values : List Nat) (coefficient : Nat) (indices offsets fields : Fin width → Nat) (selected : ∀ i, values[coefficient * indices i + offsets i]? = some (fields i)) (labels : Label slots → Λ) (exit : Option Λ) (program : Λ → TM2.Stmt (fun _ : K => Bool) Λ (MachineHorner.State σ)) (atLabels : ∀ l, program (labels l) = instruction slots coefficient offsets labels exit l) (base : K → List Bool) (suffixes : Fin width → List Bool) (ready : Ready slots base) (tableWord : base (slots (.inl (.inl 0))) = encodeWords values) (sourceWords : ∀ i, base (slots (.inl (.inr (.inl i)))) = encodeWord (indices i) ++ suffixes i) (radix : Nat) (digits : Nat → Nat) (radixWord : base (slots (.inr 0)) = encodeWord radix) …Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductField.Layout, OAI.UniqueGamesTheorem.Explicit.MachineProductField.Label, OAI.UniqueGamesTheorem.Explicit.MachineProductField.instruction, OAI.UniqueGamesTheorem.Explicit.MachineProductField.Ready
- theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.mem_clearTapesline 236 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.extra_not_mem_clearTapesline 242 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.Ready.empty_clearTapesline 251 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.gathered_frameline 258 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.finalTapes_eqline 269Source documentation
The complete row-field phase changes just the output accumulator.
theorem finalTapes_eq (slots : Layout width ↪ K) (values : List Nat) (coefficient : Nat) (indices offsets fields : Fin width → Nat) (base : K → List Bool) (ready : Ready slots base) (value : Nat) : finalTapes slots values coefficient indices offsets fields base value = Function.update base (slots (.inr 6)) ((encodeWord value).reverse ++ base (slots (.inr 6))) := by …Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductField.Layout, OAI.UniqueGamesTheorem.Explicit.MachineProductField.Ready, OAI.UniqueGamesTheorem.Explicit.MachineProductField.finalTapes
- theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.Ready.output_updateline 296Source documentation
The output update preserves all work-tape entry conditions.
theorem Ready.output_update (slots : Layout width ↪ K) (base : K → List Bool) (ready : Ready slots base) (word : List Bool) : Ready slots (Function.update base (slots (.inr 6)) word) := by …Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductField.Layout, OAI.UniqueGamesTheorem.Explicit.MachineProductField.Ready
- theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.final_readyline 313 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.emitted_clear_lengthline 321Source documentation
Cleanup only touches gather work; it never scans the global accumulator.
theorem emitted_clear_length (slots : Layout width ↪ K) (values : List Nat) (coefficient : Nat) (indices offsets fields : Fin width → Nat) (selected : ∀ i, values[coefficient * indices i + offsets i]? = some (fields i)) (base : K → List Bool) (ready : Ready slots base) (value : Nat) (k : K) (member : k ∈ clearTapes slots) : (emitted slots values coefficient indices offsets fields base value k).length ≤ width * ((encodeWords values).length + 1) := by …Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductField.Layout, OAI.UniqueGamesTheorem.Explicit.MachineProductField.Ready, OAI.UniqueGamesTheorem.Explicit.MachineProductField.clearTapes, OAI.UniqueGamesTheorem.Explicit.MachineProductField.emitted
- theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.clearTapes_lengthline 339 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductField.cleanup_steps_leline 342 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductPower.digitsline 379 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductPower.value_eqline 381 - abbrev
OAI.UniqueGamesTheorem.Explicit.MachineProductPower.Labelline 388 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductPower.instructionline 390 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductPower.stepsline 397 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductPower.powerTraceline 402Source documentation
Header powers are computed from a unary input radix, not stored in an unbounded register. Only the output accumulator changes at the boundary.
theorem powerTrace (slots : MachineHorner.Layout (exponent + 1) ↪ K) (output : K) (outside : ∀ i, output ≠ slots i) (labels : Label exponent → Λ) (exit : Option Λ) (program : Λ → TM2.Stmt (fun _ : K => Bool) Λ (MachineHorner.State σ)) (atLabels : ∀ l, program (labels l) = instruction slots output labels exit l) (base : K → List Bool) (radix : Nat) (radixWord : base (slots (.inl 0)) = encodeWord radix) (digitWords : ∀ i : Fin (exponent + 1), base (slots (.inr i)) = encodeWord (digits i.val)) (clean : MachineHorner.Clean slots base) (fieldEmpty : base (slots (.inl 3)) = []) (ambient : σ) (register : Option Bool) : (advance (TM2.step program))^[steps radix exponent] (some ⟨some (labels (.inl .start)), ((ambient, ()), register), base⟩) = some ⟨exit, ((ambient, ()), none), …Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductPower.Label, OAI.UniqueGamesTheorem.Explicit.MachineProductPower.instruction, OAI.UniqueGamesTheorem.Explicit.MachineProductPower.digits, OAI.UniqueGamesTheorem.Explicit.MachineProductPower.steps
- def
OAI.UniqueGamesTheorem.Explicit.MachineProductPower.timePolynomialline 444 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductPower.steps_leline 448 - abbrev
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Layoutline 475 - abbrev
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Commandline 476 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.fieldRoleline 479Source documentation
Only the radix tape is switched between endpoint and alphabet fields.
def fieldRole (useAlphabet : Bool) : MachineProductField.Layout width → Layout width | .inr 0 => if useAlphabet then .inr () else .inl (.inr 0) | tape => .inl tape
Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductField.Layout, OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Layout
- theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.fieldRole_injectiveline 483 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.fieldSlotsline 496 - abbrev
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.LocalLabelline 500 - abbrev
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Labelline 503 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.localMainline 506 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.localInstructionline 509 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.entryline 514 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.instructionline 518 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.outputTapeline 524 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.appendFieldline 526 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.rowBitsline 530Source documentation
Exact literal output of the command list in field order.
def rowBits (values : Command width → Nat) (commands : List (Command width)) : List Bool := …
Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Command
- def
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.resultline 533 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.resultOf_eqline 537 - structure
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Readyline 550Source documentation
The input-dependent data needed for one whole row, held invariant by all physical field executions.
structure Ready (slots : Layout width ↪ K) (table : List Nat) (indices : Fin width → Nat) (radices : Bool → Nat) (base : K → List Bool) : Prop where …Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Layout
- theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Ready.appendFieldline 557 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductRow.rowTraceline 580Source documentation
Complete row trace from the concrete field implementation. The only premises concerning values are literal indexed-table identities and the Horner interpretation of those values.
theorem rowTrace (slots : Layout width ↪ K) (table : List Nat) (coefficient : Nat) (indices : Fin width → Nat) (radices : Bool → Nat) (commands : List (Command width)) (fields : Command width → Fin width → Nat) (digits : Command width → Nat → Nat) (selected : ∀ command ∈ commands, ∀ i, table[coefficient * indices i + command.2 i]? = some (fields command i)) (reversed : ∀ command ∈ commands, ∀ i : Fin width, digits command i.val = fields command i.rev) (labels : Label slots commands → Λ) (exit : Option Λ) (program : Λ → TM2.Stmt (fun _ : K => Bool) Λ (MachineHorner.State σ)) (atLabels : ∀ l, program (labels l) = instruction slots coefficient commands labels exit l) (base : K → List Bool) (ready : Ready slots table indices radices base) (ambient : σ) : let values := fun c : Command width => MachineHorner.value (radices c.1) (digits c) width …Mentions: OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Layout, OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Command, OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Label, OAI.UniqueGamesTheorem.Explicit.MachineProductRow.instruction, OAI.UniqueGamesTheorem.Explicit.MachineProductRow.Ready
- def
OAI.UniqueGamesTheorem.Explicit.MachineProductBounds.fieldPolynomialline 633 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductBounds.fieldPolynomial_evalline 638 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductBounds.field_steps_leline 644 - def
OAI.UniqueGamesTheorem.Explicit.MachineProductBounds.rowCostline 667 - theorem
OAI.UniqueGamesTheorem.Explicit.MachineProductBounds.row_steps_leline 675 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.coefficientPolynomialline 712 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.coefficientPolynomial_evalline 716 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.coefficientPolynomial_eval_reverseline 722 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.coefficientsline 729Source documentation
An actual finite coefficient list for every fixed natural polynomial. No evaluation of an input is included in this static representation choice.
noncomputable def coefficients (p : Polynomial Nat) : {cs : List Nat // coefficientPolynomial cs = p} := by …Mentions: OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.coefficientPolynomial
- def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.highCoefficientsline 749 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.widthline 752 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.digitline 754 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.digitBoundline 757 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.le_sum_of_memline 759 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.digit_le_boundline 769 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.highCoefficients_foldlline 775 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.range_map_digitline 782 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.prependFieldsline 796 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.prependFieldsTapesline 802 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.stepAux_prependFieldsline 808 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.prependFieldsTapes_applyline 818 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.popNline 832 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.stepAux_popNline 837 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.clearFieldsline 848 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.clearFieldsTapesline 853 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.stepAux_clearFieldsline 858 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.clearFieldsTapes_applyline 868 - abbrev
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.Layoutline 886 - abbrev
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.Labelline 887 - abbrev
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.Stateline 888 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.fieldWordline 890 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.fieldIndicesline 894 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.fieldIndices_nodupline 897 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.inl_not_mem_fieldsline 900 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.inr_mem_fieldsline 903 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.initialTapesline 906 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.preparedTapesline 909 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.preparedTapes_inlline 912 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.preparedTapes_inrline 917 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.slotsline 922 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.preparedTapes_cleanline 924 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.innerLabelsline 928 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.programline 931 - abbrev
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.machineline 941 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.afterHornerTapesline 952 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.afterInputTapesline 955 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.finalTapesline 958 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.clearFields_finalline 961 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.initList_eqline 972 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.haltList_eqline 978 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.initializationTraceline 984 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.cleanupTraceline 994 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.prefixValuePolynomialline 1011 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.prefixCostPolynomialline 1015 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.prefixValuePolynomial_evalline 1021 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.prefixCostPolynomial_evalline 1027 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.timePolynomialline 1037 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.timePolynomial_evalline 1041 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.hornerValue_eq_evalline 1048 - theorem
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.hornerStageTraceline 1054 - def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.outputsInTimeline 1070Source documentation
Exact execution includes literal initialization, the physical Horner subroutine, input consumption, and cleanup of every coefficient tape.
def outputsInTime (p : Polynomial Nat) (n : Nat) : Turing.TM2OutputsInTime (machine p) (encodeWord n) (some (encodeWord (p.eval n))) ((timePolynomial p).eval n) where …Mentions: OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.machine, OAI.UniqueGamesTheorem.Foundations.Complexity.encodeWord, OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.timePolynomial
- def
OAI.UniqueGamesTheorem.Foundations.Complexity.CookLevin.PolynomialMachine.computableInPolyTimeline 1091Source documentation
A genuine finite Boolean-stack machine for evaluating any fixed natural polynomial on zero-delimited unary input, with a polynomial transition bound.
def computableInPolyTime (p : Polynomial Nat) : Turing.TM2ComputableInPolyTime encodeWord encodeWord p.eval where …Mentions: OAI.UniqueGamesTheorem.Foundations.Complexity.encodeWord