{-# OPTIONS --warning=error --safe --without-K #-} open import LogicalFormulae open import Numbers.Naturals.Semiring open import Numbers.Naturals.Order open import Functions open import Semirings.Definition open import Orders open import Lists.Lists data Vec {a : _} (X : Set a) : ℕ -> Set a where [] : Vec X zero _,-_ : {n : ℕ} -> X -> Vec X n -> Vec X (succ n) vecLen : {a : _} {X : Set a} {n : ℕ} → Vec X n → ℕ vecLen {a} {X} {n} v = n vecHead : {a : _} {X : Set a} {n : ℕ} → Vec X (succ n) → X vecHead (x ,- xs) = x vecTail : {a : _} {X : Set a} {n : ℕ} → Vec X (succ n) → Vec X n vecTail (x ,- xs) = xs vecIsHeadPlusTail : {a : _} {X : Set a} {n : ℕ} → (xs : Vec X (succ n)) → (vecHead xs ,- vecTail xs) ≡ xs vecIsHeadPlusTail (x ,- xs) = refl _+V_ : {a : _} {X : Set a} {m n : ℕ} → Vec X m → Vec X n → Vec X (m +N n) [] +V ys = ys (x ,- xs) +V ys = (x ,- (xs +V ys)) vecIndex : {a : _} {X : Set a} {m : ℕ} → Vec X m → (i : ℕ) → (i >_ : {p n m : ℕ} → p <= n → n <= m → p <= m oz o>> th' = th' os th o>> os th' = os (th o>> th') os th o>> o' th' = os (o' th o>> th') o' th o>> os th' = o' (th o>> th') o' th o>> o' th' = o' (o' th o>> th') eqHelper : {a : _} {X : Set a} (x : X) {n : ℕ} {r s : Vec X n} (pr : r ≡ s) → (x ,- r) ≡ (x ,- s) eqHelper x pr rewrite pr = refl