packages feed

MiniAgda-0.2014.1.9: test/succeed/BuiltinSigma.ma

-- 2011-12-17
-- non-dependent pairs

fun fst' : (A, B : Set) -> (A & B) -> A
{ fst' A B (a, b) = a
}

fun snd' : (A, B : Set) -> A & B -> B
{ snd' A B (a, b) = b
}

let swap : (A, B : Set) -> A & B -> B & A
  = \ A B p -> (snd' A B p, fst' A B p)

fun reassoc' : (A, B, C : Set) -> (A & B) & C -> A & B & C
{ reassoc' A B C ((a , b) , c) = let bc : B & C = b , c in a , bc 
}

fun reassoc'' : (A, B, C : Set) -> (A & B) & C -> A & B & C
{ reassoc'' A B C ((a , b) , c) = a , b , c
}

fun reassoc3 : (A, B, C, D : Set) -> ((A & B) & C) & D -> A & B & C & D
{ reassoc3 A B C D (((a , b) , c) , d) = a , b , c , d
}

-- dependent pairs

fun fst : (A : Set) -> (B : A -> Set) -> (x : A) & B x -> A
{ fst A B (a, b) = a
}

fun snd : (A : Set) -> (B : A -> Set) -> (p : (x : A) & B x) -> B (fst A B p)
{ snd A B (a, b) = b
}

let curry : (A : Set) -> (B : A -> Set) -> (C : (x : A) -> B x -> Set) -> 
   ((p : (x : A) & B x) -> C (fst A B p) (snd A B p)) -> 
   ((x : A) -> (y : B x) -> C x y) 
  = \ A B C f x y -> f (x , y)

fun uncurry : (A : Set) -> (B : A -> Set) -> (C : (x : A) -> B x -> Set) -> 
  ((x : A) -> (y : B x) -> C x y) -> 
  (p : (x : A) & B x) -> C (fst A B p) (snd A B p)
{ uncurry A B C f (x , y) = f x y
}