Compression that fixes pin/key vectors and preserves target matrices
Lax342547.ConstrainedCompression · concepts/Lax342547/ConstrainedCompression.lean · lax-342547
No public endorsements yet.
Loading review…
Sign in with ORCIDNatural Language Statement
Lemma
Block maps are chosen from the actual projected pin/key spaces and the row/column observations of each residual matrix. They fix all required vectors, preserve every target functional, and have the paper block-rank bound independent of the base dimension.
Concept map
Evidence
This concept declares 9 statements. Each proof establishes one of them relative to its assumptions.
1 actual_block_compression proven
2 exists_block_compression proven
3 fixedSlices_mem proven
4 fixedSlices_rank proven
5 lifted_decomposition proven
6 observations_rank proven
7 pi_range_rank proven
8 preserved_matrix proven
9 vector_decomposition proven
Lean source view on GitHub
| 1 | import Lax342547.QuotientCompression |
| 2 | |
| 3 | /-! |
| 4 | --- |
| 5 | title: Compression that fixes pin/key vectors and preserves target matrices |
| 6 | type: lemma |
| 7 | --- |
| 8 | Block maps are chosen from the actual projected pin/key spaces and the row/column observations of each residual matrix. They fix all required vectors, preserve every target functional, and have the paper block-rank bound independent of the base dimension. |
| 9 | -/ |
| 10 | |
| 11 | namespace Lax342547.ConstrainedCompression |
| 12 | |
| 13 | open Lax342547.MomentSpace Lax342547.TagGeometry Lax342547.ConcreteGeometry |
| 14 | open Lax342547.BaseCompression |
| 15 | open Lax342547.PairedWitnesses Lax342547.TableSpaces Lax342547.ProjectedPins |
| 16 | open Lax342547.ConcreteCut Lax342547.ResponseMatrices |
| 17 | open Lax342547.CutProfiles Lax342547.ExactPins Lax342547.BarredSpaces |
| 18 | |
| 19 | def baseAt {k n : ℕ} (q : Block k) (j : Fin n) : Base k n := match q with |
| 20 | | Sum.inl (d, t) => Sum.inl ((d, t), j) |
| 21 | | Sum.inr q => Sum.inr (q, j) |
| 22 | |
| 23 | def blockSlice {k n b degree : ℕ} (s : SelectorCoordinates b degree) (q : Block k) : |
| 24 | Vector k n b degree →ₗ[Binary] (Fin n → Binary) where |
| 25 | toFun v j := v (s, some (baseAt q j)) |
| 26 | map_add' _ _ := rfl |
| 27 | map_smul' _ _ := rfl |
| 28 | |
| 29 | noncomputable def blockEmbed {k n b degree : ℕ} (s : SelectorCoordinates b degree) (q : Block k) : |
| 30 | (Fin n → Binary) →ₗ[Binary] Vector k n b degree := by |
| 31 | classical |
| 32 | exact |
| 33 | { toFun := fun v c => if c.1 = s then match c.2 with |
| 34 | | none => 0 |
| 35 | | some (Sum.inl ((d, t), j)) => if q = Sum.inl (d, t) then v j else 0 |
| 36 | | some (Sum.inr (q', j)) => if q = Sum.inr q' then v j else 0 |
| 37 | else 0 |
| 38 | map_add' := by |
| 39 | intro v w |
| 40 | ext ⟨a, c⟩ |
| 41 | cases c with |
| 42 | | none => simp |
| 43 | | some c => |
| 44 | rcases c with ⟨⟨d, t⟩, j⟩ | ⟨q', j⟩ <;> |
| 45 | simp only [Pi.add_apply] <;> split_ifs <;> simp_all |
| 46 | map_smul' := by |
| 47 | intro c v |
| 48 | ext ⟨a, q'⟩ |
| 49 | cases q' with |
| 50 | | none => simp |
| 51 | | some q' => |
| 52 | rcases q' with ⟨⟨d, t⟩, j⟩ | ⟨q', j⟩ <;> |
| 53 | simp only [Pi.smul_apply] <;> split_ifs <;> simp_all } |
| 54 | |
| 55 | def constantPart {k n b degree : ℕ} (v : Vector k n b degree) : Vector k n b degree := |
| 56 | fun c => match c.2 with |
| 57 | | none => v (c.1, none) |
| 58 | | some _ => 0 |
| 59 | |
| 60 | axiom vector_decomposition {k n b degree : ℕ} (v : Vector k n b degree) : |
| 61 | v = constantPart v + ∑ s, ∑ q, blockEmbed s q (blockSlice s q v) |
| 62 | |
| 63 | axiom lifted_decomposition {k n b degree : ℕ} |
| 64 | (A : Block k → (Fin n → Binary) →ₗ[Binary] (Fin n → Binary)) (v : Vector k n b degree) : |
| 65 | liftBase (blockMap A) v = constantPart v + ∑ s, ∑ q, blockEmbed s q (A q (blockSlice s q v)) |
| 66 | |
| 67 | axiom pi_range_rank {I V X : Type} [Fintype I] [AddCommGroup V] [Module Binary V] |
| 68 | [AddCommGroup X] [Module Binary X] [FiniteDimensional Binary V] [FiniteDimensional Binary X] |
| 69 | (L : I → V →ₗ[Binary] X) : |
| 70 | Module.finrank Binary (LinearMap.range (LinearMap.pi L)) ≤ |
| 71 | ∑ i, Module.finrank Binary (LinearMap.range (L i)) |
| 72 | |
| 73 | noncomputable def fixedSlices {I : Type} [Fintype I] {k n b degree : ℕ} |
| 74 | (S : I → Submodule Binary (Vector k n b degree)) (q : Block k) : |
| 75 | (∀ j : I × SelectorCoordinates b degree, S j.1) →ₗ[Binary] (Fin n → Binary) := by |
| 76 | classical |
| 77 | exact LinearMap.lsum Binary _ Binary (fun j => (blockSlice j.2 q).comp (S j.1).subtype) |
| 78 | |
| 79 | axiom fixedSlices_mem {I : Type} [Fintype I] {k n b degree : ℕ} |
| 80 | (S : I → Submodule Binary (Vector k n b degree)) (q : Block k) |
| 81 | (i : I) (s : SelectorCoordinates b degree) (v : Vector k n b degree) (hv : v ∈ S i) : |
| 82 | blockSlice s q v ∈ LinearMap.range (fixedSlices S q) |
| 83 | |
| 84 | axiom fixedSlices_rank {I : Type} [Fintype I] {k n b degree B : ℕ} |
| 85 | (S : I → Submodule Binary (Vector k n b degree)) |
| 86 | (hS : ∀ i, Module.finrank Binary (S i) ≤ B) (q : Block k) : |
| 87 | Module.finrank Binary (LinearMap.range (fixedSlices S q)) ≤ |
| 88 | Fintype.card I * Fintype.card (SelectorCoordinates b degree) * B |
| 89 | |
| 90 | noncomputable def observations {I X : Type} {k n b degree : ℕ} [AddCommGroup X] [Module Binary X] |
| 91 | (T : I → Vector k n b degree →ₗ[Binary] X) (q : Block k) : |
| 92 | (Fin n → Binary) →ₗ[Binary] (I × SelectorCoordinates b degree → X) := |
| 93 | LinearMap.pi (fun j => (T j.1).comp (blockEmbed j.2 q)) |
| 94 | |
| 95 | axiom observations_rank {I X : Type} [Fintype I] [AddCommGroup X] [Module Binary X] |
| 96 | [FiniteDimensional Binary X] {k n b degree R : ℕ} |
| 97 | (T : I → Vector k n b degree →ₗ[Binary] X) |
| 98 | (hT : ∀ i, Module.finrank Binary (LinearMap.range (T i)) ≤ R) (q : Block k) : |
| 99 | Module.finrank Binary (LinearMap.range (observations T q)) ≤ |
| 100 | Fintype.card I * Fintype.card (SelectorCoordinates b degree) * R |
| 101 | |
| 102 | axiom exists_block_compression {I X : Type} [Fintype I] [AddCommGroup X] [Module Binary X] |
| 103 | [FiniteDimensional Binary X] {k n b degree B R : ℕ} |
| 104 | (S : I → Submodule Binary (Vector k n b degree)) |
| 105 | (hS : ∀ i, Module.finrank Binary (S i) ≤ B) |
| 106 | (T : I → Vector k n b degree →ₗ[Binary] X) |
| 107 | (hT : ∀ i, Module.finrank Binary (LinearMap.range (T i)) ≤ R) : |
| 108 | ∃ A : Block k → (Fin n → Binary) →ₗ[Binary] (Fin n → Binary), |
| 109 | (∀ q, Module.finrank Binary (LinearMap.range (A q)) ≤ |
| 110 | Fintype.card I * Fintype.card (SelectorCoordinates b degree) * (B + R)) ∧ |
| 111 | (∀ i v, v ∈ S i → liftBase (blockMap A) v = v) ∧ |
| 112 | ∀ i, (T i).comp (liftBase (blockMap A)) = T i |
| 113 | |
| 114 | axiom preserved_matrix {B : Type} [Fintype B] |
| 115 | (f : (B → Binary) →ₗ[Binary] (B → Binary)) (M : Matrix B B Binary) |
| 116 | (hrow : M.mulVecLin.comp f = M.mulVecLin) |
| 117 | (hcol : M.transpose.mulVecLin.comp f = M.transpose.mulVecLin) : by |
| 118 | classical |
| 119 | exact (LinearMap.toMatrix' f).transpose * M * LinearMap.toMatrix' f = M |
| 120 | |
| 121 | axiom actual_block_compression {k n b degree r K R : ℕ} {hr : 2 * r ≤ n} |
| 122 | {H N : Type} [Fintype H] (W : Lists k n b degree r hr) |
| 123 | (P : Pin (Component (Tag k) × Bool) (Fin 2 × (Coordinate k n b degree ⊕ H)) N) |
| 124 | (hK : P.rank ≤ K) (i : Fin 2) (M : Component (Tag k) → Moment k n b degree) |
| 125 | (hM : ∀ e, (M e).rank ≤ R) : |
| 126 | ∃ A : Block k → (Fin n → Binary) →ₗ[Binary] (Fin n → Binary), |
| 127 | (∀ q, Module.finrank Binary (LinearMap.range (A q)) ≤ |
| 128 | 2 * Fintype.card (SelectorCoordinates b degree) * Fintype.card (Component (Tag k)) * |
| 129 | (K + 14 + R)) ∧ |
| 130 | (∀ a v, v ∈ projected P i a ⊔ individualKeys W i a.1 → liftBase (blockMap A) v = v) ∧ |
| 131 | ∀ e, by |
| 132 | classical |
| 133 | exact |
| 134 | (LinearMap.toMatrix' (liftBase (Coord := SelectorCoordinates b degree) (blockMap A))).transpose * |
| 135 | M e * LinearMap.toMatrix' (liftBase (blockMap A)) = M e |
| 136 | |
| 137 | end Lax342547.ConstrainedCompression |
| 138 |
Discussion
Ask a question or add context. Endorsements and structured flags are kept in the review panel above.
0 comments