src/CCL/typecheck.ML
changeset 289 78541329ff35
parent 0 a5a9c433f639
child 642 0db578095e6a
equal deleted inserted replaced
288:b00ce6a1fe27 289:78541329ff35
    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);