src/HOLCF/Pcpo.ML
changeset 2839 7ca787c6efca
parent 2640 ee4dfce170a0
child 3323 194ae2e0c193
equal deleted inserted replaced
2838:2e908f29bc3d 2839:7ca787c6efca
    19         (rtac least 1)]);
    19         (rtac least 1)]);
    20 
    20 
    21 bind_thm("minimal",UU_least RS spec);
    21 bind_thm("minimal",UU_least RS spec);
    22 
    22 
    23 (* ------------------------------------------------------------------------ *)
    23 (* ------------------------------------------------------------------------ *)
    24 (* in pcpo's everthing equal to THE lub has lub properties for every chain  *)
    24 (* in cpo's everthing equal to THE lub has lub properties for every chain  *)
    25 (* ------------------------------------------------------------------------ *)
    25 (* ------------------------------------------------------------------------ *)
    26 
    26 
    27 qed_goal "thelubE"  thy 
    27 qed_goal "thelubE"  thy 
    28         "[| is_chain(S);lub(range(S)) = (l::'a::pcpo)|] ==> range(S) <<| l "
    28         "[| is_chain(S);lub(range(S)) = (l::'a::cpo)|] ==> range(S) <<| l "
    29 (fn prems =>
    29 (fn prems =>
    30         [
    30         [
    31         (cut_facts_tac prems 1), 
    31         (cut_facts_tac prems 1), 
    32         (hyp_subst_tac 1),
    32         (hyp_subst_tac 1),
    33         (rtac lubI 1),
    33         (rtac lubI 1),
    44 
    44 
    45 bind_thm ("is_lub_thelub", cpo RS lubI RS is_lub_lub);
    45 bind_thm ("is_lub_thelub", cpo RS lubI RS is_lub_lub);
    46 (* [| is_chain(?S5); range(?S5) <| ?x1 |] ==> lub(range(?S5)) << ?x1        *)
    46 (* [| is_chain(?S5); range(?S5) <| ?x1 |] ==> lub(range(?S5)) << ?x1        *)
    47 
    47 
    48 qed_goal "maxinch_is_thelub" thy "is_chain Y ==> \
    48 qed_goal "maxinch_is_thelub" thy "is_chain Y ==> \
    49 \       max_in_chain i Y = (lub(range(Y)) = ((Y i)::'a::pcpo))" 
    49 \       max_in_chain i Y = (lub(range(Y)) = ((Y i)::'a::cpo))" 
    50 (fn prems => 
    50 (fn prems => 
    51         [
    51         [
    52         cut_facts_tac prems 1,
    52         cut_facts_tac prems 1,
    53         rtac iffI 1,
    53         rtac iffI 1,
    54         fast_tac (HOL_cs addSIs [thelubI,lub_finch1]) 1,
    54         fast_tac (HOL_cs addSIs [thelubI,lub_finch1]) 1,
    63 (* ------------------------------------------------------------------------ *)
    63 (* ------------------------------------------------------------------------ *)
    64 (* the << relation between two chains is preserved by their lubs            *)
    64 (* the << relation between two chains is preserved by their lubs            *)
    65 (* ------------------------------------------------------------------------ *)
    65 (* ------------------------------------------------------------------------ *)
    66 
    66 
    67 qed_goal "lub_mono" thy 
    67 qed_goal "lub_mono" thy 
    68         "[|is_chain(C1::(nat=>'a::pcpo));is_chain(C2); ! k. C1(k) << C2(k)|]\
    68         "[|is_chain(C1::(nat=>'a::cpo));is_chain(C2); ! k. C1(k) << C2(k)|]\
    69 \           ==> lub(range(C1)) << lub(range(C2))"
    69 \           ==> lub(range(C1)) << lub(range(C2))"
    70 (fn prems =>
    70 (fn prems =>
    71         [
    71         [
    72         (cut_facts_tac prems 1),
    72         (cut_facts_tac prems 1),
    73         (etac is_lub_thelub 1),
    73         (etac is_lub_thelub 1),
    81 (* ------------------------------------------------------------------------ *)
    81 (* ------------------------------------------------------------------------ *)
    82 (* the = relation between two chains is preserved by their lubs            *)
    82 (* the = relation between two chains is preserved by their lubs            *)
    83 (* ------------------------------------------------------------------------ *)
    83 (* ------------------------------------------------------------------------ *)
    84 
    84 
    85 qed_goal "lub_equal" thy
    85 qed_goal "lub_equal" thy
    86 "[| is_chain(C1::(nat=>'a::pcpo));is_chain(C2);!k.C1(k)=C2(k)|]\
    86 "[| is_chain(C1::(nat=>'a::cpo));is_chain(C2);!k.C1(k)=C2(k)|]\
    87 \       ==> lub(range(C1))=lub(range(C2))"
    87 \       ==> lub(range(C1))=lub(range(C2))"
    88 (fn prems =>
    88 (fn prems =>
    89         [
    89         [
    90         (cut_facts_tac prems 1),
    90         (cut_facts_tac prems 1),
    91         (rtac antisym_less 1),
    91         (rtac antisym_less 1),
   106 (* ------------------------------------------------------------------------ *)
   106 (* ------------------------------------------------------------------------ *)
   107 (* more results about mono and = of lubs of chains                          *)
   107 (* more results about mono and = of lubs of chains                          *)
   108 (* ------------------------------------------------------------------------ *)
   108 (* ------------------------------------------------------------------------ *)
   109 
   109 
   110 qed_goal "lub_mono2" thy 
   110 qed_goal "lub_mono2" thy 
   111 "[|? j.!i. j<i --> X(i::nat)=Y(i);is_chain(X::nat=>'a::pcpo);is_chain(Y)|]\
   111 "[|? j.!i. j<i --> X(i::nat)=Y(i);is_chain(X::nat=>'a::cpo);is_chain(Y)|]\
   112 \ ==> lub(range(X))<<lub(range(Y))"
   112 \ ==> lub(range(X))<<lub(range(Y))"
   113  (fn prems =>
   113  (fn prems =>
   114         [
   114         [
   115         (rtac  exE 1),
   115         (rtac  exE 1),
   116         (resolve_tac prems 1),
   116         (resolve_tac prems 1),
   135         (rtac is_ub_thelub 1),
   135         (rtac is_ub_thelub 1),
   136         (resolve_tac prems 1)
   136         (resolve_tac prems 1)
   137         ]);
   137         ]);
   138 
   138 
   139 qed_goal "lub_equal2" thy 
   139 qed_goal "lub_equal2" thy 
   140 "[|? j.!i. j<i --> X(i)=Y(i);is_chain(X::nat=>'a::pcpo);is_chain(Y)|]\
   140 "[|? j.!i. j<i --> X(i)=Y(i);is_chain(X::nat=>'a::cpo);is_chain(Y)|]\
   141 \ ==> lub(range(X))=lub(range(Y))"
   141 \ ==> lub(range(X))=lub(range(Y))"
   142  (fn prems =>
   142  (fn prems =>
   143         [
   143         [
   144         (rtac antisym_less 1),
   144         (rtac antisym_less 1),
   145         (rtac lub_mono2 1),
   145         (rtac lub_mono2 1),
   151         (safe_tac HOL_cs),
   151         (safe_tac HOL_cs),
   152         (rtac sym 1),
   152         (rtac sym 1),
   153         (fast_tac HOL_cs 1)
   153         (fast_tac HOL_cs 1)
   154         ]);
   154         ]);
   155 
   155 
   156 qed_goal "lub_mono3" thy "[|is_chain(Y::nat=>'a::pcpo);is_chain(X);\
   156 qed_goal "lub_mono3" thy "[|is_chain(Y::nat=>'a::cpo);is_chain(X);\
   157 \! i. ? j. Y(i)<< X(j)|]==> lub(range(Y))<<lub(range(X))"
   157 \! i. ? j. Y(i)<< X(j)|]==> lub(range(Y))<<lub(range(X))"
   158  (fn prems =>
   158  (fn prems =>
   159         [
   159         [
   160         (cut_facts_tac prems 1),
   160         (cut_facts_tac prems 1),
   161         (rtac is_lub_thelub 1),
   161         (rtac is_lub_thelub 1),