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)