module dep where data Nat : Set where zero : Nat suc : Nat → Nat data L (A : Set) : Set where [] : L A _::_ : A → L A → L A data Vect (A : Set) : Nat → Set where vnil : Vect A zero vcons : {n : Nat} → A → Vect A n → Vect A (suc n) infix 2 _+_ infix 3 _*_ _+_ : Nat → Nat → Nat n + zero = n n + suc m = suc (n + m) _*_ : Nat -> Nat -> Nat n * zero = zero n * suc m = n * m + n inner : {n : Nat} → Vect Nat n → Vect Nat n → Nat inner vnil vnil = zero inner (vcons x xs) (vcons y ys) = x * y + inner xs ys