From fdc24bbc6e48597b12b7fe402e149082b5f5e4d8 Mon Sep 17 00:00:00 2001 From: Franziskus Wiesnet Date: Wed, 30 Oct 2024 14:43:47 +0100 Subject: [PATCH 1/7] Determinat added --- Cubical/Algebra/Determinat/Minor.agda | 195 ++ Cubical/Algebra/Determinat/RingSum.agda | 348 +++ Cubical/Algebra/Determinat/adjugate.agda | 1925 +++++++++++++++++ Cubical/Algebra/Determinat/det.agda | 2493 ++++++++++++++++++++++ Cubical/Algebra/Determinat/minor.agda | 186 ++ 5 files changed, 5147 insertions(+) create mode 100644 Cubical/Algebra/Determinat/Minor.agda create mode 100644 Cubical/Algebra/Determinat/RingSum.agda create mode 100644 Cubical/Algebra/Determinat/adjugate.agda create mode 100644 Cubical/Algebra/Determinat/det.agda create mode 100644 Cubical/Algebra/Determinat/minor.agda diff --git a/Cubical/Algebra/Determinat/Minor.agda b/Cubical/Algebra/Determinat/Minor.agda new file mode 100644 index 0000000000..521477bb6e --- /dev/null +++ b/Cubical/Algebra/Determinat/Minor.agda @@ -0,0 +1,195 @@ +{-# OPTIONS --cubical #-} + +module Minor where + +open import Cubical.Foundations.Prelude +open import Cubical.Foundations.Equiv +open import Cubical.Algebra.Matrix +open import Cubical.Data.Nat renaming ( _+_ to _+ℕ_ ; _·_ to _·ℕ_ + ; +-comm to +ℕ-comm + ; +-assoc to +ℕ-assoc + ; ·-assoc to ·ℕ-assoc) +open import Cubical.Data.Vec.Base using (_∷_; []) +open import Cubical.Foundations.Structure using (⟨_⟩) +open import Cubical.Data.FinData +open import Cubical.Data.FinData.Order using (_<'Fin_; _≤'Fin_) +open import Cubical.Algebra.Ring +open import Cubical.Algebra.Ring.Base +open import Cubical.Algebra.Ring.BigOps +open import Cubical.Algebra.Monoid.BigOp +open import Cubical.Algebra.CommRing +open import Cubical.Algebra.CommRing.Base +open import Cubical.Data.Nat.Order +open import Cubical.Tactics.CommRingSolver + +module Minor (ℓ : Level) where + + -- definition and properties to remove one Index, i.e. (removeIndex i) is the monoton ebbeding from {0,...,n-1} to {0,...,n} ommiting i. + + removeIndex : {n : ℕ} → Fin (suc n) → Fin n → Fin (suc n) + removeIndex zero k = suc k + removeIndex (suc i) zero = zero + removeIndex (suc i) (suc k) = suc (removeIndex i k) + + -- On {0,...,i-1} the map (removeIndex i) is the identity. + removeIndexId : {n : ℕ} → (i : Fin (suc n)) → (k : Fin n) → (suc k) ≤'Fin i → (removeIndex i k) ≡ weakenFin k + removeIndexId (suc i) zero le = refl + removeIndexId (suc i) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexId i k le) + + -- On {i,...,n-1} the map (removeIndex i) is the successor function. + removeIndexSuc : {n : ℕ} → (i : Fin (suc n)) → (k : Fin n) → i ≤'Fin weakenFin k → (removeIndex i k) ≡ suc k + removeIndexSuc zero k le = refl + removeIndexSuc (suc i) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexSuc i k le) + + -- A formula for commuting removeIndex maps + removeIndexComm : {n : ℕ} → (i j : Fin (suc n)) → (k : Fin n) → i ≤'Fin j → + removeIndex (suc j) (removeIndex i k) ≡ removeIndex (weakenFin i) (removeIndex j k) + removeIndexComm zero j k le = refl + removeIndexComm (suc i) (suc j) zero le = refl + removeIndexComm (suc i) (suc j) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexComm i j k le) + + -- remove the j-th column of a matrix + + remove-column : {A : Type ℓ} {n m : ℕ} (j : Fin (suc m)) (M : FinMatrix A n (suc m)) → FinMatrix A n m + remove-column j M k l = M k (removeIndex j l) + + remove-column-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc m)) (j : Fin (suc m)) (M : FinMatrix A n (suc (suc m))) (k : Fin n) (l : Fin m) → + j ≤'Fin i → + remove-column j (remove-column (suc i) M) k l ≡ remove-column i (remove-column (weakenFin j) M) k l + remove-column-comm i j M k l le = + remove-column j (remove-column (suc i) M) k l + ≡⟨ refl ⟩ + M k (removeIndex (suc i) (removeIndex j l)) + ≡⟨ cong (λ a → M k a) ( removeIndexComm j i l le) ⟩ + M k (removeIndex (weakenFin j) (removeIndex i l)) + ≡⟨ refl ⟩ + remove-column i (remove-column (weakenFin j) M) k l + ∎ + + -- remove the i-th row of a matrix + remove-row : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (M : FinMatrix A (suc n) m) → FinMatrix A n m + remove-row i M k l = M (removeIndex i k) l + + remove-row-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc n)) (M : FinMatrix A (suc (suc n)) m) (k : Fin n) (l : Fin m) → + j ≤'Fin i → + remove-row j (remove-row (suc i) M) k l ≡ remove-row i (remove-row (weakenFin j) M) k l + remove-row-comm i j M k l le = + remove-row j (remove-row (suc i) M) k l + ≡⟨ refl ⟩ + M (removeIndex (suc i) (removeIndex j k)) l + ≡⟨ cong (λ a → M a l) ( removeIndexComm j i k le) ⟩ + M (removeIndex (weakenFin j) (removeIndex i k)) l + ≡⟨ refl ⟩ + remove-row i (remove-row (weakenFin j) M) k l + ∎ + + remove-column-row-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M : FinMatrix A (suc n) (suc m)) (k : Fin n) (l : Fin m) → (remove-row i (remove-column j M)) k l ≡ (remove-column j (remove-row i M)) k l + remove-column-row-comm i j M k l = refl + + -- Calculating of the minor. + minor : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M : FinMatrix A (suc n) (suc m)) → FinMatrix A n m + minor i j M = remove-column j (remove-row i M) + + -- Compatability of the minor with the equality. + minorComp : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M N : FinMatrix A (suc n) (suc m)) → ((i : Fin (suc n)) → (j : Fin (suc m)) → M i j ≡ N i j ) → (k : Fin n) → (l : Fin m) → minor i j M k l ≡ minor i j N k l + minorComp {n = suc n} {suc m} i j M N f k l = f (removeIndex i k) (removeIndex j l) + + -- Formulas to commute minors + minorComm0 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → + i₂ ≤'Fin i₁ → j₂ ≤'Fin j₁ → + minor i₂ j₂ (minor (suc i₁) (suc j₁) M) k l ≡ minor i₁ j₁ (minor (weakenFin i₂) (weakenFin j₂) M) k l + minorComm0 i₁ i₂ j₁ j₂ k l M lei lej = + M (removeIndex (suc i₁) (removeIndex i₂ k)) + (removeIndex (suc j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M a (removeIndex (suc j₁) (removeIndex j₂ l))) (removeIndexComm i₂ i₁ k lei) ⟩ + M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) + (removeIndex (suc j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) a ) ((removeIndexComm j₂ j₁ l lej)) ⟩ + M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) + (removeIndex (weakenFin j₂) (removeIndex j₁ l)) + ∎ + + minorComm1 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → + i₂ ≤'Fin i₁ → j₁ ≤'Fin j₂ → + minor i₂ j₂ (minor (suc i₁) (weakenFin j₁) M) k l ≡ minor i₁ j₁ (minor (weakenFin i₂) (suc j₂) M) k l + + minorComm1 i₁ i₂ j₁ j₂ k l M lei lej = + M (removeIndex (suc i₁) (removeIndex i₂ k)) + (removeIndex (weakenFin j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M a (removeIndex (weakenFin j₁) (removeIndex j₂ l))) ((removeIndexComm i₂ i₁ k lei)) ⟩ + M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) + (removeIndex (weakenFin j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) a) (sym ((removeIndexComm j₁ j₂ l lej))) ⟩ + M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) + (removeIndex (suc j₂) (removeIndex j₁ l)) + ∎ + + minorComm2 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → + i₁ ≤'Fin i₂ → j₂ ≤'Fin j₁ → + minor i₂ j₂ (minor (weakenFin i₁) (suc j₁) M) k l ≡ minor i₁ j₁ (minor (suc i₂) (weakenFin j₂) M) k l + + minorComm2 i₁ i₂ j₁ j₂ k l M lei lej = + M (removeIndex (weakenFin i₁) (removeIndex i₂ k)) + (removeIndex (suc j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M a (removeIndex (suc j₁) (removeIndex j₂ l))) (sym ((removeIndexComm i₁ i₂ k lei))) ⟩ + M (removeIndex (suc i₂) (removeIndex i₁ k)) + (removeIndex (suc j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M (removeIndex (suc i₂) (removeIndex i₁ k)) a) ((removeIndexComm j₂ j₁ l lej)) ⟩ + M (removeIndex (suc i₂) (removeIndex i₁ k)) + (removeIndex (weakenFin j₂) (removeIndex j₁ l)) + ∎ + + minorSemiCommR : {A : Type ℓ} {n m : ℕ} (i₁ : Fin (suc (suc n))) (i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → + j₂ ≤'Fin j₁ → + minor i₂ j₂ (minor i₁ (suc j₁) M) k l ≡ minor i₂ j₁ (minor i₁ (weakenFin j₂) M) k l + minorSemiCommR i₁ i₂ j₁ j₂ k l M lej = + cong + (λ a → M (removeIndex i₁ (removeIndex i₂ k)) a) + (removeIndexComm j₂ j₁ l lej) + + + --Formulas to compute compute the entries of the minor. + minorIdId : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → + suc k ≤'Fin i → suc l ≤'Fin j → + minor i j M k l ≡ M (weakenFin k) (weakenFin l) + minorIdId i j k l M lei lej = + M (removeIndex i k) (removeIndex j l) + ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexId i k lei) ⟩ + M (weakenFin k) (removeIndex j l) + ≡⟨ cong (λ a → M (weakenFin k) a) (removeIndexId j l lej) ⟩ + M (weakenFin k) (weakenFin l) + ∎ + + minorSucSuc : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → + i ≤'Fin weakenFin k → j ≤'Fin weakenFin l → + minor i j M k l ≡ M (suc k) (suc l) + minorSucSuc i j k l M lei lej = + M (removeIndex i k) (removeIndex j l) + ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexSuc i k lei) ⟩ + M (suc k) (removeIndex j l) + ≡⟨ cong (λ a → M (suc k) a) (removeIndexSuc j l lej) ⟩ + M (suc k) (suc l) + ∎ + + minorIdSuc : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → + suc k ≤'Fin i → j ≤'Fin weakenFin l → + minor i j M k l ≡ M (weakenFin k) (suc l) + minorIdSuc i j k l M lei lej = + M (removeIndex i k) (removeIndex j l) + ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexId i k lei) ⟩ + M (weakenFin k) (removeIndex j l) + ≡⟨ cong (λ a → M (weakenFin k) a) (removeIndexSuc j l lej) ⟩ + M (weakenFin k) (suc l) + ∎ + + minorSucId : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → + i ≤'Fin weakenFin k → suc l ≤'Fin j → + minor i j M k l ≡ M (suc k) (weakenFin l) + minorSucId i j k l M lei lej = + M (removeIndex i k) (removeIndex j l) + ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexSuc i k lei) ⟩ + M (suc k) (removeIndex j l) + ≡⟨ cong (λ a → M (suc k) a) (removeIndexId j l lej) ⟩ + M (suc k) (weakenFin l) + ∎ + diff --git a/Cubical/Algebra/Determinat/RingSum.agda b/Cubical/Algebra/Determinat/RingSum.agda new file mode 100644 index 0000000000..f95ce43c49 --- /dev/null +++ b/Cubical/Algebra/Determinat/RingSum.agda @@ -0,0 +1,348 @@ +{-# OPTIONS --cubical #-} + +module RingSum where + +open import Cubical.Foundations.Prelude +open import Cubical.Foundations.Equiv +open import Cubical.Data.Nat renaming ( _+_ to _+ℕ_ ; _·_ to _·ℕ_ + ; +-comm to +ℕ-comm + ; +-assoc to +ℕ-assoc + ; ·-assoc to ·ℕ-assoc) +open import Cubical.Data.Vec.Base using (_∷_; []) +open import Cubical.Foundations.Structure using (⟨_⟩) +open import Cubical.Data.FinData +open import Cubical.Algebra.Ring +open import Cubical.Algebra.Ring.Base +open import Cubical.Algebra.Ring.BigOps +open import Cubical.Algebra.Monoid.BigOp +open import Cubical.Algebra.CommRing +open import Cubical.Algebra.CommRing.Base +open import Cubical.Data.Nat.Order +open import Cubical.Tactics.CommRingSolver + +module RingSum (ℓ : Level) (P' : CommRing ℓ) where + + R' = CommRing→Ring P' + + open RingStr (snd (CommRing→Ring P')) renaming ( is-set to isSetR) + + ∑ = Sum.∑ (CommRing→Ring P') + + R : Type ℓ + R = ⟨ P' ⟩ + + open MonoidBigOp (Ring→AddMonoid R') + + + + -- Compatability theorems + ∑Compat : {n : ℕ} → (U V : FinVec R n) → + ((i : Fin n) → U i ≡ V i) → ∑ U ≡ ∑ V + ∑Compat U V f = bigOpExt f + + ∑∑Compat : {n m : ℕ} → (U V : FinVec (FinVec R m) n) → + ((i : Fin n) → (j : Fin m) → U i j ≡ V i j) → + ∑ (λ i → ∑ (λ j → U i j)) ≡ ∑ (λ i → ∑ (λ j → V i j)) + ∑∑Compat U V Eq = + ∑ (λ i → ∑ (U i)) + ≡⟨ + ∑Compat + (λ i → ∑ (U i)) + (λ i → ∑ (V i)) + (λ i → ∑Compat (U i) (V i) (Eq i)) + ⟩ + ∑ (λ i → ∑ (V i)) + ∎ + + -- Spliting a sum in the sum: + ∑Split = Sum.∑Split R' + + ∑∑Split : {n m : ℕ} → (U V : Fin n → Fin m → R) → + ∑ (λ i → ∑ (λ j → U i j + V i j)) + ≡ + ∑ (λ i → ∑ (λ j → U i j)) + + ∑ (λ i → ∑ (λ j → V i j)) + ∑∑Split U V = + ∑ (λ i → ∑ (λ j → U i j + V i j)) + ≡⟨ + ∑Compat + (λ i → ∑ (λ j → U i j + V i j)) + (λ i → ∑ (λ j → U i j) + ∑ ( λ j → V i j)) + (λ i → ∑Split (λ j → U i j) ( λ j → V i j)) + ⟩ + ∑ (λ i → ∑ (λ j → U i j) + ∑ (λ j → V i j)) + ≡⟨ ∑Split (λ i → ∑ (λ j → U i j)) (λ i → ∑ (λ j → V i j)) ⟩ + (∑ (λ i → ∑ (U i)) + ∑ (λ i → ∑ (V i))) + ∎ + + -- Distributivity of the sum + ∑DistR = Sum.∑Mulrdist (CommRing→Ring P') + + ∑DistL = Sum.∑Mulldist (CommRing→Ring P') + + -- Sum of Zeros is Zero + ∑Zero : {n : ℕ} → (U : FinVec R n) → ((i : Fin n) → U i ≡ 0r) → ∑ U ≡ 0r + ∑Zero {zero} U f = refl + ∑Zero {suc n} U f = + ∑ U + ≡⟨ refl ⟩ + (U zero + ∑ (λ i → U (suc i)) ) + ≡⟨ cong (λ a → a + ∑ (λ i → U (suc i))) (f zero) ⟩ + (0r + ∑ (λ i → U (suc i))) + ≡⟨ +Comm 0r (∑ (λ i → U (suc i))) ⟩ + ∑ (λ i → U (suc i)) + 0r + ≡⟨ +IdR (∑ (λ i → U (suc i))) ⟩ + ∑ (λ i → U (suc i)) + ≡⟨ ∑Zero {n} ((λ i → U (suc i))) (λ i → f (suc i)) ⟩ + 0r ∎ + + -- Summs are commutative + ∑Comm : {n m : ℕ} → (U : FinVec (FinVec R m) n) → + ∑ (λ i → ∑ (λ j → U i j )) ≡ ∑ (λ j → ∑ (λ i → U i j)) + ∑Comm {zero} {zero} U = refl + ∑Comm {zero} {m} U = + 0r + ≡⟨ sym (∑Zero (λ (j : Fin m) → 0r) (λ (j : Fin m) → refl)) ⟩ + ∑ (λ (j : Fin m) → 0r) + ≡⟨ ∑Compat (λ j → 0r) (λ j → ∑ (λ i → U i j )) (λ j → refl) ⟩ + ( (∑ λ j → ∑ (λ i → U i j ))) + ∎ + ∑Comm {n} {zero} U = + ∑ (λ (i : Fin n) → 0r) + ≡⟨ ∑Zero ( (λ (i : Fin n) → 0r)) ( (λ i → refl)) ⟩ + 0r + ∎ + ∑Comm {suc n} {suc m} U = + ∑ (λ i → ∑ (U i)) + ≡⟨ refl ⟩ + ( ∑ (λ i → (U i zero + ∑ λ j → (U i (suc j)))) ) + ≡⟨ bigOpSplit +Comm (λ i → U i zero) (λ i → ∑ λ j → (U i (suc j))) ⟩ + (∑ (λ i → (U i zero)) + ∑ λ i → (∑ λ j → (U i (suc j)))) + ≡⟨ cong (λ a → ∑ (λ i → (U i zero)) + a) (∑Comm λ i → ( λ j → (U i (suc j) ))) ⟩ + (∑ (λ i → U i zero) + ∑ (λ j → ∑ (λ i → U i (suc j)))) + ≡⟨ refl ⟩ + ∑ (λ j → ∑ (λ i → U i j)) + ∎ + + -- Indikator function: ind> i j = 1r if i>j and ind> i j = 0r else + ind> : (i j : ℕ) → R + ind> zero j = 0r + ind> (suc i) zero = 1r + ind> (suc i) (suc j) = ind> i j + + ind>prop : {n m : ℕ} → (A B : FinVec (FinVec R m) n) → + ((i : Fin n) → (j : Fin m) → (toℕ j) <' (toℕ i) → A i j ≡ B i j) → + (i : Fin n) → (j : Fin m) → + (ind> (toℕ i) (toℕ j) · A i j) ≡ (ind> (toℕ i) (toℕ j) · B i j) + ind>prop {m = suc m} A B f zero j = solve! P' + ind>prop {m = suc m} A B f (suc i) zero = + cong + (λ a → 1r · a) + (f (suc i) zero (s≤s z≤)) + ind>prop {m = suc m} A B f (suc i) (suc j) = + ind>prop + (λ i j → A (suc i) (suc j)) + (λ i j → B (suc i) (suc j)) + (λ i₁ j₁ le → f (suc i₁) (suc j₁) + (s≤s le)) + i + j + + ind>anti : {n m : ℕ} → (A B : FinVec (FinVec R m) n) → + ((i : Fin n) (j : Fin m) → (toℕ i) ≤' (toℕ j) → A i j ≡ B i j) → + (i : Fin n) → (j : Fin m) → + (1r + (- ind> (toℕ i) (toℕ j))) · A i j ≡ (1r + - (ind> (toℕ i) (toℕ j))) · B i j + ind>anti {m = suc m} A B f zero j = + cong + (λ a → (1r + - 0r) · a) + (f zero j z≤) + ind>anti {m = suc m} A B f (suc i) zero = solve! P' + ind>anti {m = suc m} A B f (suc i) (suc j) = + ind>anti + (λ i j → A (suc i) (suc j)) + (λ i j → B (suc i) (suc j)) + (λ i₁ j₁ le → f (suc i₁) (suc j₁) (s≤s le)) i j + + ind>Neg : (i j : ℕ) → (1r + - ind> (suc i) j) ≡ ind> j i + ind>Neg i zero = +InvR 1r + ind>Neg zero (suc j) = solve! P' + ind>Neg (suc i) (suc j) = ind>Neg i j + + ind>Suc : (i j : ℕ) → ind> (suc i) j ≡ (1r + - ind> j i) + ind>Suc i zero = solve! P' + ind>Suc zero (suc j) = solve! P' + ind>Suc (suc i) (suc j) = ind>Suc i j + + --Index Shift-- + ∑∑ShiftSuc : {n : ℕ} → (A : Fin (suc n) → Fin n → R) → + ∑ (λ (i : Fin (suc n)) → ∑ ( λ j → ind> (toℕ i) (toℕ j) · A i j)) + ≡ + ∑ (λ (i : Fin n) → ∑ ( λ j → ind> (toℕ (suc i)) (toℕ j) · A (suc i) j)) + ∑∑ShiftSuc {zero} A = ∑Zero {one} (λ j → 0r) (λ j → refl) + ∑∑ShiftSuc {suc n} A = + ∑ {suc (suc n)} + (λ i → + ∑ (λ j → ind> (toℕ i) (toℕ j) · A i j)) + ≡⟨ refl ⟩ + ∑ {suc n} + (λ j → ind> zero (toℕ j) · A zero j) + + ∑ (λ i → + ∑ (λ j → + ind> (toℕ (suc i)) (toℕ j) · A (suc i) j)) + ≡⟨ + cong + (λ a → a + ∑ (λ i → + ∑ (λ j → ind> (toℕ (suc i)) (toℕ j) · A (suc i) j))) + (∑Compat + (λ j → ind> zero (toℕ j) · A zero j) + (λ j → 0r) + (λ j → solve! P')) + ⟩ + ∑ {suc n} (λ j → 0r) + + ∑ (λ i → ∑ (λ j → ind> (toℕ (suc i)) (toℕ j) · A (suc i) j)) + ≡⟨ + cong + (λ a → a + ∑ (λ i → ∑ (λ j → ind> (toℕ (suc i)) (toℕ j) · A (suc i) j))) + (∑Zero {suc n} (λ j → 0r) (λ j → refl)) ⟩ + 0r + ∑ (λ i → ∑ (λ j → ind> (toℕ (suc i)) (toℕ j) · A (suc i) j)) + ≡⟨ + +Comm + 0r + (∑ (λ i → ∑ (λ j → ind> (toℕ (suc i)) (toℕ j) · A (suc i) j))) + ⟩ + ∑ (λ i → ∑ (λ j → ind> (toℕ (suc i)) (toℕ j) · A (suc i) j)) + 0r + ≡⟨ + +IdR + (∑ (λ i → ∑ (λ j → ind> (toℕ (suc i)) (toℕ j) · A (suc i) j))) + ⟩ + ∑ (λ i → ∑ (λ j → ind> (toℕ (suc i)) (toℕ j) · A (suc i) j)) + ∎ + + ∑∑ShiftWeak : {n : ℕ} → (A : Fin (suc n) → Fin n → R) → + ∑ (λ (i : Fin (suc n)) → ∑ ( λ j → (1r + - ind> (toℕ i) (toℕ j)) · A i j)) + ≡ + ∑ (λ (i : Fin n) → + ∑ ( λ j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · A (weakenFin i) j)) + ∑∑ShiftWeak {zero} A = + ∑Zero {one} + (λ i → ∑ ( λ j → (1r + - ind> (toℕ i) (toℕ j)) · A i j)) + (λ i → refl) + ∑∑ShiftWeak {suc n} A = + (∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + + ∑ + (λ i → ∑ (λ j → (1r + - ind> (toℕ (suc i)) (toℕ j)) · A (suc i) j))) + ≡⟨ + cong + (λ a → ∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + a) + (∑Compat + (λ i → ∑ (λ j → (1r + - ind> (toℕ (suc i)) (toℕ j)) · A (suc i) j)) + (λ i → + (1r + - ind> (toℕ (suc i)) zero) · A (suc i) zero + + ∑ (λ j → (1r + - ind> (toℕ (suc i)) (toℕ (suc j))) · A (suc i) (suc j))) + (λ i → refl)) + ⟩ + ∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + + ∑ (λ i → + (1r + - ind> (toℕ (suc i)) zero) · A (suc i) zero + + ∑ (λ j → + (1r + - ind> (toℕ (suc i)) (toℕ (suc j))) · A (suc i) (suc j))) + ≡⟨ + cong + (λ a → ∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + a) + (∑Split + (λ i → + (1r + - ind> (toℕ (suc i)) zero) · A (suc i) zero) + (λ i → + ∑ (λ j → + (1r + - ind> (toℕ (suc i)) (toℕ (suc j))) + · A (suc i) (suc j)))) + ⟩ + (∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + + (∑ (λ i → (1r + - ind> (toℕ (suc i)) zero) · A (suc i) zero) + + ∑ + (λ i → + ∑ (λ j → (1r + - ind> (toℕ i) (toℕ j)) · A (suc i) (suc j))))) + ≡⟨ + cong + (λ a → + ∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + + (∑ (λ i → + (1r + - ind> (toℕ (suc i)) zero) · + A (suc i) zero) + a)) + (∑∑ShiftWeak (λ i j → A (suc i) (suc j))) + ⟩ + (∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + + (∑ (λ i → (1r + - ind> (toℕ (suc i)) zero) · A (suc i) zero) + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (suc (weakenFin i))) (toℕ (suc j))) + · A (suc (weakenFin i)) (suc j))))) + ≡⟨ + cong + (λ a → + (∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + + (a + + ∑ (λ i → + ∑ (λ j → + (1r + - ind> (toℕ (suc (weakenFin i))) (toℕ (suc j))) + · A (suc (weakenFin i)) (suc j)))))) + ( + ∑ (λ i → (1r + - ind> (toℕ (suc i)) zero) · A (suc i) zero) + ≡⟨ refl ⟩ + ∑ (λ i → + (1r + - 1r) · A (suc i) zero) + ≡⟨ ∑Compat ( + λ i → (1r + - 1r) · A (suc i) zero) + (λ i → 0r) + (λ i → solve! P') + ⟩ + ∑ (λ (i : Fin (suc n)) → 0r) + ≡⟨ + ∑Zero + (λ (i : Fin (suc n)) → 0r) + (λ i → refl) + ⟩ + 0r + ≡⟨ sym (∑Zero (λ (i : Fin n) → 0r) (λ i → refl)) ⟩ + ∑ (λ (i : Fin n) → 0r) + ≡⟨ ∑Compat + (λ (i : Fin n) → 0r) + (λ i → (1r + - 1r) · A (suc (weakenFin i)) zero) + (λ i → solve! P') + ⟩ + ∑ (λ i → (1r + - 1r) · A (suc (weakenFin i)) zero)∎ + )⟩ + (∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + + (∑ + (λ i → + (1r + - ind> (toℕ (suc (weakenFin i))) zero) · + A (suc (weakenFin i)) zero) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (suc (weakenFin i))) (toℕ (suc j))) · + A (suc (weakenFin i)) (suc j))))) + ≡⟨ + cong + (λ a → ∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + a) + (sym + (∑Split + (λ i → + (1r + - ind> (toℕ (suc (weakenFin i))) zero) · + A (suc (weakenFin i)) zero) + (λ i → ∑ (λ j → + (1r + - ind> (toℕ (suc (weakenFin i))) (toℕ (suc j))) · + A (suc (weakenFin i)) (suc j))))) + ⟩ + ∑ (λ j → (1r + - ind> zero (toℕ j)) · A zero j) + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (suc (weakenFin i))) (toℕ j)) · + A (suc (weakenFin i)) j)) ∎ diff --git a/Cubical/Algebra/Determinat/adjugate.agda b/Cubical/Algebra/Determinat/adjugate.agda new file mode 100644 index 0000000000..a2f31ab3d5 --- /dev/null +++ b/Cubical/Algebra/Determinat/adjugate.agda @@ -0,0 +1,1925 @@ +{-# OPTIONS --cubical #-} + +module adjugate where + +open import Cubical.Foundations.Prelude +open import Cubical.Foundations.Equiv +open import Cubical.Algebra.Matrix +open import Cubical.Algebra.Matrix.CommRingCoefficient +open import Cubical.Functions.FunExtEquiv +open import Cubical.Data.Bool +open import Cubical.Data.Sum +open import Cubical.Foundations.Structure using (⟨_⟩) +open import Cubical.Data.Nat renaming ( _+_ to _+ℕ_ ; _·_ to _·ℕ_ + ; +-comm to +ℕ-comm + ; +-assoc to +ℕ-assoc + ; ·-assoc to ·ℕ-assoc) +open import Cubical.Data.FinData +open import Cubical.Data.FinData.Order using (_<'Fin_; _≤'Fin_) +open import Cubical.Algebra.Ring +open import Cubical.Algebra.Ring.Base +open import Cubical.Algebra.Ring.BigOps +open import Cubical.Algebra.Monoid.BigOp +open import Cubical.Algebra.CommRing +open import Cubical.Algebra.CommRing.Base +open import Cubical.Algebra.Semiring +open import Cubical.Data.Int.Base using (pos; negsuc) +open import Cubical.Data.Vec.Base using (_∷_; []) +open import Cubical.Data.Nat.Order +open import Cubical.Tactics.CommRingSolver + +open import Minor +open import RingSum +open import det + +module adjugate (ℓ : Level) (P' : CommRing ℓ) where + open Minor.Minor ℓ + open RingSum.RingSum ℓ P' + open RingStr (snd (CommRing→Ring P')) renaming ( is-set to isSetR ) + open Determinat ℓ P' + open Coefficient (P') + + _∘_ : {n m : ℕ} → R → FinMatrix R n m → FinMatrix R n m + (a ∘ M) i j = a · (M i j) + + deltaProp : {n : ℕ} → (k l : Fin n) → toℕ k <' toℕ l → δ k l ≡ 0r + deltaProp {suc n} zero (suc l) (s≤s le) = refl + deltaProp {suc n} (suc k) (suc l) (s≤s le) = deltaProp {n} k l le + + deltaPropSym : {n : ℕ} → (k l : Fin n) → toℕ l <' toℕ k → δ k l ≡ 0r + deltaPropSym {suc n} (suc k) (zero) (s≤s le) = refl + deltaPropSym {suc n} (suc k) (suc l) (s≤s le) = deltaPropSym {n} k l le + + ==Refl : {n : ℕ} → (k : Fin n) → k == k ≡ true + ==Refl {n} zero = refl + ==Refl {suc n} (suc k) = ==Refl {n} k + + ==Sym : {n : ℕ} → (k l : Fin n) → k == l ≡ l == k + ==Sym {suc n} zero zero = refl + ==Sym {suc n} zero (suc l) = refl + ==Sym {suc n} (suc k) zero = refl + ==Sym {suc n} (suc k) (suc l) = ==Sym {n} k l + + deltaPropEq : {n : ℕ} → (k l : Fin n) → k ≡ l → δ k l ≡ 1r + deltaPropEq k l e = + δ k l + ≡⟨ cong (λ a → δ a l) e ⟩ + δ l l + ≡⟨ cong (λ a → if a then 1r else 0r) (==Refl l) ⟩ + 1r + ∎ + + deltaComm : {n : ℕ} → (k l : Fin n) → δ k l ≡ δ l k + deltaComm k l = cong (λ a → if a then 1r else 0r) (==Sym k l) + + + -- Definition of the cofactor matrix + cof : {n : ℕ} → FinMatrix R n n → FinMatrix R n n + cof {suc n} M i j = (MF (toℕ i +ℕ toℕ j)) · det {n} (minor i j M) + + cofTransp : {n : ℕ} → (M : FinMatrix R n n) → (i j : Fin n) → cof (M ᵗ) i j ≡ cof M j i + cofTransp {suc n} M i j = + MF (toℕ i +ℕ toℕ j) · det (minor i j (M ᵗ)) + ≡⟨ cong (λ a → MF (toℕ i +ℕ toℕ j) · a) (detTransp ((minor j i M ᵗ))) ⟩ + (MF (toℕ i +ℕ toℕ j) · det (minor j i M)) + ≡⟨ + cong + (λ a → MF (a) · det (minor j i M)) (+ℕ-comm (toℕ i) (toℕ j)) ⟩ + (MF (toℕ j +ℕ toℕ i) · det (minor j i M)) + ∎ + + -- Definition of the adjugate matrix + adjugate : {n : ℕ} → FinMatrix R n n → FinMatrix R n n + adjugate M i j = cof M j i + + adjugateTransp : {n : ℕ} → (M : FinMatrix R n n) → (i j : Fin n) → adjugate (M ᵗ) i j ≡ adjugate M j i + adjugateTransp M i j = cofTransp M j i + + + weakenPredFinLt : {n : ℕ} → (k l : Fin (suc (suc n))) → toℕ k <' toℕ l → k ≤'Fin weakenFin (predFin l) + weakenPredFinLt {zero} zero one (s≤s z≤) = z≤ + weakenPredFinLt {zero} one one (s≤s ()) + weakenPredFinLt {zero} one (suc (suc ())) (s≤s le) + weakenPredFinLt {suc n} zero one (s≤s z≤) = z≤ + weakenPredFinLt {suc n} zero (suc (suc l)) (s≤s le) = z≤ + weakenPredFinLt {suc n} (suc k) (suc (suc l)) (s≤s (s≤s le)) = s≤s ( weakenPredFinLt {n} k (suc l) (s≤s le)) + + sucPredFin : {n : ℕ} → (k l : Fin (suc (suc n))) → toℕ k <' toℕ l → suc (predFin l) ≡ l + sucPredFin {zero} zero one le = refl + sucPredFin {zero} (suc k) (suc l) le = refl + sucPredFin {suc n} zero (suc l) le = refl + sucPredFin {suc n} (suc k) (suc l) (s≤s le) = refl + + adjugatePropAux1a : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → toℕ k <' toℕ l → + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ z) · M l (weakenFin z)) + · det (minor (predFin l) z (minor k i M))))) + adjugatePropAux1a M k l le = + ∑∑Compat + (λ i j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M))))) + (λ z z₁ → + ind> (toℕ z) (toℕ z₁) · + (M l z · MF (toℕ k +ℕ toℕ z) · + (MF (toℕ (predFin l) +ℕ toℕ z₁) · M l (weakenFin z₁)) + · det (minor (predFin l) z₁ (minor k z M)))) + (ind>prop + (λ z z₁ → + M l z · MF (toℕ k +ℕ toℕ z) · + (MF (toℕ (predFin l) +ℕ toℕ z₁) · minor k z M (predFin l) z₁ · + det (minor (predFin l) z₁ (minor k z M)))) + (λ z z₁ → + M l z · MF (toℕ k +ℕ toℕ z) · + (MF (toℕ (predFin l) +ℕ toℕ z₁) · M l (weakenFin z₁)) + · det (minor (predFin l) z₁ (minor k z M))) + (λ i j lf → + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))) + ≡⟨ + cong + (λ a → M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · a · + det (minor (predFin l) j (minor k i M)))) + (minorSucId + k + i + (predFin l) + j + M + (weakenPredFinLt k l le) + lf) + ⟩ + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M (suc (predFin l)) (weakenFin j) + · det (minor (predFin l) j (minor k i M)))) + ≡⟨ ·Assoc _ _ _ ⟩ + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M (suc (predFin l)) (weakenFin j)) + · det (minor (predFin l) j (minor k i M))) + ≡⟨ cong + (λ a → (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M a (weakenFin j)) + · det (minor (predFin l) j (minor k i M)))) + (sucPredFin + k + l + le + ) + ⟩ + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M))) + ∎ + ) + ) + + adjugatePropAux1b : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → toℕ k <' toℕ l → + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · + minor k (weakenFin i) M (predFin l) j + · det (minor (predFin l) j (minor k (weakenFin i) M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ z → + (1r + - ind> (toℕ i) (toℕ z)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc z))) · M l (suc z) · + det (minor (predFin l) i (minor k (suc z) M)))))) + + adjugatePropAux1b M k l le = + ∑∑Compat + (λ i j → + (1r + - ind> (toℕ i) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · + minor k (weakenFin i) M (predFin l) j + · det (minor (predFin l) j (minor k (weakenFin i) M))))) + (λ z z₁ → + (1r + - ind> (toℕ z) (toℕ z₁)) · + (M l (weakenFin z) · MF (toℕ k +ℕ toℕ (weakenFin z)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc z₁))) · M l (suc z₁) · + det (minor (predFin l) z (minor k (suc z₁) M))))) + λ i j → + ind>anti + (λ i j → (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · + minor k (weakenFin i) M (predFin l) j + · det (minor (predFin l) j (minor k (weakenFin i) M))))) + (λ z z₁ → + M l (weakenFin z) · MF (toℕ k +ℕ toℕ (weakenFin z)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc z₁))) · M l (suc z₁) · + det (minor (predFin l) z (minor k (suc z₁) M)))) + (λ i j lf → + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · + minor k (weakenFin i) M (predFin l) j + · det (minor (predFin l) j (minor k (weakenFin i) M)))) + ≡⟨ + cong + (λ a → M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · a + · det (minor (predFin l) j (minor k (weakenFin i) M)))) + (minorSucSuc + k (weakenFin i) (predFin l) j M (weakenPredFinLt k l le) (weakenweakenFinLe i j lf)) + ⟩ + M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M (suc (predFin l)) (suc j) · + det (minor (predFin l) j (minor k (weakenFin i) M))) + ≡⟨ + cong + (λ a → + M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M (a) (suc j) · + det (minor (predFin l) j (minor k (weakenFin i) M)))) + (sucPredFin k l le) + ⟩ + M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (suc j) · + det (minor (predFin l) j (minor k (weakenFin i) M))) + ≡⟨ + cong + (λ a → M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (suc j) · a)) + (detComp + (minor (predFin l) j (minor k (weakenFin i) M)) + (minor (predFin l) i (minor k (suc j) M)) + (λ i₁ j₁ → + (sym (minorSemiCommR k (predFin l) j i i₁ j₁ M lf)))) + ⟩ + M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (suc j) · + det (minor (predFin l) i (minor k (suc j) M))) + ≡⟨ cong + (λ a → + M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (a · M l (suc j) · + det (minor (predFin l) i (minor k (suc j) M)))) + (sumMF (toℕ (predFin l)) (toℕ j)) + ⟩ + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (suc j) · + det (minor (predFin l) i (minor k (suc j) M)))) + ≡⟨ + cong + (λ a → (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l)) · a · M l (suc j) · + det (minor (predFin l) i (minor k (suc j) M))))) + (sucMFRev (toℕ j)) + ⟩ + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc j))) · M l (suc j) · + det (minor (predFin l) i (minor k (suc j) M)))) + ∎) + i + j + + adjugatePropAux2a : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → + toℕ k <' toℕ l → + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M))))) + ≡ + ∑ + (λ i → + ∑ + (λ z → + 1r · + (ind> (toℕ i) (toℕ z) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ z) · M l (weakenFin z) · + det (minor (predFin l) z (minor k i M))))))) + adjugatePropAux2a M k l le = + ∑∑Compat + (λ i j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M)))) + (λ z z₁ → + 1r · + (ind> (toℕ z) (toℕ z₁) · + (M l z · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ (predFin l)) · MF (toℕ z₁) · M l (weakenFin z₁) · + det (minor (predFin l) z₁ (minor k z M)))))) + (λ i j → + (ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M)))) + ≡⟨ + cong + (λ a → (ind> (toℕ i) (toℕ j) · + (M l i · a · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M))))) + (sumMF (toℕ k) (toℕ i)) ⟩ + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M)))) + ≡⟨ + cong + (λ a → (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (a · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M))))) + (sumMF (toℕ (predFin l)) (toℕ j)) + ⟩ + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M)))) + ≡⟨ cong + (λ a → (ind> (toℕ i) (toℕ j) · a)) + (sym (·Assoc _ _ _)) + ⟩ + ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M)))) + ≡⟨ sym (·IdL _) ⟩ + (1r · (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M)))))) + ∎ ) + + adjugatePropAux2b : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → + toℕ k <' toℕ l → + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · MF (toℕ k +ℕ toℕ (weakenFin j)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ z → + - 1r · + (ind> (toℕ i) (toℕ z) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ z) · M l (weakenFin z) · + det (minor (predFin l) z (minor k i M))))))) + adjugatePropAux2b M k l le = + ∑∑Compat + (λ i j → + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · MF (toℕ k +ℕ toℕ (weakenFin j)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M))))) + (λ z z₁ → + - 1r · + (ind> (toℕ z) (toℕ z₁) · + (M l z · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ (predFin l)) · MF (toℕ z₁) · M l (weakenFin z₁) · + det (minor (predFin l) z₁ (minor k z M)))))) + (λ i j → + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · MF (toℕ k +ℕ toℕ (weakenFin j)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M))))) + ≡⟨ + cong + (λ a → + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · a · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M)))))) + (sumMF (toℕ k) (toℕ (weakenFin j))) + ⟩ + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF (toℕ (weakenFin j))) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M))))) + ≡⟨ + cong + (λ a → + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF a) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M)))))) + (toℕweakenFin j) ⟩ + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M))))) + ≡⟨ + cong + (λ a → ind> (toℕ i) (toℕ j) · a) + (sym (·Assoc _ _ _)) + ⟩ + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · + (MF (toℕ k) · MF (toℕ j) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M)))))) + ≡⟨ + cong + (λ a → + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · a)) + (sym (·Assoc _ _ _)) + ⟩ + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · + (MF (toℕ k) · + (MF (toℕ j) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M))))))) + ≡⟨ + cong + (λ a → + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · + (MF (toℕ k) · a)))) + (·Assoc _ _ _) + ⟩ + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · + (MF (toℕ k) · + (MF (toℕ j) · (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i) + · det (minor (predFin l) j (minor k i M)))))) + ≡⟨ + cong + (λ a → ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · a)) + (·Assoc _ _ _) + ⟩ + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · + (MF (toℕ k) · + (MF (toℕ j) · (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i)) + · det (minor (predFin l) j (minor k i M))))) + ≡⟨ cong + (λ a → ind> (toℕ i) (toℕ j) · a) + (·Assoc _ _ _) + ⟩ + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · + (MF (toℕ k) · + (MF (toℕ j) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i))) + · det (minor (predFin l) j (minor k i M)))) + ≡⟨ + cong + (λ a → ind> (toℕ i) (toℕ j) · (a · det (minor (predFin l) j (minor k i M)))) + (solve! P') + ⟩ + ind> (toℕ i) (toℕ j) · + (- 1r · M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M))) + ≡⟨ ·Assoc _ _ _ ⟩ + (ind> (toℕ i) (toℕ j) · + (- 1r · M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j))) + · det (minor (predFin l) j (minor k i M))) + ≡⟨ + cong + (λ a → a · det (minor (predFin l) j (minor k i M))) + (·Assoc _ _ _) + ⟩ + (ind> (toℕ i) (toℕ j) · (- 1r · M l i · (MF (toℕ k) · MF (toℕ i))) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M))) + ≡⟨ cong + (λ a → a · (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M))) + (solve! P') + ⟩ + (- 1r) · ind> (toℕ i) (toℕ j) · (M l i · (MF (toℕ k) · MF (toℕ i))) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M)) + ≡⟨ sym (·Assoc _ _ _) ⟩ + - 1r · ind> (toℕ i) (toℕ j) · (M l i · (MF (toℕ k) · MF (toℕ i))) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M))) + ≡⟨ sym (·Assoc _ _ _) ⟩ + (- 1r · ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M))))) + ≡⟨ sym (·Assoc _ _ _) ⟩ + - 1r · + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M))))) + ∎) + + adjugatePropRG : {n : ℕ} → (M : FinMatrix R (suc n) (suc n)) → (k l : Fin (suc n)) → toℕ k <' toℕ l → + ∑ (λ i → (M l i · (MF (toℕ k +ℕ toℕ i) · det (minor k i M)))) ≡ 0r + adjugatePropRG {zero} M zero zero () + adjugatePropRG {zero} M zero (suc ()) (s≤s le) + adjugatePropRG {suc n} M k l le = + ∑ (λ i → M l i · (MF (toℕ k +ℕ toℕ i) · det (minor k i M))) + ≡⟨ ∑Compat + (λ i → M l i · (MF (toℕ k +ℕ toℕ i) · det (minor k i M))) + (λ i → M l i · MF (toℕ k +ℕ toℕ i) · det (minor k i M)) + (λ i → ·Assoc _ _ _) ⟩ + ∑ (λ i → M l i · MF (toℕ k +ℕ toℕ i) · det (minor k i M)) + ≡⟨ ∑Compat + (λ i → M l i · MF (toℕ k +ℕ toℕ i) · det (minor k i M)) + (λ i → M l i · MF (toℕ k +ℕ toℕ i) · detR (predFin l) (minor k i M)) + (λ i → + cong + (λ a → M l i · MF (toℕ k +ℕ toℕ i) · a) + (sym (DetRow (predFin l) (minor k i M)))) + ⟩ + ∑ + (λ i → + M l i · MF (toℕ k +ℕ toℕ i) · detR (predFin l) (minor k i M)) + ≡⟨ refl ⟩ + ∑ + (λ i → + M l i · MF (toℕ k +ℕ toℕ i) · + ∑ + (λ j → + MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))) + ≡⟨ ∑Compat + (λ i → + M l i · MF (toℕ k +ℕ toℕ i) · + ∑ + (λ j → + MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))) + (λ i → + ∑ + (λ j → M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M))))) + (λ i → + ∑DistR + (M l i · MF (toℕ k +ℕ toℕ i)) + (λ j → MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M))))) + ≡⟨ ∑∑Compat + (λ i j → + M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))) + (λ z z₁ → + ind> (toℕ z) (toℕ z₁) · + (M l z · MF (toℕ k +ℕ toℕ z) · + (MF (toℕ (predFin l) +ℕ toℕ z₁) · minor k z M (predFin l) z₁ · + det (minor (predFin l) z₁ (minor k z M)))) + + + (1r + - ind> (toℕ z) (toℕ z₁)) · + (M l z · MF (toℕ k +ℕ toℕ z) · + (MF (toℕ (predFin l) +ℕ toℕ z₁) · minor k z M (predFin l) z₁ · + det (minor (predFin l) z₁ (minor k z M))))) + (λ i j → + DetRowAux2 + (ind> (toℕ i) (toℕ j)) + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))) + ) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))))) + ≡⟨ + ∑∑Split + (λ i j → ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M))))) + (λ i j → (1r + - ind> (toℕ i) (toℕ j)) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M))))) + ⟩ + (∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M))))))) + ≡⟨ +Compat refl (∑∑ShiftWeak λ i j → + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M))))) ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · + minor k (weakenFin i) M (predFin l) j + · det (minor (predFin l) j (minor k (weakenFin i) M)))))) + ≡⟨ +Compat refl + (∑∑Compat + (λ i j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · + minor k (weakenFin i) M (predFin l) j + · det (minor (predFin l) j (minor k (weakenFin i) M))))) + (λ z z₁ → + (1r + - ind> (toℕ z) (toℕ z₁)) · + (M l (weakenFin z) · MF (toℕ k +ℕ toℕ (weakenFin z)) · + (MF (toℕ (predFin l) +ℕ toℕ z₁) · + minor k (weakenFin z) M (predFin l) z₁ + · det (minor (predFin l) z₁ (minor k (weakenFin z) M))))) + (λ i j → + cong + (λ a → + (1r + - ind> a (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · + minor k (weakenFin i) M (predFin l) j + · det (minor (predFin l) j (minor k (weakenFin i) M))))) + (toℕweakenFin i)) + ) + ⟩ + (∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · + det (minor (predFin l) j (minor k i M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l) +ℕ toℕ j) · + minor k (weakenFin i) M (predFin l) j + · det (minor (predFin l) j (minor k (weakenFin i) M))))))) + ≡⟨ +Compat (adjugatePropAux1a M k l le) (adjugatePropAux1b M k l le) ⟩ + (∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ z) · M l (weakenFin z)) + · det (minor (predFin l) z (minor k i M))))) + + + ∑ + (λ i → + ∑ + (λ z → + (1r + - ind> (toℕ i) (toℕ z)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc z))) · M l (suc z) · + det (minor (predFin l) i (minor k (suc z) M))))))) + ≡⟨ +Compat + refl + (∑Comm + (λ i z → + (1r + - ind> (toℕ i) (toℕ z)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc z))) · M l (suc z) · + det (minor (predFin l) i (minor k (suc z) M)))))) ⟩ + (∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ z) · M l (weakenFin z)) + · det (minor (predFin l) z (minor k i M))))) + + + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ i) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc j))) · M l (suc j) · + det (minor (predFin l) i (minor k (suc j) M))))))) + ≡⟨ +Compat refl + (∑∑Compat + (λ j i → + (1r + - ind> (toℕ i) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc j))) · M l (suc j) · + det (minor (predFin l) i (minor k (suc j) M))))) + (λ z z₁ → + ind> (suc (toℕ z)) (toℕ z₁) · + (M l (weakenFin z₁) · MF (toℕ k +ℕ toℕ (weakenFin z₁)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc z))) · M l (suc z) · + det (minor (predFin l) z₁ (minor k (suc z) M))))) + (λ j i → + cong + (λ a → a · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc j))) · M l (suc j) · + det (minor (predFin l) i (minor k (suc j) M))))) + (sym (ind>Suc (toℕ j) (toℕ i))) + )) ⟩ + (∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ z) · M l (weakenFin z)) + · det (minor (predFin l) z (minor k i M))))) + + + ∑ + (λ i → + ∑ + (λ z → + ind> (suc (toℕ i)) (toℕ z) · + (M l (weakenFin z) · MF (toℕ k +ℕ toℕ (weakenFin z)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ (suc i))) · M l (suc i) · + det (minor (predFin l) z (minor k (suc i) M))))))) + ≡⟨ +Compat refl + (sym (∑∑ShiftSuc + (λ i z → + (M l (weakenFin z) · MF (toℕ k +ℕ toℕ (weakenFin z)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) z (minor k i M))))))) ⟩ + (∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (predFin l) +ℕ toℕ j) · M l (weakenFin j)) + · det (minor (predFin l) j (minor k i M))))) + + + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · MF (toℕ k +ℕ toℕ (weakenFin j)) · + (MF (toℕ (predFin l)) · (- 1r · MF (toℕ i)) · M l i · + det (minor (predFin l) j (minor k i M))))))) + ≡⟨ +Compat + (adjugatePropAux2a M k l le) + (adjugatePropAux2b M k l le) ⟩ + (∑ + (λ i → + ∑ + (λ z → + 1r · + (ind> (toℕ i) (toℕ z) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ z) · M l (weakenFin z) · + det (minor (predFin l) z (minor k i M))))))) + + + ∑ + (λ i → + ∑ + (λ z → + - 1r · + (ind> (toℕ i) (toℕ z) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ z) · M l (weakenFin z) · + det (minor (predFin l) z (minor k i M)))))))) + ≡⟨ sym + (∑∑Split + (λ i z → + 1r · + (ind> (toℕ i) (toℕ z) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ z) · M l (weakenFin z) · + det (minor (predFin l) z (minor k i M)))))) + λ i z → + - 1r · + (ind> (toℕ i) (toℕ z) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ z) · M l (weakenFin z) · + det (minor (predFin l) z (minor k i M)))))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + 1r · + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M))))) + + + - 1r · + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M))))))) + ≡⟨ ∑∑Compat + (λ i j → + 1r · + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M))))) + + + - 1r · + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M)))))) + (λ i j → 0r) + (λ i j → + (1r · + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M))))) + + + - 1r · + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M)))))) + ≡⟨ sym (·DistL+ 1r (- 1r) (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M)))))) ⟩ + ((1r + - 1r) · + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M)))))) + ≡⟨ cong + (λ a → a · (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M)))))) + (+InvR 1r) + ⟩ + (0r · + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M)))))) + ≡⟨ RingTheory.0LeftAnnihilates (CommRing→Ring P') (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (predFin l) j (minor k i M))))) ⟩ + 0r + ∎) + ⟩ + ∑ (λ (i : Fin (suc (suc n))) → ∑ (λ (j : Fin (suc n)) → 0r)) + ≡⟨ ∑Compat + (λ (i : Fin (suc (suc n))) → ∑ (λ (j : Fin (suc n)) → 0r)) + (λ (i : Fin (suc (suc n))) → 0r) + (λ (i : Fin (suc (suc n))) → ∑Zero {suc n} (λ (i : Fin (suc n)) → 0r) (λ (i : Fin (suc n)) → refl)) ⟩ + ∑ (λ (i : Fin (suc (suc n))) → 0r) + ≡⟨ ∑Zero (λ (i : Fin (suc (suc n))) → 0r) (λ (i : Fin (suc (suc n))) → refl) ⟩ + 0r + ∎ + + adjugateInvRGcomponent : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → toℕ l <' toℕ k → (M ⋆ adjugate M) k l ≡ (det M ∘ 𝟙) k l + adjugateInvRGcomponent {suc n} M k l le = + ∑ (λ i → M k i · (MF(toℕ l +ℕ toℕ i) · det(minor l i M)) ) + ≡⟨ adjugatePropRG M l k le ⟩ + 0r + ≡⟨ sym (RingTheory.0RightAnnihilates (CommRing→Ring P') (det M)) ⟩ + det M · 0r + ≡⟨ cong (λ a → det M · a) (sym (deltaPropSym k l le)) ⟩ + (det M ∘ 𝟙) k l + ∎ + + strongenFin : {n : ℕ} {j : Fin (suc n)} → (i : Fin (suc n)) → toℕ i <' toℕ j → Fin n + strongenFin {zero} {zero} i () + strongenFin {zero} {suc ()} i le + strongenFin {suc n} {suc j} zero le = zero + strongenFin {suc n} {suc j} (suc i) (s≤s le) = suc (strongenFin {n} {j} i le) + + strongenFinLeId : {n : ℕ} {j : Fin (suc n)} → (i : Fin (suc n)) → (le : toℕ i <' toℕ j) → + toℕ (strongenFin i le) <' toℕ j + strongenFinLeId {zero} {zero} zero () + strongenFinLeId {zero} {suc ()} i le + strongenFinLeId {suc n} {suc j} zero (s≤s z≤) = s≤s z≤ + strongenFinLeId {suc n} {suc j} (suc i) (s≤s le) = s≤s (strongenFinLeId {n} {j} i le) + + weakenStrongenFin : {n : ℕ} {j : Fin (suc n)} → (i : Fin (suc n)) → (le : toℕ i <' toℕ j) → + weakenFin (strongenFin i le) ≡ i + weakenStrongenFin {zero} {zero} i () + weakenStrongenFin {zero} {suc ()} zero le + weakenStrongenFin {suc n} {suc j} zero le = refl + weakenStrongenFin {suc n} {suc j} (suc i) (s≤s le) = + cong + (λ a → suc a) + (weakenStrongenFin {n} {j} i le) + + toℕstrongenFin : {n : ℕ} {j : Fin (suc n)} → (i : Fin (suc n)) → (le : toℕ i <' toℕ j) → + toℕ (strongenFin i le) ≡ toℕ i + toℕstrongenFin {zero} {zero} i () + toℕstrongenFin {zero} {suc ()} i (le) + toℕstrongenFin {suc n} {suc j} zero le = refl + toℕstrongenFin {suc n} {suc j} (suc i) (s≤s le) = + cong (λ a → suc a) (toℕstrongenFin {n} {j} i le) + + + adjugatePropAux3a : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → (le : toℕ l <' toℕ k) → + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ l) · MF (toℕ z) · M l (weakenFin z) · + det (minor (strongenFin l le) z (minor k i M)))))) + adjugatePropAux3a M k l le = + ∑∑Compat + (λ i j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M))))) + (λ z z₁ → + ind> (toℕ z) (toℕ z₁) · + (M l z · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ l) · MF (toℕ z₁) · M l (weakenFin z₁) · + det (minor (strongenFin l le) z₁ (minor k z M))))) + (ind>prop + (λ i j → + M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))) + (λ z z₁ → + M l z · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ l) · MF (toℕ z₁) · M l (weakenFin z₁) · + det (minor (strongenFin l le) z₁ (minor k z M)))) + (λ i j lf → + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ + cong + (λ a → + M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · a + · det (minor (strongenFin l le) j (minor k i M)))) + (minorIdId + k + i + (strongenFin l le) + j + M + (strongenFinLeId l le) + lf) + ⟩ + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + M (weakenFin (strongenFin l le)) (weakenFin j) + · det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ + cong + (λ a → + M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + M a (weakenFin j) + · det (minor (strongenFin l le) j (minor k i M)))) + (weakenStrongenFin l le) + ⟩ + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ + cong + (λ a → M l i · a · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M)))) + (sumMF (toℕ k) (toℕ i)) + ⟩ + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ + cong + (λ a → + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (a · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M))))) + (sumMF (toℕ (strongenFin l le)) (toℕ j)) + ⟩ + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ (strongenFin l le)) · MF (toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ + cong + (λ a → M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF a · MF (toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M)))) + (toℕstrongenFin l le) + ⟩ + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ l) · MF (toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M)))) + ∎) + ) + + adjugatePropAux3b : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → (le : toℕ l <' toℕ k) → + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k (weakenFin i) M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k (weakenFin i) M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ z → + ind> (suc (toℕ z)) (toℕ i) · + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ z))) · M l (suc z) · + det (minor (strongenFin l le) i (minor k (suc z) M)))))) + adjugatePropAux3b M k l le = + ∑∑Compat + (λ i j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k (weakenFin i) M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k (weakenFin i) M))))) + (λ z z₁ → + ind> (suc (toℕ z₁)) (toℕ z) · + (M l (weakenFin z) · (MF (toℕ k) · MF (toℕ (weakenFin z))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ z₁))) · M l (suc z₁) · + det (minor (strongenFin l le) z (minor k (suc z₁) M))))) + (λ i j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k (weakenFin i) M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k (weakenFin i) M)))) + ≡⟨ cong + (λ a → (1r + - ind> a (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k (weakenFin i) M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k (weakenFin i) M))))) + (toℕweakenFin i) ⟩ + (1r + - ind> (toℕ i) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k (weakenFin i) M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k (weakenFin i) M)))) + ≡⟨ + ind>anti + (λ i j → M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k (weakenFin i) M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k (weakenFin i) M)))) + (λ z z₁ → + M l (weakenFin z) · (MF (toℕ k) · MF (toℕ (weakenFin z))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ z₁))) · M l (suc z₁) · + det (minor (strongenFin l le) z (minor k (suc z₁) M)))) + (λ i j lf → + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k (weakenFin i) M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k (weakenFin i) M)))) + ≡⟨ + cong + (λ a → + M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · a + · det (minor (strongenFin l le) j (minor k (weakenFin i) M)))) + (minorIdSuc + k + (weakenFin i) + (strongenFin l le) + j + M + (strongenFinLeId l le) + (weakenweakenFinLe i j lf)) + ⟩ + M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) j (minor k (weakenFin i) M))) + ≡⟨ + cong + (λ a → + M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + M (weakenFin (strongenFin l le)) (suc j) · a)) + (detComp + (minor (strongenFin l le) j (minor k (weakenFin i) M)) + (minor (strongenFin l le) i (minor k (suc j) M)) + (λ i₁ j₁ → sym + (minorSemiCommR k (strongenFin l le) j i i₁ j₁ M lf) ) + ) + ⟩ + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + ≡⟨ + cong + (λ a → + M l (weakenFin i) · a · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + (sumMF (toℕ k) (toℕ (weakenFin i))) + ⟩ + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + ≡⟨ cong + (λ a → M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (a · M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + (sumMF (toℕ (strongenFin l le)) (toℕ j)) + ⟩ + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ (strongenFin l le)) · MF (toℕ j) · + M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + ≡⟨ + cong + (λ a → + M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF a · MF (toℕ j) · + M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + (toℕstrongenFin l le) + ⟩ + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · MF (toℕ j) · M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + ≡⟨ + cong + (λ a → + M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · a · M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + (sucMFRev (toℕ j)) + ⟩ + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ j))) · + M (weakenFin (strongenFin l le)) (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + ≡⟨ cong + (λ a → + M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ j))) · + M a (suc j) + · det (minor (strongenFin l le) i (minor k (suc j) M)))) + (weakenStrongenFin l le) + ⟩ + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ j))) · M l (suc j) · + det (minor (strongenFin l le) i (minor k (suc j) M)))) + ∎) + i + j + ⟩ + (1r + - ind> (toℕ i) (toℕ j)) · + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ j))) · M l (suc j) · + det (minor (strongenFin l le) i (minor k (suc j) M)))) + ≡⟨ + cong + (λ a → + a · + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ j))) · M l (suc j) · + det (minor (strongenFin l le) i (minor k (suc j) M))))) + (sym (ind>Suc (toℕ j) (toℕ i))) + ⟩ + (ind> (suc (toℕ j)) (toℕ i) · + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ j))) · M l (suc j) · + det (minor (strongenFin l le) i (minor k (suc j) M))))) + ∎) + + adjugatePropAux4a : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + (k l : Fin (suc (suc n))) → (le : toℕ l <' toℕ k) → + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ l) · MF (toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (1r · + (M l i · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin z))) + · det (minor (strongenFin l le) z (minor k i M))))) + adjugatePropAux4a M k l le = + ∑∑Compat + (λ i j → + ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ l) · MF (toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M))))) + (λ z z₁ → + ind> (toℕ z) (toℕ z₁) · + (1r · + (M l z · (MF (toℕ k) · MF (toℕ z₁)) · + (MF (toℕ l) · MF (toℕ z) · M l (weakenFin z₁))) + · det (minor (strongenFin l le) z₁ (minor k z M)))) + (λ i j → + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ l) · MF (toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M))))) + ≡⟨ + cong + (λ a → + ind> (toℕ i) (toℕ j) · a) + (·Assoc _ _ _) + ⟩ + (ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ l) · MF (toℕ j) · M l (weakenFin j)) + · det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ + cong + (λ a → + ind> (toℕ i) (toℕ j) · + (a · det (minor (strongenFin l le) j (minor k i M)))) + (solve! P') + ⟩ + (ind> (toℕ i) (toℕ j) · + ( 1r · + ( M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) · + det (minor (strongenFin l le) j (minor k i M)))) + ∎) + + adjugatePropAux4b : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + (k l : Fin (suc (suc n))) → (le : toℕ l <' toℕ k) → + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF (toℕ (weakenFin j))) · + (MF (toℕ l) · (- 1r · MF (toℕ i)) · M l i · + det (minor (strongenFin l le) j (minor k i M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (- 1r · + (M l i · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin z))) + · det (minor (strongenFin l le) z (minor k i M))))) + adjugatePropAux4b M k l le = + ∑∑Compat + (λ i j → + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF (toℕ (weakenFin j))) · + (MF (toℕ l) · (- 1r · MF (toℕ i)) · M l i · + det (minor (strongenFin l le) j (minor k i M))))) + (λ z z₁ → + ind> (toℕ z) (toℕ z₁) · + (- 1r · + (M l z · (MF (toℕ k) · MF (toℕ z₁)) · + (MF (toℕ l) · MF (toℕ z) · M l (weakenFin z₁))) + · det (minor (strongenFin l le) z₁ (minor k z M)))) + (λ i j → + (ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF (toℕ (weakenFin j))) · + (MF (toℕ l) · (- 1r · MF (toℕ i)) · M l i · + det (minor (strongenFin l le) j (minor k i M))))) + ≡⟨ + cong + (λ a → + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF a) · + (MF (toℕ l) · (- 1r · MF (toℕ i)) · M l i · + det (minor (strongenFin l le) j (minor k i M))))) + (toℕweakenFin j) + ⟩ + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · (- 1r · MF (toℕ i)) · M l i · + det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ cong + (λ a → ind> (toℕ i) (toℕ j) · a) + (·Assoc _ _ _) + ⟩ + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · (- 1r · MF (toℕ i)) · M l i) + · det (minor (strongenFin l le) j (minor k i M))) + ≡⟨ + cong + (λ a → ind> (toℕ i) (toℕ j) · (a + · det (minor (strongenFin l le) j (minor k i M)))) + (solve! P') + ⟩ + ind> (toℕ i) (toℕ j) · + ((- 1r) ·( M l (weakenFin j) · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l i)) + · det (minor (strongenFin l le) j (minor k i M))) + ≡⟨ cong + (λ a → ind> (toℕ i) (toℕ j) · + ((- 1r) · a + · det (minor (strongenFin l le) j (minor k i M)))) + (solve! P') + ⟩ + ind> (toℕ i) (toℕ j) · + ((- 1r) · + ( M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) · + det (minor (strongenFin l le) j (minor k i M))) + ∎) + + adjugatePropRL : {n : ℕ} → (M : FinMatrix R (suc n) (suc n)) → (k l : Fin (suc n)) → toℕ l <' toℕ k → + ∑ (λ i → (M l i · (MF (toℕ k +ℕ toℕ i) · det (minor k i M)))) ≡ 0r + adjugatePropRL {zero} M zero zero () + adjugatePropRL {zero} M (suc ()) zero (s≤s le) + adjugatePropRL {suc n} M k l le = + ∑ (λ i → M l i · (MF (toℕ k +ℕ toℕ i) · det (minor k i M))) + ≡⟨ ∑Compat + (λ i → M l i · (MF (toℕ k +ℕ toℕ i) · det (minor k i M))) + (λ i → M l i · MF (toℕ k +ℕ toℕ i) · det (minor k i M)) + (λ i → ·Assoc _ _ _) + ⟩ + ∑ (λ i → M l i · MF (toℕ k +ℕ toℕ i) · det (minor k i M)) + ≡⟨ ∑Compat + (λ i → M l i · MF (toℕ k +ℕ toℕ i) · det (minor k i M)) + (λ i → M l i · MF (toℕ k +ℕ toℕ i) · detR (strongenFin l le) (minor k i M)) + (λ i → + cong + (λ a → M l i · MF (toℕ k +ℕ toℕ i) · a) + (sym (DetRow (strongenFin l le) (minor k i M)))) ⟩ + ∑ + (λ i → + M l i · MF (toℕ k +ℕ toℕ i) · + detR (strongenFin l le) (minor k i M)) + ≡⟨ refl ⟩ + ∑ + (λ i → + M l i · MF (toℕ k +ℕ toℕ i) · + ∑ + (λ j → + MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ ∑Compat + (λ i → + M l i · MF (toℕ k +ℕ toℕ i) · + ∑ + (λ j → + MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))) + (λ i → + ∑ + (λ j → M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M))))) + (λ i → + ∑DistR + (M l i · MF (toℕ k +ℕ toℕ i)) + ( (λ j → + MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M))))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M))))) + ≡⟨ ∑∑Compat + (λ i j → + M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))) + (λ i j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M))))) + (λ i j → + DetRowAux2 + (ind> (toℕ i) (toℕ j)) + ( M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))) + ) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))))) + ≡⟨ ∑∑Split + (λ i j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M))))) + (λ i j → + (1r + - ind> (toℕ i) (toℕ j)) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M))))) ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))))) + ≡⟨ +Compat refl (∑∑ShiftWeak (λ i j → + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))))) ⟩ + (∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · MF (toℕ k +ℕ toℕ i) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k i M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k i M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (M l (weakenFin i) · MF (toℕ k +ℕ toℕ (weakenFin i)) · + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · + minor k (weakenFin i) M (strongenFin l le) j + · det (minor (strongenFin l le) j (minor k (weakenFin i) M))))))) + ≡⟨ +Compat (adjugatePropAux3a M k l le) (adjugatePropAux3b M k l le) ⟩ + ∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ l) · MF (toℕ z) · M l (weakenFin z) · + det (minor (strongenFin l le) z (minor k i M)))))) + + + ∑ + (λ i → + ∑ + (λ z → + ind> (suc (toℕ z)) (toℕ i) · + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ z))) · M l (suc z) · + det (minor (strongenFin l le) i (minor k (suc z) M)))))) + ≡⟨ +Compat + refl + (∑Comm (λ i z → + ind> (suc (toℕ z)) (toℕ i) · + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ z))) · M l (suc z) · + det (minor (strongenFin l le) i (minor k (suc z) M)))))) ⟩ + (∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ l) · MF (toℕ z) · M l (weakenFin z) · + det (minor (strongenFin l le) z (minor k i M)))))) + + + ∑ + (λ j → + ∑ + (λ i → + ind> (suc (toℕ j)) (toℕ i) · + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (suc (toℕ j))) · M l (suc j) · + det (minor (strongenFin l le) i (minor k (suc j) M))))))) + ≡⟨ + +Compat + refl + (sym + (∑∑ShiftSuc + λ j i → + (M l (weakenFin i) · (MF (toℕ k) · MF (toℕ (weakenFin i))) · + (MF (toℕ l) · (- 1r · MF (toℕ j)) · M l j · + det (minor (strongenFin l le) i (minor k j M)))))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l i · (MF (toℕ k) · MF (toℕ i)) · + (MF (toℕ l) · MF (toℕ j) · M l (weakenFin j) · + det (minor (strongenFin l le) j (minor k i M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (M l (weakenFin j) · (MF (toℕ k) · MF (toℕ (weakenFin j))) · + (MF (toℕ l) · (- 1r · MF (toℕ i)) · M l i · + det (minor (strongenFin l le) j (minor k i M)))))) + ≡⟨ +Compat (adjugatePropAux4a M k l le) (adjugatePropAux4b M k l le) ⟩ + ∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (1r · + (M l i · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin z))) + · det (minor (strongenFin l le) z (minor k i M))))) + + + ∑ + (λ i → + ∑ + (λ z → + ind> (toℕ i) (toℕ z) · + (- 1r · + (M l i · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin z))) + · det (minor (strongenFin l le) z (minor k i M))))) + ≡⟨ + sym + (∑∑Split + (λ i z → + ind> (toℕ i) (toℕ z) · + (1r · + (M l i · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin z))) + · det (minor (strongenFin l le) z (minor k i M)))) + λ i z → + ind> (toℕ i) (toℕ z) · + (- 1r · + (M l i · (MF (toℕ k) · MF (toℕ z)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin z))) + · det (minor (strongenFin l le) z (minor k i M)))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M))) + + + ind> (toℕ i) (toℕ j) · + (- 1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M))))) + ≡⟨ + ∑∑Compat + (λ i j → + ind> (toℕ i) (toℕ j) · + (1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M))) + + + ind> (toℕ i) (toℕ j) · + (- 1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M)))) + (λ _ _ → 0r) + (λ i j → + (ind> (toℕ i) (toℕ j) · + (1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M))) + + + ind> (toℕ i) (toℕ j) · + (- 1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ sym + (·DistR+ + (ind> (toℕ i) (toℕ j)) + (1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M))) + (- 1r · (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M)))) ⟩ + (ind> (toℕ i) (toℕ j) · + (1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M)) + + + - 1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M))) + ) + ≡⟨ + cong + (λ a → ind> (toℕ i) (toℕ j) · a) + (sym + (·DistL+ + (1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j)))) + ( - 1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j)))) + (det (minor (strongenFin l le) j (minor k i M))))) + ⟩ + (ind> (toℕ i) (toℕ j) · + ((1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + + + - 1r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j)))) + · det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ + cong + (λ a → + ind> (toℕ i) (toℕ j) · (a · + det (minor (strongenFin l le) j (minor k i M)))) + (sym + (·DistL+ + 1r + (- 1r) + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))))) + ⟩ + (ind> (toℕ i) (toℕ j) · + ((1r + - 1r) · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ cong + (λ a → (ind> (toℕ i) (toℕ j) · + (a · (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M))))) + (+InvR 1r) + ⟩ + (ind> (toℕ i) (toℕ j) · + (0r · + (M l i · (MF (toℕ k) · MF (toℕ j)) · + (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) + · det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ + cong + (λ a → (ind> (toℕ i) (toℕ j) · + (a · det (minor (strongenFin l le) j (minor k i M))))) + (solve! P') + ⟩ + (ind> (toℕ i) (toℕ j) · + (0r · det (minor (strongenFin l le) j (minor k i M)))) + ≡⟨ cong + (λ a → ind> (toℕ i) (toℕ j) · a) + (RingTheory.0LeftAnnihilates + (CommRing→Ring P') + (det (minor (strongenFin l le) j (minor k i M)))) ⟩ + (ind> (toℕ i) (toℕ j) · 0r) + ≡⟨ solve! P' ⟩ + 0r + ∎)⟩ + ∑ (λ (i : Fin (suc (suc n))) → ∑ (λ (j : Fin (suc n)) → 0r)) + ≡⟨ ∑Zero + (λ (i : Fin (suc (suc n))) → ∑ (λ (j : Fin (suc n)) → 0r)) + (λ i → ∑Zero (λ (j : Fin (suc n)) → 0r) (λ (j : Fin (suc n)) → refl)) ⟩ + 0r + ∎ + + + + adjugateInvRLcomponent : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → toℕ k <' toℕ l → (M ⋆ adjugate M) k l ≡ (det M ∘ 𝟙) k l + adjugateInvRLcomponent {suc n} M k l le = + ∑ (λ i → M k i · (MF(toℕ l +ℕ toℕ i) · det(minor l i M)) ) + ≡⟨ adjugatePropRL M l k le ⟩ + 0r + ≡⟨ sym (RingTheory.0RightAnnihilates (CommRing→Ring P') (det M)) ⟩ + det M · 0r + ≡⟨ cong (λ a → det M · a) (sym (deltaProp k l le)) ⟩ + (det M ∘ 𝟙) k l + ∎ + + FinCompare : {n : ℕ} → (k l : Fin n) → (k ≡ l) ⊎ ((toℕ k <' toℕ l) ⊎ (toℕ l <' toℕ k)) + FinCompare {zero} () () + FinCompare {suc n} zero zero = inl refl + FinCompare {suc n} zero (suc l) = inr (inl (s≤s z≤)) + FinCompare {suc n} (suc k) zero = inr (inr (s≤s z≤)) + FinCompare {suc n} (suc k) (suc l) with FinCompare {n} k l + ... | inl x = inl (cong (λ a → (suc a)) x) + ... | inr (inl x) = inr (inl (s≤s x)) + ... | inr (inr x) = inr (inr (s≤s x)) + + + adjugateInvRComp : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → (M ⋆ adjugate M) k l ≡ (det M ∘ 𝟙) k l + adjugateInvRComp {zero} M () () + adjugateInvRComp {suc n} M k l with FinCompare k l + ... | inl x = + (∑ (λ i → M k i · (MF(toℕ l +ℕ toℕ i) · det(minor l i M)) ) + ≡⟨ + ∑Compat + (λ i → M k i · (MF(toℕ l +ℕ toℕ i) · det(minor l i M))) + (λ i → M k i · MF(toℕ l +ℕ toℕ i) · det(minor l i M)) + (λ i → ·Assoc _ _ _) + ⟩ + ∑ (λ i → M k i · MF (toℕ l +ℕ toℕ i) · det (minor l i M)) + ≡⟨ + ∑Compat + (λ i → M k i · MF (toℕ l +ℕ toℕ i) · det (minor l i M)) + (λ i → M l i · MF (toℕ l +ℕ toℕ i) · det (minor l i M)) + (λ i → cong + (λ a → M a i · MF (toℕ l +ℕ toℕ i) · det (minor l i M)) + x ) + ⟩ + ∑ (λ i → M l i · MF (toℕ l +ℕ toℕ i) · det (minor l i M)) + ≡⟨ ∑Compat + (λ i → M l i · MF (toℕ l +ℕ toℕ i) · det (minor l i M)) + (λ i → MF (toℕ l +ℕ toℕ i) · M l i · det (minor l i M)) + (λ i → cong + (λ a → a · det (minor l i M)) + (CommRingStr.·Comm (snd P') (M l i) (MF (toℕ l +ℕ toℕ i))) ) ⟩ + detR l M + ≡⟨ DetRow l M ⟩ + det M + ≡⟨ sym (·IdR (det M)) ⟩ + (det M · 1r) + ≡⟨ cong (λ a → det M · a) (sym (deltaPropEq k l x))⟩ + (det M ∘ 𝟙) k l + ∎) + ... | inr (inl x) = adjugateInvRLcomponent M k l x + ... | inr (inr x) = adjugateInvRGcomponent M k l x + + adjugateInvLComp : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → (adjugate M ⋆ M) k l ≡ (det M ∘ 𝟙) k l + adjugateInvLComp M k l = + (adjugate M ⋆ M) k l + ≡⟨ refl ⟩ + ∑ (λ i → adjugate M k i · (M ᵗ) l i) + ≡⟨ + ∑Compat + (λ i → adjugate M k i · (M ᵗ) l i) + (λ i → adjugate (M ᵗ) i k · (M ᵗ) l i) + (λ i → cong (λ a → a · (M ᵗ) l i) (sym (adjugateTransp M i k))) + ⟩ + ∑ (λ i → adjugate (M ᵗ) i k · (M ᵗ) l i) + ≡⟨ + ∑Compat + (λ i → adjugate (M ᵗ) i k · (M ᵗ) l i) + (λ z → (snd P' CommRingStr.· (M ᵗ) l z) (adjugate (M ᵗ) z k)) + (λ i → CommRingStr.·Comm (snd P') (adjugate (M ᵗ) i k) ((M ᵗ) l i)) + ⟩ + ∑ (λ i → (M ᵗ) l i · adjugate (M ᵗ) i k ) + ≡⟨ adjugateInvRComp (M ᵗ) l k ⟩ + (det (M ᵗ) ∘ 𝟙) l k + ≡⟨ cong (λ a → (a ∘ 𝟙) l k) (sym (detTransp M)) ⟩ + det M · δ l k + ≡⟨ cong (λ a → det M · a) (deltaComm l k) ⟩ + (det M · 𝟙 k l) + ∎ + + + adjugateInvR : {n : ℕ} → (M : FinMatrix R n n) → M ⋆ adjugate M ≡ det M ∘ 𝟙 + adjugateInvR M = funExt₂ (λ k l → adjugateInvRComp M k l) + + adjugateInvL : {n : ℕ} → (M : FinMatrix R n n) → adjugate M ⋆ M ≡ det M ∘ 𝟙 + adjugateInvL M = funExt₂ (λ k l → adjugateInvLComp M k l) diff --git a/Cubical/Algebra/Determinat/det.agda b/Cubical/Algebra/Determinat/det.agda new file mode 100644 index 0000000000..0ead56c92e --- /dev/null +++ b/Cubical/Algebra/Determinat/det.agda @@ -0,0 +1,2493 @@ +{-# OPTIONS --cubical #-} + +module det where + +open import Cubical.Foundations.Prelude +open import Cubical.Foundations.Equiv +open import Cubical.Algebra.Matrix +open import Cubical.Algebra.Matrix.CommRingCoefficient +open import Cubical.Data.Bool +open import Cubical.Foundations.Structure using (⟨_⟩) +open import Cubical.Data.Nat renaming ( _+_ to _+ℕ_ ; _·_ to _·ℕ_ + ; +-comm to +ℕ-comm + ; +-assoc to +ℕ-assoc + ; ·-assoc to ·ℕ-assoc) +open import Cubical.Data.FinData +open import Cubical.Data.FinData.Order using (_<'Fin_; _≤'Fin_) +open import Cubical.Algebra.Ring +open import Cubical.Algebra.Ring.Base +open import Cubical.Algebra.Ring.BigOps +open import Cubical.Algebra.Monoid.BigOp +open import Cubical.Algebra.CommRing +open import Cubical.Algebra.CommRing.Base +open import Cubical.Algebra.Semiring +open import Cubical.Data.Int.Base using (pos; negsuc) +open import Cubical.Data.Vec.Base using (_∷_; []) +open import Cubical.Data.Nat.Order +open import Cubical.Tactics.CommRingSolver +open import Minor +open import RingSum + +module Determinat (ℓ : Level) (P' : CommRing ℓ) where + + open Minor.Minor ℓ + open RingSum.RingSum ℓ P' + open RingStr (snd (CommRing→Ring P')) renaming ( is-set to isSetR ) + + CommRingR' : CommRingStr (R' .fst) + CommRingR' = commringstr 0r 1r _+_ _·_ -_ (CommRingStr.isCommRing (snd P')) + + -- Definition of the minor factor + MF : (i : ℕ) → R + MF zero = 1r + MF (suc i) = (- 1r) · (MF i) + + --Multiplicity of the minor factor + sumMF : (i j : ℕ) → MF (i +ℕ j) ≡ (MF i) · (MF j) + sumMF zero j = + MF j + ≡⟨ sym (·IdL (MF j)) ⟩ + 1r · (MF j) + ≡⟨ refl ⟩ + (MF zero) · (MF j)∎ + sumMF (suc i) j = + MF (suc i +ℕ j) + ≡⟨ refl ⟩ + ((- 1r) · (MF (i +ℕ j))) + ≡⟨ cong (λ x → (- 1r) · x) (sumMF i j) ⟩ + ((- 1r) · ((MF i) · (MF j))) + ≡⟨ ·Assoc _ _ _ ⟩ + ((- 1r) · (MF i)) · (MF j) + ∎ + + sucMFRev : (i : ℕ) → MF i ≡ (- 1r) · MF (suc i) + sucMFRev i = solve! P' + + +Compat : {a b c d : R} → a ≡ b → c ≡ d → a + c ≡ b + d + +Compat {a} {b} {c} {d} eq1 eq2 = + a + c + ≡⟨ cong (λ x → x + c) eq1 ⟩ + b + c + ≡⟨ cong (λ x → b + x) eq2 ⟩ + b + d + ∎ + + -- Definition of the determinat by using Laplace expansion + det : ∀ {n} → FinMatrix R n n → R + det {zero} M = 1r + det {suc n} M = ∑ (λ j → (MF (toℕ j)) · (M zero j) · det {n} (minor zero j M)) + + detComp : {n : ℕ} → (M N : FinMatrix R n n) → ((i j : Fin n) → M i j ≡ N i j ) → det M ≡ det N + detComp {zero} M N f = refl + detComp {suc n} M N f = + ∑ (λ j → MF (toℕ j) · M zero j · det (minor zero j M)) + ≡⟨ ∑Compat (λ j → (MF (toℕ j)) · (M zero j) · det (minor zero j M)) + (λ j → (MF (toℕ j)) · (N zero j) · det (minor zero j M)) + (λ j → cong (λ a → (MF (toℕ j)) · a · det (minor zero j M)) (f zero j)) ⟩ + ∑ (λ j → MF (toℕ j) · N zero j · det (minor zero j M)) + ≡⟨ ∑Compat (λ j → (MF (toℕ j)) · (N zero j) · det (minor zero j M)) + (λ j → (MF (toℕ j)) · (N zero j) · det (minor zero j N)) + (λ j → cong (λ a → (MF (toℕ j)) · (N zero j) · a) (detComp (minor zero j M) (minor zero j N) (minorComp zero j M N f)) ) ⟩ + ∑ (λ j → MF (toℕ j) · N zero j · det (minor zero j N)) ∎ + + -- Independence of the row in the Laplace expansion. + detR : ∀ {n} → (k : Fin n) → FinMatrix R n n → R + detR {suc n} k M = ∑ (λ j → (MF ((toℕ k) +ℕ (toℕ j))) · (M k j) · det {n} (minor k j M)) + + DetRowAux1 : {n : ℕ} → + (k i : Fin (suc (suc n))) → + (j : Fin (suc n)) → + (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + MF ((toℕ k) +ℕ (toℕ i)) · M k i · + (MF (toℕ j) · minor k i M zero j · + det (minor zero j (minor k i M))) + ≡ + ( MF ((toℕ k) +ℕ (toℕ i) +ℕ (toℕ j)) · + M k i · minor k i M zero j · + det (minor zero j (minor k i M))) + DetRowAux1 k i j M = + (MF (toℕ k +ℕ toℕ i) · M k i · + (MF (toℕ j) · minor k i M zero j · + det (minor zero j (minor k i M)))) + ≡⟨ + ·Assoc + ( MF ((toℕ k) +ℕ (toℕ i)) · M k i) + (MF (toℕ j) · minor k i M zero j) + ( det (minor zero j (minor k i M))) + ⟩ + (MF (toℕ k +ℕ toℕ i) · M k i · (MF (toℕ j) · minor k i M zero j) · + det (minor zero j (minor k i M))) + ≡⟨ + cong + (λ x → (x · det (minor zero j (minor k i M)))) + (·Assoc + ( MF ((toℕ k) +ℕ (toℕ i)) · M k i) + (MF (toℕ j)) + ( minor k i M zero j)) + ⟩ + (MF (toℕ k +ℕ toℕ i) · M k i · MF (toℕ j) · minor k i M zero j · + det (minor zero j (minor k i M))) + ≡⟨ + cong + (λ x → x · minor k i M zero j · det (minor zero j (minor k i M))) + (sym (·Assoc (MF ((toℕ k) +ℕ (toℕ i))) ( M k i ) (MF (toℕ j)))) + ⟩ + (MF (toℕ k +ℕ toℕ i) · (M k i · MF (toℕ j)) · minor k i M zero j · + det (minor zero j (minor k i M))) + ≡⟨ + cong + ( λ x → + MF ((toℕ k) +ℕ (toℕ i)) · x · + minor k i M zero j · + det (minor zero j (minor k i M))) + (CommRingStr.·Comm CommRingR' (M k i) ( MF (toℕ j))) + ⟩ + MF (toℕ k +ℕ toℕ i) · (MF (toℕ j) · M k i) + · minor k i M zero j + · det (minor zero j (minor k i M)) + ≡⟨ + cong + (λ x → + x · minor k i M zero j · det (minor zero j (minor k i M))) + (·Assoc (MF ((toℕ k) +ℕ (toℕ i))) ( MF (toℕ j)) (M k i)) + ⟩ + (MF (toℕ k +ℕ toℕ i) · MF (toℕ j) · M k i · minor k i M zero j · + det (minor zero j (minor k i M))) + ≡⟨ + cong + (λ x → + x · M k i · minor k i M zero j + · det (minor zero j (minor k i M))) + (sym (sumMF (toℕ k +ℕ toℕ i) ( toℕ j))) + ⟩ + (MF (toℕ k +ℕ toℕ i +ℕ toℕ j) · M k i · minor k i M zero j · + det (minor zero j (minor k i M))) + ∎ + + DetRowAux2 : (a b : R) → b ≡ a · b + (1r + (- a)) · b + DetRowAux2 a b = solve! P' + + DetRowAux3a : + {n : ℕ} → (k : Fin (suc n)) → + (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ (λ (i : Fin (suc (suc n))) → + ∑ (λ (j : Fin (suc n)) → + ind> (toℕ i) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) + · M (suc k) i · minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M))))) + ≡ + ∑ (λ (i : Fin (suc n)) → + ∑ (λ (j : Fin (suc n)) → + ind> (toℕ (suc i)) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) + · M (suc k) (suc i) · minor (suc k) (suc i) M zero j + · det (minor zero j (minor (suc k) (suc i) M))))) + DetRowAux3a k M = + ∑∑ShiftSuc + (λ i j → + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) + · M (suc k) i · minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M)))) + + DetRowAux3b : {n : ℕ} → (k : Fin (suc n)) → + (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M))))) + ≡ + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · M (suc k) (weakenFin i) · + minor (suc k) (weakenFin i) M zero j + · det (minor zero j (minor (suc k) (weakenFin i) M))))) + DetRowAux3b k M = + ∑∑ShiftWeak + (λ i j → + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) + · M (suc k) i · minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M)))) + + DetRowAux4a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ (λ i → + ∑ (λ j → + ind> (toℕ (suc i)) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + minor (suc k) (suc i) M zero j + · det (minor zero j (minor (suc k) (suc i) M))))) + ≡ + ∑ (λ i → + ∑ (λ j → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))))) + DetRowAux4a k M = + ∑∑Compat + (λ i j → + ind> (toℕ (suc i)) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + minor (suc k) (suc i) M zero j + · det (minor zero j (minor (suc k) (suc i) M)))) + (λ i j → (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M)))) + λ i j → + ( + ind> (toℕ (suc i)) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + minor (suc k) (suc i) M zero j + · det (minor zero j (minor (suc k) (suc i) M))) + ≡⟨ + cong + (λ a → + a ·(MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) + · M (suc k) (suc i) · minor (suc k) (suc i) M zero j + · det (minor zero j (minor (suc k) (suc i) M)))) + (ind>Suc (toℕ i) (toℕ j)) + ⟩ + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + minor (suc k) (suc i) M zero j + · det (minor zero j (minor (suc k) (suc i) M))) + ≡⟨ ind>anti + (λ j i → + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + minor (suc k) (suc i) M zero j + · det (minor zero j (minor (suc k) (suc i) M)))) + (λ j i → + MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))) + (λ j i le → + ( + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + minor (suc k) (suc i) M zero j + · det (minor zero j (minor (suc k) (suc i) M))) + ≡⟨ + cong + (λ a → + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) + · M (suc k) (suc i) + · a + · det (minor zero j (minor (suc k) (suc i) M)))) + (minorIdId (suc k) (suc i) zero j M (s≤s z≤) (s≤s le)) + ⟩ + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor zero j (minor (suc k) (suc i) M))) + ≡⟨ cong + (λ a → + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) · a)) + (detComp + (minor zero j (minor (suc k) (suc i) M)) + (minor k i (minor (weakenFin zero) (weakenFin j) M)) + λ i₁ j₁ → + minorComm0 k zero i j i₁ j₁ M z≤ le ) + ⟩ + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))) + ∎ + ) + ) + j + i ⟩ + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))) + ∎) + + toℕweakenFin : {n : ℕ} → (i : Fin n) → toℕ (weakenFin i) ≡ toℕ i + toℕweakenFin zero = refl + toℕweakenFin (suc i) = cong suc (toℕweakenFin i) + + weakenweakenFinLe : {n : ℕ} → (i : Fin (suc n)) → (j : Fin (suc n)) → toℕ i ≤' toℕ j → weakenFin i ≤'Fin weakenFin j + weakenweakenFinLe {zero} zero zero le = le + weakenweakenFinLe {suc n} zero zero le = le + weakenweakenFinLe {suc n} zero (suc j) le = z≤ + weakenweakenFinLe {suc n} (suc i) (suc j) (s≤s le) = s≤s (weakenweakenFinLe {n} i j le) + + DetRowAux4b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · minor (suc k) (weakenFin i) M zero j + · det (minor zero j (minor (suc k) (weakenFin i) M))))) + ≡ + ∑ + (λ i → + ∑ + (λ j → + (ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))))) + DetRowAux4b k M = + ∑∑Compat + (λ i j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · minor (suc k) (weakenFin i) M zero j + · det (minor zero j (minor (suc k) (weakenFin i) M)))) + (λ z z₁ → + ind> (suc (toℕ z₁)) (toℕ z) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin z) +ℕ toℕ z₁) · + M (suc k) (weakenFin z) + · M (weakenFin zero) (suc z₁) + · det (minor k z (minor zero (suc z₁) M)))) + λ i j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · minor (suc k) (weakenFin i) M zero j + · det (minor zero j (minor (suc k) (weakenFin i) M))) + ≡⟨ + cong + (λ a → + (1r + - ind> a (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · minor (suc k) (weakenFin i) M zero j + · det (minor zero j (minor (suc k) (weakenFin i) M)))) + (toℕweakenFin i) + ⟩ + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · minor (suc k) (weakenFin i) M zero j + · det (minor zero j (minor (suc k) (weakenFin i) M))) + ≡⟨ ind>anti + (λ i j → (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · minor (suc k) (weakenFin i) M zero j + · det (minor zero j (minor (suc k) (weakenFin i) M)))) + (λ i j → MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M))) + (λ i j le → + ((MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · minor (suc k) (weakenFin i) M zero j + · det (minor zero j (minor (suc k) (weakenFin i) M)))) + ≡⟨ cong + (λ a → + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) · a + · det (minor zero j (minor (suc k) (weakenFin i) M)))) + (minorIdSuc + (suc k) + (weakenFin i) + zero + j + M + (s≤s z≤) + (weakenweakenFinLe i j le)) ⟩ + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor zero j (minor (suc k) (weakenFin i) M))) + ≡⟨ cong + (λ a → + MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) · a) + (detComp + (minor zero j (minor (suc k) (weakenFin i) M)) + (minor k i (minor zero (suc j) M)) + (λ i₁ j₁ → + minorComm1 k zero i j i₁ j₁ M z≤ le)) + ⟩ + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M))) + ∎) + i + j ⟩ + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M))) + ≡⟨ cong + (λ a → + a · (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))) + (sym (ind>Suc (toℕ j) (toℕ i))) + ⟩ + (ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))) + ∎ + + + DetRowAux5a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))))) + ≡ + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))))) + DetRowAux5a k M = ∑Comm λ i j → (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))) + + DetRowAux5b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ i → + ∑ + (λ j → + ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M))))) + ≡ + ∑ + (λ j → + ∑ + (λ i → + ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M))))) + DetRowAux5b k M = + ∑Comm (λ i j → + ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))) + + DetRowAux6a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))))) + ≡ + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero j + · det (minor k i (minor zero j M))))) + DetRowAux6a k M = + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))))) + ≡⟨ ∑∑Compat + (λ j i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M)))) + (λ j i → + (1r + - ind> (toℕ (weakenFin j)) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ (weakenFin j)) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M)))) + (λ j i → + cong (λ a → + (1r + - ind> a (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ a) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M)))) + (sym (toℕweakenFin j))) + ⟩ + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ (weakenFin j)) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ (weakenFin j)) · + M (suc k) (suc i) + · M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))))) + ≡⟨ sym (∑∑ShiftWeak + λ j i → + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · + M (suc k) (suc i) + · M zero j + · det (minor k i (minor zero j M)))) ⟩ + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · M (suc k) (suc j) · + M zero i + · det (minor k j (minor zero i M))))) + ∎ + + DetRowAux6bAux : {n : ℕ} → (k : Fin (suc n)) → (i j : Fin (suc n)) → + MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) + ≡ + MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ (suc j)) + DetRowAux6bAux k i j = + MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) + ≡⟨ sumMF (toℕ (suc k) +ℕ toℕ (weakenFin i)) (toℕ j) ⟩ + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i)) · MF (toℕ j)) + ≡⟨ cong + (λ a → + a · MF (toℕ j)) + (sumMF (toℕ (suc k)) (toℕ (weakenFin i))) + ⟩ + (MF (toℕ (suc k)) · MF (toℕ (weakenFin i)) · MF (toℕ j)) + ≡⟨ cong + (λ a → + MF (toℕ (suc k)) · (MF a ) · MF (toℕ j)) + (toℕweakenFin i) + ⟩ + (MF (toℕ (suc k)) · MF (toℕ i) · MF (toℕ j)) + ≡⟨ sym + (·Assoc + (MF (toℕ (suc k))) + (MF (toℕ i)) + (MF (toℕ j))) + ⟩ + (MF (toℕ (suc k)) · (MF (toℕ i) · MF (toℕ j))) + ≡⟨ cong + (λ a → + MF (toℕ (suc k)) · a) + (solve! P') ⟩ + MF (toℕ (suc k)) · (MF (toℕ (suc i)) · MF (toℕ (suc j))) + ≡⟨ + ·Assoc + (MF (toℕ (suc k))) + (MF (toℕ (suc i))) + (MF (toℕ (suc j))) + ⟩ + (MF (toℕ (suc k)) · MF (toℕ (suc i)) · MF (toℕ (suc j))) + ≡⟨ cong + (λ a → a · MF (toℕ (suc j))) + (sym (sumMF (toℕ (suc k)) (toℕ (suc i)))) + ⟩ + (MF (toℕ (suc k) +ℕ toℕ (suc i)) · MF (toℕ (suc j))) + ≡⟨ sym (sumMF (toℕ (suc k) +ℕ toℕ (suc i)) (toℕ (suc j))) ⟩ + MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ (suc j)) + ∎ + + DetRowAux6b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ j → + ∑ + (λ i → + ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M))))) + ≡ + ∑ + (λ j → + ∑ + (λ i → + ind> (toℕ j) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (weakenFin i) + · M zero j + · det (minor k i (minor zero j M))))) + + DetRowAux6b k M = + ∑ + (λ i → + ∑ + (λ i₁ → + ind> (suc (toℕ i)) (toℕ i₁) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i₁) +ℕ toℕ i) · + M (suc k) (weakenFin i₁) + · M (weakenFin zero) (suc i) + · det (minor k i₁ (minor zero (suc i) M))))) + ≡⟨ ∑∑Compat + (λ j i → + ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))) + (λ j i → + ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ (suc j)) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))) + (λ j i → + (ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))) + ≡⟨ cong + (λ a → + ind> (suc (toℕ j)) (toℕ i) · + (a · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))) + (DetRowAux6bAux k i j) + ⟩ + (ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ (suc j)) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))) + ∎) + ⟩ + ∑ + (λ j → + ∑ + (λ i → + ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ (suc j)) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M))))) + ≡⟨ sym (∑∑ShiftSuc λ j i → (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) j + · det (minor k i (minor zero j M)))) ⟩ + ∑ + (λ j → + ∑ + (λ i → + ind> (toℕ j) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M zero j + · det (minor k i (minor zero j M))))) + ∎ + + weakenFinLe : {n : ℕ} → (i : Fin (suc (suc n))) → (j : Fin (suc n)) → toℕ i ≤' toℕ j → i ≤'Fin weakenFin j + weakenFinLe {zero} zero zero le = le + weakenFinLe {zero} one zero () + weakenFinLe {zero} one (suc ()) le + weakenFinLe {suc n} zero j le = z≤ + weakenFinLe {suc n} (suc i) (suc j) (s≤s le) = s≤s (weakenFinLe {n} i j le) + + DetRowAux7a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero j + · det (minor k i (minor zero j M))))) + ≡ + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M))))) + + DetRowAux7a k M = + ∑∑Compat + (λ j i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero j + · det (minor k i (minor zero j M)))) + (λ j i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M)))) + (λ j i → + ind>anti + (λ j i → (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero j + · det (minor k i (minor zero j M)))) + (λ j i → (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M)))) + (λ j i le → + cong + ( λ a → MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · a · + M zero j + · det (minor k i (minor zero j M))) + (sym (minorSucSuc zero j k i M z≤ (weakenFinLe j i le)))) + j + i) + + DetRowAux7b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ j → + ∑ + (λ i → + ind> (toℕ j) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (weakenFin i) + · M zero j + · det (minor k i (minor zero j M))))) + ≡ + ∑ + (λ j → + ∑ + (λ i → + ind> (toℕ j) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M))))) + DetRowAux7b k M = + ∑∑Compat + (λ j i → + ind> (toℕ j) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (weakenFin i) + · M zero j + · det (minor k i (minor zero j M)))) + (λ j i → + (ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M)))) + (λ j i → + ind>prop + (λ j i → + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (weakenFin i) · + M zero j · det (minor k i (minor zero j M)))) + (λ j i → + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M)))) + (λ j i le → + cong + (λ a → + MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · a · + M zero j · det (minor k i (minor zero j M))) + (sym (minorSucId zero j k i M z≤ le)) ) + j + i + ) + + DetRowAux8 : {n : ℕ} → (i : Fin (suc (suc n))) → (j k : Fin (suc n)) + → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · M zero i · det (minor k j (minor zero i M)) + ≡ + MF (toℕ i) · M zero i · (MF (toℕ k +ℕ toℕ j) · minor zero i M k j · det (minor k j (minor zero i M))) + DetRowAux8 i j k M = + (MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · + M zero i + · det (minor k j (minor zero i M))) + ≡⟨ cong + (λ a → + a · minor zero i M k j · M zero i · det (minor k j (minor zero i M))) + (sumMF (toℕ (suc k) +ℕ toℕ (suc j)) ( toℕ i)) + ⟩ + (MF (toℕ (suc k) +ℕ toℕ (suc j)) · MF (toℕ i) · minor zero i M k j · + M zero i + · det (minor k j (minor zero i M))) + ≡⟨ cong + (λ a → a · MF (toℕ i) · minor zero i M k j · + M zero i + · det (minor k j (minor zero i M))) + (sumMF (toℕ (suc k)) (toℕ (suc j))) + ⟩ + (MF (toℕ (suc k)) · MF (toℕ (suc j)) · MF (toℕ i) · + minor zero i M k j + · M zero i + · det (minor k j (minor zero i M))) + ≡⟨ cong + (λ a → + a · MF (toℕ i) · + minor zero i M k j + · M zero i + · det (minor k j (minor zero i M))) + (solve! P') + ⟩ + MF (toℕ k) · MF (toℕ j) · MF (toℕ i) · + minor zero i M k j + · M zero i + · det (minor k j (minor zero i M)) + ≡⟨ cong + (λ a → + a · MF (toℕ i) · minor zero i M k j + · M zero i · det (minor k j (minor zero i M))) + (sym (sumMF (toℕ k) (toℕ j))) ⟩ + (MF (toℕ k +ℕ toℕ j) · MF (toℕ i) · minor zero i M k j · M zero i · + det (minor k j (minor zero i M))) + ≡⟨ cong + (λ a → a · det (minor k j (minor zero i M))) + (solve! P') + ⟩ + ( MF (toℕ i) · M zero i · MF (toℕ k +ℕ toℕ j) · minor zero i M k j · + det (minor k j (minor zero i M))) + ≡⟨ sym + (·Assoc + (MF (toℕ i) · M zero i · MF (toℕ k +ℕ toℕ j)) + (minor zero i M k j) + (det (minor k j (minor zero i M)))) + ⟩ + (MF (toℕ i) · M zero i · MF (toℕ k +ℕ toℕ j) · + (minor zero i M k j · det (minor k j (minor zero i M)))) + ≡⟨ sym (·Assoc (MF (toℕ i) · M zero i) (MF (toℕ k +ℕ toℕ j)) (minor zero i M k j · det (minor k j (minor zero i M)))) ⟩ + MF (toℕ i) · M zero i · (MF (toℕ k +ℕ toℕ j) · + (minor zero i M k j · det (minor k j (minor zero i M)))) + ≡⟨ cong + (λ a → MF (toℕ i) · M zero i · a) + (·Assoc (MF (toℕ k +ℕ toℕ j)) (minor zero i M k j) (det (minor k j (minor zero i M)))) ⟩ + (MF (toℕ i) · M zero i · (MF (toℕ k +ℕ toℕ j) · + minor zero i M k j · det (minor k j (minor zero i M)))) + ∎ + + + DetRow : ∀ {n} → (k : Fin n) → (M : FinMatrix R n n) → (detR k M) ≡ (det M) + DetRow {one} zero M = refl + DetRow {suc (suc n)} zero M = refl + DetRow {suc (suc n)} (suc k) M = + detR (suc k) M + ≡⟨ refl ⟩ + ∑ + (λ (i : Fin (suc (suc n))) → + MF (toℕ (suc k) +ℕ toℕ i) · M (suc k) i · det (minor (suc k) i M)) + ≡⟨ refl ⟩ + ∑ + (λ i → + MF (toℕ (suc k) +ℕ toℕ i) · M (suc k) i · + ∑ + (λ j → + MF (toℕ j) · minor (suc k) i M zero j · + det (minor zero j (minor (suc k) i M)))) + ≡⟨ ∑Compat (λ i → + MF (toℕ (suc k) +ℕ toℕ i) · M (suc k) i · + ∑ + (λ j → + MF (toℕ j) · minor (suc k) i M zero j · + det (minor zero j (minor (suc k) i M)))) + ((λ i → + ∑ + (λ j → + MF (toℕ (suc k) +ℕ toℕ i) · M (suc k) i · + (MF (toℕ j) · minor (suc k) i M zero j · + det (minor zero j (minor (suc k) i M)))))) + (λ i → ∑DistR ( MF (toℕ (suc k) +ℕ toℕ i) · M (suc k) i) + (λ j → + MF (toℕ j) · minor (suc k) i M zero j · + det (minor zero j (minor (suc k) i M))))⟩ + ∑ + (λ i → + ∑ + (λ j → + MF (toℕ (suc k) +ℕ toℕ i) · M (suc k) i · + (MF (toℕ j) · minor (suc k) i M zero j · + det (minor zero j (minor (suc k) i M))))) + ≡⟨ + ∑∑Compat + (λ i j → + MF (toℕ (suc k) +ℕ toℕ i) · M (suc k) i · + (MF (toℕ j) · minor (suc k) i M zero j · + det (minor zero j (minor (suc k) i M)))) + (λ i j → + MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j · + det (minor zero j (minor (suc k) i M))) + (λ i j → DetRowAux1 (suc k) i j M) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M)))) + ≡⟨ ∑∑Compat + (λ i j → + MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j · det (minor zero j (minor (suc k) i M))) + (λ i j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M)))) + (λ i j → + DetRowAux2 (ind> (toℕ i) (toℕ j)) + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j · det (minor zero j (minor (suc k) i M)))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M))))) + ≡⟨ ∑∑Split + (λ i j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M)))) + (λ i j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M)))) + ⟩ + (∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · + minor (suc k) i M zero j + · det (minor zero j (minor (suc k) i M)))))) + ≡⟨ +Compat (DetRowAux3a k M) (DetRowAux3b k M) ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ (suc i)) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + minor (suc k) (suc i) M zero j + · det (minor zero j (minor (suc k) (suc i) M))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · minor (suc k) (weakenFin i) M zero j + · det (minor zero j (minor (suc k) (weakenFin i) M))))) + ≡⟨ +Compat (DetRowAux4a k M) (DetRowAux4b k M) ⟩ + (∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))))) + + + ∑ + (λ i → + ∑ + (λ j → + ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))))) + ≡⟨ +Compat (DetRowAux5a k M) (DetRowAux5b k M) ⟩ + (∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero (weakenFin j) + · det (minor k i (minor zero (weakenFin j) M))))) + + ∑ + (λ j → + ∑ + (λ i → + ind> (suc (toℕ j)) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (weakenFin i) +ℕ toℕ j) · + M (suc k) (weakenFin i) + · M (weakenFin zero) (suc j) + · det (minor k i (minor zero (suc j) M)))))) + ≡⟨ +Compat (DetRowAux6a k M) (DetRowAux6b k M) ⟩ + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (suc i) · + M zero j + · det (minor k i (minor zero j M))))) + + + ∑ + (λ j → + ∑ + (λ i → + ind> (toℕ j) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (weakenFin i) + · M zero j + · det (minor k i (minor zero j M))))) + ≡⟨ +Compat (DetRowAux7a k M) (DetRowAux7b k M) ⟩ + (∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M))))) + + + ∑ + (λ j → + ∑ + (λ i → + ind> (toℕ j) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M)))))) + ≡⟨ +Comm _ _ ⟩ + ∑ + (λ j → + ∑ + (λ i → + ind> (toℕ j) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M))))) + + + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M))))) + ≡⟨ sym + (∑∑Split + (λ j i → + ind> (toℕ j) (toℕ i) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M)))) + λ j i → (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · minor zero j M k i · + M zero j + · det (minor k i (minor zero j M))) + ) ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · + M zero i + · det (minor k j (minor zero i M))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · + M zero i + · det (minor k j (minor zero i M))))) + ≡⟨ + ∑∑Compat + (λ i j → + ( + ind> (toℕ i) (toℕ j) · + (MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · + M zero i + · det (minor k j (minor zero i M))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · + M zero i + · det (minor k j (minor zero i M))))) + (λ z z₁ → + MF (toℕ (suc k) +ℕ toℕ (suc z₁) +ℕ toℕ z) · minor zero z M k z₁ · + M zero z + · det (minor k z₁ (minor zero z M))) + (λ i j → + sym + (DetRowAux2 + (ind> (toℕ i) (toℕ j)) + (MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · + M zero i · det (minor k j (minor zero i M))))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · + M zero i + · det (minor k j (minor zero i M)))) + ≡⟨ + ∑∑Compat + (λ i j → MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · + M zero i + · det (minor k j (minor zero i M))) + (λ z z₁ → + MF (toℕ z) · M zero z · + (MF (toℕ k +ℕ toℕ z₁) · minor zero z M k z₁ · + det (minor k z₁ (minor zero z M)))) + (λ i j → DetRowAux8 i j k M) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + MF (toℕ i) · M zero i · (MF (toℕ k +ℕ toℕ j) · minor zero i M k j + · det (minor k j (minor zero i M))))) + ≡⟨ + ∑Compat + (λ i → + ∑ + (λ j → + MF (toℕ i) · M zero i · (MF (toℕ k +ℕ toℕ j) · minor zero i M k j + · det (minor k j (minor zero i M))))) + (λ i → + MF (toℕ i) · M zero i · + ∑ + (λ j → + MF (toℕ k +ℕ toℕ j) · minor zero i M k j + · det (minor k j (minor zero i M)))) + (λ i → sym + (∑DistR + ( MF (toℕ i) · M zero i) + (λ j → MF (toℕ k +ℕ toℕ j) · minor zero i M k j + · det (minor k j (minor zero i M))))) + ⟩ + ∑ + (λ i → + MF (toℕ i) · M zero i · + ∑ + (λ j → + MF (toℕ k +ℕ toℕ j) · minor zero i M k j + · det (minor k j (minor zero i M)))) + ≡⟨ ∑Compat + (λ i → + MF (toℕ i) · M zero i · + detR k (minor zero i M)) + (λ i → + MF (toℕ i) · M zero i · + det (minor zero i M)) + (λ i → + cong + (λ a → MF (toℕ i) · M zero i · a) + (DetRow k (minor zero i M))) + ⟩ + ∑ (λ i → MF (toℕ i) · M zero i · det (minor zero i M)) + ∎ + + --Laplace expansion along columns + + detC : ∀ {n} → (k : Fin n) → FinMatrix R n n → R + detC {suc n} k M = ∑ (λ i → (MF ((toℕ i) +ℕ (toℕ k))) · (M i k) · det {n} (minor i k M)) + + DetRowColumnAux : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ i → + ∑ + (λ j → + MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + (MF (toℕ j) · minor (suc i) zero M zero j · + det (minor zero j (minor (suc i) zero M))))) + ≡ + ∑ + (λ i → + ∑ + (λ j → + MF (toℕ (suc j))· M zero (suc j) · + (MF (toℕ i +ℕ zero)· minor zero (suc j) M i zero · + det (minor i zero (minor zero (suc j) M))))) + + DetRowColumnAux M = + ∑∑Compat + (λ i j → + MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + (MF (toℕ j) · minor (suc i) zero M zero j · + det (minor zero j (minor (suc i) zero M)))) + (λ i j → + MF (toℕ (suc j))· M zero (suc j) · + (MF (toℕ i +ℕ zero)· minor zero (suc j) M i zero · + det (minor i zero (minor zero (suc j) M)))) + (λ i j → + (MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + (MF (toℕ j) · minor (suc i) zero M zero j · + det (minor zero j (minor (suc i) zero M)))) + ≡⟨ cong + (λ a → + MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + (MF (toℕ j) · a · + det (minor zero j (minor (suc i) zero M)))) + (minorIdSuc (suc i) zero zero j M (s≤s z≤) z≤) + ⟩ + (MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + (MF (toℕ j) · M zero (suc j) · + det (minor zero j (minor (suc i) zero M)))) + ≡⟨ + cong + (λ a → + MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + (MF (toℕ j) · M zero (suc j) · a)) + (detComp + (minor zero j (minor (suc i) zero M)) + (minor i zero (minor zero (suc j) M)) + (λ i₁ j₁ → (minorComm1 i zero zero j i₁ j₁ M z≤ z≤))) + ⟩ + (MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + (MF (toℕ j) · M zero (suc j) · + det (minor i zero (minor zero (suc j) M)))) + ≡⟨ ·Assoc (MF (toℕ (suc i) +ℕ zero) · M (suc i) zero) (MF (toℕ j) · M zero (suc j)) (det (minor i zero (minor zero (suc j) M))) ⟩ + MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · (MF (toℕ j) · M zero (suc j)) · + det (minor i zero (minor zero (suc j) M)) + ≡⟨ + cong + (λ a → a · M (suc i) zero · + (MF (toℕ j) · M zero (suc j)) · + det (minor i zero (minor zero (suc j) M))) + (MF (toℕ (suc i) +ℕ zero) + ≡⟨ sumMF (toℕ (suc i)) zero ⟩ + (MF (toℕ (suc i)) · MF zero) + ≡⟨ solve! P' ⟩ + MF (toℕ (suc i)) + ∎) + ⟩ + MF (toℕ (suc i)) · M (suc i) zero · (MF (toℕ j) · M zero (suc j)) · + det (minor i zero (minor zero (suc j) M)) + ≡⟨ cong + (λ a → + a · + det (minor i zero (minor zero (suc j) M))) + (solve! P') ⟩ + MF (toℕ (suc j)) · M zero (suc j) · + MF (toℕ i) · M (suc i) zero · + det (minor i zero (minor zero (suc j) M)) + ≡⟨ sym (·Assoc (MF (toℕ (suc j)) · M zero (suc j) · MF (toℕ i)) (M (suc i) zero) (det (minor i zero (minor zero (suc j) M)))) ⟩ + (MF (toℕ (suc j)) · M zero (suc j) · MF (toℕ i) · + (M (suc i) zero · det (minor i zero (minor zero (suc j) M)))) + ≡⟨ sym (·Assoc (MF (toℕ (suc j)) · M zero (suc j)) (MF (toℕ i)) (M (suc i) zero · det (minor i zero (minor zero (suc j) M)))) ⟩ + (MF (toℕ (suc j)) · M zero (suc j) · + (MF (toℕ i) · + (M (suc i) zero · det (minor i zero (minor zero (suc j) M))))) + ≡⟨ cong (λ a → MF (toℕ (suc j)) · M zero (suc j) · a) + (·Assoc (MF (toℕ i)) (M (suc i) zero) (det (minor i zero (minor zero (suc j) M)))) ⟩ + MF (toℕ (suc j)) · M zero (suc j) · + (MF (toℕ i) · M (suc i) zero · + det (minor i zero (minor zero (suc j) M))) + ≡⟨ refl ⟩ + (MF (toℕ (suc j)) · M zero (suc j) · + (MF (toℕ i) · minor zero (suc j) M i zero · + det (minor i zero (minor zero (suc j) M)))) + ≡⟨ + cong + (λ a → (MF (toℕ (suc j)) · M zero (suc j) · + (a · minor zero (suc j) M i zero · + det (minor i zero (minor zero (suc j) M))))) + (MF (toℕ i) + ≡⟨ solve! P' ⟩ + (MF (toℕ i) · MF zero) + ≡⟨ sym (sumMF (toℕ i) zero) ⟩ + MF (toℕ i +ℕ zero) ∎) + ⟩ + (MF (toℕ (suc j)) · M zero (suc j) · + (MF (toℕ i +ℕ zero) · minor zero (suc j) M i zero · + det (minor i zero (minor zero (suc j) M)))) + ∎) + + + DetRowColumn : ∀ {n} → (M : FinMatrix R (suc n) (suc n)) → + detC zero M ≡ det M + DetRowColumn {zero} M = refl + DetRowColumn {suc n} M = + detC zero M + ≡⟨ refl ⟩ + ∑ (λ i → (MF ((toℕ i) +ℕ zero)) · (M i zero) · det {suc n} (minor i zero M)) + ≡⟨ refl ⟩ + 1r · (M zero zero) · det (minor zero zero M) + + ∑ (λ i → (MF ((toℕ (suc i)) +ℕ zero)) · (M (suc i) zero) · det {suc n} (minor (suc i) zero M)) + ≡⟨ refl ⟩ + (1r · M zero zero · det (minor zero zero M) + + ∑ (λ i → + MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + ∑ (λ j → MF (toℕ j) · minor (suc i) zero M zero j · det (minor zero j (minor (suc i) zero M))))) + ≡⟨ +Compat + refl + (∑Compat + (λ i → MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + ∑ (λ j → MF (toℕ j) · minor (suc i) zero M zero j · + det (minor zero j (minor (suc i) zero M)))) + (λ i → ∑ (λ j → MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + (MF (toℕ j) · minor (suc i) zero M zero j · + det (minor zero j (minor (suc i) zero M))))) + (λ i → ∑DistR + (MF (toℕ (suc i) +ℕ zero) · M (suc i) zero) + (λ j → MF (toℕ j) · minor (suc i) zero M zero j · det (minor zero j (minor (suc i) zero M))))) + ⟩ + 1r · M zero zero · det (minor zero zero M) + + ∑ (λ i → + ∑ (λ j → + MF (toℕ (suc i) +ℕ zero) · M (suc i) zero · + (MF (toℕ j) · minor (suc i) zero M zero j · + det (minor zero j (minor (suc i) zero M))))) + ≡⟨ +Compat refl (DetRowColumnAux M) ⟩ + (1r · M zero zero · det (minor zero zero M) + + ∑ + (λ i → + ∑ + (λ j → + MF (toℕ (suc j)) · M zero (suc j) · + (MF (toℕ i +ℕ zero) · minor zero (suc j) M i zero · + det (minor i zero (minor zero (suc j) M)))))) + ≡⟨ +Compat refl (∑Comm + λ i j → + MF (toℕ (suc j)) · M zero (suc j) · + (MF (toℕ i +ℕ zero) · minor zero (suc j) M i zero · + det (minor i zero (minor zero (suc j) M)))) ⟩ + (1r · M zero zero · det (minor zero zero M) + + ∑ + (λ j → + ∑ + (λ i → + MF (toℕ (suc j)) · M zero (suc j) · + (MF (toℕ i +ℕ zero) · minor zero (suc j) M i zero · + det (minor i zero (minor zero (suc j) M)))))) + ≡⟨ +Compat + refl + (∑Compat (λ j → + ∑ + (λ i → + MF (toℕ (suc j)) · M zero (suc j) · + (MF (toℕ i +ℕ zero) · minor zero (suc j) M i zero · + det (minor i zero (minor zero (suc j) M))))) + (λ j → + MF (toℕ (suc j)) · M zero (suc j) · + ∑(λ i → + (MF (toℕ i +ℕ zero) · M (suc i) zero · + det (minor i zero (minor zero (suc j) M))))) + (λ j → sym (∑DistR (MF (toℕ (suc j)) · M zero (suc j)) + λ i → MF (toℕ i +ℕ zero) · M (suc i) zero · + det (minor i zero (minor zero (suc j) M))) )) ⟩ + (1r · M zero zero · det (minor zero zero M) + + ∑ + (λ j → + MF (toℕ (suc j)) · M zero (suc j) · + detC {suc n} zero (minor zero (suc j) M))) + ≡⟨ +Compat + refl + (∑Compat + (λ j → + MF (toℕ (suc j)) · M zero (suc j) · + detC {suc n} zero (minor zero (suc j) M)) + (λ j → + MF (toℕ (suc j)) · M zero (suc j) · + det (minor zero (suc j) M)) + (λ j → cong + (λ a → MF (toℕ (suc j)) · M zero (suc j) · a) + (DetRowColumn (minor zero (suc j) M)))) + ⟩ + (1r · M zero zero · det (minor zero zero M) + + ∑ + (λ j → + MF (toℕ (suc j)) · M zero (suc j) · + det (minor zero (suc j) M))) + ≡⟨ refl ⟩ + det M + ∎ + + DetColumnAux1a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ (suc i)) (toℕ j) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (suc i) (suc k) M j zero · + det (minor j zero (minor (suc i) (suc k) M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin j)) (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ (weakenFin j) +ℕ zero) · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M)))))) + DetColumnAux1a k M = + ∑∑Compat + (λ i j → ind> (toℕ (suc i)) (toℕ j) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (suc i) (suc k) M j zero · + det (minor j zero (minor (suc i) (suc k) M))))) + (λ z z₁ → + (1r + - ind> (toℕ (weakenFin z₁)) (toℕ z)) · + (MF (toℕ (suc z) +ℕ toℕ (suc k)) · M (suc z) (suc k) · + (MF (toℕ (weakenFin z₁) +ℕ zero) · M (weakenFin z₁) zero · + det (minor z k (minor (weakenFin z₁) zero M))))) + (λ i j → + (ind> (suc (toℕ i)) (toℕ j) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (suc i) (suc k) M j zero · + det (minor j zero (minor (suc i) (suc k) M))))) + ≡⟨ + cong + (λ a → a · (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (suc i) (suc k) M j zero · + det (minor j zero (minor (suc i) (suc k) M))))) + (ind>Suc (toℕ i) (toℕ j)) + ⟩ + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (suc i) (suc k) M j zero · + det (minor j zero (minor (suc i) (suc k) M)))) + ≡⟨ + ind>anti + (λ j i → (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (suc i) (suc k) M j zero · + det (minor j zero (minor (suc i) (suc k) M))))) + (λ z z₁ → + MF (toℕ (suc z₁) +ℕ toℕ (suc k)) · M (suc z₁) (suc k) · + (MF (toℕ z +ℕ zero) · M (weakenFin z) zero · + det (minor z₁ k (minor (weakenFin z) zero M)))) + (λ j i le → + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (suc i) (suc k) M j zero · + det (minor j zero (minor (suc i) (suc k) M)))) + ≡⟨ cong + (λ a → (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · a · + det (minor j zero (minor (suc i) (suc k) M))))) + (minorIdId (suc i) (suc k) j zero M (s≤s le) (s≤s z≤)) + ⟩ + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · M (weakenFin j) zero · + det (minor j zero (minor (suc i) (suc k) M)))) + ≡⟨ + cong + (λ a → (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · M (weakenFin j) zero · a))) + (detComp + (minor j zero (minor (suc i) (suc k) M)) + (minor i k (minor (weakenFin j) zero M)) + (λ i₁ j₁ → + minorComm0 i j k zero i₁ j₁ M le z≤)) + ⟩ + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M)))) + ∎) + j + i ⟩ + ((1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M))))) + ≡⟨ + cong + (λ a → + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (a · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M))))) + (MF (toℕ j +ℕ zero) + ≡⟨ sumMF (toℕ j) zero ⟩ + (MF (toℕ j) · MF zero) + ≡⟨ cong (λ a → MF a · MF zero) ((toℕ j) ≡⟨ sym (toℕweakenFin j) ⟩ toℕ (weakenFin j) ∎) ⟩ + (MF (toℕ (weakenFin j)) · MF zero) + ≡⟨ sym (sumMF (toℕ (weakenFin j)) zero) ⟩ + MF (toℕ (weakenFin j) +ℕ zero) + ∎) + ⟩ + (1r + - ind> (toℕ j) (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ (weakenFin j) +ℕ zero) · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M)))) + ≡⟨ + cong + (λ a → (1r + - ind> a (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ (weakenFin j) +ℕ zero) · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M))))) + (toℕ j ≡⟨ sym (toℕweakenFin j) ⟩ toℕ (weakenFin j) ∎) + ⟩ + ((1r + - ind> (toℕ (weakenFin j)) (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ (weakenFin j) +ℕ zero) · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M))))) + ∎) + + + DetColumnAux1b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (weakenFin i) (suc k) M j zero · + det (minor j zero (minor (weakenFin i) (suc k) M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ z → + ind> (toℕ (suc z)) (toℕ i) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ (suc z) +ℕ one) · M (suc z) zero · + det (minor i k (minor (suc z) zero M)))))) + DetColumnAux1b k M = + ∑∑Compat + (λ i j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (weakenFin i) (suc k) M j zero · + det (minor j zero (minor (weakenFin i) (suc k) M))))) + (λ z z₁ → + ind> (toℕ (suc z₁)) (toℕ z) · + (MF (toℕ (weakenFin z) +ℕ toℕ (suc k)) · M (weakenFin z) (suc k) · + (MF (toℕ (suc z₁) +ℕ one) · M (suc z₁) zero · + det (minor z k (minor (suc z₁) zero M))))) + (λ i j → + ((1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (weakenFin i) (suc k) M j zero · + det (minor j zero (minor (weakenFin i) (suc k) M))))) + ≡⟨ cong + (λ a → (1r + - ind> a (toℕ j)) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (weakenFin i) (suc k) M j zero · + det (minor j zero (minor (weakenFin i) (suc k) M))))) + (toℕweakenFin i) ⟩ + ((1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (weakenFin i) (suc k) M j zero · + det (minor j zero (minor (weakenFin i) (suc k) M))))) + ≡⟨ ind>anti + (λ i j → MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (weakenFin i) (suc k) M j zero · + det (minor j zero (minor (weakenFin i) (suc k) M)))) + (λ i j → MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · M (suc j) zero · + det (minor i k (minor (suc j) zero M)))) + (λ i j le → + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (weakenFin i) (suc k) M j zero · + det (minor j zero (minor (weakenFin i) (suc k) M)))) + ≡⟨ cong + (λ a → + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · a · + det (minor j zero (minor (weakenFin i) (suc k) M))))) + (minorSucId + (weakenFin i) + (suc k) + j + zero + M + (weakenweakenFinLe i j le) + (s≤s z≤)) + ⟩ + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · M (suc j) zero · + det (minor j zero (minor (weakenFin i) (suc k) M)))) + ≡⟨ + cong + (λ a → + MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · M (suc j) zero · a)) + (detComp + (minor j zero (minor (weakenFin i) (suc k) M)) + (minor i k (minor (suc j) zero M)) + λ i₁ j₁ → + minorComm2 + i + j + k + zero + i₁ + j₁ + M + le + z≤) + ⟩ + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · M (suc j) zero · + det (minor i k (minor (suc j) zero M)))) + ∎) + i + j + ⟩ + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · M (suc j) zero · + det (minor i k (minor (suc j) zero M)))) + ≡⟨ cong + (λ a → a · (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · M (suc j) zero · + det (minor i k (minor (suc j) zero M))))) + (sym (ind>Suc (toℕ j) (toℕ i))) ⟩ + (ind> (toℕ (suc j)) (toℕ i) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · M (suc j) zero · + det (minor i k (minor (suc j) zero M))))) + ≡⟨ + cong + (λ a → (ind> (toℕ (suc j)) (toℕ i) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (a · M (suc j) zero · + det (minor i k (minor (suc j) zero M)))))) + (MF (toℕ j +ℕ zero) + ≡⟨ sumMF (toℕ j) zero ⟩ + (MF (toℕ j) · MF zero) + ≡⟨ solve! P' ⟩ + (MF (toℕ (suc j)) · MF one) + ≡⟨ sym (sumMF (toℕ (suc j)) one) ⟩ + MF (toℕ (suc j) +ℕ one) + ∎) + ⟩ + (ind> (toℕ (suc j)) (toℕ i) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ (suc j) +ℕ one) · M (suc j) zero · + det (minor i k (minor (suc j) zero M))))) + ∎) + + DetColumnAux2a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · M (suc j) (suc k) · + (MF (toℕ i +ℕ zero) · M i zero · + det (minor j k (minor i zero M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + + DetColumnAux2a k M = + ∑∑Compat + (λ i j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · M (suc j) (suc k) · + (MF (toℕ i +ℕ zero) · M i zero · + det (minor j k (minor i zero M))))) + (λ z z₁ → + (1r + - ind> (toℕ z) (toℕ z₁)) · + (MF (toℕ z +ℕ zero) · M z zero · + (MF (toℕ (suc z₁) +ℕ toℕ (suc k)) · minor z zero M z₁ k · + det (minor z₁ k (minor z zero M))))) + (ind>anti + (λ i j → + MF (toℕ (suc j) +ℕ toℕ (suc k)) · M (suc j) (suc k) · + (MF (toℕ i +ℕ zero) · M i zero · det (minor j k (minor i zero M)))) + (λ z z₁ → + MF (toℕ z +ℕ zero) · M z zero · + (MF (toℕ (suc z₁) +ℕ toℕ (suc k)) · minor z zero M z₁ k · + det (minor z₁ k (minor z zero M)))) + (λ i j le → + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · M (suc j) (suc k) · + (MF (toℕ i +ℕ zero) · M i zero · det (minor j k (minor i zero M)))) + ≡⟨ cong + (λ a → + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · a · + (MF (toℕ i +ℕ zero) · M i zero · det (minor j k (minor i zero M))))) + (sym + (minorSucSuc i zero j k M (weakenFinLe i j le) z≤)) + ⟩ + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i +ℕ zero) · M i zero · det (minor j k (minor i zero M)))) + ≡⟨ + cong + (λ a → (a · minor i zero M j k · + (MF (toℕ i +ℕ zero) · M i zero · det (minor j k (minor i zero M))))) + (sumMF (toℕ (suc j)) (toℕ (suc k))) + ⟩ + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i +ℕ zero) · M i zero · det (minor j k (minor i zero M)))) + ≡⟨ + cong + (λ a → (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + (a · M i zero · det (minor j k (minor i zero M))))) + (sumMF (toℕ i) zero) + ⟩ + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i) · MF zero · M i zero · + det (minor j k (minor i zero M)))) + ≡⟨ ·Assoc + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k) + (MF (toℕ i) · MF zero · M i zero) + (det (minor j k (minor i zero M))) ⟩ + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i) · MF zero · M i zero) + · det (minor j k (minor i zero M))) + ≡⟨ + cong + (λ a → a + · det (minor j k (minor i zero M))) + (solve! P') + ⟩ + (MF (toℕ i) · MF zero · M i zero) · + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k) + · det (minor j k (minor i zero M)) + ≡⟨ + sym + (·Assoc + (MF (toℕ i) · MF zero · M i zero) + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k) + (det (minor j k (minor i zero M)))) + ⟩ + MF (toℕ i) · MF zero · M i zero · + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))) + ≡⟨ + cong + (λ a → (a · M i zero · + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))) + (sym (sumMF (toℕ i) zero)) + ⟩ + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))) + ≡⟨ + cong + (λ a → (MF (toℕ i +ℕ zero) · M i zero · + (a · minor i zero M j k · det (minor j k (minor i zero M))))) + (sym (sumMF (toℕ (suc j)) (toℕ (suc k)))) + ⟩ + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · det (minor j k (minor i zero M)))) + + ∎) + ) + + DetColumnAux2b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ (weakenFin j) +ℕ toℕ (suc k)) · M (weakenFin j) (suc k) · + (MF (toℕ i +ℕ one) · M i zero · + det (minor j k (minor i zero M)))))) + ≡ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + DetColumnAux2b k M = + ∑∑Compat + (λ i j → ind> (toℕ i) (toℕ j) · + (MF (toℕ (weakenFin j) +ℕ toℕ (suc k)) · M (weakenFin j) (suc k) · + (MF (toℕ i +ℕ one) · M i zero · + det (minor j k (minor i zero M))))) + (λ z z₁ → + ind> (toℕ z) (toℕ z₁) · + (MF (toℕ z +ℕ zero) · M z zero · + (MF (toℕ (suc z₁) +ℕ toℕ (suc k)) · minor z zero M z₁ k · + det (minor z₁ k (minor z zero M))))) + (λ i j → + ind>prop + (λ i j → (MF (toℕ (weakenFin j) +ℕ toℕ (suc k)) · M (weakenFin j) (suc k) · + (MF (toℕ i +ℕ one) · M i zero · + det (minor j k (minor i zero M))))) + (λ z z₁ → + MF (toℕ z +ℕ zero) · M z zero · + (MF (toℕ (suc z₁) +ℕ toℕ (suc k)) · minor z zero M z₁ k · + det (minor z₁ k (minor z zero M)))) + (λ i j le → + (MF (toℕ (weakenFin j) +ℕ toℕ (suc k)) · M (weakenFin j) (suc k) · + (MF (toℕ i +ℕ one) · M i zero · det (minor j k (minor i zero M)))) + ≡⟨ + cong + (λ a → + (MF (toℕ (weakenFin j) +ℕ toℕ (suc k)) · a · + (MF (toℕ i +ℕ one) · M i zero · det (minor j k (minor i zero M))))) + (sym (minorIdSuc i zero j k M le z≤)) + ⟩ + (MF (toℕ (weakenFin j) +ℕ toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i +ℕ one) · M i zero · det (minor j k (minor i zero M)))) + ≡⟨ + cong + (λ a → a · minor i zero M j k · + (MF (toℕ i +ℕ one) · M i zero · det (minor j k (minor i zero M)))) + (sumMF (toℕ (weakenFin j)) (toℕ (suc k))) + ⟩ + (MF (toℕ (weakenFin j)) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i +ℕ one) · M i zero · det (minor j k (minor i zero M)))) + ≡⟨ + cong + (λ a → MF (toℕ (weakenFin j)) · MF (toℕ (suc k)) · minor i zero M j k · + (a · M i zero · det (minor j k (minor i zero M)))) + (sumMF (toℕ i) one) + ⟩ + (MF (toℕ (weakenFin j)) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i) · MF one · M i zero · det (minor j k (minor i zero M)))) + ≡⟨ cong + (λ a → (MF (a) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i) · MF one · M i zero · det (minor j k (minor i zero M))))) + (toℕweakenFin j) ⟩ + (MF (toℕ j) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i) · MF one · M i zero · det (minor j k (minor i zero M)))) + ≡⟨ ·Assoc + (MF (toℕ j) · MF (toℕ (suc k)) · minor i zero M j k) + (MF (toℕ i) · MF one · M i zero) + (det (minor j k (minor i zero M))) ⟩ + (MF (toℕ j) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i) · MF one · M i zero) + · det (minor j k (minor i zero M))) + ≡⟨ cong + (λ a → a · det (minor j k (minor i zero M))) + (solve! P') ⟩ + (MF one · MF (toℕ j) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i) · M i zero) + · det (minor j k (minor i zero M))) + ≡⟨ + cong + (λ a → a · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i) · M i zero) + · det (minor j k (minor i zero M))) + (sym (sumMF one (toℕ j))) + ⟩ + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + (MF (toℕ i) · M i zero) + · det (minor j k (minor i zero M))) + ≡⟨ + cong + (λ a → a · det (minor j k (minor i zero M))) + (solve! P') + ⟩ + (MF (toℕ i) · M i zero) + · MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)) + ≡⟨ + cong + (λ a → ( a · M i zero) + · MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))) + (solve! P') ⟩ + (MF (toℕ i) · MF zero · M i zero) + · MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)) + ≡⟨ + cong + (λ a → a · det (minor j k (minor i zero M))) + (solve! P') + ⟩ + MF (toℕ i) · MF zero · M i zero · + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k) + · det (minor j k (minor i zero M)) + ≡⟨ sym + (·Assoc + (MF (toℕ i) · MF zero · M i zero) + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k) + (det (minor j k (minor i zero M)))) ⟩ + MF (toℕ i) · MF zero · M i zero · + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))) + ≡⟨ + cong + (λ a → (a · M i zero · + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))) + (sym (sumMF (toℕ i) zero)) + ⟩ + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j)) · MF (toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))) + ≡⟨ + cong + (λ a → (MF (toℕ i +ℕ zero) · M i zero · + (a · minor i zero M j k · det (minor j k (minor i zero M))))) + (sym (sumMF (toℕ (suc j)) (toℕ (suc k)))) + ⟩ + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · det (minor j k (minor i zero M)))) + ∎) + i + j) + + MFsucsuc : {n m : ℕ} → (j : Fin n) → (k : Fin m) → + MF (toℕ (suc j) +ℕ (toℕ (suc k))) ≡ MF (toℕ j +ℕ toℕ k) + MFsucsuc j k = + MF (toℕ (suc j) +ℕ toℕ (suc k)) + ≡⟨ sumMF (toℕ (suc j)) (toℕ (suc k)) ⟩ + (MF (toℕ (suc j)) · MF (toℕ (suc k))) + ≡⟨ refl ⟩ + ((- 1r) · MF (toℕ j) · ((- 1r) · MF (toℕ k)) ) + ≡⟨ solve! P' ⟩ + ( MF (toℕ j) · MF ( toℕ k)) + ≡⟨ sym (sumMF (toℕ j) (toℕ k))⟩ + MF (toℕ j +ℕ toℕ k) + ∎ + + DetColumnZero : ∀ {n} → (k : Fin (suc n)) → (M : FinMatrix R (suc n) (suc n)) → + detC k M ≡ detC zero M + DetColumnZero {zero} zero M = refl + DetColumnZero {suc n} zero M = refl + DetColumnZero {suc n} (suc k) M = + detC (suc k) M + ≡⟨ refl ⟩ + ∑ + (λ i → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · det (minor i (suc k) M)) + ≡⟨ ∑Compat + (λ i → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · det (minor i (suc k) M)) + (λ i → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · detC zero (minor i (suc k) M)) + (λ i → cong + (λ a → MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · a) + (sym (DetRowColumn (minor i (suc k) M)))) + ⟩ + ∑ + (λ i → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · detC zero (minor i (suc k) M)) + ≡⟨ refl ⟩ + ∑ + (λ i → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + ∑ + (λ j → + MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M)))) + ≡⟨ ∑Compat + ((λ i → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + ∑ + (λ j → + MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))) + (λ i → ∑ + (λ j → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))) + (λ i → + ∑DistR ( MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k)) + (λ j → + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))) + ≡⟨ + ∑∑Compat + (λ i j → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M)))) + (λ z z₁ → + ind> (toℕ z) (toℕ z₁) · + (MF (toℕ z +ℕ toℕ (suc k)) · M z (suc k) · + (MF (toℕ z₁ +ℕ zero) · minor z (suc k) M z₁ zero · + det (minor z₁ zero (minor z (suc k) M)))) + + + (1r + - ind> (toℕ z) (toℕ z₁)) · + (MF (toℕ z +ℕ toℕ (suc k)) · M z (suc k) · + (MF (toℕ z₁ +ℕ zero) · minor z (suc k) M z₁ zero · + det (minor z₁ zero (minor z (suc k) M))))) + (λ i j → + DetRowAux2 + (ind> (toℕ i) (toℕ j)) + (MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M)))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M)))))) + ≡⟨ ∑∑Split + (λ i j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))) + (λ i j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))) + ⟩ + (∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))))) + ≡⟨ + +Compat + (∑∑ShiftSuc (λ i j → + MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))) + (∑∑ShiftWeak (λ i j → MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · + (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · + det (minor j zero (minor i (suc k) M))))) + ⟩ + (∑ + (λ i → + ∑ + (λ j → + ind> (toℕ (suc i)) (toℕ j) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (suc i) (suc k) M j zero · + det (minor j zero (minor (suc i) (suc k) M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin i)) (toℕ j)) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ zero) · minor (weakenFin i) (suc k) M j zero · + det (minor j zero (minor (weakenFin i) (suc k) M))))))) + ≡⟨ +Compat (DetColumnAux1a k M) (DetColumnAux1b k M) ⟩ + ( + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ (weakenFin j)) (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ (weakenFin j) +ℕ zero) · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M)))))) + + + ∑ + (λ i → + ∑ + (λ z → + ind> (toℕ (suc z)) (toℕ i) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ (suc z) +ℕ one) · M (suc z) zero · + det (minor i k (minor (suc z) zero M))))))) + ≡⟨ +Compat + (∑Comm (λ i j → + (1r + - ind> (toℕ (weakenFin j)) (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ (weakenFin j) +ℕ zero) · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M)))))) + (∑Comm (λ i j → + ind> (toℕ (suc j)) (toℕ i) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ (suc j) +ℕ one) · M (suc j) zero · + det (minor i k (minor (suc j) zero M)))))) + ⟩ + ∑ + (λ j → + ∑ + (λ i → + (1r + - ind> (toℕ (weakenFin j)) (toℕ i)) · + (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ (weakenFin j) +ℕ zero) · M (weakenFin j) zero · + det (minor i k (minor (weakenFin j) zero M)))))) + + + ∑ + (λ j → + ∑ + (λ i → + ind> (toℕ (suc j)) (toℕ i) · + (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ (suc j) +ℕ one) · M (suc j) zero · + det (minor i k (minor (suc j) zero M)))))) + ≡⟨ +Compat + (sym (∑∑ShiftWeak (λ j i → (MF (toℕ (suc i) +ℕ toℕ (suc k)) · M (suc i) (suc k) · + (MF (toℕ j +ℕ zero) · M j zero · + det (minor i k (minor j zero M))))))) + (sym (∑∑ShiftSuc (λ j i → (MF (toℕ (weakenFin i) +ℕ toℕ (suc k)) · M (weakenFin i) (suc k) · + (MF (toℕ j +ℕ one) · M j zero · + det (minor i k (minor j zero M))))))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · M (suc j) (suc k) · + (MF (toℕ i +ℕ zero) · M i zero · + det (minor j k (minor i zero M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ (weakenFin j) +ℕ toℕ (suc k)) · M (weakenFin j) (suc k) · + (MF (toℕ i +ℕ one) · M i zero · + det (minor j k (minor i zero M)))))) + ≡⟨ +Compat (DetColumnAux2a k M) (DetColumnAux2b k M) ⟩ + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + ≡⟨ +Comm ( ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))))) (∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))))) ⟩ + (∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + + + ∑ + (λ i → + ∑ + (λ j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))))) + ≡⟨ sym (∑∑Split + (λ i j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))) + (λ i j → + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + ⟩ + ∑ + (λ i → + ∑ + (λ j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + ≡⟨ ∑∑Compat + (λ i j → + ind> (toℕ i) (toℕ j) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))) + + + (1r + - ind> (toℕ i) (toℕ j)) · + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))) + (λ i j → + (MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))) + (λ i j → sym + (DetRowAux2 ( ind> (toℕ i) (toℕ j) ) + ((MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))))) ⟩ + ∑ + (λ i → + ∑ + (λ j → + MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))))) + ≡⟨ ∑Compat + ((λ i → + ∑ + (λ j → + MF (toℕ i +ℕ zero) · M i zero · + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + ((λ i → + MF (toℕ i +ℕ zero) · M i zero · + ∑ + (λ j → + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + (λ i → + sym + (∑DistR + (MF (toℕ i +ℕ zero) · M i zero) + (λ j → + (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))))) + ⟩ + ∑ + (λ i → + MF (toℕ i +ℕ zero) · M i zero · + ∑ + (λ j → + MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))) + ≡⟨ ∑Compat + (λ i → + MF (toℕ i +ℕ zero) · M i zero · + ∑ + (λ j → + MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M)))) + (λ i → + MF (toℕ i +ℕ zero) · M i zero · + ∑ + (λ j → + MF (toℕ j +ℕ toℕ k) · minor i zero M j k · + det (minor j k (minor i zero M)))) + (λ i → + cong + (λ a → MF (toℕ i +ℕ zero) · M i zero · a) + (∑Compat + (λ j → + MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · + det (minor j k (minor i zero M))) + (λ j → + MF (toℕ j +ℕ toℕ k) · minor i zero M j k · + det (minor j k (minor i zero M))) + (λ j → + cong + (λ a → a · minor i zero M j k · + det (minor j k (minor i zero M))) + (MFsucsuc j k) ) + ))⟩ + ∑ + (λ i → + MF (toℕ i +ℕ zero) · M i zero · + ∑ + (λ j → + MF (toℕ j +ℕ toℕ k) · minor i zero M j k · + det (minor j k (minor i zero M)))) + ≡⟨ refl ⟩ + ∑ + (λ i → + MF (toℕ i +ℕ zero) · M i zero · + detC k (minor i zero M)) + ≡⟨ ∑Compat + (λ i → MF (toℕ i +ℕ zero) · M i zero · + detC k (minor i zero M)) + (λ i → MF (toℕ i +ℕ zero) · M i zero · + detC zero (minor i zero M)) + (λ i → cong + (λ a → MF (toℕ i +ℕ zero) · M i zero · a) + (DetColumnZero k (minor i zero M))) ⟩ + ∑ + (λ i → MF (toℕ i +ℕ zero) · M i zero · detC zero (minor i zero M)) + ≡⟨ ∑Compat + (λ i → MF (toℕ i +ℕ zero) · M i zero · + detC zero (minor i zero M)) + (λ i → MF (toℕ i +ℕ zero) · M i zero · + det (minor i zero M)) + (λ i → cong + (λ a → MF (toℕ i +ℕ zero) · M i zero · a) + (DetRowColumn (minor i zero M))) ⟩ + ∑ (λ i → MF (toℕ i +ℕ zero) · M i zero · det (minor i zero M)) + ≡⟨ refl ⟩ + detC zero M + ∎ + + DetColumn : ∀ {n} → (k : Fin (suc n)) → (M : FinMatrix R (suc n) (suc n)) → + detC k M ≡ det M + DetColumn k M = + detC k M + ≡⟨ DetColumnZero k M ⟩ + detC zero M + ≡⟨ DetRowColumn M ⟩ + det M + ∎ + + open Coefficient (P') + + δ = KroneckerDelta.δ R' + + ∑Mul1r = Sum.∑Mul1r (CommRing→Ring P') + ∑Mulr1 = Sum.∑Mulr1 (CommRing→Ring P') + + detZero : {n : ℕ} → det {suc n} 𝟘 ≡ 0r + detZero {n} = + ∑Zero + (λ i → MF (toℕ i) · 0r · det {n} (minor zero i 𝟘)) + (λ i → + (MF (toℕ i) · 0r · det {n} (minor zero i 𝟘)) + ≡⟨ + cong + (λ a → a · det {n} (minor zero i 𝟘)) + (solve! P')⟩ + 0r · det (minor zero i 𝟘) + ≡⟨ RingTheory.0LeftAnnihilates (CommRing→Ring P') (det (minor zero i 𝟘)) ⟩ + 0r + ∎ + ) + + detOne : {n : ℕ} → det {n} 𝟙 ≡ 1r + detOne {zero} = refl + detOne {suc n} = + ∑ (λ i → MF (toℕ i) · 𝟙 (zero {n}) i · det {n} (minor zero i 𝟙)) + ≡⟨ refl ⟩ + ∑ (λ i → MF (toℕ i) · δ (zero {n}) i · det {n} (minor zero i 𝟙)) + ≡⟨ ∑Compat + (λ i → MF (toℕ i) · δ (zero {n}) i · det {n} (minor zero i 𝟙)) + (λ i → δ (zero {n}) i · MF (toℕ i) · det {n} (minor zero i 𝟙)) + (λ i → + cong + (λ a → a · det {n} (minor zero i 𝟙)) + (solve! P')) + ⟩ + ∑ (λ i → δ (zero {n}) i · MF (toℕ i) · det (minor zero i 𝟙)) + ≡⟨ ∑Compat + (λ i → δ (zero {n}) i · MF (toℕ i) · det (minor zero i 𝟙)) + (λ i → δ (zero {n}) i · (MF (toℕ i) · det (minor zero i 𝟙))) + (λ i → sym (·Assoc _ _ _)) ⟩ + ∑ (λ i → δ (zero {n}) i · (MF (toℕ i) · det (minor zero i 𝟙))) + ≡⟨ ∑Mul1r + (suc n) + (λ i → (MF (toℕ i) · det {n} (minor zero i 𝟙))) + zero ⟩ + MF zero · det {n} (minor zero zero 𝟙) + ≡⟨ refl ⟩ + (1r · det {n} 𝟙) + ≡⟨ ·IdL (det {n} 𝟙) ⟩ + det {n} 𝟙 + ≡⟨ detOne{n} ⟩ + 1r + ∎ + + MFplusZero : {n : ℕ} → (i : Fin n) → MF (toℕ i +ℕ zero) ≡ MF (toℕ i) + MFplusZero i = + MF (toℕ i +ℕ zero) + ≡⟨ sumMF (toℕ i) zero ⟩ + (MF (toℕ i) · MF zero) + ≡⟨ ·IdR (MF (toℕ i)) ⟩ + MF (toℕ i) + ∎ + + detTransp : {n : ℕ} → (M : FinMatrix R n n) → det M ≡ det (M ᵗ) + detTransp {zero} M = refl + detTransp {suc n} M = + det M + ≡⟨ refl ⟩ + ∑ (λ i → MF (toℕ i) · (M ᵗ) i zero · det ((minor i zero (M ᵗ))ᵗ)) + ≡⟨ + ∑Compat + (λ i → MF (toℕ i) · (M ᵗ) i zero · det ((minor i zero (M ᵗ))ᵗ)) + (λ i → MF (toℕ i) · (M ᵗ) i zero · det (minor i zero (M ᵗ))) + (λ i → + cong + (λ a → MF (toℕ i) · (M ᵗ) i zero · a) + (sym (detTransp (minor i zero (M ᵗ))))) + ⟩ + ∑ (λ i → MF (toℕ i) · (M ᵗ) i zero · det (minor i zero (M ᵗ))) + ≡⟨ ∑Compat + (λ i → MF (toℕ i) · (M ᵗ) i zero · det (minor i zero (M ᵗ))) + (λ i → MF (toℕ i +ℕ zero) · (M ᵗ) i zero · det (minor i zero (M ᵗ))) + (λ i → + cong + (λ a → + a · (M ᵗ) i zero · det (minor i zero (M ᵗ))) + (sym (MFplusZero i))) ⟩ + ∑ (λ i → MF (toℕ i +ℕ zero) · (M ᵗ) i zero · det (minor i zero (M ᵗ))) + ≡⟨ (DetRowColumn ((M ᵗ))) ⟩ + det (M ᵗ) + ∎ diff --git a/Cubical/Algebra/Determinat/minor.agda b/Cubical/Algebra/Determinat/minor.agda new file mode 100644 index 0000000000..6ba1082d14 --- /dev/null +++ b/Cubical/Algebra/Determinat/minor.agda @@ -0,0 +1,186 @@ +{-# OPTIONS --cubical #-} + +module minor where + +open import Cubical.Foundations.Prelude +open import Cubical.Foundations.Equiv +open import Cubical.Algebra.Matrix +open import Cubical.Data.Nat renaming ( _+_ to _+ℕ_ ; _·_ to _·ℕ_ + ; +-comm to +ℕ-comm + ; +-assoc to +ℕ-assoc + ; ·-assoc to ·ℕ-assoc) +open import Cubical.Data.Vec.Base using (_∷_; []) +open import Cubical.Foundations.Structure using (⟨_⟩) +open import Cubical.Data.FinData +open import Cubical.Data.FinData.Order using (_<'Fin_; _≤'Fin_) +open import Cubical.Algebra.Ring +open import Cubical.Algebra.Ring.Base +open import Cubical.Algebra.Ring.BigOps +open import Cubical.Algebra.Monoid.BigOp +open import Cubical.Algebra.CommRing +open import Cubical.Algebra.CommRing.Base +open import Cubical.Data.Nat.Order +open import Cubical.Tactics.CommRingSolver + +module Minor (ℓ : Level) where + + -- definition and properties to remove one Index, i.e. (removeIndex i) is the monoton ebbeding from {0,...,n-1} to {0,...,n} ommiting i. + + removeIndex : {n : ℕ} → Fin (suc n) → Fin n → Fin (suc n) + removeIndex zero k = suc k + removeIndex (suc i) zero = zero + removeIndex (suc i) (suc k) = suc (removeIndex i k) + + -- On {0,...,i-1} the map (removeIndex i) is the identity. + removeIndexId : {n : ℕ} → (i : Fin (suc n)) → (k : Fin n) → (suc k) ≤'Fin i → (removeIndex i k) ≡ weakenFin k + removeIndexId (suc i) zero le = refl + removeIndexId (suc i) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexId i k le) + + -- On {i,...,n-1} the map (removeIndex i) is the successor function. + removeIndexSuc : {n : ℕ} → (i : Fin (suc n)) → (k : Fin n) → i ≤'Fin weakenFin k → (removeIndex i k) ≡ suc k + removeIndexSuc zero k le = refl + removeIndexSuc (suc i) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexSuc i k le) + + -- A formula for commuting removeIndex maps + removeIndexComm : {n : ℕ} → (i j : Fin (suc n)) → (k : Fin n) → i ≤'Fin j → + removeIndex (suc j) (removeIndex i k) ≡ removeIndex (weakenFin i) (removeIndex j k) + removeIndexComm zero j k le = refl + removeIndexComm (suc i) (suc j) zero le = refl + removeIndexComm (suc i) (suc j) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexComm i j k le) + + -- remove the j-th column of a matrix + + remove-column : {A : Type ℓ} {n m : ℕ} (j : Fin (suc m)) (M : FinMatrix A n (suc m)) → FinMatrix A n m + remove-column j M k l = M k (removeIndex j l) + + remove-column-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc m)) (j : Fin (suc m)) (M : FinMatrix A n (suc (suc m))) (k : Fin n) (l : Fin m) → + j ≤'Fin i → + remove-column j (remove-column (suc i) M) k l ≡ remove-column i (remove-column (weakenFin j) M) k l + remove-column-comm i j M k l le = + remove-column j (remove-column (suc i) M) k l + ≡⟨ refl ⟩ + M k (removeIndex (suc i) (removeIndex j l)) + ≡⟨ cong (λ a → M k a) ( removeIndexComm j i l le) ⟩ + M k (removeIndex (weakenFin j) (removeIndex i l)) + ≡⟨ refl ⟩ + remove-column i (remove-column (weakenFin j) M) k l + ∎ + + -- remove the i-th row of a matrix + remove-row : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (M : FinMatrix A (suc n) m) → FinMatrix A n m + remove-row i M k l = M (removeIndex i k) l + + remove-row-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc n)) (M : FinMatrix A (suc (suc n)) m) (k : Fin n) (l : Fin m) → + j ≤'Fin i → + remove-row j (remove-row (suc i) M) k l ≡ remove-row i (remove-row (weakenFin j) M) k l + remove-row-comm i j M k l le = + remove-row j (remove-row (suc i) M) k l + ≡⟨ refl ⟩ + M (removeIndex (suc i) (removeIndex j k)) l + ≡⟨ cong (λ a → M a l) ( removeIndexComm j i k le) ⟩ + M (removeIndex (weakenFin j) (removeIndex i k)) l + ≡⟨ refl ⟩ + remove-row i (remove-row (weakenFin j) M) k l + ∎ + + remove-column-row-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M : FinMatrix A (suc n) (suc m)) (k : Fin n) (l : Fin m) → (remove-row i (remove-column j M)) k l ≡ (remove-column j (remove-row i M)) k l + remove-column-row-comm i j M k l = refl + + -- Calculating of the minor. + minor : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M : FinMatrix A (suc n) (suc m)) → FinMatrix A n m + minor i j M = remove-column j (remove-row i M) + + -- Compatability of the minor with the equality. + minorComp : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M N : FinMatrix A (suc n) (suc m)) → ((i : Fin (suc n)) → (j : Fin (suc m)) → M i j ≡ N i j ) → (k : Fin n) → (l : Fin m) → minor i j M k l ≡ minor i j N k l + minorComp {n = suc n} {suc m} i j M N f k l = f (removeIndex i k) (removeIndex j l) + + -- Formulas to commute minors + minorComm0 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → + i₂ ≤'Fin i₁ → j₂ ≤'Fin j₁ → + minor i₂ j₂ (minor (suc i₁) (suc j₁) M) k l ≡ minor i₁ j₁ (minor (weakenFin i₂) (weakenFin j₂) M) k l + minorComm0 i₁ i₂ j₁ j₂ k l M lei lej = + M (removeIndex (suc i₁) (removeIndex i₂ k)) + (removeIndex (suc j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M a (removeIndex (suc j₁) (removeIndex j₂ l))) (removeIndexComm i₂ i₁ k lei) ⟩ + M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) + (removeIndex (suc j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) a ) ((removeIndexComm j₂ j₁ l lej)) ⟩ + M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) + (removeIndex (weakenFin j₂) (removeIndex j₁ l)) + ∎ + + minorComm1 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → + i₂ ≤'Fin i₁ → j₁ ≤'Fin j₂ → + minor i₂ j₂ (minor (suc i₁) (weakenFin j₁) M) k l ≡ minor i₁ j₁ (minor (weakenFin i₂) (suc j₂) M) k l + + minorComm1 i₁ i₂ j₁ j₂ k l M lei lej = + M (removeIndex (suc i₁) (removeIndex i₂ k)) + (removeIndex (weakenFin j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M a (removeIndex (weakenFin j₁) (removeIndex j₂ l))) ((removeIndexComm i₂ i₁ k lei)) ⟩ + M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) + (removeIndex (weakenFin j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) a) (sym ((removeIndexComm j₁ j₂ l lej))) ⟩ + M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) + (removeIndex (suc j₂) (removeIndex j₁ l)) + ∎ + + minorComm2 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → + i₁ ≤'Fin i₂ → j₂ ≤'Fin j₁ → + minor i₂ j₂ (minor (weakenFin i₁) (suc j₁) M) k l ≡ minor i₁ j₁ (minor (suc i₂) (weakenFin j₂) M) k l + + minorComm2 i₁ i₂ j₁ j₂ k l M lei lej = + M (removeIndex (weakenFin i₁) (removeIndex i₂ k)) + (removeIndex (suc j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M a (removeIndex (suc j₁) (removeIndex j₂ l))) (sym ((removeIndexComm i₁ i₂ k lei))) ⟩ + M (removeIndex (suc i₂) (removeIndex i₁ k)) + (removeIndex (suc j₁) (removeIndex j₂ l)) + ≡⟨ cong (λ a → M (removeIndex (suc i₂) (removeIndex i₁ k)) a) ((removeIndexComm j₂ j₁ l lej)) ⟩ + M (removeIndex (suc i₂) (removeIndex i₁ k)) + (removeIndex (weakenFin j₂) (removeIndex j₁ l)) + ∎ + + --Formulas to compute compute the entries of the minor. + minorIdId : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → + suc k ≤'Fin i → suc l ≤'Fin j → + minor i j M k l ≡ M (weakenFin k) (weakenFin l) + minorIdId i j k l M lei lej = + M (removeIndex i k) (removeIndex j l) + ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexId i k lei) ⟩ + M (weakenFin k) (removeIndex j l) + ≡⟨ cong (λ a → M (weakenFin k) a) (removeIndexId j l lej) ⟩ + M (weakenFin k) (weakenFin l) + ∎ + + minorSucSuc : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → + i ≤'Fin weakenFin k → j ≤'Fin weakenFin l → + minor i j M k l ≡ M (suc k) (suc l) + minorSucSuc i j k l M lei lej = + M (removeIndex i k) (removeIndex j l) + ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexSuc i k lei) ⟩ + M (suc k) (removeIndex j l) + ≡⟨ cong (λ a → M (suc k) a) (removeIndexSuc j l lej) ⟩ + M (suc k) (suc l) + ∎ + + minorIdSuc : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → + suc k ≤'Fin i → j ≤'Fin weakenFin l → + minor i j M k l ≡ M (weakenFin k) (suc l) + minorIdSuc i j k l M lei lej = + M (removeIndex i k) (removeIndex j l) + ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexId i k lei) ⟩ + M (weakenFin k) (removeIndex j l) + ≡⟨ cong (λ a → M (weakenFin k) a) (removeIndexSuc j l lej) ⟩ + M (weakenFin k) (suc l) + ∎ + + minorSucId : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → + i ≤'Fin weakenFin k → suc l ≤'Fin j → + minor i j M k l ≡ M (suc k) (weakenFin l) + minorSucId i j k l M lei lej = + M (removeIndex i k) (removeIndex j l) + ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexSuc i k lei) ⟩ + M (suc k) (removeIndex j l) + ≡⟨ cong (λ a → M (suc k) a) (removeIndexId j l lej) ⟩ + M (suc k) (weakenFin l) + ∎ + From 67c51a8af2152fa7b994517f8b2dabc981de324f Mon Sep 17 00:00:00 2001 From: Franziskus Wiesnet Date: Wed, 30 Oct 2024 15:38:50 +0100 Subject: [PATCH 2/7] Comments added --- Cubical/Algebra/Determinat/adjugate.agda | 41 ++--- Cubical/Algebra/Determinat/det.agda | 70 +++++---- Cubical/Algebra/Determinat/minor.agda | 186 ----------------------- 3 files changed, 62 insertions(+), 235 deletions(-) delete mode 100644 Cubical/Algebra/Determinat/minor.agda diff --git a/Cubical/Algebra/Determinat/adjugate.agda b/Cubical/Algebra/Determinat/adjugate.agda index a2f31ab3d5..6883592799 100644 --- a/Cubical/Algebra/Determinat/adjugate.agda +++ b/Cubical/Algebra/Determinat/adjugate.agda @@ -39,17 +39,11 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where open Determinat ℓ P' open Coefficient (P') + -- Scalar multiplication _∘_ : {n m : ℕ} → R → FinMatrix R n m → FinMatrix R n m (a ∘ M) i j = a · (M i j) - deltaProp : {n : ℕ} → (k l : Fin n) → toℕ k <' toℕ l → δ k l ≡ 0r - deltaProp {suc n} zero (suc l) (s≤s le) = refl - deltaProp {suc n} (suc k) (suc l) (s≤s le) = deltaProp {n} k l le - - deltaPropSym : {n : ℕ} → (k l : Fin n) → toℕ l <' toℕ k → δ k l ≡ 0r - deltaPropSym {suc n} (suc k) (zero) (s≤s le) = refl - deltaPropSym {suc n} (suc k) (suc l) (s≤s le) = deltaPropSym {n} k l le - + -- Properties of == ==Refl : {n : ℕ} → (k : Fin n) → k == k ≡ true ==Refl {n} zero = refl ==Refl {suc n} (suc k) = ==Refl {n} k @@ -60,6 +54,15 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ==Sym {suc n} (suc k) zero = refl ==Sym {suc n} (suc k) (suc l) = ==Sym {n} k l + -- Properties of the Kronecker Delta + deltaProp : {n : ℕ} → (k l : Fin n) → toℕ k <' toℕ l → δ k l ≡ 0r + deltaProp {suc n} zero (suc l) (s≤s le) = refl + deltaProp {suc n} (suc k) (suc l) (s≤s le) = deltaProp {n} k l le + + deltaPropSym : {n : ℕ} → (k l : Fin n) → toℕ l <' toℕ k → δ k l ≡ 0r + deltaPropSym {suc n} (suc k) (zero) (s≤s le) = refl + deltaPropSym {suc n} (suc k) (suc l) (s≤s le) = deltaPropSym {n} k l le + deltaPropEq : {n : ℕ} → (k l : Fin n) → k ≡ l → δ k l ≡ 1r deltaPropEq k l e = δ k l @@ -71,12 +74,12 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where deltaComm : {n : ℕ} → (k l : Fin n) → δ k l ≡ δ l k deltaComm k l = cong (λ a → if a then 1r else 0r) (==Sym k l) - -- Definition of the cofactor matrix cof : {n : ℕ} → FinMatrix R n n → FinMatrix R n n cof {suc n} M i j = (MF (toℕ i +ℕ toℕ j)) · det {n} (minor i j M) + -- Behavior of the cofactor matrix under transposition cofTransp : {n : ℕ} → (M : FinMatrix R n n) → (i j : Fin n) → cof (M ᵗ) i j ≡ cof M j i cofTransp {suc n} M i j = MF (toℕ i +ℕ toℕ j) · det (minor i j (M ᵗ)) @@ -92,10 +95,11 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where adjugate : {n : ℕ} → FinMatrix R n n → FinMatrix R n n adjugate M i j = cof M j i + -- Behavior of the adjugate matrix under transposition adjugateTransp : {n : ℕ} → (M : FinMatrix R n n) → (i j : Fin n) → adjugate (M ᵗ) i j ≡ adjugate M j i adjugateTransp M i j = cofTransp M j i - + -- Properties of WeakenFin weakenPredFinLt : {n : ℕ} → (k l : Fin (suc (suc n))) → toℕ k <' toℕ l → k ≤'Fin weakenFin (predFin l) weakenPredFinLt {zero} zero one (s≤s z≤) = z≤ weakenPredFinLt {zero} one one (s≤s ()) @@ -109,6 +113,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where sucPredFin {zero} (suc k) (suc l) le = refl sucPredFin {suc n} zero (suc l) le = refl sucPredFin {suc n} (suc k) (suc l) (s≤s le) = refl + adjugatePropAux1a : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → toℕ k <' toℕ l → ∑ @@ -612,7 +617,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ (predFin l) +ℕ toℕ z₁) · minor k z M (predFin l) z₁ · det (minor (predFin l) z₁ (minor k z M))))) (λ i j → - DetRowAux2 + distributeOne (ind> (toℕ i) (toℕ j)) (M l i · MF (toℕ k +ℕ toℕ i) · (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · @@ -1506,7 +1511,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where minor k i M (strongenFin l le) j · det (minor (strongenFin l le) j (minor k i M))))) (λ i j → - DetRowAux2 + distributeOne (ind> (toℕ i) (toℕ j)) ( M l i · MF (toℕ k +ℕ toℕ i) · (MF (toℕ (strongenFin l le) +ℕ toℕ j) · @@ -1828,8 +1833,6 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where 0r ∎ - - adjugateInvRLcomponent : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → toℕ k <' toℕ l → (M ⋆ adjugate M) k l ≡ (det M ∘ 𝟙) k l adjugateInvRLcomponent {suc n} M k l le = ∑ (λ i → M k i · (MF(toℕ l +ℕ toℕ i) · det(minor l i M)) ) @@ -1840,7 +1843,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ≡⟨ cong (λ a → det M · a) (sym (deltaProp k l le)) ⟩ (det M ∘ 𝟙) k l ∎ - + FinCompare : {n : ℕ} → (k l : Fin n) → (k ≡ l) ⊎ ((toℕ k <' toℕ l) ⊎ (toℕ l <' toℕ k)) FinCompare {zero} () () FinCompare {suc n} zero zero = inl refl @@ -1851,7 +1854,8 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ... | inr (inl x) = inr (inl (s≤s x)) ... | inr (inr x) = inr (inr (s≤s x)) - + -- The adjugate matrix divided by the determinant is the right inverse. + -- Component-wise version adjugateInvRComp : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → (M ⋆ adjugate M) k l ≡ (det M ∘ 𝟙) k l adjugateInvRComp {zero} M () () adjugateInvRComp {suc n} M k l with FinCompare k l @@ -1890,6 +1894,8 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ... | inr (inl x) = adjugateInvRLcomponent M k l x ... | inr (inr x) = adjugateInvRGcomponent M k l x + -- The adjugate matrix divided by the determinant is the left inverse. + -- Component-wise version adjugateInvLComp : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → (adjugate M ⋆ M) k l ≡ (det M ∘ 𝟙) k l adjugateInvLComp M k l = (adjugate M ⋆ M) k l @@ -1917,9 +1923,10 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where (det M · 𝟙 k l) ∎ - + -- The adjugate matrix divided by the determinant is the right inverse. adjugateInvR : {n : ℕ} → (M : FinMatrix R n n) → M ⋆ adjugate M ≡ det M ∘ 𝟙 adjugateInvR M = funExt₂ (λ k l → adjugateInvRComp M k l) + -- The adjugate matrix divided by the determinant is the left inverse. adjugateInvL : {n : ℕ} → (M : FinMatrix R n n) → adjugate M ⋆ M ≡ det M ∘ 𝟙 adjugateInvL M = funExt₂ (λ k l → adjugateInvLComp M k l) diff --git a/Cubical/Algebra/Determinat/det.agda b/Cubical/Algebra/Determinat/det.agda index 0ead56c92e..3f61eec805 100644 --- a/Cubical/Algebra/Determinat/det.agda +++ b/Cubical/Algebra/Determinat/det.agda @@ -42,7 +42,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where MF zero = 1r MF (suc i) = (- 1r) · (MF i) - --Multiplicity of the minor factor + --Properties of the minor factor sumMF : (i j : ℕ) → MF (i +ℕ j) ≡ (MF i) · (MF j) sumMF zero j = MF j @@ -63,6 +63,30 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where sucMFRev : (i : ℕ) → MF i ≡ (- 1r) · MF (suc i) sucMFRev i = solve! P' + MFplusZero : {n : ℕ} → (i : Fin n) → MF (toℕ i +ℕ zero) ≡ MF (toℕ i) + MFplusZero i = + MF (toℕ i +ℕ zero) + ≡⟨ sumMF (toℕ i) zero ⟩ + (MF (toℕ i) · MF zero) + ≡⟨ ·IdR (MF (toℕ i)) ⟩ + MF (toℕ i) + ∎ + + MFsucsuc : {n m : ℕ} → (j : Fin n) → (k : Fin m) → + MF (toℕ (suc j) +ℕ (toℕ (suc k))) ≡ MF (toℕ j +ℕ toℕ k) + MFsucsuc j k = + MF (toℕ (suc j) +ℕ toℕ (suc k)) + ≡⟨ sumMF (toℕ (suc j)) (toℕ (suc k)) ⟩ + (MF (toℕ (suc j)) · MF (toℕ (suc k))) + ≡⟨ refl ⟩ + ((- 1r) · MF (toℕ j) · ((- 1r) · MF (toℕ k)) ) + ≡⟨ solve! P' ⟩ + ( MF (toℕ j) · MF ( toℕ k)) + ≡⟨ sym (sumMF (toℕ j) (toℕ k))⟩ + MF (toℕ j +ℕ toℕ k) + ∎ + + -- Other small lemmata +Compat : {a b c d : R} → a ≡ b → c ≡ d → a + c ≡ b + d +Compat {a} {b} {c} {d} eq1 eq2 = a + c @@ -71,6 +95,9 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where ≡⟨ cong (λ x → b + x) eq2 ⟩ b + d ∎ + + distributeOne : (a b : R) → b ≡ a · b + (1r + (- a)) · b + distributeOne a b = solve! P' -- Definition of the determinat by using Laplace expansion det : ∀ {n} → FinMatrix R n n → R @@ -164,9 +191,6 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where det (minor zero j (minor k i M))) ∎ - DetRowAux2 : (a b : R) → b ≡ a · b + (1r + (- a)) · b - DetRowAux2 a b = solve! P' - DetRowAux3a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → @@ -952,7 +976,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where minor (suc k) i M zero j · det (minor zero j (minor (suc k) i M)))) (λ i j → - DetRowAux2 (ind> (toℕ i) (toℕ j)) + distributeOne (ind> (toℕ i) (toℕ j)) (MF (toℕ (suc k) +ℕ toℕ i +ℕ toℕ j) · M (suc k) i · minor (suc k) i M zero j · det (minor zero j (minor (suc k) i M)))) ⟩ @@ -1152,7 +1176,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where · det (minor k z₁ (minor zero z M))) (λ i j → sym - (DetRowAux2 + (distributeOne (ind> (toℕ i) (toℕ j)) (MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · M zero i · det (minor k j (minor zero i M))))) @@ -1338,7 +1362,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where det (minor i zero (minor zero (suc j) M)))) ∎) - + -- The determinant can also be expanded along the first column. DetRowColumn : ∀ {n} → (M : FinMatrix R (suc n) (suc n)) → detC zero M ≡ det M DetRowColumn {zero} M = refl @@ -1960,20 +1984,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where i j) - MFsucsuc : {n m : ℕ} → (j : Fin n) → (k : Fin m) → - MF (toℕ (suc j) +ℕ (toℕ (suc k))) ≡ MF (toℕ j +ℕ toℕ k) - MFsucsuc j k = - MF (toℕ (suc j) +ℕ toℕ (suc k)) - ≡⟨ sumMF (toℕ (suc j)) (toℕ (suc k)) ⟩ - (MF (toℕ (suc j)) · MF (toℕ (suc k))) - ≡⟨ refl ⟩ - ((- 1r) · MF (toℕ j) · ((- 1r) · MF (toℕ k)) ) - ≡⟨ solve! P' ⟩ - ( MF (toℕ j) · MF ( toℕ k)) - ≡⟨ sym (sumMF (toℕ j) (toℕ k))⟩ - MF (toℕ j +ℕ toℕ k) - ∎ - + -- The determinant expanded along a column is independent of the chosen column. DetColumnZero : ∀ {n} → (k : Fin (suc n)) → (M : FinMatrix R (suc n) (suc n)) → detC k M ≡ detC zero M DetColumnZero {zero} zero M = refl @@ -2046,7 +2057,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ z₁ +ℕ zero) · minor z (suc k) M z₁ zero · det (minor z₁ zero (minor z (suc k) M))))) (λ i j → - DetRowAux2 + distributeOne (ind> (toℕ i) (toℕ j)) (MF (toℕ i +ℕ toℕ (suc k)) · M i (suc k) · (MF (toℕ j +ℕ zero) · minor i (suc k) M j zero · @@ -2285,7 +2296,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · det (minor j k (minor i zero M))))) (λ i j → sym - (DetRowAux2 ( ind> (toℕ i) (toℕ j) ) + (distributeOne ( ind> (toℕ i) (toℕ j) ) ((MF (toℕ i +ℕ zero) · M i zero · (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · det (minor j k (minor i zero M))))))) ⟩ @@ -2388,6 +2399,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where detC zero M ∎ + -- The determinant expanded along a column is the regular determinant. DetColumn : ∀ {n} → (k : Fin (suc n)) → (M : FinMatrix R (suc n) (suc n)) → detC k M ≡ det M DetColumn k M = @@ -2405,6 +2417,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where ∑Mul1r = Sum.∑Mul1r (CommRing→Ring P') ∑Mulr1 = Sum.∑Mulr1 (CommRing→Ring P') + -- The determinant of the zero matrix is 0. detZero : {n : ℕ} → det {suc n} 𝟘 ≡ 0r detZero {n} = ∑Zero @@ -2421,6 +2434,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where ∎ ) + --The determinant of the identity matrix is 1. detOne : {n : ℕ} → det {n} 𝟙 ≡ 1r detOne {zero} = refl detOne {suc n} = @@ -2454,15 +2468,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where 1r ∎ - MFplusZero : {n : ℕ} → (i : Fin n) → MF (toℕ i +ℕ zero) ≡ MF (toℕ i) - MFplusZero i = - MF (toℕ i +ℕ zero) - ≡⟨ sumMF (toℕ i) zero ⟩ - (MF (toℕ i) · MF zero) - ≡⟨ ·IdR (MF (toℕ i)) ⟩ - MF (toℕ i) - ∎ - + --The determinant remains unchanged under transposition. detTransp : {n : ℕ} → (M : FinMatrix R n n) → det M ≡ det (M ᵗ) detTransp {zero} M = refl detTransp {suc n} M = diff --git a/Cubical/Algebra/Determinat/minor.agda b/Cubical/Algebra/Determinat/minor.agda deleted file mode 100644 index 6ba1082d14..0000000000 --- a/Cubical/Algebra/Determinat/minor.agda +++ /dev/null @@ -1,186 +0,0 @@ -{-# OPTIONS --cubical #-} - -module minor where - -open import Cubical.Foundations.Prelude -open import Cubical.Foundations.Equiv -open import Cubical.Algebra.Matrix -open import Cubical.Data.Nat renaming ( _+_ to _+ℕ_ ; _·_ to _·ℕ_ - ; +-comm to +ℕ-comm - ; +-assoc to +ℕ-assoc - ; ·-assoc to ·ℕ-assoc) -open import Cubical.Data.Vec.Base using (_∷_; []) -open import Cubical.Foundations.Structure using (⟨_⟩) -open import Cubical.Data.FinData -open import Cubical.Data.FinData.Order using (_<'Fin_; _≤'Fin_) -open import Cubical.Algebra.Ring -open import Cubical.Algebra.Ring.Base -open import Cubical.Algebra.Ring.BigOps -open import Cubical.Algebra.Monoid.BigOp -open import Cubical.Algebra.CommRing -open import Cubical.Algebra.CommRing.Base -open import Cubical.Data.Nat.Order -open import Cubical.Tactics.CommRingSolver - -module Minor (ℓ : Level) where - - -- definition and properties to remove one Index, i.e. (removeIndex i) is the monoton ebbeding from {0,...,n-1} to {0,...,n} ommiting i. - - removeIndex : {n : ℕ} → Fin (suc n) → Fin n → Fin (suc n) - removeIndex zero k = suc k - removeIndex (suc i) zero = zero - removeIndex (suc i) (suc k) = suc (removeIndex i k) - - -- On {0,...,i-1} the map (removeIndex i) is the identity. - removeIndexId : {n : ℕ} → (i : Fin (suc n)) → (k : Fin n) → (suc k) ≤'Fin i → (removeIndex i k) ≡ weakenFin k - removeIndexId (suc i) zero le = refl - removeIndexId (suc i) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexId i k le) - - -- On {i,...,n-1} the map (removeIndex i) is the successor function. - removeIndexSuc : {n : ℕ} → (i : Fin (suc n)) → (k : Fin n) → i ≤'Fin weakenFin k → (removeIndex i k) ≡ suc k - removeIndexSuc zero k le = refl - removeIndexSuc (suc i) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexSuc i k le) - - -- A formula for commuting removeIndex maps - removeIndexComm : {n : ℕ} → (i j : Fin (suc n)) → (k : Fin n) → i ≤'Fin j → - removeIndex (suc j) (removeIndex i k) ≡ removeIndex (weakenFin i) (removeIndex j k) - removeIndexComm zero j k le = refl - removeIndexComm (suc i) (suc j) zero le = refl - removeIndexComm (suc i) (suc j) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexComm i j k le) - - -- remove the j-th column of a matrix - - remove-column : {A : Type ℓ} {n m : ℕ} (j : Fin (suc m)) (M : FinMatrix A n (suc m)) → FinMatrix A n m - remove-column j M k l = M k (removeIndex j l) - - remove-column-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc m)) (j : Fin (suc m)) (M : FinMatrix A n (suc (suc m))) (k : Fin n) (l : Fin m) → - j ≤'Fin i → - remove-column j (remove-column (suc i) M) k l ≡ remove-column i (remove-column (weakenFin j) M) k l - remove-column-comm i j M k l le = - remove-column j (remove-column (suc i) M) k l - ≡⟨ refl ⟩ - M k (removeIndex (suc i) (removeIndex j l)) - ≡⟨ cong (λ a → M k a) ( removeIndexComm j i l le) ⟩ - M k (removeIndex (weakenFin j) (removeIndex i l)) - ≡⟨ refl ⟩ - remove-column i (remove-column (weakenFin j) M) k l - ∎ - - -- remove the i-th row of a matrix - remove-row : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (M : FinMatrix A (suc n) m) → FinMatrix A n m - remove-row i M k l = M (removeIndex i k) l - - remove-row-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc n)) (M : FinMatrix A (suc (suc n)) m) (k : Fin n) (l : Fin m) → - j ≤'Fin i → - remove-row j (remove-row (suc i) M) k l ≡ remove-row i (remove-row (weakenFin j) M) k l - remove-row-comm i j M k l le = - remove-row j (remove-row (suc i) M) k l - ≡⟨ refl ⟩ - M (removeIndex (suc i) (removeIndex j k)) l - ≡⟨ cong (λ a → M a l) ( removeIndexComm j i k le) ⟩ - M (removeIndex (weakenFin j) (removeIndex i k)) l - ≡⟨ refl ⟩ - remove-row i (remove-row (weakenFin j) M) k l - ∎ - - remove-column-row-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M : FinMatrix A (suc n) (suc m)) (k : Fin n) (l : Fin m) → (remove-row i (remove-column j M)) k l ≡ (remove-column j (remove-row i M)) k l - remove-column-row-comm i j M k l = refl - - -- Calculating of the minor. - minor : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M : FinMatrix A (suc n) (suc m)) → FinMatrix A n m - minor i j M = remove-column j (remove-row i M) - - -- Compatability of the minor with the equality. - minorComp : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M N : FinMatrix A (suc n) (suc m)) → ((i : Fin (suc n)) → (j : Fin (suc m)) → M i j ≡ N i j ) → (k : Fin n) → (l : Fin m) → minor i j M k l ≡ minor i j N k l - minorComp {n = suc n} {suc m} i j M N f k l = f (removeIndex i k) (removeIndex j l) - - -- Formulas to commute minors - minorComm0 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → - i₂ ≤'Fin i₁ → j₂ ≤'Fin j₁ → - minor i₂ j₂ (minor (suc i₁) (suc j₁) M) k l ≡ minor i₁ j₁ (minor (weakenFin i₂) (weakenFin j₂) M) k l - minorComm0 i₁ i₂ j₁ j₂ k l M lei lej = - M (removeIndex (suc i₁) (removeIndex i₂ k)) - (removeIndex (suc j₁) (removeIndex j₂ l)) - ≡⟨ cong (λ a → M a (removeIndex (suc j₁) (removeIndex j₂ l))) (removeIndexComm i₂ i₁ k lei) ⟩ - M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) - (removeIndex (suc j₁) (removeIndex j₂ l)) - ≡⟨ cong (λ a → M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) a ) ((removeIndexComm j₂ j₁ l lej)) ⟩ - M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) - (removeIndex (weakenFin j₂) (removeIndex j₁ l)) - ∎ - - minorComm1 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → - i₂ ≤'Fin i₁ → j₁ ≤'Fin j₂ → - minor i₂ j₂ (minor (suc i₁) (weakenFin j₁) M) k l ≡ minor i₁ j₁ (minor (weakenFin i₂) (suc j₂) M) k l - - minorComm1 i₁ i₂ j₁ j₂ k l M lei lej = - M (removeIndex (suc i₁) (removeIndex i₂ k)) - (removeIndex (weakenFin j₁) (removeIndex j₂ l)) - ≡⟨ cong (λ a → M a (removeIndex (weakenFin j₁) (removeIndex j₂ l))) ((removeIndexComm i₂ i₁ k lei)) ⟩ - M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) - (removeIndex (weakenFin j₁) (removeIndex j₂ l)) - ≡⟨ cong (λ a → M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) a) (sym ((removeIndexComm j₁ j₂ l lej))) ⟩ - M (removeIndex (weakenFin i₂) (removeIndex i₁ k)) - (removeIndex (suc j₂) (removeIndex j₁ l)) - ∎ - - minorComm2 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → - i₁ ≤'Fin i₂ → j₂ ≤'Fin j₁ → - minor i₂ j₂ (minor (weakenFin i₁) (suc j₁) M) k l ≡ minor i₁ j₁ (minor (suc i₂) (weakenFin j₂) M) k l - - minorComm2 i₁ i₂ j₁ j₂ k l M lei lej = - M (removeIndex (weakenFin i₁) (removeIndex i₂ k)) - (removeIndex (suc j₁) (removeIndex j₂ l)) - ≡⟨ cong (λ a → M a (removeIndex (suc j₁) (removeIndex j₂ l))) (sym ((removeIndexComm i₁ i₂ k lei))) ⟩ - M (removeIndex (suc i₂) (removeIndex i₁ k)) - (removeIndex (suc j₁) (removeIndex j₂ l)) - ≡⟨ cong (λ a → M (removeIndex (suc i₂) (removeIndex i₁ k)) a) ((removeIndexComm j₂ j₁ l lej)) ⟩ - M (removeIndex (suc i₂) (removeIndex i₁ k)) - (removeIndex (weakenFin j₂) (removeIndex j₁ l)) - ∎ - - --Formulas to compute compute the entries of the minor. - minorIdId : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → - suc k ≤'Fin i → suc l ≤'Fin j → - minor i j M k l ≡ M (weakenFin k) (weakenFin l) - minorIdId i j k l M lei lej = - M (removeIndex i k) (removeIndex j l) - ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexId i k lei) ⟩ - M (weakenFin k) (removeIndex j l) - ≡⟨ cong (λ a → M (weakenFin k) a) (removeIndexId j l lej) ⟩ - M (weakenFin k) (weakenFin l) - ∎ - - minorSucSuc : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → - i ≤'Fin weakenFin k → j ≤'Fin weakenFin l → - minor i j M k l ≡ M (suc k) (suc l) - minorSucSuc i j k l M lei lej = - M (removeIndex i k) (removeIndex j l) - ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexSuc i k lei) ⟩ - M (suc k) (removeIndex j l) - ≡⟨ cong (λ a → M (suc k) a) (removeIndexSuc j l lej) ⟩ - M (suc k) (suc l) - ∎ - - minorIdSuc : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → - suc k ≤'Fin i → j ≤'Fin weakenFin l → - minor i j M k l ≡ M (weakenFin k) (suc l) - minorIdSuc i j k l M lei lej = - M (removeIndex i k) (removeIndex j l) - ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexId i k lei) ⟩ - M (weakenFin k) (removeIndex j l) - ≡⟨ cong (λ a → M (weakenFin k) a) (removeIndexSuc j l lej) ⟩ - M (weakenFin k) (suc l) - ∎ - - minorSucId : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → - i ≤'Fin weakenFin k → suc l ≤'Fin j → - minor i j M k l ≡ M (suc k) (weakenFin l) - minorSucId i j k l M lei lej = - M (removeIndex i k) (removeIndex j l) - ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexSuc i k lei) ⟩ - M (suc k) (removeIndex j l) - ≡⟨ cong (λ a → M (suc k) a) (removeIndexId j l lej) ⟩ - M (suc k) (weakenFin l) - ∎ - From b484a92b17c77af447160b2ef083cc837ee9ff62 Mon Sep 17 00:00:00 2001 From: Franziskus Wiesnet Date: Thu, 31 Oct 2024 11:52:37 +0100 Subject: [PATCH 3/7] whitespace fix --- Cubical/Algebra/Determinat/Minor.agda | 27 ++++++----- Cubical/Algebra/Determinat/RingSum.agda | 12 ++--- Cubical/Algebra/Determinat/adjugate.agda | 36 +++++++-------- Cubical/Algebra/Determinat/det.agda | 56 +++++++++++------------ dist-newstyle/cache/compiler | Bin 0 -> 13124 bytes dist-newstyle/cache/config | Bin 0 -> 3357 bytes dist-newstyle/cache/elaborated-plan | Bin 0 -> 57735 bytes dist-newstyle/cache/improved-plan | Bin 0 -> 99346 bytes dist-newstyle/cache/plan.json | 1 + dist-newstyle/cache/solver-plan | Bin 0 -> 56736 bytes dist-newstyle/cache/source-hashes | Bin 0 -> 128 bytes 11 files changed, 66 insertions(+), 66 deletions(-) create mode 100644 dist-newstyle/cache/compiler create mode 100644 dist-newstyle/cache/config create mode 100644 dist-newstyle/cache/elaborated-plan create mode 100644 dist-newstyle/cache/improved-plan create mode 100644 dist-newstyle/cache/plan.json create mode 100644 dist-newstyle/cache/solver-plan create mode 100644 dist-newstyle/cache/source-hashes diff --git a/Cubical/Algebra/Determinat/Minor.agda b/Cubical/Algebra/Determinat/Minor.agda index 521477bb6e..8b80ff5c98 100644 --- a/Cubical/Algebra/Determinat/Minor.agda +++ b/Cubical/Algebra/Determinat/Minor.agda @@ -19,13 +19,12 @@ open import Cubical.Algebra.Ring.BigOps open import Cubical.Algebra.Monoid.BigOp open import Cubical.Algebra.CommRing open import Cubical.Algebra.CommRing.Base -open import Cubical.Data.Nat.Order +open import Cubical.Data.Nat.Order open import Cubical.Tactics.CommRingSolver module Minor (ℓ : Level) where -- definition and properties to remove one Index, i.e. (removeIndex i) is the monoton ebbeding from {0,...,n-1} to {0,...,n} ommiting i. - removeIndex : {n : ℕ} → Fin (suc n) → Fin n → Fin (suc n) removeIndex zero k = suc k removeIndex (suc i) zero = zero @@ -43,13 +42,13 @@ module Minor (ℓ : Level) where -- A formula for commuting removeIndex maps removeIndexComm : {n : ℕ} → (i j : Fin (suc n)) → (k : Fin n) → i ≤'Fin j → - removeIndex (suc j) (removeIndex i k) ≡ removeIndex (weakenFin i) (removeIndex j k) + removeIndex (suc j) (removeIndex i k) ≡ removeIndex (weakenFin i) (removeIndex j k) removeIndexComm zero j k le = refl removeIndexComm (suc i) (suc j) zero le = refl removeIndexComm (suc i) (suc j) (suc k) (s≤s le) = cong (λ a → suc a) (removeIndexComm i j k le) -- remove the j-th column of a matrix - + remove-column : {A : Type ℓ} {n m : ℕ} (j : Fin (suc m)) (M : FinMatrix A n (suc m)) → FinMatrix A n m remove-column j M k l = M k (removeIndex j l) @@ -65,7 +64,7 @@ module Minor (ℓ : Level) where ≡⟨ refl ⟩ remove-column i (remove-column (weakenFin j) M) k l ∎ - + -- remove the i-th row of a matrix remove-row : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (M : FinMatrix A (suc n) m) → FinMatrix A n m remove-row i M k l = M (removeIndex i k) l @@ -82,10 +81,10 @@ module Minor (ℓ : Level) where ≡⟨ refl ⟩ remove-row i (remove-row (weakenFin j) M) k l ∎ - + remove-column-row-comm : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M : FinMatrix A (suc n) (suc m)) (k : Fin n) (l : Fin m) → (remove-row i (remove-column j M)) k l ≡ (remove-column j (remove-row i M)) k l remove-column-row-comm i j M k l = refl - + -- Calculating of the minor. minor : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n)) (j : Fin (suc m)) (M : FinMatrix A (suc n) (suc m)) → FinMatrix A n m minor i j M = remove-column j (remove-row i M) @@ -96,7 +95,7 @@ module Minor (ℓ : Level) where -- Formulas to commute minors minorComm0 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → - i₂ ≤'Fin i₁ → j₂ ≤'Fin j₁ → + i₂ ≤'Fin i₁ → j₂ ≤'Fin j₁ → minor i₂ j₂ (minor (suc i₁) (suc j₁) M) k l ≡ minor i₁ j₁ (minor (weakenFin i₂) (weakenFin j₂) M) k l minorComm0 i₁ i₂ j₁ j₂ k l M lei lej = M (removeIndex (suc i₁) (removeIndex i₂ k)) @@ -110,7 +109,7 @@ module Minor (ℓ : Level) where ∎ minorComm1 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → - i₂ ≤'Fin i₁ → j₁ ≤'Fin j₂ → + i₂ ≤'Fin i₁ → j₁ ≤'Fin j₂ → minor i₂ j₂ (minor (suc i₁) (weakenFin j₁) M) k l ≡ minor i₁ j₁ (minor (weakenFin i₂) (suc j₂) M) k l minorComm1 i₁ i₂ j₁ j₂ k l M lei lej = @@ -125,7 +124,7 @@ module Minor (ℓ : Level) where ∎ minorComm2 : {A : Type ℓ} {n m : ℕ} (i₁ i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → - i₁ ≤'Fin i₂ → j₂ ≤'Fin j₁ → + i₁ ≤'Fin i₂ → j₂ ≤'Fin j₁ → minor i₂ j₂ (minor (weakenFin i₁) (suc j₁) M) k l ≡ minor i₁ j₁ (minor (suc i₂) (weakenFin j₂) M) k l minorComm2 i₁ i₂ j₁ j₂ k l M lei lej = @@ -140,13 +139,13 @@ module Minor (ℓ : Level) where ∎ minorSemiCommR : {A : Type ℓ} {n m : ℕ} (i₁ : Fin (suc (suc n))) (i₂ : Fin (suc n)) (j₁ j₂ : Fin (suc m)) (k : Fin n) (l : Fin m) (M : FinMatrix A (suc (suc n)) (suc (suc m))) → - j₂ ≤'Fin j₁ → + j₂ ≤'Fin j₁ → minor i₂ j₂ (minor i₁ (suc j₁) M) k l ≡ minor i₂ j₁ (minor i₁ (weakenFin j₂) M) k l minorSemiCommR i₁ i₂ j₁ j₂ k l M lej = cong (λ a → M (removeIndex i₁ (removeIndex i₂ k)) a) (removeIndexComm j₂ j₁ l lej) - + --Formulas to compute compute the entries of the minor. minorIdId : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → @@ -163,7 +162,7 @@ module Minor (ℓ : Level) where minorSucSuc : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → i ≤'Fin weakenFin k → j ≤'Fin weakenFin l → minor i j M k l ≡ M (suc k) (suc l) - minorSucSuc i j k l M lei lej = + minorSucSuc i j k l M lei lej = M (removeIndex i k) (removeIndex j l) ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexSuc i k lei) ⟩ M (suc k) (removeIndex j l) @@ -185,7 +184,7 @@ module Minor (ℓ : Level) where minorSucId : {A : Type ℓ} {n m : ℕ} (i : Fin (suc n))(j : Fin (suc m)) (k : Fin n)(l : Fin m) (M : FinMatrix A (suc n) (suc m)) → i ≤'Fin weakenFin k → suc l ≤'Fin j → minor i j M k l ≡ M (suc k) (weakenFin l) - minorSucId i j k l M lei lej = + minorSucId i j k l M lei lej = M (removeIndex i k) (removeIndex j l) ≡⟨ cong (λ a → M a (removeIndex j l)) (removeIndexSuc i k lei) ⟩ M (suc k) (removeIndex j l) diff --git a/Cubical/Algebra/Determinat/RingSum.agda b/Cubical/Algebra/Determinat/RingSum.agda index f95ce43c49..842042aa02 100644 --- a/Cubical/Algebra/Determinat/RingSum.agda +++ b/Cubical/Algebra/Determinat/RingSum.agda @@ -17,7 +17,7 @@ open import Cubical.Algebra.Ring.BigOps open import Cubical.Algebra.Monoid.BigOp open import Cubical.Algebra.CommRing open import Cubical.Algebra.CommRing.Base -open import Cubical.Data.Nat.Order +open import Cubical.Data.Nat.Order open import Cubical.Tactics.CommRingSolver module RingSum (ℓ : Level) (P' : CommRing ℓ) where @@ -25,7 +25,7 @@ module RingSum (ℓ : Level) (P' : CommRing ℓ) where R' = CommRing→Ring P' open RingStr (snd (CommRing→Ring P')) renaming ( is-set to isSetR) - + ∑ = Sum.∑ (CommRing→Ring P') R : Type ℓ @@ -33,7 +33,7 @@ module RingSum (ℓ : Level) (P' : CommRing ℓ) where open MonoidBigOp (Ring→AddMonoid R') - + -- Compatability theorems ∑Compat : {n : ℕ} → (U V : FinVec R n) → @@ -74,12 +74,12 @@ module RingSum (ℓ : Level) (P' : CommRing ℓ) where ≡⟨ ∑Split (λ i → ∑ (λ j → U i j)) (λ i → ∑ (λ j → V i j)) ⟩ (∑ (λ i → ∑ (U i)) + ∑ (λ i → ∑ (V i))) ∎ - + -- Distributivity of the sum ∑DistR = Sum.∑Mulrdist (CommRing→Ring P') ∑DistL = Sum.∑Mulldist (CommRing→Ring P') - + -- Sum of Zeros is Zero ∑Zero : {n : ℕ} → (U : FinVec R n) → ((i : Fin n) → U i ≡ 0r) → ∑ U ≡ 0r ∑Zero {zero} U f = refl @@ -111,7 +111,7 @@ module RingSum (ℓ : Level) (P' : CommRing ℓ) where ∑ (λ (i : Fin n) → 0r) ≡⟨ ∑Zero ( (λ (i : Fin n) → 0r)) ( (λ i → refl)) ⟩ 0r - ∎ + ∎ ∑Comm {suc n} {suc m} U = ∑ (λ i → ∑ (U i)) ≡⟨ refl ⟩ diff --git a/Cubical/Algebra/Determinat/adjugate.agda b/Cubical/Algebra/Determinat/adjugate.agda index 6883592799..12913bf67e 100644 --- a/Cubical/Algebra/Determinat/adjugate.agda +++ b/Cubical/Algebra/Determinat/adjugate.agda @@ -25,7 +25,7 @@ open import Cubical.Algebra.CommRing.Base open import Cubical.Algebra.Semiring open import Cubical.Data.Int.Base using (pos; negsuc) open import Cubical.Data.Vec.Base using (_∷_; []) -open import Cubical.Data.Nat.Order +open import Cubical.Data.Nat.Order open import Cubical.Tactics.CommRingSolver open import Minor @@ -75,7 +75,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where deltaComm : {n : ℕ} → (k l : Fin n) → δ k l ≡ δ l k deltaComm k l = cong (λ a → if a then 1r else 0r) (==Sym k l) - -- Definition of the cofactor matrix + -- Definition of the cofactor matrix cof : {n : ℕ} → FinMatrix R n n → FinMatrix R n n cof {suc n} M i j = (MF (toℕ i +ℕ toℕ j)) · det {n} (minor i j M) @@ -90,7 +90,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where (λ a → MF (a) · det (minor j i M)) (+ℕ-comm (toℕ i) (toℕ j)) ⟩ (MF (toℕ j +ℕ toℕ i) · det (minor j i M)) ∎ - + -- Definition of the adjugate matrix adjugate : {n : ℕ} → FinMatrix R n n → FinMatrix R n n adjugate M i j = cof M j i @@ -114,7 +114,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where sucPredFin {suc n} zero (suc l) le = refl sucPredFin {suc n} (suc k) (suc l) (s≤s le) = refl - + adjugatePropAux1a : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → toℕ k <' toℕ l → ∑ (λ i → @@ -132,14 +132,14 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ind> (toℕ i) (toℕ z) · (M l i · MF (toℕ k +ℕ toℕ i) · (MF (toℕ (predFin l) +ℕ toℕ z) · M l (weakenFin z)) - · det (minor (predFin l) z (minor k i M))))) + · det (minor (predFin l) z (minor k i M))))) adjugatePropAux1a M k l le = ∑∑Compat (λ i j → ind> (toℕ i) (toℕ j) · (M l i · MF (toℕ k +ℕ toℕ i) · (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · - det (minor (predFin l) j (minor k i M))))) + det (minor (predFin l) j (minor k i M))))) (λ z z₁ → ind> (toℕ z) (toℕ z₁) · (M l z · MF (toℕ k +ℕ toℕ z) · @@ -378,7 +378,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · det (minor (predFin l) j (minor k i M)))))) ∎ ) - + adjugatePropAux2b : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → toℕ k <' toℕ l → ∑ @@ -467,7 +467,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where det (minor (predFin l) j (minor k i M))))))) ≡⟨ cong - (λ a → + (λ a → (ind> (toℕ i) (toℕ j) · (M l (weakenFin j) · (MF (toℕ k) · a)))) @@ -545,7 +545,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ (predFin l)) · MF (toℕ j) · M l (weakenFin j) · det (minor (predFin l) j (minor k i M))))) ∎) - + adjugatePropRG : {n : ℕ} → (M : FinMatrix R (suc n) (suc n)) → (k l : Fin (suc n)) → toℕ k <' toℕ l → ∑ (λ i → (M l i · (MF (toℕ k +ℕ toℕ i) · det (minor k i M)))) ≡ 0r adjugatePropRG {zero} M zero zero () @@ -665,7 +665,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where (M l i · MF (toℕ k +ℕ toℕ i) · (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · det (minor (predFin l) j (minor k i M))))))) - ≡⟨ +Compat refl (∑∑ShiftWeak λ i j → + ≡⟨ +Compat refl (∑∑ShiftWeak λ i j → (M l i · MF (toℕ k +ℕ toℕ i) · (MF (toℕ (predFin l) +ℕ toℕ j) · minor k i M (predFin l) j · det (minor (predFin l) j (minor k i M))))) ⟩ @@ -950,7 +950,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ∎ adjugateInvRGcomponent : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → toℕ l <' toℕ k → (M ⋆ adjugate M) k l ≡ (det M ∘ 𝟙) k l - adjugateInvRGcomponent {suc n} M k l le = + adjugateInvRGcomponent {suc n} M k l le = ∑ (λ i → M k i · (MF(toℕ l +ℕ toℕ i) · det(minor l i M)) ) ≡⟨ adjugatePropRG M l k le ⟩ 0r @@ -990,7 +990,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where toℕstrongenFin {suc n} {suc j} zero le = refl toℕstrongenFin {suc n} {suc j} (suc i) (s≤s le) = cong (λ a → suc a) (toℕstrongenFin {n} {j} i le) - + adjugatePropAux3a : {n : ℕ} → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → (k l : Fin (suc (suc n))) → (le : toℕ l <' toℕ k) → ∑ @@ -1043,7 +1043,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where cong (λ a → M l i · MF (toℕ k +ℕ toℕ i) · - (MF (toℕ (strongenFin l le) +ℕ toℕ j) · a + (MF (toℕ (strongenFin l le) +ℕ toℕ j) · a · det (minor (strongenFin l le) j (minor k i M)))) (minorIdId k @@ -1427,7 +1427,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ((- 1r) · ( M l i · (MF (toℕ k) · MF (toℕ j)) · (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) · - det (minor (strongenFin l le) j (minor k i M))) + det (minor (strongenFin l le) j (minor k i M))) ∎) adjugatePropRL : {n : ℕ} → (M : FinMatrix R (suc n) (suc n)) → (k l : Fin (suc n)) → toℕ l <' toℕ k → @@ -1725,7 +1725,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ l) · MF (toℕ i) · M l (weakenFin j))) · det (minor (strongenFin l le) j (minor k i M)))) (λ _ _ → 0r) - (λ i j → + (λ i j → (ind> (toℕ i) (toℕ j) · (1r · (M l i · (MF (toℕ k) · MF (toℕ j)) · @@ -1834,7 +1834,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ∎ adjugateInvRLcomponent : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → toℕ k <' toℕ l → (M ⋆ adjugate M) k l ≡ (det M ∘ 𝟙) k l - adjugateInvRLcomponent {suc n} M k l le = + adjugateInvRLcomponent {suc n} M k l le = ∑ (λ i → M k i · (MF(toℕ l +ℕ toℕ i) · det(minor l i M)) ) ≡⟨ adjugatePropRL M l k le ⟩ 0r @@ -1853,7 +1853,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ... | inl x = inl (cong (λ a → (suc a)) x) ... | inr (inl x) = inr (inl (s≤s x)) ... | inr (inr x) = inr (inr (s≤s x)) - + -- The adjugate matrix divided by the determinant is the right inverse. -- Component-wise version adjugateInvRComp : {n : ℕ} → (M : FinMatrix R n n) → (k l : Fin n) → (M ⋆ adjugate M) k l ≡ (det M ∘ 𝟙) k l @@ -1922,7 +1922,7 @@ module adjugate (ℓ : Level) (P' : CommRing ℓ) where ≡⟨ cong (λ a → det M · a) (deltaComm l k) ⟩ (det M · 𝟙 k l) ∎ - + -- The adjugate matrix divided by the determinant is the right inverse. adjugateInvR : {n : ℕ} → (M : FinMatrix R n n) → M ⋆ adjugate M ≡ det M ∘ 𝟙 adjugateInvR M = funExt₂ (λ k l → adjugateInvRComp M k l) diff --git a/Cubical/Algebra/Determinat/det.agda b/Cubical/Algebra/Determinat/det.agda index 3f61eec805..6a0150e9cf 100644 --- a/Cubical/Algebra/Determinat/det.agda +++ b/Cubical/Algebra/Determinat/det.agda @@ -23,7 +23,7 @@ open import Cubical.Algebra.CommRing.Base open import Cubical.Algebra.Semiring open import Cubical.Data.Int.Base using (pos; negsuc) open import Cubical.Data.Vec.Base using (_∷_; []) -open import Cubical.Data.Nat.Order +open import Cubical.Data.Nat.Order open import Cubical.Tactics.CommRingSolver open import Minor open import RingSum @@ -82,7 +82,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where ((- 1r) · MF (toℕ j) · ((- 1r) · MF (toℕ k)) ) ≡⟨ solve! P' ⟩ ( MF (toℕ j) · MF ( toℕ k)) - ≡⟨ sym (sumMF (toℕ j) (toℕ k))⟩ + ≡⟨ sym (sumMF (toℕ j) (toℕ k))⟩ MF (toℕ j +ℕ toℕ k) ∎ @@ -98,7 +98,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where distributeOne : (a b : R) → b ≡ a · b + (1r + (- a)) · b distributeOne a b = solve! P' - + -- Definition of the determinat by using Laplace expansion det : ∀ {n} → FinMatrix R n n → R det {zero} M = 1r @@ -116,7 +116,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where (λ j → (MF (toℕ j)) · (N zero j) · det (minor zero j N)) (λ j → cong (λ a → (MF (toℕ j)) · (N zero j) · a) (detComp (minor zero j M) (minor zero j N) (minorComp zero j M N f)) ) ⟩ ∑ (λ j → MF (toℕ j) · N zero j · det (minor zero j N)) ∎ - + -- Independence of the row in the Laplace expansion. detR : ∀ {n} → (k : Fin n) → FinMatrix R n n → R detR {suc n} k M = ∑ (λ j → (MF ((toℕ k) +ℕ (toℕ j))) · (M k j) · det {n} (minor k j M)) @@ -132,7 +132,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where ( MF ((toℕ k) +ℕ (toℕ i) +ℕ (toℕ j)) · M k i · minor k i M zero j · det (minor zero j (minor k i M))) - DetRowAux1 k i j M = + DetRowAux1 k i j M = (MF (toℕ k +ℕ toℕ i) · M k i · (MF (toℕ j) · minor k i M zero j · det (minor zero j (minor k i M)))) @@ -193,7 +193,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where DetRowAux3a : {n : ℕ} → (k : Fin (suc n)) → - (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + (M : FinMatrix R (suc (suc n)) (suc (suc n))) → ∑ (λ (i : Fin (suc (suc n))) → ∑ (λ (j : Fin (suc n)) → ind> (toℕ i) (toℕ j) · @@ -342,7 +342,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where weakenweakenFinLe {suc n} zero zero le = le weakenweakenFinLe {suc n} zero (suc j) le = z≤ weakenweakenFinLe {suc n} (suc i) (suc j) (s≤s le) = s≤s (weakenweakenFinLe {n} i j le) - + DetRowAux4b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → ∑ (λ i → @@ -466,7 +466,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where · M (weakenFin zero) (suc j) · det (minor k i (minor zero (suc j) M)))) ∎ - + DetRowAux5a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → ∑ @@ -637,7 +637,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where ≡⟨ sym (sumMF (toℕ (suc k) +ℕ toℕ (suc i)) (toℕ (suc j))) ⟩ MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ (suc j)) ∎ - + DetRowAux6b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → ∑ (λ j → @@ -657,7 +657,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ (suc k) +ℕ toℕ (suc i) +ℕ toℕ j) · M (suc k) (weakenFin i) · M zero j · det (minor k i (minor zero j M))))) - + DetRowAux6b k M = ∑ (λ i → @@ -733,7 +733,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where weakenFinLe {zero} one (suc ()) le weakenFinLe {suc n} zero j le = z≤ weakenFinLe {suc n} (suc i) (suc j) (s≤s le) = s≤s (weakenFinLe {n} i j le) - + DetRowAux7a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → ∑ (λ j → @@ -830,7 +830,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where j i ) - + DetRowAux8 : {n : ℕ} → (i : Fin (suc (suc n))) → (j k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → MF (toℕ (suc k) +ℕ toℕ (suc j) +ℕ toℕ i) · minor zero i M k j · M zero i · det (minor k j (minor zero i M)) @@ -900,12 +900,12 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ i) · M zero i · (MF (toℕ k +ℕ toℕ j) · minor zero i M k j · det (minor k j (minor zero i M)))) ∎ - + DetRow : ∀ {n} → (k : Fin n) → (M : FinMatrix R n n) → (detR k M) ≡ (det M) DetRow {one} zero M = refl DetRow {suc (suc n)} zero M = refl - DetRow {suc (suc n)} (suc k) M = + DetRow {suc (suc n)} (suc k) M = detR (suc k) M ≡⟨ refl ⟩ ∑ @@ -925,7 +925,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where (λ j → MF (toℕ j) · minor (suc k) i M zero j · det (minor zero j (minor (suc k) i M)))) - ((λ i → + ((λ i → ∑ (λ j → MF (toℕ (suc k) +ℕ toℕ i) · M (suc k) i · @@ -936,7 +936,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where MF (toℕ j) · minor (suc k) i M zero j · det (minor zero j (minor (suc k) i M))))⟩ ∑ - (λ i → + (λ i → ∑ (λ j → MF (toℕ (suc k) +ℕ toℕ i) · M (suc k) i · @@ -1245,9 +1245,9 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where ⟩ ∑ (λ i → MF (toℕ i) · M zero i · det (minor zero i M)) ∎ - + --Laplace expansion along columns - + detC : ∀ {n} → (k : Fin n) → FinMatrix R n n → R detC {suc n} k M = ∑ (λ i → (MF ((toℕ i) +ℕ (toℕ k))) · (M i k) · det {n} (minor i k M)) @@ -1267,7 +1267,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where MF (toℕ (suc j))· M zero (suc j) · (MF (toℕ i +ℕ zero)· minor zero (suc j) M i zero · det (minor i zero (minor zero (suc j) M))))) - + DetRowColumnAux M = ∑∑Compat (λ i j → @@ -1361,7 +1361,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ i +ℕ zero) · minor zero (suc j) M i zero · det (minor i zero (minor zero (suc j) M)))) ∎) - + -- The determinant can also be expanded along the first column. DetRowColumn : ∀ {n} → (M : FinMatrix R (suc n) (suc n)) → detC zero M ≡ det M @@ -1462,7 +1462,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where det M ∎ - DetColumnAux1a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + DetColumnAux1a : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → ∑ (λ i → ∑ @@ -1584,7 +1584,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where ∎) - DetColumnAux1b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → + DetColumnAux1b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → ∑ (λ i → ∑ @@ -1736,7 +1736,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ i +ℕ zero) · M i zero · (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · det (minor j k (minor i zero M)))))) - + DetColumnAux2a k M = ∑∑Compat (λ i j → @@ -1832,7 +1832,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where (MF (toℕ (suc j) +ℕ toℕ (suc k)) · minor i zero M j k · det (minor j k (minor i zero M)))) ∎) - ) + ) DetColumnAux2b : {n : ℕ} → (k : Fin (suc n)) → (M : FinMatrix R (suc (suc n)) (suc (suc n))) → ∑ @@ -2438,9 +2438,9 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where detOne : {n : ℕ} → det {n} 𝟙 ≡ 1r detOne {zero} = refl detOne {suc n} = - ∑ (λ i → MF (toℕ i) · 𝟙 (zero {n}) i · det {n} (minor zero i 𝟙)) + ∑ (λ i → MF (toℕ i) · 𝟙 (zero {n}) i · det {n} (minor zero i 𝟙)) ≡⟨ refl ⟩ - ∑ (λ i → MF (toℕ i) · δ (zero {n}) i · det {n} (minor zero i 𝟙)) + ∑ (λ i → MF (toℕ i) · δ (zero {n}) i · det {n} (minor zero i 𝟙)) ≡⟨ ∑Compat (λ i → MF (toℕ i) · δ (zero {n}) i · det {n} (minor zero i 𝟙)) (λ i → δ (zero {n}) i · MF (toℕ i) · det {n} (minor zero i 𝟙)) @@ -2462,7 +2462,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where MF zero · det {n} (minor zero zero 𝟙) ≡⟨ refl ⟩ (1r · det {n} 𝟙) - ≡⟨ ·IdL (det {n} 𝟙) ⟩ + ≡⟨ ·IdL (det {n} 𝟙) ⟩ det {n} 𝟙 ≡⟨ detOne{n} ⟩ 1r @@ -2472,7 +2472,7 @@ module Determinat (ℓ : Level) (P' : CommRing ℓ) where detTransp : {n : ℕ} → (M : FinMatrix R n n) → det M ≡ det (M ᵗ) detTransp {zero} M = refl detTransp {suc n} M = - det M + det M ≡⟨ refl ⟩ ∑ (λ i → MF (toℕ i) · (M ᵗ) i zero · det ((minor i zero (M ᵗ))ᵗ)) ≡⟨ diff --git a/dist-newstyle/cache/compiler b/dist-newstyle/cache/compiler new file mode 100644 index 0000000000000000000000000000000000000000..e680cec51f615af1f3e33ff66a24bf6ff21c33bf GIT binary patch literal 13124 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/cache/config b/dist-newstyle/cache/config new file mode 100644 index 0000000000000000000000000000000000000000..ac7ba02f17c86c0ef6e98626299be373c099b201 GIT binary patch literal 3357 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/cache/improved-plan b/dist-newstyle/cache/improved-plan new file mode 100644 index 0000000000000000000000000000000000000000..a5bfebfffdf773a845a62fb5b179539b819f4108 GIT binary patch literal 99346 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�fkz|>^R&qZpY!4vHR14yp$zuTYZ$YMN!3qZYQzz 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/cache/plan.json b/dist-newstyle/cache/plan.json new file mode 100644 index 0000000000..f79bcfcd33 --- /dev/null +++ b/dist-newstyle/cache/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-9.4.8","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.17.2.1"]},{"type":"pre-existing","id":"base-4.17.2.1","pkg-name":"base","pkg-version":"4.17.2.1","depends":["ghc-bignum-1.3","ghc-prim-0.9.1","rts-1.0.2"]},{"type":"pre-existing","id":"bytestring-0.11.5.3","pkg-name":"bytestring","pkg-version":"0.11.5.3","depends":["base-4.17.2.1","deepseq-1.4.8.0","ghc-prim-0.9.1","template-haskell-2.19.0.0"]},{"type":"configured","id":"cubical-utils-1.0-inplace-Everythings","pkg-name":"cubical-utils","pkg-version":"1.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"/home/fwiesnet/Agda/Cubical_new/cubical/."},"dist-dir":"/home/fwiesnet/Agda/Cubical_new/cubical/dist-newstyle/build/x86_64-linux/ghc-9.4.8/cubical-utils-1.0/x/Everythings","build-info":"/home/fwiesnet/Agda/Cubical_new/cubical/dist-newstyle/build/x86_64-linux/ghc-9.4.8/cubical-utils-1.0/x/Everythings/build-info.json","depends":["base-4.17.2.1","directory-1.3.7.1"],"exe-depends":[],"component-name":"exe:Everythings","bin-file":"/home/fwiesnet/Agda/Cubical_new/cubical/dist-newstyle/build/x86_64-linux/ghc-9.4.8/cubical-utils-1.0/x/Everythings/build/Everythings/Everythings"},{"type":"pre-existing","id":"deepseq-1.4.8.0","pkg-name":"deepseq","pkg-version":"1.4.8.0","depends":["array-0.5.4.0","base-4.17.2.1","ghc-prim-0.9.1"]},{"type":"pre-existing","id":"directory-1.3.7.1","pkg-name":"directory","pkg-version":"1.3.7.1","depends":["base-4.17.2.1","filepath-1.4.2.2","time-1.12.2","unix-2.7.3"]},{"type":"pre-existing","id":"filepath-1.4.2.2","pkg-name":"filepath","pkg-version":"1.4.2.2","depends":["base-4.17.2.1"]},{"type":"pre-existing","id":"ghc-bignum-1.3","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.9.1"]},{"type":"pre-existing","id":"ghc-boot-th-9.4.8","pkg-name":"ghc-boot-th","pkg-version":"9.4.8","depends":["base-4.17.2.1"]},{"type":"pre-existing","id":"ghc-prim-0.9.1","pkg-name":"ghc-prim","pkg-version":"0.9.1","depends":["rts-1.0.2"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.17.2.1","deepseq-1.4.8.0","ghc-prim-0.9.1"]},{"type":"pre-existing","id":"rts-1.0.2","pkg-name":"rts","pkg-version":"1.0.2","depends":[]},{"type":"pre-existing","id":"template-haskell-2.19.0.0","pkg-name":"template-haskell","pkg-version":"2.19.0.0","depends":["base-4.17.2.1","ghc-boot-th-9.4.8","ghc-prim-0.9.1","pretty-1.1.3.6"]},{"type":"pre-existing","id":"time-1.12.2","pkg-name":"time","pkg-version":"1.12.2","depends":["base-4.17.2.1","deepseq-1.4.8.0"]},{"type":"pre-existing","id":"unix-2.7.3","pkg-name":"unix","pkg-version":"2.7.3","depends":["base-4.17.2.1","bytestring-0.11.5.3","time-1.12.2"]}]} \ No newline at end of file diff --git a/dist-newstyle/cache/solver-plan b/dist-newstyle/cache/solver-plan new file mode 100644 index 0000000000000000000000000000000000000000..9227feac8cd0a76c3fb9665fa12568620ccecaa2 GIT binary patch literal 56736 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 literal 0 HcmV?d00001 diff --git a/dist-newstyle/cache/source-hashes b/dist-newstyle/cache/source-hashes new file mode 100644 index 0000000000000000000000000000000000000000..7a00451d4b5e07a2d3b206d97ff0730749e7a1b3 GIT binary patch literal 128 zcmY#%W<0=fb>p;GyXK_YX*KO&zz!Ip!o10)NtwxsIl84KnK{J_3``6#8L$FP{fzwF iRQXNZ>gywq}isCIolm^A>%I2+~w literal 0 HcmV?d00001 From 7101c37a220e3fb6f8c10f193e199d9b5436fc45 Mon Sep 17 00:00:00 2001 From: Franziskus Wiesnet Date: Thu, 31 Oct 2024 13:14:52 +0100 Subject: [PATCH 4/7] names fixed --- .../{adjugate.agda => Adjugate.agda} | 18 +++++++++--------- .../Algebra/Determinat/{det.agda => Base.agda} | 10 +++++----- Cubical/Algebra/Determinat/Minor.agda | 2 +- Cubical/Algebra/Determinat/RingSum.agda | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) rename Cubical/Algebra/Determinat/{adjugate.agda => Adjugate.agda} (99%) rename Cubical/Algebra/Determinat/{det.agda => Base.agda} (99%) diff --git a/Cubical/Algebra/Determinat/adjugate.agda b/Cubical/Algebra/Determinat/Adjugate.agda similarity index 99% rename from Cubical/Algebra/Determinat/adjugate.agda rename to Cubical/Algebra/Determinat/Adjugate.agda index 12913bf67e..290e310bd3 100644 --- a/Cubical/Algebra/Determinat/adjugate.agda +++ b/Cubical/Algebra/Determinat/Adjugate.agda @@ -1,6 +1,6 @@ {-# OPTIONS --cubical #-} -module adjugate where +module Cubical.Algebra.Determinat.Adjugate where open import Cubical.Foundations.Prelude open import Cubical.Foundations.Equiv @@ -28,15 +28,15 @@ open import Cubical.Data.Vec.Base using (_∷_; []) open import Cubical.Data.Nat.Order open import Cubical.Tactics.CommRingSolver -open import Minor -open import RingSum -open import det +open import Cubical.Algebra.Determinat.Minor +open import Cubical.Algebra.Determinat.RingSum +open import Cubical.Algebra.Determinat.Base -module adjugate (ℓ : Level) (P' : CommRing ℓ) where - open Minor.Minor ℓ - open RingSum.RingSum ℓ P' - open RingStr (snd (CommRing→Ring P')) renaming ( is-set to isSetR ) - open Determinat ℓ P' +module Adjugate (ℓ : Level) (P' : CommRing ℓ) where + open Cubical.Algebra.Determinat.Minor.Minor ℓ + open Cubical.Algebra.Determinat.RingSum.RingSum ℓ P' + open RingStr (snd (CommRing→Ring P')) + open Cubical.Algebra.Determinat.Base.Determinat ℓ P' open Coefficient (P') -- Scalar multiplication diff --git a/Cubical/Algebra/Determinat/det.agda b/Cubical/Algebra/Determinat/Base.agda similarity index 99% rename from Cubical/Algebra/Determinat/det.agda rename to Cubical/Algebra/Determinat/Base.agda index 6a0150e9cf..5405b6343e 100644 --- a/Cubical/Algebra/Determinat/det.agda +++ b/Cubical/Algebra/Determinat/Base.agda @@ -1,6 +1,6 @@ {-# OPTIONS --cubical #-} -module det where +module Cubical.Algebra.Determinat.Base where open import Cubical.Foundations.Prelude open import Cubical.Foundations.Equiv @@ -25,13 +25,13 @@ open import Cubical.Data.Int.Base using (pos; negsuc) open import Cubical.Data.Vec.Base using (_∷_; []) open import Cubical.Data.Nat.Order open import Cubical.Tactics.CommRingSolver -open import Minor -open import RingSum +open import Cubical.Algebra.Determinat.Minor +open import Cubical.Algebra.Determinat.RingSum module Determinat (ℓ : Level) (P' : CommRing ℓ) where - open Minor.Minor ℓ - open RingSum.RingSum ℓ P' + open Cubical.Algebra.Determinat.Minor.Minor ℓ + open Cubical.Algebra.Determinat.RingSum.RingSum ℓ P' open RingStr (snd (CommRing→Ring P')) renaming ( is-set to isSetR ) CommRingR' : CommRingStr (R' .fst) diff --git a/Cubical/Algebra/Determinat/Minor.agda b/Cubical/Algebra/Determinat/Minor.agda index 8b80ff5c98..2bf915b71b 100644 --- a/Cubical/Algebra/Determinat/Minor.agda +++ b/Cubical/Algebra/Determinat/Minor.agda @@ -1,6 +1,6 @@ {-# OPTIONS --cubical #-} -module Minor where +module Cubical.Algebra.Determinat.Minor where open import Cubical.Foundations.Prelude open import Cubical.Foundations.Equiv diff --git a/Cubical/Algebra/Determinat/RingSum.agda b/Cubical/Algebra/Determinat/RingSum.agda index 842042aa02..289f5f5577 100644 --- a/Cubical/Algebra/Determinat/RingSum.agda +++ b/Cubical/Algebra/Determinat/RingSum.agda @@ -1,6 +1,6 @@ {-# OPTIONS --cubical #-} -module RingSum where +module Cubical.Algebra.Determinat.RingSum where open import Cubical.Foundations.Prelude open import Cubical.Foundations.Equiv From 580e6a05ac2c85beeb2e2769ef5c7418001494d7 Mon Sep 17 00:00:00 2001 From: Franziskus Wiesnet Date: Tue, 12 Nov 2024 17:47:54 +0100 Subject: [PATCH 5/7] MaxZX added --- Cubical/Algebra/MaxZX/ExplMaxIdeal.agda | 187 ++++++++++++++++++ Cubical/Algebra/MaxZX/PolynomialRingZnew.agda | 107 ++++++++++ 2 files changed, 294 insertions(+) create mode 100644 Cubical/Algebra/MaxZX/ExplMaxIdeal.agda create mode 100644 Cubical/Algebra/MaxZX/PolynomialRingZnew.agda diff --git a/Cubical/Algebra/MaxZX/ExplMaxIdeal.agda b/Cubical/Algebra/MaxZX/ExplMaxIdeal.agda new file mode 100644 index 0000000000..be88cc742b --- /dev/null +++ b/Cubical/Algebra/MaxZX/ExplMaxIdeal.agda @@ -0,0 +1,187 @@ +{-# OPTIONS --cubical #-} + +module Cubical.Algebra.MaxZX.ExplMaxIdeal where + +open import Agda.Primitive +open import Cubical.Foundations.Prelude +open import Cubical.Foundations.Equiv +open import Cubical.Algebra.Matrix +open import Cubical.Data.Nat renaming ( _+_ to _+ℕ_ ; _·_ to _·ℕ_ + ; +-comm to +ℕ-comm + ; +-assoc to +ℕ-assoc + ; ·-assoc to ·ℕ-assoc) +open import Cubical.Data.Vec.Base using (_∷_; []) +open import Cubical.Foundations.Structure using (⟨_⟩) +open import Cubical.Data.Empty +open import Cubical.Data.Bool +open import Cubical.Data.FinData +open import Cubical.Data.FinData.Order using (_<'Fin_; _≤'Fin_) +open import Cubical.Data.Sum +open import Cubical.Algebra.Ring +open import Cubical.Algebra.Ring.Base +open import Cubical.Algebra.Ring.BigOps +open import Cubical.Algebra.Monoid.BigOp +open import Cubical.Algebra.CommRing +open import Cubical.Algebra.CommRing.Base +open import Cubical.Data.Nat.Order +open import Cubical.Tactics.CommRingSolver +-- open import Cubical.Algebra.CommRing.Ideal.Base +open import Cubical.Foundations.Powerset + +module ExplMaxIdeal (ℓ : Level) (P' : CommRing ℓ) where + + R' = CommRing→Ring P' + + open RingStr (snd (CommRing→Ring P')) renaming ( is-set to isSetR) + -- open CommIdeal P' + + + ∑ = Sum.∑ (CommRing→Ring P') + ∏ = Product.∏ (CommRing→Ring P') + + R : Type ℓ + R = ⟨ P' ⟩ + + record Inspect {A : Set} (x : A) : Set where + constructor what + field + it : A + it-eq : x ≡ it + + inspect : ∀ {A : Set} (x : A) → Inspect x + inspect x = what x refl + + smalllemma : (a : R) → (- 1r)· a + a ≡ 0r + smalllemma a = solve! P' + + -- witness of not beeing an maximal ideal + data WitnessNotMaximalIdeal (M : R → Bool) (ν : R → R) : Set ℓ where + oneIn : M 1r ≡ true → WitnessNotMaximalIdeal M ν + zeroNotIn : M 0r ≡ false → WitnessNotMaximalIdeal M ν + sumNotIn : (a b : R) → M a ≡ true → M b ≡ true → M (a + b) ≡ false → WitnessNotMaximalIdeal M ν + multNotIn : (a b : R) → M b ≡ true → M (a · b) ≡ false → WitnessNotMaximalIdeal M ν + notMax : (a : R) → M a ≡ false → M (a · ν a + (- 1r)) ≡ false → WitnessNotMaximalIdeal M ν + + -- Lemma 4 of the Papers + explMaxToExplPrim : {n : ℕ} → (M : R → Bool) (ν : R → R) → (a : FinVec R n) → M (∏ a) ≡ true → WitnessNotMaximalIdeal M ν ⊎ Σ (Fin n) (λ i → M (a i) ≡ true) + explMaxToExplPrim {zero} M ν a isIn = inl (oneIn isIn) + explMaxToExplPrim {suc n} M ν a isIn with inspect (M (a zero)) + explMaxToExplPrim {suc n} M ν a isIn | what true it-eq = inr (zero , it-eq) + explMaxToExplPrim {suc n} M ν a isIn | what false it-eq with inspect (M (∏ (λ i → a (suc i)))) + explMaxToExplPrim {suc n} M ν a isIn | what false it-eq | what true it-eq₁ with explMaxToExplPrim {n} M ν (λ i → a (suc i)) it-eq₁ + explMaxToExplPrim {suc n} M ν a isIn | what false it-eq | what true it-eq₁ | inl x = inl x + explMaxToExplPrim {suc n} M ν a isIn | what false it-eq | what true it-eq₁ | inr (fst₁ , snd₁) = inr ( suc fst₁ , snd₁ ) + explMaxToExplPrim {suc n} M ν a isIn | what false it-eq | what false it-eq₁ with inspect (M ((a zero) · ν (a zero) + (- 1r))) + explMaxToExplPrim {suc n} M ν a isIn | what false it-eq | what false it-eq₁ | what false it-eq₂ = inl (notMax (a zero) it-eq it-eq₂) + explMaxToExplPrim {suc n} M ν a isIn | what false it-eq | what false it-eq₁ | what true it-eq₂ with inspect (M (ν (a zero) · ∏ a)) + ... | what false it-eq₃ = inl (multNotIn (ν (a zero)) (∏ a) isIn it-eq₃) + ... | what true it-eq₃ with inspect (M (((a zero) · ν (a zero) + (- 1r)) · ∏ (λ i → a (suc i)))) + ... | what false it-eq₄ = inl (multNotIn (∏ (λ i → a (suc i))) ((a zero) · ν (a zero) + (- 1r)) it-eq₂ + (M (∏ (λ i → a (suc i)) · (a zero · ν (a zero) + - 1r)) + ≡⟨ cong (λ a₁ → M a₁) (CommRingStr.·Comm (snd P') (∏ (λ i → a (suc i))) (a zero · ν (a zero) + - 1r)) ⟩ + M + ((snd P' CommRingStr.· (a zero · ν (a zero) + - 1r)) + (∏ (λ i → a (suc i)))) + ≡⟨ it-eq₄ ⟩ + false + ∎)) + ... | what true it-eq₄ with inspect (M ((- 1r) · (a zero · ν (a zero) + - 1r) · ∏ (λ i → a (suc i)))) + ... | what false it-eq₅ = inl (multNotIn (- 1r) ((a zero · ν (a zero) + - 1r) · ∏ (λ i → a (suc i))) it-eq₄ + (M (- 1r · ((a zero · ν (a zero) + - 1r) · ∏ (λ i → a (suc i)))) + ≡⟨ cong (λ a₁ → M a₁) (·Assoc _ _ _) ⟩ + M (- 1r · (a zero · ν (a zero) + - 1r) · ∏ (λ i → a (suc i))) + ≡⟨ it-eq₅ ⟩ + false + ∎)) + ... | what true it-eq₅ with inspect (M ((- 1r) · (a zero · ν (a zero) + - 1r) · ∏ (λ i → a (suc i)) + ν (a zero) · ∏ a)) + ... | what false it-eq₆ = inl (sumNotIn ((- 1r) · (a zero · ν (a zero) + - 1r) · ∏ (λ i → a (suc i))) (ν (a zero) · ∏ a) it-eq₅ it-eq₃ it-eq₆) + ... | what true it-eq₆ = + inl + (multNotIn + 1r + (∏ (λ i → a (suc i))) + ( + M (∏ (λ i → a (suc i))) + ≡⟨ cong + (λ a₁ → M a₁) + (∏ (λ i → a (suc i)) + ≡⟨ sym (·IdL _) ⟩ + (1r · ∏ (λ i → a (suc i))) + ≡⟨ cong (λ x → x · ∏ (λ i → a (suc i))) (solve! P') ⟩ + - 1r · - 1r · ∏ (λ i → a (suc i)) + ≡⟨ sym (·Assoc _ _ _) ⟩ + (- 1r · (- 1r · ∏ (λ i → a (suc i)))) + ≡⟨ sym (+IdR _) ⟩ + (- 1r · (- 1r · ∏ (λ i → a (suc i))) + 0r) + ∎) + ⟩ + M (- 1r · (- 1r · ∏ (λ i → a (suc i))) + 0r) + ≡⟨ + cong + (λ a₁ → M (- 1r · (- 1r · ∏ (λ i → a (suc i))) + a₁)) + (sym (smalllemma (ν (a zero) · ∏ a))) ⟩ + M + (- 1r · (- 1r · ∏ (λ i → a (suc i))) + + (- 1r · (ν (a zero) · ∏ a) + ν (a zero) · ∏ a)) + ≡⟨ + cong + (λ a₁ → (M a₁)) + (+Assoc _ _ _) + ⟩ + M + (- 1r · (- 1r · ∏ (λ i → a (suc i))) + - 1r · (ν (a zero) · ∏ a) + + ν (a zero) · ∏ a) + ≡⟨ cong + (λ a₁ → (M (a₁ + ν (a zero) · ∏ a))) + (+Comm _ _) ⟩ + M + (- 1r · (ν (a zero) · ∏ a) + - 1r · (- 1r · ∏ (λ i → a (suc i))) + + ν (a zero) · ∏ a) + ≡⟨ + cong + (λ a₁ → M(a₁ + ν (a zero) · ∏ a)) + (sym (·DistR+ _ _ _)) + ⟩ + M + (- 1r · + (ν (a zero) · ∏ a + + - 1r · ∏ (λ i → a (suc i))) + + ν (a zero) · ∏ a) + ≡⟨ + cong + (λ a₁ → M + (- 1r · + (a₁ + + - 1r · ∏ (λ i → a (suc i))) + + ν (a zero) · ∏ a)) + (·Assoc _ _ _) + ⟩ + M + (- 1r · + (ν (a zero) · a zero · ∏ (λ i → a (suc i)) + + - 1r · ∏ (λ i → a (suc i))) + + ν (a zero) · ∏ a) + ≡⟨ + cong + (λ a₁ → M (- 1r · a₁ + ν (a zero) · ∏ a)) + (sym (·DistL+ _ _ _)) + ⟩ + M + (- 1r · ((ν (a zero) · a zero + - 1r) · ∏ (λ i → a (suc i))) + + ν (a zero) · ∏ a) + ≡⟨ cong + (λ a₁ → M(a₁ + ν (a zero) · ∏ a)) (·Assoc _ _ _) ⟩ + M ((- 1r) · ( ν (a zero) · a zero + - 1r) · ∏ (λ i → a (suc i)) + ν (a zero) · ∏ a) + ≡⟨ cong (λ a₁ → M (((- 1r) · (a₁ + - 1r) · ∏ (λ i → a (suc i)) + ν (a zero) · ∏ a))) (CommRingStr.·Comm (snd P') _ _) ⟩ + M ((- 1r) · (a zero · ν (a zero) + - 1r) · ∏ (λ i → a (suc i)) + ν (a zero) · ∏ a) + ≡⟨ it-eq₆ ⟩ + true + ∎) + (M (1r · ∏ (λ i → a (suc i))) + ≡⟨ cong (λ x → M x) (·IdL _) ⟩ + M (∏ (λ i → a (suc i))) + ≡⟨ it-eq₁ ⟩ + false + ∎) + ) + diff --git a/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda b/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda new file mode 100644 index 0000000000..61d20a7a7c --- /dev/null +++ b/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda @@ -0,0 +1,107 @@ +{-# OPTIONS --cubical #-} + +-- PolynomialRingZ.agda +module PolynomialRingZnew where + +open import Agda.Primitive.Cubical +open import Cubical.Foundations.Prelude +open import Cubical.Foundations.Equiv +open import Cubical.Algebra.Polynomials.UnivariateList.Properties +open import Cubical.Algebra.Polynomials.UnivariateList.Base +open import Cubical.Data.Int.Properties +open import Cubical.Algebra.CommRing +open import Cubical.Data.Int.Base renaming ( _+_ to _+ℤ_ ; _·_ to _·ℤ_; -_ to -ℤ_) +open import Cubical.Data.Nat renaming (_+_ to _+ℕ_ ; _·_ to _·ℕ_ ; isZero to isZeroℕ ; isEven to isEvenℕ ; isOdd to isOddℕ) +open import Cubical.Data.Prod +open import Cubical.Data.Sum +open import Cubical.Data.Bool +open import Cubical.Data.Empty renaming (elim to ⊥-elim) +open import Cubical.Foundations.Equiv +open import Cubical.Foundations.Prelude +open import Cubical.Algebra.CommRing.Base +open import Cubical.Algebra.CommRing.Instances.Polynomials.UnivariatePolyList +open import Cubical.Data.Bool +open import Cubical.Data.Empty +open import Cubical.Tactics.CommRingSolver +open import ExplMaxIdeal + +{- record Inspect {A : Set} (x : A) : Set where + constructor what + field + it : A + it-eq : x ≡ it + +inspect : ∀ {A : Set} (x : A) → Inspect x +inspect x = what x refl -} + +-- ℤ is a commutative ring -- + +isCommRingℤ : IsCommRing (pos 0) (pos 1) _+ℤ_ _·ℤ_ -ℤ_ +isCommRingℤ = makeIsCommRing + isSetℤ + +Assoc + (λ x → refl) + -Cancel + +Comm + ·Assoc + ·IdR + ·DistR+ + ·Comm + +ℤCommRingStr : CommRingStr ℤ +ℤCommRingStr = record + { 0r = pos 0 + ; 1r = pos 1 + ; _+_ = _+ℤ_ + ; _·_ = _·ℤ_ + ; -_ = -ℤ_ + ; isCommRing = isCommRingℤ + } + +ℤCommRing : CommRing Agda.Primitive.lzero +ℤCommRing = ℤ , ℤCommRingStr + +isZero : ℤ → Bool +isZero (pos n) = isZeroℕ n +isZero (ℤ.negsuc n) = false + +-- Polynomial ring over ℤ is a commutative ring -- + +module PolyRingℤ = PolyModTheory ℤCommRing renaming (_Poly+_ to _+P_; Poly- to -P_; _Poly*_ to _·P_) +module PolyModℤ = PolyMod ℤCommRing +open PolyMod ℤCommRing + +ℤ[X] : Type +ℤ[X] = Poly ℤCommRing + +TestPolynom1 : ℤ[X] +TestPolynom1 = pos 3 ∷ pos 1 ∷ pos 1 ∷ [] + +isCommRingℤ[X] : IsCommRing [] (pos 1 ∷ []) PolyRingℤ._+P_ PolyRingℤ._·P_ PolyRingℤ.-P_ +isCommRingℤ[X] = makeIsCommRing + PolyModℤ.isSetPoly + PolyRingℤ.Poly+Assoc + (λ x → refl) + PolyRingℤ.Poly+Inverses + PolyRingℤ.Poly+Comm + PolyRingℤ.Poly*Associative + PolyRingℤ.Poly*Rid + PolyRingℤ.Poly*LDistrPoly+ + PolyRingℤ.Poly*Commutative + +ℤ[X]CommRingStr : CommRingStr (Poly ℤCommRing) +ℤ[X]CommRingStr = record + { 0r = [] + ; 1r = pos 1 ∷ [] + ; _+_ = PolyRingℤ._+P_ + ; _·_ = PolyRingℤ._·P_ + ; -_ = PolyRingℤ.-P_ + ; isCommRing = isCommRingℤ[X] + } + +ℤ[X]CommRing : CommRing Agda.Primitive.lzero +ℤ[X]CommRing = record + { fst = Poly ℤCommRing + ; snd = ℤ[X]CommRingStr + } + From 92db749bf9a55cd4d0c04b622183997356b6cd73 Mon Sep 17 00:00:00 2001 From: Franziskus Wiesnet Date: Tue, 12 Nov 2024 17:49:41 +0100 Subject: [PATCH 6/7] MaxZX added --- Cubical/Algebra/MaxZX/PolynomialRingZnew.agda | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda b/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda index 61d20a7a7c..cd30b9aace 100644 --- a/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda +++ b/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda @@ -1,8 +1,9 @@ {-# OPTIONS --cubical #-} -- PolynomialRingZ.agda -module PolynomialRingZnew where +module Cubical.Algebra.MaxZX.PolynomialRingZnew where +open import Agda.Primitive open import Agda.Primitive.Cubical open import Cubical.Foundations.Prelude open import Cubical.Foundations.Equiv @@ -23,7 +24,7 @@ open import Cubical.Algebra.CommRing.Instances.Polynomials.UnivariatePolyList open import Cubical.Data.Bool open import Cubical.Data.Empty open import Cubical.Tactics.CommRingSolver -open import ExplMaxIdeal +open import Cubical.Algebra.MaxZX.ExplMaxIdeal {- record Inspect {A : Set} (x : A) : Set where constructor what From 4812b14ef430870b3e064333968588ec6d4d165f Mon Sep 17 00:00:00 2001 From: Franziskus Wiesnet Date: Thu, 14 Nov 2024 15:30:31 +0100 Subject: [PATCH 7/7] PolynomialRingZ added --- Cubical/Algebra/MaxZX/PolynomialRingZ.agda | 242 ++++++++++++++++++ Cubical/Algebra/MaxZX/PolynomialRingZnew.agda | 108 -------- 2 files changed, 242 insertions(+), 108 deletions(-) create mode 100644 Cubical/Algebra/MaxZX/PolynomialRingZ.agda delete mode 100644 Cubical/Algebra/MaxZX/PolynomialRingZnew.agda diff --git a/Cubical/Algebra/MaxZX/PolynomialRingZ.agda b/Cubical/Algebra/MaxZX/PolynomialRingZ.agda new file mode 100644 index 0000000000..a63826aebc --- /dev/null +++ b/Cubical/Algebra/MaxZX/PolynomialRingZ.agda @@ -0,0 +1,242 @@ +{-# OPTIONS --cubical #-} + +-- PolynomialRingZ.agda +module PolynomialRingZ where + +open import Agda.Primitive.Cubical +open import Cubical.Foundations.Prelude +open import Cubical.Foundations.Equiv +open import Cubical.Algebra.Polynomials.UnivariateList.Properties +open import Cubical.Algebra.Polynomials.UnivariateList.Base +open import Cubical.Data.Int.Properties +open import Cubical.Algebra.CommRing +open import Cubical.Data.Int.Base renaming ( _+_ to _+ℤ_ ; _·_ to _·ℤ_; -_ to -ℤ_) +open import Cubical.Data.Nat renaming (_+_ to _+ℕ_ ; _·_ to _·ℕ_ ; isZero to isZeroℕ ; isEven to isEvenℕ ; isOdd to isOddℕ) +open import Cubical.Data.Prod +open import Cubical.Data.Sum +open import Cubical.Data.Bool +open import Cubical.Data.Empty renaming (rec to ⊥-elim) +open import Cubical.Foundations.Equiv +open import Cubical.Foundations.Prelude +open import Cubical.Algebra.CommRing.Base +open import Cubical.Algebra.CommRing.Instances.Polynomials.UnivariatePolyList +open import Cubical.Data.Bool +open import Cubical.Data.Empty +open import Cubical.Tactics.CommRingSolver +open import Cubical.HITs.PropositionalTruncation.Base +open import ExplMaxIdeal + +{- record Inspect {A : Set} (x : A) : Set where + constructor what + field + it : A + it-eq : x ≡ it + +inspect : ∀ {A : Set} (x : A) → Inspect x +inspect x = what x refl -} + +-- ℤ is a commutative ring -- + +isCommRingℤ : IsCommRing (pos 0) (pos 1) _+ℤ_ _·ℤ_ -ℤ_ +isCommRingℤ = makeIsCommRing + isSetℤ + +Assoc + (λ x → refl) + -Cancel + +Comm + ·Assoc + ·IdR + ·DistR+ + ·Comm + +ℤCommRingStr : CommRingStr ℤ +ℤCommRingStr = record + { 0r = pos 0 + ; 1r = pos 1 + ; _+_ = _+ℤ_ + ; _·_ = _·ℤ_ + ; -_ = -ℤ_ + ; isCommRing = isCommRingℤ + } + +ℤCommRing : CommRing Agda.Primitive.lzero +ℤCommRing = ℤ , ℤCommRingStr + +isZero : ℤ → Bool +isZero (pos n) = isZeroℕ n +isZero (ℤ.negsuc n) = false + +-- Polynomial ring over ℤ is a commutative ring -- + +module PolyRingℤ = PolyModTheory ℤCommRing renaming (_Poly+_ to _+P_; Poly- to -P_; _Poly*_ to _·P_) +module PolyModℤ = PolyMod ℤCommRing +open PolyMod ℤCommRing + +ℤ[X] : Type +ℤ[X] = Poly ℤCommRing + +TestPolynom1 : ℤ[X] +TestPolynom1 = pos 3 ∷ pos 1 ∷ pos 1 ∷ [] + +isCommRingℤ[X] : IsCommRing [] (pos 1 ∷ []) PolyRingℤ._+P_ PolyRingℤ._·P_ PolyRingℤ.-P_ +isCommRingℤ[X] = makeIsCommRing + PolyModℤ.isSetPoly + PolyRingℤ.Poly+Assoc + (λ x → refl) + PolyRingℤ.Poly+Inverses + PolyRingℤ.Poly+Comm + PolyRingℤ.Poly*Associative + PolyRingℤ.Poly*Rid + PolyRingℤ.Poly*LDistrPoly+ + PolyRingℤ.Poly*Commutative + +ℤ[X]CommRingStr : CommRingStr (Poly ℤCommRing) +ℤ[X]CommRingStr = record + { 0r = [] + ; 1r = pos 1 ∷ [] + ; _+_ = PolyRingℤ._+P_ + ; _·_ = PolyRingℤ._·P_ + ; -_ = PolyRingℤ.-P_ + ; isCommRing = isCommRingℤ[X] + } + +ℤ[X]CommRing : CommRing Agda.Primitive.lzero +ℤ[X]CommRing = record + { fst = Poly ℤCommRing + ; snd = ℤ[X]CommRingStr + } + +open ExplMaxIdeal.ExplMaxIdeal ℓ-zero ℤ[X]CommRing + + +data 𝕌 : Set where + u : 𝕌 + +X : ℤ[X] +X = pos 0 ∷ pos 1 ∷ [] + +isPos : ℕ → Bool +isPos (suc n) = true +isPos zero = false + +suc≢zero : {n : ℕ} → suc n ≡ 0 → ⊥ +suc≢zero eq = true≢false (cong isPos eq) + +possuc≢poszero : {n : ℕ} → (pos (suc n)) ≡ (pos 0) → ⊥ +possuc≢poszero {n} eq = true≢false (cong isPosSuc eq) + where + isPosSuc : ℤ → Bool + isPosSuc (pos zero) = false + isPosSuc (pos (suc n)) = true + isPosSuc (negsuc n) = true + +negsuc≢poszero : {n : ℕ} → negsuc n ≡ (pos 0) → ⊥ +negsuc≢poszero {n} eq = true≢false (cong isPosSuc eq) + where + isPosSuc : ℤ → Bool + isPosSuc (pos zero) = false + isPosSuc (pos (suc n)) = true + isPosSuc (negsuc n) = true + +degSeq : (ℕ → ℤ) → ℕ → ℤ +degSeq f m with (f m) +degSeq f zero | pos zero = negsuc 0 +degSeq f (suc m) | pos zero = degSeq f m +degSeq f m | pos (suc n) = pos m +degSeq f m | negsuc n = pos m + +_≤ℕ_ : ℕ → ℕ → Bool +zero ≤ℕ m = true +suc n ≤ℕ zero = false +suc n ≤ℕ suc m = n ≤ℕ m + +{- lemma1 : {m : ℕ} → (m ≤ℕ 0) ≡ true → m ≡ 0 +lemma1 {zero} le = refl +lemma1 {suc m} le = ⊥-elim (true≢false (sym le))-} + +degAux1 : (m : ℕ) → (p : ℤ[X]) → + ((m₁ : ℕ) → true ≡ true → PolyMod.Poly→Fun (ℤ , ℤCommRingStr) p m₁ ≡ pos 0) → + (if isZeroℕ m then pos zero else PolyMod.Poly→Fun (ℤ , ℤCommRingStr) p (predℕ m)) ≡ pos 0 +degAux1 zero p x = refl +degAux1 (suc m) p x = x m refl + +degAux : (p : ℤ[X]) → Σ ℕ (λ n → ((m : ℕ) → (n ≤ℕ m ≡ true) → (Poly→Fun p m ≡ pos 0)) × ((n ≡ 0) ⊎ (Poly→Fun p (predℕ n) ≡ pos 0 → ⊥))) +degAux [] = 0 , (λ m le → refl) , inl refl +degAux (a ∷ p) with (degAux p) +degAux (pos zero ∷ p) | zero , (x , x₁) = 0 , ((λ m x₂ → degAux1 m p x) , inl refl) +degAux (pos (suc n) ∷ p) | zero , (x , inl x₁) = 1 , ((λ m x₂ → lemma m x₂) , (inr possuc≢poszero)) + where + lemma : (m : ℕ) → (1 ≤ℕ m) ≡ true → (if isZeroℕ m then pos (suc n) else PolyMod.Poly→Fun (ℤ , ℤCommRingStr) p (predℕ m)) ≡ pos 0 + lemma zero x₂ = ⊥-elim (true≢false (sym x₂)) + lemma (suc n) x₂ = x n refl +degAux (pos (suc n) ∷ p) | zero , (x , inr x₁) = 0 , ((λ m x₂ → ⊥-elim (x₁ (x zero refl))) , inl refl) +degAux (negsuc n ∷ p) | zero , (x , inl x₁) = 1 , ((λ m x₂ → lemma m x₂) , inr negsuc≢poszero) + where + lemma : (m : ℕ) → (1 ≤ℕ m) ≡ true → (if isZeroℕ m then (negsuc n) else PolyMod.Poly→Fun (ℤ , ℤCommRingStr) p (predℕ m)) ≡ pos 0 + lemma zero x₂ = ⊥-elim (true≢false (sym x₂)) + lemma (suc n) x₂ = x n refl +degAux (negsuc n ∷ p) | zero , (x , inr x₁) = 0 , ((λ m x₂ → ⊥-elim (x₁ (x zero refl))) , inl refl) +degAux (a ∷ p) | suc fst₁ , (eq , inl x₁) = ⊥-elim (suc≢zero x₁) +degAux (pos n ∷ p) | suc fst₁ , (eq , inr x₁) = suc (suc fst₁) , ((λ m x → lemma m x) , (inr x₁)) + where + lemma : (m : ℕ) → ((suc (suc fst₁) ≤ℕ m) ≡ true) → (if isZeroℕ m then pos n else PolyMod.Poly→Fun (ℤ , ℤCommRingStr) p (predℕ m)) ≡ pos 0 + lemma zero x = ⊥-elim (true≢false (sym x)) + lemma (suc m) x = eq m x +degAux (negsuc n ∷ p) | suc fst₁ , (eq , inr x₁) = suc (suc fst₁) , ((λ m x → lemma m x) , (inr x₁)) + where + lemma : (m : ℕ) → ((suc (suc fst₁) ≤ℕ m) ≡ true) → (if isZeroℕ m then (negsuc n) else PolyMod.Poly→Fun (ℤ , ℤCommRingStr) p (predℕ m)) ≡ pos 0 + lemma zero x = ⊥-elim (true≢false (sym x)) + lemma (suc m) x = eq m x +degAux (drop0 i) = 0 , lemma i + where + lemma : (i : I) → ((m : ℕ) → (0 ≤ℕ m ≡ true) → (Poly→Fun (drop0 i) m ≡ pos 0)) × ((0 ≡ 0) ⊎ (Poly→Fun (drop0 i) 0 ≡ pos 0 → ⊥)) + lemma i = (λ m x i₁ → subLemma i zero) , inl refl + where + subLemma : (λ n → if isZero n then pos 0 else pos 0) ≡ (λ _ → pos 0) + subLemma i n = pos 0 + subLemma i n = pos 0 + +deg : ℤ[X] → ℕ +deg p = {!!} + +_+P_ = PolyRingℤ._+P_ +_·P_ = PolyRingℤ._·P_ +-P_ = PolyRingℤ.-P_ + +LC : ℤ[X] → ℤ +LC [] = pos 0 +LC (a ∷ p) = if isZero (LC p) then a else LC p +LC (drop0 i) = pos 0 + +{- LCnegZero : (p : ℤ[X]) → (n : ℕ) → (deg p ≡ pos n) → Poly→Fun p n ≡ pos 0 → ⊥ +LCnegZero [] n eq eq0r = pos≢neg (sym eq) +LCnegZero (a ∷ p) zero eq eq0r = {!!} +LCnegZero (a ∷ p) (suc n) eq eq0r = {!!} +LCnegZero (drop0 i) n eq eq0r = {!!} -} + +{- degToZero : (f : ℤ[X]) → deg f ≡ negsuc 0 → f ≡ [] +degToZero [] eq = refl +degToZero (a ∷ f) eq with inspect (deg (a ∷ f)) +... | what (pos zero) it-eq = {!!} +... | what (pos (suc n)) it-eq = {!!} +... | what (negsuc n) it-eq = {!!} +degToZero (drop0 i) eq = (λ i₁ → (drop0 (primIMax i i₁))) -} + +_≤ℤ_ : ℤ → ℤ → Bool +pos n ≤ℤ pos m = n ≤ℕ m +pos n ≤ℤ negsuc m = false +negsuc n ≤ℤ pos m = true +negsuc n ≤ℤ negsuc m = m ≤ℕ n + +{- Lemma5a : (f : ℤ[X]) → pos 0 ≤ℤ deg ((X ·P f) +P (-P (pos 1 ∷ []))) ≡ true +Lemma5a [] = refl +Lemma5a (a ∷ f) = {!!} +Lemma5a (drop0 i) = {!!} + +Lemma5 : (M : ℤ[X] → Bool) → (ν : R → R) → WitnessNotMaximalIdeal M ν ⊎ Σ ℤ[X] (λ f → ((pos 0 ≤ℤ deg f) ≡ true) × (M f ≡ true)) +Lemma5 M ν with inspect (M X) +... | what true it-eq = inr (X , (refl , it-eq)) +... | what false it-eq with inspect (M ((X ·P (ν X)) +P (-P (pos 1 ∷ []))) ) +... | what false it-eq₁ = inl (notMax X it-eq it-eq₁) +... | what true it-eq₁ = inr (((X ·P (ν X)) +P (-P (pos 1 ∷ []))) , ({!!} , it-eq₁)) -} + diff --git a/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda b/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda deleted file mode 100644 index cd30b9aace..0000000000 --- a/Cubical/Algebra/MaxZX/PolynomialRingZnew.agda +++ /dev/null @@ -1,108 +0,0 @@ -{-# OPTIONS --cubical #-} - --- PolynomialRingZ.agda -module Cubical.Algebra.MaxZX.PolynomialRingZnew where - -open import Agda.Primitive -open import Agda.Primitive.Cubical -open import Cubical.Foundations.Prelude -open import Cubical.Foundations.Equiv -open import Cubical.Algebra.Polynomials.UnivariateList.Properties -open import Cubical.Algebra.Polynomials.UnivariateList.Base -open import Cubical.Data.Int.Properties -open import Cubical.Algebra.CommRing -open import Cubical.Data.Int.Base renaming ( _+_ to _+ℤ_ ; _·_ to _·ℤ_; -_ to -ℤ_) -open import Cubical.Data.Nat renaming (_+_ to _+ℕ_ ; _·_ to _·ℕ_ ; isZero to isZeroℕ ; isEven to isEvenℕ ; isOdd to isOddℕ) -open import Cubical.Data.Prod -open import Cubical.Data.Sum -open import Cubical.Data.Bool -open import Cubical.Data.Empty renaming (elim to ⊥-elim) -open import Cubical.Foundations.Equiv -open import Cubical.Foundations.Prelude -open import Cubical.Algebra.CommRing.Base -open import Cubical.Algebra.CommRing.Instances.Polynomials.UnivariatePolyList -open import Cubical.Data.Bool -open import Cubical.Data.Empty -open import Cubical.Tactics.CommRingSolver -open import Cubical.Algebra.MaxZX.ExplMaxIdeal - -{- record Inspect {A : Set} (x : A) : Set where - constructor what - field - it : A - it-eq : x ≡ it - -inspect : ∀ {A : Set} (x : A) → Inspect x -inspect x = what x refl -} - --- ℤ is a commutative ring -- - -isCommRingℤ : IsCommRing (pos 0) (pos 1) _+ℤ_ _·ℤ_ -ℤ_ -isCommRingℤ = makeIsCommRing - isSetℤ - +Assoc - (λ x → refl) - -Cancel - +Comm - ·Assoc - ·IdR - ·DistR+ - ·Comm - -ℤCommRingStr : CommRingStr ℤ -ℤCommRingStr = record - { 0r = pos 0 - ; 1r = pos 1 - ; _+_ = _+ℤ_ - ; _·_ = _·ℤ_ - ; -_ = -ℤ_ - ; isCommRing = isCommRingℤ - } - -ℤCommRing : CommRing Agda.Primitive.lzero -ℤCommRing = ℤ , ℤCommRingStr - -isZero : ℤ → Bool -isZero (pos n) = isZeroℕ n -isZero (ℤ.negsuc n) = false - --- Polynomial ring over ℤ is a commutative ring -- - -module PolyRingℤ = PolyModTheory ℤCommRing renaming (_Poly+_ to _+P_; Poly- to -P_; _Poly*_ to _·P_) -module PolyModℤ = PolyMod ℤCommRing -open PolyMod ℤCommRing - -ℤ[X] : Type -ℤ[X] = Poly ℤCommRing - -TestPolynom1 : ℤ[X] -TestPolynom1 = pos 3 ∷ pos 1 ∷ pos 1 ∷ [] - -isCommRingℤ[X] : IsCommRing [] (pos 1 ∷ []) PolyRingℤ._+P_ PolyRingℤ._·P_ PolyRingℤ.-P_ -isCommRingℤ[X] = makeIsCommRing - PolyModℤ.isSetPoly - PolyRingℤ.Poly+Assoc - (λ x → refl) - PolyRingℤ.Poly+Inverses - PolyRingℤ.Poly+Comm - PolyRingℤ.Poly*Associative - PolyRingℤ.Poly*Rid - PolyRingℤ.Poly*LDistrPoly+ - PolyRingℤ.Poly*Commutative - -ℤ[X]CommRingStr : CommRingStr (Poly ℤCommRing) -ℤ[X]CommRingStr = record - { 0r = [] - ; 1r = pos 1 ∷ [] - ; _+_ = PolyRingℤ._+P_ - ; _·_ = PolyRingℤ._·P_ - ; -_ = PolyRingℤ.-P_ - ; isCommRing = isCommRingℤ[X] - } - -ℤ[X]CommRing : CommRing Agda.Primitive.lzero -ℤ[X]CommRing = record - { fst = Poly ℤCommRing - ; snd = ℤ[X]CommRingStr - } -