module MatrixNormalization.FinProps where
open import Level using (Level; _⊔_) renaming (zero to lzero; suc to lsuc)
open import Function using (_$_)
open import Data.Nat as ℕ using (ℕ; suc; z≤n; s≤s)
open import Data.Nat.Properties
open import Data.Fin
open import Data.Fin.Properties as F
open import Relation.Binary.PropositionalEquality
open import lbry
private variable
ℓ ℓ₁ : Level
n : ℕ
record FinProps {ℓ₁} {ℓ₂} (A : Set ℓ) (n : ℕ) : Set (lsuc $ ℓ ⊔ ℓ₁ ⊔ ℓ₂) where
field
Pij : (i j : Fin (suc n)) .(i≤j : i ≤ j) (a : A) → Set ℓ₁
Pi : (i : Fin (suc n)) (a : A) → Set ℓ₁
P : (a : A) → Set ℓ₁
Pab : ∀ (i j : Fin (suc n)) .(i≢j : i ≢ j) (a b : A) → Set ℓ₂
Pij→Pi : ∀ (i : Fin (ℕ.suc n)) a (pij : Pij i (fromℕ _) (≤fromℕ _) a) → Pi i a
Pi→P : ∀ a (pi : Pi (fromℕ n) a) → P a
Pi→Pii : ∀ (i : Fin n) a (pi : Pi (inject₁ i) a) → Pij (suc i) (suc i) F.≤-refl a
Ps : ∀ i (j : Fin n) .(i≤j : i ≤ j) a b
(pij : Pij i (inject₁ j) (cong≤ʳ (sym (toℕ-inject₁ _)) i≤j) a)
(pab : Pab i (suc j) (F.<⇒≢ (s≤s i≤j)) a b) → Pij i (suc j) (m≤n⇒m≤1+n i≤j) b
P00 : ∀ a → Pij zero zero ℕ.z≤n a
record FinPropsInv (A : Set ℓ) (n : ℕ) : Set (lsuc ℓ) where
field
Pij : (i j : Fin (suc n)) .(i≥j : i ≥ j) (a : A) → Set ℓ
Pi : (i : Fin (suc n)) (a : A) → Set ℓ
P : (a : A) → Set ℓ
Pab : ∀ (i j : Fin (suc n)) .(i>j : i > j) (a b : A) → Set ℓ
Pij→Pi : ∀ (i : Fin (ℕ.suc n)) a (pij : Pij i zero z≤n a) → Pi i a
Pi→P : ∀ a (pi : Pi zero a) → P a
Pi→Pii : ∀ (i : Fin n) a (pi : Pi (suc i) a) → Pij (inject₁ i) (inject₁ i) F.≤-refl a
Ppred : ∀ i (j : Fin n) .(i>j : i > j) a b
(pij : Pij i (suc j) i>j a)
(pab : Pab i (inject₁ j) (i>j→i>injJ i>j) a b)
→ Pij i (inject₁ j) (i>j→i≥j i>j) b
Pnn : ∀ a → Pij (fromℕ _) (fromℕ _) F.≤-refl a