packages feed

pisigma-0.1.0.1: examples/Vec.pi

:l Fin.pi

Vec : Nat -> Type -> Type;
Vec = \ m a -> split m with (lm , m') ->
                 ! case lm of {
		     z -> [Unit]
		   | s -> [a * Vec m' a] }; 

vnil : (a : Type) -> Vec zero a;
vnil = \ a -> 'unit;

vcons : (a : Type) -> (n : Nat) -> a -> Vec n a -> Vec (succ n) a;
vcons = \ a b x xs -> (x ,xs);

nth : (a : Type) -> (n : Nat) -> (xs : Vec n a) -> Fin n -> a;
nth = \ a n xs i -> split n with (ln , n') ->
      	       	    ! case ln of {
		        z -> case i of {}
		      | s -> split xs with (x, xs') ->
		             split i with (li , i') ->
		               case li of {
		 	         z -> [x]
		               | s -> [nth a n' xs' i']}}