src/CCL/genrec.ML
changeset 2035 e329b36d9136
parent 1459 d12da312eff4
child 3837 d7f033c74b38
equal deleted inserted replaced
2034:5079fdf938dd 2035:e329b36d9136
    12 \       !!p g.[| p:A; ALL x:{x: A. <x,p>:wf(R)}. g(x) : D(x) |] ==>\
    12 \       !!p g.[| p:A; ALL x:{x: A. <x,p>:wf(R)}. g(x) : D(x) |] ==>\
    13 \               h(p,g) : D(p) |] ==> \
    13 \               h(p,g) : D(p) |] ==> \
    14 \    letrec g x be h(x,g) in g(a) : D(a)";
    14 \    letrec g x be h(x,g) in g(a) : D(a)";
    15 by (rtac (major RS rev_mp) 1);
    15 by (rtac (major RS rev_mp) 1);
    16 by (rtac (wf_wf RS wfd_induct) 1);
    16 by (rtac (wf_wf RS wfd_induct) 1);
    17 by (rtac (letrecB RS ssubst) 1);
    17 by (stac letrecB 1);
    18 by (rtac impI 1);
    18 by (rtac impI 1);
    19 by (eresolve_tac prems 1);
    19 by (eresolve_tac prems 1);
    20 by (rtac ballI 1);
    20 by (rtac ballI 1);
    21 by (etac (spec RS mp RS mp) 1);
    21 by (etac (spec RS mp RS mp) 1);
    22 by (REPEAT (eresolve_tac [SubtypeD1,SubtypeD2] 1));
    22 by (REPEAT (eresolve_tac [SubtypeD1,SubtypeD2] 1));
    33 \             ALL x:A.ALL y:{y: B. <<x,y>,<p,q>>:wf(R)}. g(x,y) : D(x,y) |] ==>\
    33 \             ALL x:A.ALL y:{y: B. <<x,y>,<p,q>>:wf(R)}. g(x,y) : D(x,y) |] ==>\
    34 \               h(p,q,g) : D(p,q) |] ==> \
    34 \               h(p,q,g) : D(p,q) |] ==> \
    35 \    letrec g x y be h(x,y,g) in g(a,b) : D(a,b)";
    35 \    letrec g x y be h(x,y,g) in g(a,b) : D(a,b)";
    36 by (rtac (SPLITB RS subst) 1);
    36 by (rtac (SPLITB RS subst) 1);
    37 by (REPEAT (ares_tac ([letrecT,pairT,splitT]@prems) 1));
    37 by (REPEAT (ares_tac ([letrecT,pairT,splitT]@prems) 1));
    38 by (rtac (SPLITB RS ssubst) 1);
    38 by (stac SPLITB 1);
    39 by (REPEAT (ares_tac ([ballI,SubtypeI]@prems) 1));
    39 by (REPEAT (ares_tac ([ballI,SubtypeI]@prems) 1));
    40 by (rtac (SPLITB RS subst) 1);
    40 by (rtac (SPLITB RS subst) 1);
    41 by (REPEAT (ares_tac ([letrecT,SubtypeI,pairT,splitT]@prems) 1 ORELSE 
    41 by (REPEAT (ares_tac ([letrecT,SubtypeI,pairT,splitT]@prems) 1 ORELSE 
    42             eresolve_tac [bspec,SubtypeE,sym RS subst] 1));
    42             eresolve_tac [bspec,SubtypeE,sym RS subst] 1));
    43 qed "letrec2T";
    43 qed "letrec2T";