open import Algebra.DecidableField module MatrixFuncNormalization.MainTheo {c ℓ₁ ℓ₂} (dField : DecidableField c ℓ₁ ℓ₂) where open import Level open import Function open import Algebra open import Algebra.Apartness open import Data.Product open import Data.Nat.Base using (ℕ) open import Algebra.Matrix.Structures open DecidableField dField renaming (Carrier to F; heytingField to hField) open import MatrixFuncNormalization.NormAfter.PropsFlip dField hiding (module PNorm) open import MatrixFuncNormalization.Definitions dField open MRing rawRing hiding (matOps→func) open import MatrixFuncNormalization.ElimZeros.Properties dField open import Algebra.Module.Instances.FunctionalVector ring import Algebra.Module.Props as MProps open module P′ {n} = MProps commutativeRing (leftModule n) private variable m n : ℕ normalize : (xs : Matrix F n m) → FromNormalization xs normalize xs = let ys , pivs , mPivs , xs≈ⱽys , colsZero , pivsCrescent = allTheoremsTogether xs in record { xs≈ⱽys = xs≈ⱽys ; ysNormed = record { mPivots = mPivs ; pivsCrescent = pivsCrescent ; columnsZero = colsZero } } normalize≈1 : (xs : Matrix F n m) → FromNormalization≈1 xs normalize≈1 xs = record { ysNormed = ysIsNormed≈1 ; xs≋ⱽys = ≋ⱽ-trans xs≋ⱽys xs≋ⱽys₂ } where open FromNormalization (normalize xs) open FromNormed (record { isNormed = ysNormed }) renaming (xs≋ⱽys to xs≋ⱽys₂) normalize≈1≁0 : (xs : Matrix F n m) → FromNormalization≁0≈1 xs _ normalize≈1≁0 xs = record { ysNormed = xs≁0Normed ; xs≋ⱽys = ≋ⱽ-trans xs≋ⱽys xs≋ⱽxs≁0 } where open FromNormalization≈1 (normalize≈1 xs) open FromNormed≈1 (record { isNormed≈1 = ysNormed }) hiding (xs≋ⱽys)