equal
deleted
inserted
replaced
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), |