Paper IX · Lean source
PolynomialTowerControls.lean
Selected results recorded Coverage and evidence
Compiler/replay evidence is reported for a subset or bounded block. No whole-work coverage is implied.
This viewer reads the retained source; it does not run Lean or assign new claim mappings.
polynomial_regularity/formalization/PolynomialTowerControls.lean98 lines
Original source path
preserved/PRSC_IX_Consolidated_Manuscript/polynomial_regularity/formalization/PolynomialTowerControls.leanSkip declarations and read code
1 module
2 public import PolynomialIntegerTower
3 public import PadicTowerLimit
4 public import Mathlib.Tactic
5
6 @[expose] public section
7 noncomputable section
8 set_option autoImplicit false
9 namespace Komorebi.PolynomialTowerControls
10 open MvPolynomial PolynomialObstruction PolynomialDigitBridge
11
12 def squareMinusFive : Fin 1 → MvPolynomial (Fin 1) ℤ := fun _ => X 0 ^ 2 - C 5
13
14 /-- The singular lower root one already lifts from modulus two to modulus four. -/
15 theorem square_minus_five_lower_steps :
16 (2 : ℤ) ∣ eval (fun _ : Fin 1 => 1) (squareMinusFive 0) ∧
17 (4 : ℤ) ∣ eval (fun _ : Fin 1 => 1) (squareMinusFive 0) := by
18 norm_num [squareMinusFive]
19
20 /-- The very next level is impossible, even without a prescribed lower residue. -/
21 theorem square_minus_five_no_mod_eight (x : ℤ) : ¬ (8 : ℤ) ∣ x ^ 2 - 5 := by
22 intro h
23 have hz : ((x : ZMod 8) ^ 2 - 5) = 0 := by
24 simpa using (ZMod.intCast_zmod_eq_zero_iff_dvd (x ^ 2 - 5) 8).mpr h
25 have hn : ∀ t : ZMod 8, t ^ 2 - 5 ≠ 0 := by decide
26 exact hn (x : ZMod 8) hz
27
28 /-- One successful singular lift does not furnish roots through all levels. -/
29 theorem square_minus_five_no_tower :
30 ¬ ∃ z : ℕ → Fin 1 → ℤ,
31 ∀ n i, (2 : ℤ) ^ (1+n) ∣ eval (z n) (squareMinusFive i) := by
32 rintro ⟨z, hz⟩
33 have h := hz 2 0
34 norm_num [squareMinusFive] at h
35 exact square_minus_five_no_mod_eight (z 2 0) h
36
37 def projectionSystem : Fin 1 → MvPolynomial (Fin 2) ℤ := fun _ => X 0
38
39 /-- A rectangular Jacobian can be surjective while leaving a free coordinate. -/
40 theorem projection_jacobian_surjective (q : ℕ) (x : Fin 2 → ℤ) :
41 Function.Surjective (digitJacobian q projectionSystem x) := by
42 intro y
43 refine ⟨fun _ => y 0, ?_⟩
44 ext i
45 simp [digitJacobian, projectionSystem, Fin.sum_univ_two, Fin.eq_zero i]
46
47 /-- Surjectivity does not imply uniqueness: both roots have the same residue modulo two. -/
48 theorem projection_two_padic_roots :
49 ∃ a b : Fin 2 → ℤ_[2], a ≠ b ∧
50 (∀ i, eval₂ (Int.castRingHom ℤ_[2]) a (projectionSystem i) = 0) ∧
51 (∀ i, eval₂ (Int.castRingHom ℤ_[2]) b (projectionSystem i) = 0) ∧
52 (∀ i, (2 : ℤ_[2]) ∣ b i - a i) := by
53 let a : Fin 2 → ℤ_[2] := fun _ => 0
54 let b : Fin 2 → ℤ_[2] := ![0, 2]
55 refine ⟨a, b, ?_, ?_, ?_, ?_⟩
56 · intro h
57 have h1 := congrFun h 1
58 norm_num [a, b] at h1
59 · intro i
60 simp [a, projectionSystem]
61 · intro i
62 simp [b, projectionSystem]
63 · intro i
64 fin_cases i <;> simp [a, b]
65
66 def linearMinusTwo : Fin 1 → MvPolynomial (Fin 1) ℤ := fun _ => X 0 - C 2
67
68 /-- A nonsingular lower root can require changing the very next binary digit. -/
69 theorem linear_shift_nonsingular_lower_root :
70 (2 : ℤ) ∣ eval (fun _ : Fin 1 => 0) (linearMinusTwo 0) ∧
71 Function.Surjective (digitJacobian 2 linearMinusTwo (fun _ => 0)) ∧
72 eval (fun _ : Fin 1 => 2) (linearMinusTwo 0) = 0 := by
73 refine ⟨?_, ?_, ?_⟩
74 · change (2 : ℤ) ∣ eval (fun _ : Fin 1 => 0) (X 0 - C 2)
75 simp only [map_sub, eval_X, eval_C]
76 norm_num
77 · intro y
78 refine ⟨y, ?_⟩
79 ext i
80 change (∑ k : Fin 1, (eval (fun _ : Fin 1 => (0 : ℤ))
81 (pderiv k (X 0 - C 2)) : ZMod 2) * y k) = y i
82 simp only [map_sub, pderiv_C, sub_zero,
83 Fin.sum_univ_one, pderiv_X_self, map_one, Int.cast_one, one_mul, Fin.eq_zero i]
84 · change eval (fun _ : Fin 1 => (2 : ℤ)) (X 0 - C 2) = 0
85 simp only [map_sub, eval_X, eval_C, sub_self]
86
87 /-- The resulting exact integer root need not retain one extra digit of the initial point. -/
88 theorem linear_shift_no_extra_precision :
89 ¬ ∃ y : Fin 1 → ℤ,
90 eval y (linearMinusTwo 0) = 0 ∧ (4 : ℤ) ∣ y 0 := by
91 rintro ⟨y, hy, hd⟩
92 have h2 : y 0 = 2 := by
93 change eval y (X 0 - C 2) = 0 at hy
94 simpa only [map_sub, eval_X, eval_C, sub_eq_zero] using hy
95 rw [h2] at hd
96 norm_num at hd
97
98 end Komorebi.PolynomialTowerControls
Original file and source record
This copy matches the recorded source file. Its publication here does not change the work’s review status.
SHA-256: 369da958792083c935d91b72f781b3a1ee624c50bfddb7f2500404248aedbb2b
Back to Paper IX: Arithmetic Packets, Dyadic Towers, and Local Polynomial Deformation