equal
deleted
inserted
replaced
23 "a : {x:A.P(inl(x))} ==> inl(a) : {x:A+B.P(x)}", |
23 "a : {x:A.P(inl(x))} ==> inl(a) : {x:A+B.P(x)}", |
24 "b : {x:B.P(inr(x))} ==> inr(b) : {x:A+B.P(x)}", |
24 "b : {x:B.P(inr(x))} ==> inr(b) : {x:A+B.P(x)}", |
25 "P(zero) ==> zero : {x:Nat.P(x)}", |
25 "P(zero) ==> zero : {x:Nat.P(x)}", |
26 "a : {x:Nat.P(succ(x))} ==> succ(a) : {x:Nat.P(x)}", |
26 "a : {x:Nat.P(succ(x))} ==> succ(a) : {x:Nat.P(x)}", |
27 "P([]) ==> [] : {x:List(A).P(x)}", |
27 "P([]) ==> [] : {x:List(A).P(x)}", |
28 "h : {x:A. t : {y:List(A).P(x.y)}} ==> h.t : {x:List(A).P(x)}" |
28 "h : {x:A. t : {y:List(A).P(x$y)}} ==> h$t : {x:List(A).P(x)}" |
29 ] end; |
29 ] end; |
30 *) |
30 *) |
31 val Subtype_canTs = |
31 val Subtype_canTs = |
32 let fun tac prems = cut_facts_tac prems 1 THEN |
32 let fun tac prems = cut_facts_tac prems 1 THEN |
33 REPEAT (ares_tac (SubtypeI::canTs@icanTs) 1 ORELSE |
33 REPEAT (ares_tac (SubtypeI::canTs@icanTs) 1 ORELSE |
36 in map solve |
36 in map solve |
37 ["a : {x:A. b:{y:B(a).P(<x,y>)}} ==> <a,b> : {x:Sigma(A,B).P(x)}", |
37 ["a : {x:A. b:{y:B(a).P(<x,y>)}} ==> <a,b> : {x:Sigma(A,B).P(x)}", |
38 "a : {x:A.P(inl(x))} ==> inl(a) : {x:A+B.P(x)}", |
38 "a : {x:A.P(inl(x))} ==> inl(a) : {x:A+B.P(x)}", |
39 "b : {x:B.P(inr(x))} ==> inr(b) : {x:A+B.P(x)}", |
39 "b : {x:B.P(inr(x))} ==> inr(b) : {x:A+B.P(x)}", |
40 "a : {x:Nat.P(succ(x))} ==> succ(a) : {x:Nat.P(x)}", |
40 "a : {x:Nat.P(succ(x))} ==> succ(a) : {x:Nat.P(x)}", |
41 "h : {x:A. t : {y:List(A).P(x.y)}} ==> h.t : {x:List(A).P(x)}" |
41 "h : {x:A. t : {y:List(A).P(x$y)}} ==> h$t : {x:List(A).P(x)}" |
42 ] end; |
42 ] end; |
43 |
43 |
44 val prems = goal Type.thy |
44 val prems = goal Type.thy |
45 "[| f(t):B; ~t=bot |] ==> let x be t in f(x) : B"; |
45 "[| f(t):B; ~t=bot |] ==> let x be t in f(x) : B"; |
46 by (cut_facts_tac prems 1); |
46 by (cut_facts_tac prems 1); |