open import Level
open import Algebra.Apartness
open import Algebra.Bundles using (CommutativeRing)
open import Data.Nat as ℕ
open import Data.Vec
open import Relation.Binary
open import Algebra.Matrix.Structures
open import Algebra.DecidableField
import MatrixFuncNormalization.NormAfter.Base as NormAfter
import MatrixFuncNormalization.ElimZeros.Base as EZeros
module MatrixFuncNormalization.NormAfter.AppendIdentity {c ℓ₁ ℓ₂} (dField : DecidableField c ℓ₁ ℓ₂) where
open DecidableField dField renaming (Carrier to F; heytingField to hField)
open MRing rawRing
open NormAfter dField
open EZeros dField
private variable
m n p : ℕ
module _ (xs : Matrix F n m) where
_++id : Matrix F n (m ℕ.+ n)
_++id = xs ++ⱽ 1ᴹ
norm_++id : Matrix F n (m ℕ.+ n)
norm_++id = normalize _++id
inverseWithCoeff : Matrix F n n
inverseWithCoeff = dropⱽ m norm_++id
inverse : Matrix F n n
inverse = dropⱽ m (divideByCoeff norm_++id)