{-# OPTIONS --warning=error --safe #-} open import LogicalFormulae open import Numbers.Naturals open import Functions 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 {- cp-> th') > : {n m : ℕ} (th : n <= m) → (oi o>> th) ≡ th idThen-o>> oz = refl idThen-o>> (os th) = applyEquality os (idThen-o>> th) idThen-o>> {zero} (o' th) = refl idThen-o>> {succ n} (o' th) with idThen-o>> th ... | bl = {!!} idAfter-o>> : {n m : ℕ} (th : n <= m) → (th o>> oi) ≡ th idAfter-o>> th = {!!} -}