| 1 | import Lax342547.CompressedResidual |
| 2 | import Mathlib.LinearAlgebra.Dual.Lemmas |
| 3 | import Mathlib.LinearAlgebra.Dimension.Free |
| 4 | import Mathlib.Algebra.Module.Projective |
| 5 | |
| 13 | |
| 14 | namespace Lax342547.ChannelFactorization |
| 15 | |
| 16 | open Lax342547.MomentSpace Lax342547.ChannelChanges |
| 17 | open Lax342547.PairedAnnihilators Lax342547.ResponseMatrices |
| 18 | |
| 19 | axiom factor_through_pairing {X Y U V : Type} |
| 20 | [AddCommGroup X] [Module Binary X] [AddCommGroup Y] [Module Binary Y] |
| 21 | [AddCommGroup U] [Module Binary U] [AddCommGroup V] [Module Binary V] |
| 22 | [FiniteDimensional Binary Y] [FiniteDimensional Binary V] |
| 23 | (β : X →ₗ[Binary] Y →ₗ[Binary] Binary) (π : U →ₗ[Binary] V →ₗ[Binary] Binary) |
| 24 | (hr : Module.finrank Binary (LinearMap.range β) ≤ Module.finrank Binary (LinearMap.range π)) : |
| 25 | ∃ f : X →ₗ[Binary] U, ∃ g : Y →ₗ[Binary] V, π.compl₁₂ f g = β |
| 26 | |
| 27 | axiom factor_in_channel_spaces {X Y H : Type} [Fintype H] |
| 28 | [AddCommGroup X] [Module Binary X] [AddCommGroup Y] [Module Binary Y] |
| 29 | [FiniteDimensional Binary Y] |
| 30 | (S T : Submodule Binary (H → Binary)) (β : X →ₗ[Binary] Y →ₗ[Binary] Binary) |
| 31 | (hr : Module.finrank Binary (LinearMap.range β) ≤ Module.finrank Binary |
| 32 | (LinearMap.range ((dotProductBilin Binary Binary).compl₁₂ S.subtype T.subtype))) : |
| 33 | ∃ f : X →ₗ[Binary] S, ∃ g : Y →ₗ[Binary] T, |
| 34 | (dotProductBilin Binary Binary).compl₁₂ (S.subtype.comp f) (T.subtype.comp g) = β |
| 35 | |
| 36 | axiom perpendicular_dimension {H : Type} [Fintype H] (S : Submodule Binary (H → Binary)) : |
| 37 | Module.finrank Binary S + Module.finrank Binary (perpendicular S) = Fintype.card H |
| 38 | |
| 39 | axiom channel_pairing_rank {H : Type} [Fintype H] |
| 40 | (S T : Submodule Binary (H → Binary)) {cS cT : ℕ} |
| 41 | (hS : Fintype.card H ≤ Module.finrank Binary S + cS) |
| 42 | (hT : Fintype.card H ≤ Module.finrank Binary T + cT) : |
| 43 | Fintype.card H ≤ Module.finrank Binary |
| 44 | (LinearMap.range ((dotProductBilin Binary Binary).compl₁₂ S.subtype T.subtype)) + cS + cT |
| 45 | |
| 46 | noncomputable def remainingValues {A B H : Type} [Fintype H] |
| 47 | [AddCommGroup A] [Module Binary A] [AddCommGroup B] [Module Binary B] |
| 48 | (S : Submodule Binary (H → Binary)) (G : A →ₗ[Binary] (H → Binary)) |
| 49 | (D : B →ₗ[Binary] (H → Binary)) : Submodule Binary (H → Binary) := |
| 50 | perpendicular (S ⊔ LinearMap.range G ⊔ LinearMap.range D) |
| 51 | |
| 52 | axiom remaining_values_dimension {A B H : Type} [Fintype H] |
| 53 | [AddCommGroup A] [Module Binary A] [AddCommGroup B] [Module Binary B] |
| 54 | (S : Submodule Binary (H → Binary)) (G : A →ₗ[Binary] (H → Binary)) |
| 55 | (D : B →ₗ[Binary] (H → Binary)) {K R : ℕ} |
| 56 | (hS : Module.finrank Binary S ≤ K) |
| 57 | (hG : Module.finrank Binary (LinearMap.range G) ≤ R) |
| 58 | (hD : Module.finrank Binary (LinearMap.range D) ≤ R) : |
| 59 | Fintype.card H ≤ Module.finrank Binary (remainingValues S G D) + (K + 2 * R) |
| 60 | |
| 61 | axiom remaining_values_allowed {A B H : Type} [Fintype H] |
| 62 | [AddCommGroup A] [Module Binary A] [AddCommGroup B] [Module Binary B] |
| 63 | (S : Submodule Binary (H → Binary)) (G : A →ₗ[Binary] (H → Binary)) |
| 64 | (D : B →ₗ[Binary] (H → Binary)) : remainingValues S G D ≤ perpendicular S |
| 65 | |
| 66 | axiom remaining_values_orthogonal {A B H : Type} [Fintype H] |
| 67 | [AddCommGroup A] [Module Binary A] [AddCommGroup B] [Module Binary B] |
| 68 | (S : Submodule Binary (H → Binary)) (G : A →ₗ[Binary] (H → Binary)) |
| 69 | (D : B →ₗ[Binary] (H → Binary)) (v : remainingValues S G D) : |
| 70 | (∀ a, dotProduct v.val (G a) = 0) ∧ (∀ b, dotProduct v.val (D b) = 0) |
| 71 | |
| 72 | axiom remaining_values_factor {X Y A B C D H : Type} [Fintype H] |
| 73 | [AddCommGroup X] [Module Binary X] [AddCommGroup Y] [Module Binary Y] |
| 74 | [AddCommGroup A] [Module Binary A] [AddCommGroup B] [Module Binary B] |
| 75 | [AddCommGroup C] [Module Binary C] [AddCommGroup D] [Module Binary D] |
| 76 | [FiniteDimensional Binary Y] |
| 77 | (S T : Submodule Binary (H → Binary)) |
| 78 | (G : A →ₗ[Binary] (H → Binary)) (dG : B →ₗ[Binary] (H → Binary)) |
| 79 | (F : C →ₗ[Binary] (H → Binary)) (dF : D →ₗ[Binary] (H → Binary)) |
| 80 | (β : X →ₗ[Binary] Y →ₗ[Binary] Binary) {K R : ℕ} |
| 81 | (hS : Module.finrank Binary S ≤ K) (hT : Module.finrank Binary T ≤ K) |
| 82 | (hG : Module.finrank Binary (LinearMap.range G) ≤ R) |
| 83 | (hdG : Module.finrank Binary (LinearMap.range dG) ≤ R) |
| 84 | (hF : Module.finrank Binary (LinearMap.range F) ≤ R) |
| 85 | (hdF : Module.finrank Binary (LinearMap.range dF) ≤ R) |
| 86 | (hcapacity : Module.finrank Binary (LinearMap.range β) + 2 * K + 4 * R ≤ Fintype.card H) : |
| 87 | ∃ f : X →ₗ[Binary] remainingValues S G dG, |
| 88 | ∃ g : Y →ₗ[Binary] remainingValues T F dF, |
| 89 | (dotProductBilin Binary Binary).compl₁₂ |
| 90 | ((remainingValues S G dG).subtype.comp f) ((remainingValues T F dF).subtype.comp g) = β |
| 91 | |
| 92 | axiom allowed_pure_factor {B H A C E F : Type} [Fintype B] [Fintype H] |
| 93 | [AddCommGroup A] [Module Binary A] [AddCommGroup C] [Module Binary C] |
| 94 | [AddCommGroup E] [Module Binary E] [AddCommGroup F] [Module Binary F] |
| 95 | (D Q : Submodule Binary (Nominal B H)) (S T : Submodule Binary (H → Binary)) |
| 96 | (G : A →ₗ[Binary] (H → Binary)) (dG : C →ₗ[Binary] (H → Binary)) |
| 97 | (G' : E →ₗ[Binary] (H → Binary)) (dG' : F →ₗ[Binary] (H → Binary)) |
| 98 | (β : (Nominal B H ⧸ D) →ₗ[Binary] (Nominal B H ⧸ Q) →ₗ[Binary] Binary) {K R : ℕ} |
| 99 | (hS : Module.finrank Binary S ≤ K) (hT : Module.finrank Binary T ≤ K) |
| 100 | (hG : Module.finrank Binary (LinearMap.range G) ≤ R) |
| 101 | (hdG : Module.finrank Binary (LinearMap.range dG) ≤ R) |
| 102 | (hG' : Module.finrank Binary (LinearMap.range G') ≤ R) |
| 103 | (hdG' : Module.finrank Binary (LinearMap.range dG') ≤ R) |
| 104 | (hcapacity : Module.finrank Binary (LinearMap.range β) + 2 * K + 4 * R ≤ Fintype.card H) : |
| 105 | ∃ δ : (Nominal B H ⧸ D) →ₗ[Binary] perpendicular S, |
| 106 | ∃ ε : (Nominal B H ⧸ Q) →ₗ[Binary] perpendicular T, |
| 107 | extraProduct D Q S T δ ε = β ∧ |
| 108 | (∀ x a, dotProduct (δ x).val (G a) = 0) ∧ |
| 109 | (∀ x c, dotProduct (δ x).val (dG c) = 0) ∧ |
| 110 | (∀ y e, dotProduct (ε y).val (G' e) = 0) ∧ |
| 111 | (∀ y f, dotProduct (ε y).val (dG' f) = 0) |
| 112 | |
| 113 | end Lax342547.ChannelFactorization |
| 114 | |