> natElim : (p : Nat -> Type) -> p Z -> ((k : Nat) -> p k -> p (S k)) -> > (x : Nat) -> p x > natElim2 : (p : Nat -> Type) -> p Z -> ((k : Nat) -> p k -> p (S k)) -> > (x : Nat) -> p x > natElim2 p x f Z = x > natElim2 p x f (S k) = ?foo > listElim : (p : List a -> Type) -> > (mnil : p []) -> > (mcons : (x : _) -> (xs : List a) -> p xs -> p (x :: xs)) -> > (xs : List a) -> p xs