Paper IX · Lean source

PolynomialBlockInverse.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_joint_motion/formalization/PolynomialBlockInverse.lean128 lines

Original source pathpreserved/PRSC_IX_Consolidated_Manuscript/polynomial_joint_motion/formalization/PolynomialBlockInverse.lean
Skip declarations and read code

Skip source text

1 module
2 public import PolynomialWeightedInverse
3 public import PolynomialParameterSystem
4 
5 @[expose] public section
6 noncomputable section
7 set_option autoImplicit false
8 
9 namespace Komorebi.PolynomialBlockInverse
10 open Matrix Komorebi.PolynomialParameterSystem
11 open Komorebi.PolynomialWeightedInverse
12 variable {e k : ℕ} {R : Type*} [CommRing R]
13 
14 /-- An upper triangular block matrix in the original appended coordinate order. -/
15 def upperBlock (J : Matrix (Fin e) (Fin e) R)
16     (K : Matrix (Fin e) (Fin k) R) (c : R) :
17     Matrix (Fin (e + k)) (Fin (e + k)) R :=
18   join (fun i => join (J i) (K i))
19     (fun i => join 0 ((c • (1 : Matrix (Fin k) (Fin k) R)) i))
20 
21 @[simp] theorem upperBlock_solved_solved (J : Matrix (Fin e) (Fin e) R)
22     (K : Matrix (Fin e) (Fin k) R) (c : R) (i j : Fin e) :
23     upperBlock J K c (Fin.castAdd k i) (Fin.castAdd k j) = J i j := by
24   simp [upperBlock]
25 
26 @[simp] theorem upperBlock_solved_free (J : Matrix (Fin e) (Fin e) R)
27     (K : Matrix (Fin e) (Fin k) R) (c : R) (i : Fin e) (j : Fin k) :
28     upperBlock J K c (Fin.castAdd k i) (Fin.natAdd e j) = K i j := by
29   simp [upperBlock]
30 
31 @[simp] theorem upperBlock_free_solved (J : Matrix (Fin e) (Fin e) R)
32     (K : Matrix (Fin e) (Fin k) R) (c : R) (i : Fin k) (j : Fin e) :
33     upperBlock J K c (Fin.natAdd e i) (Fin.castAdd k j) = 0 := by
34   simp [upperBlock]
35 
36 @[simp] theorem upperBlock_free_free (J : Matrix (Fin e) (Fin e) R)
37     (K : Matrix (Fin e) (Fin k) R) (c : R) (i j : Fin k) :
38     upperBlock J K c (Fin.natAdd e i) (Fin.natAdd e j) =
39       (c • (1 : Matrix (Fin k) (Fin k) R)) i j := by
40   simp [upperBlock]
41 
42 /-- The block matrix acts by the expected solved and parameter formulas. -/
43 theorem upperBlock_mulVec_join (J : Matrix (Fin e) (Fin e) R)
44     (K : Matrix (Fin e) (Fin k) R) (c : R)
45     (u : Fin e → R) (v : Fin k → R) :
46     (upperBlock J K c).mulVec (join u v) =
47       join (J.mulVec u + K.mulVec v) (c • v) := by
48   ext i
49   refine Fin.addCases (fun j => ?_) (fun j => ?_) i
50   · simp [Matrix.mulVec, dotProduct, Fin.sum_univ_add]
51   · simp [Matrix.mulVec, dotProduct, Fin.sum_univ_add]
52     simp [Matrix.one_apply, mul_ite]
53 
54 /-- The integral certificate for the augmented Jacobian. -/
55 def blockCertificate (A : Matrix (Fin e) (Fin e) R)
56     (K : Matrix (Fin e) (Fin k) R) (c : R) :
57     Matrix (Fin (e + k)) (Fin (e + k)) R :=
58   upperBlock A (-(A * K)) c
59 
60 /-- A scalar left certificate transfers to the augmented system with no extra scalar loss. -/
61 theorem blockCertificate_mul (A J : Matrix (Fin e) (Fin e) R)
62     (K : Matrix (Fin e) (Fin k) R) (c : R)
63     (hAJ : A * J = c • (1 : Matrix (Fin e) (Fin e) R)) :
64     blockCertificate A K c * upperBlock J K 1 =
65       c • (1 : Matrix (Fin (e + k)) (Fin (e + k)) R) := by
66   apply Matrix.ext_iff_mulVec.mpr
67   intro v
68   rw [← join_parts v, ← Matrix.mulVec_mulVec]
69   simp only [blockCertificate, upperBlock_mulVec_join, one_smul,
70     Matrix.mulVec_add, Matrix.neg_mulVec, Matrix.mulVec_mulVec,
71     hAJ, Matrix.smul_mulVec, Matrix.one_mulVec]
72   ext i
73   refine Fin.addCases (fun j => ?_) (fun j => ?_) i <;>
74     simp [solvedPart, freePart]
75 
76 /-- A scalar right certificate also transfers to the augmented system. -/
77 theorem mul_blockCertificate (A J : Matrix (Fin e) (Fin e) R)
78     (K : Matrix (Fin e) (Fin k) R) (c : R)
79     (hJA : J * A = c • (1 : Matrix (Fin e) (Fin e) R)) :
80     upperBlock J K 1 * blockCertificate A K c =
81       c • (1 : Matrix (Fin (e + k)) (Fin (e + k)) R) := by
82   apply Matrix.ext_iff_mulVec.mpr
83   intro v
84   rw [← join_parts v, ← Matrix.mulVec_mulVec]
85   simp only [blockCertificate, upperBlock_mulVec_join, one_smul,
86     Matrix.mulVec_add, Matrix.neg_mulVec, Matrix.mulVec_neg,
87     Matrix.mulVec_smul, Matrix.mulVec_mulVec, ← Matrix.mul_assoc,
88     hJA, Matrix.smul_mul, Matrix.one_mul, Matrix.smul_mulVec, Matrix.one_mulVec]
89   ext i
90   refine Fin.addCases (fun j => ?_) (fun j => ?_) i <;>
91     simp [solvedPart, freePart]
92 
93 /-- The solved block combines coefficient motion and prescribed parameter motion with a plus sign. -/
94 theorem blockCertificate_mulVec_join_neg (A : Matrix (Fin e) (Fin e) R)
95     (K : Matrix (Fin e) (Fin k) R) (c : R)
96     (h : Fin e → R) (v : Fin k → R) :
97     (blockCertificate A K c).mulVec (join h (-v)) =
98       join (A.mulVec (h + K.mulVec v)) (-(c • v)) := by
99   simp [blockCertificate, upperBlock_mulVec_join, Matrix.mulVec_add,
100     Matrix.mulVec_mulVec, Matrix.neg_mulVec, Matrix.mulVec_neg]
101 
102 /-- Both scalar inverse identities transfer together. -/
103 theorem blockCertificate_two_sided (A J : Matrix (Fin e) (Fin e) R)
104     (K : Matrix (Fin e) (Fin k) R) (c : R)
105     (hAJ : A * J = c • (1 : Matrix (Fin e) (Fin e) R))
106     (hJA : J * A = c • (1 : Matrix (Fin e) (Fin e) R)) :
107     blockCertificate A K c * upperBlock J K 1 =
108       c • (1 : Matrix (Fin (e + k)) (Fin (e + k)) R) ∧
109     upperBlock J K 1 * blockCertificate A K c =
110       c • (1 : Matrix (Fin (e + k)) (Fin (e + k)) R) :=
111   ⟨blockCertificate_mul A J K c hAJ, mul_blockCertificate A J K c hJA⟩
112 
113 /-- The augmented inverse has the same denominator bound as the original solved inverse. -/
114 theorem bounded_inverse_upperBlock (p s : ℕ) [Fact (Nat.Prime p)]
115     (J : Matrix (Fin e) (Fin e) ℤ_[p]) (K : Matrix (Fin e) (Fin k) ℤ_[p])
116     (hJ : IsUnit (rationalMatrix p J))
117     (hA : ∃ A : Matrix (Fin e) (Fin e) ℤ_[p],
118       rationalMatrix p A = (p : ℚ_[p])^s • (rationalMatrix p J)⁻¹) :
119     IsUnit (rationalMatrix p (upperBlock J K 1)) ∧
120     ∃ C : Matrix (Fin (e + k)) (Fin (e + k)) ℤ_[p],
121       rationalMatrix p C =
122         (p : ℚ_[p])^s • (rationalMatrix p (upperBlock J K 1))⁻¹ := by
123   obtain ⟨A, hAJ, hJA⟩ := (bounded_inverse_iff_certificate p s J).mp ⟨hJ, hA⟩
124   exact (bounded_inverse_iff_certificate p s (upperBlock J K 1)).mpr
125     ⟨blockCertificate A K ((p : ℤ_[p])^s),
126       blockCertificate_two_sided A J K ((p : ℤ_[p])^s) hAJ hJA⟩
127 
128 end Komorebi.PolynomialBlockInverse

Back to source controls

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: 398f1123b76a2d458bac4eb6d671d15ad41c36d329c70cac8a3fdc0bca3a945a

Original source on GitHub

Back to Paper IX: Arithmetic Packets, Dyadic Towers, and Local Polynomial Deformation