Type | Arity |
---|---|
sum | 2 |
Constant | Type |
IS_SUM_REP | :(bool -> 'a -> 'b -> bool) -> bool |
OUTL | :'a + 'b -> 'a |
OUTR | :'a + 'b -> 'b |
sum_case | :('b -> 'a) -> ('c -> 'a) -> 'b + 'c -> 'a |
INL | :'a -> 'a + 'b |
INR | :'b -> 'a + 'b |
ISL | :'a + 'b -> bool |
ISR | :'a + 'b -> bool |
REP_sum | :'a + 'b -> bool -> 'a -> 'b -> bool |
ABS_sum | :(bool -> 'a -> 'b -> bool) -> 'a + 'b |
|- !f. IS_SUM_REP f = ?v1 v2. (f = (\b x y. (x = v1) /\ b)) \/ (f = (\b x y. (y = v2) /\ ~b))
|- ?rep. TYPE_DEFINITION IS_SUM_REP rep
|- (!a. ABS_sum (REP_sum a) = a) /\ !r. IS_SUM_REP r = (REP_sum (ABS_sum r) = r)
|- !e. INL e = ABS_sum (\b x y. (x = e) /\ b)
|- !e. INR e = ABS_sum (\b x y. (y = e) /\ ~b)
|- (!x. ISL (INL x)) /\ !y. ~ISL (INR y)
|- (!x. ISR (INR x)) /\ !y. ~ISR (INL y)
|- !x. OUTL (INL x) = x
|- !x. OUTR (INR x) = x
|- (!f g x. case f g (INL x) = f x) /\ !f g y. case f g (INR y) = g y
|- (!y x. (INL x = INL y) = (x = y)) /\ !y x. (INR x = INR y) = (x = y)
|- !v1 v2. ~(INR v2 = INL v1)
|- !f g. ?!h. (h o INL = f) /\ (h o INR = g)
|- !P. (!x. P (INL x)) /\ (!y. P (INR y)) ==> !s. P s
|- !f g. ?h. (!x. h (INL x) = f x) /\ !y. h (INR y) = g y
|- !s. (?x. s = INL x) \/ ?y. s = INR y
|- !x y. ~(INL x = INR y)
|- !x y. ~(INR y = INL x)
|- !x. ISL x \/ ISR x
|- !x. ISL x ==> (INL (OUTL x) = x)
|- !x. ISR x ==> (INR (OUTR x) = x)
|- !M M' f g. (M = M') /\ (!x. (M' = INL x) ==> (f x = f' x)) /\ (!y. (M' = INR y) ==> (g y = g' y)) ==> (case f g M = case f' g' M')