author | wenzelm |
Mon, 07 Jan 2002 23:57:14 +0100 | |
changeset 12659 | 2aa05eb15bd2 |
parent 12484 | 7ad150f5fc10 |
child 14981 | e73f8140af78 |
permissions | -rw-r--r-- |
9245 | 1 |
(* Title: HOLCF/Porder |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
2 |
ID: $Id$ |
1461 | 3 |
Author: Franz Regensburger |
12030 | 4 |
License: GPL (GNU GENERAL PUBLIC LICENSE) |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
5 |
|
9245 | 6 |
Conservative extension of theory Porder0 by constant definitions |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
7 |
*) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
8 |
|
625 | 9 |
(* ------------------------------------------------------------------------ *) |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
10 |
(* lubs are unique *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
11 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
12 |
|
9245 | 13 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
14 |
Goalw [is_lub_def, is_ub_def] |
9245 | 15 |
"[| S <<| x ; S <<| y |] ==> x=y"; |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
16 |
by (blast_tac (claset() addIs [antisym_less]) 1); |
9245 | 17 |
qed "unique_lub"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
18 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
19 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
20 |
(* chains are monotone functions *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
21 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
22 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
23 |
Goalw [chain_def] "chain F ==> x<y --> F x<<F y"; |
9245 | 24 |
by (induct_tac "y" 1); |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
25 |
by Auto_tac; |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
26 |
by (blast_tac (claset() addIs [trans_less]) 2); |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
27 |
by (blast_tac (claset() addSEs [less_SucE]) 1); |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
28 |
qed_spec_mp "chain_mono"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
29 |
|
9169 | 30 |
Goal "[| chain F; x <= y |] ==> F x << F y"; |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
31 |
by (dtac le_imp_less_or_eq 1); |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
32 |
by (blast_tac (claset() addIs [chain_mono]) 1); |
9169 | 33 |
qed "chain_mono3"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
34 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
35 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
36 |
(* ------------------------------------------------------------------------ *) |
9245 | 37 |
(* The range of a chain is a totally ordered << *) |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
38 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
39 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
40 |
Goalw [tord_def] "chain(F) ==> tord(range(F))"; |
12484 | 41 |
by Safe_tac; |
9245 | 42 |
by (rtac nat_less_cases 1); |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
43 |
by (ALLGOALS (fast_tac (claset() addIs [chain_mono]))); |
9245 | 44 |
qed "chain_tord"; |
45 |
||
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
46 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
47 |
(* ------------------------------------------------------------------------ *) |
625 | 48 |
(* technical lemmas about lub and is_lub *) |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
49 |
(* ------------------------------------------------------------------------ *) |
2640 | 50 |
bind_thm("lub",lub_def RS meta_eq_to_obj_eq); |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
51 |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
52 |
Goal "EX x. M <<| x ==> M <<| lub(M)"; |
11452 | 53 |
by (asm_full_simp_tac (simpset() addsimps [lub, some_eq_ex]) 1); |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
54 |
bind_thm ("lubI", exI RS result()); |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
55 |
|
9169 | 56 |
Goal "M <<| l ==> lub(M) = l"; |
57 |
by (rtac unique_lub 1); |
|
58 |
by (stac lub 1); |
|
9970 | 59 |
by (etac someI 1); |
9169 | 60 |
by (atac 1); |
61 |
qed "thelubI"; |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
62 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
63 |
|
5068 | 64 |
Goal "lub{x} = x"; |
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
65 |
by (simp_tac (simpset() addsimps [thelubI,is_lub_def,is_ub_def]) 1); |
2841
c2508f4ab739
Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents:
2640
diff
changeset
|
66 |
qed "lub_singleton"; |
c2508f4ab739
Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents:
2640
diff
changeset
|
67 |
Addsimps [lub_singleton]; |
c2508f4ab739
Added "discrete" CPOs and modified IMP to use those rather than "lift"
nipkow
parents:
2640
diff
changeset
|
68 |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
69 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
70 |
(* access to some definition as inference rule *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
71 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
72 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
73 |
Goalw [is_lub_def] "S <<| x ==> S <| x"; |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
74 |
by Auto_tac; |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
75 |
qed "is_lubD1"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
76 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
77 |
Goalw [is_lub_def] "[| S <<| x; S <| u |] ==> x << u"; |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
78 |
by Auto_tac; |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
79 |
qed "is_lub_lub"; |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
80 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
81 |
val prems = Goalw [is_lub_def] |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
82 |
"[| S <| x; !!u. S <| u ==> x << u |] ==> S <<| x"; |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
83 |
by (blast_tac (claset() addIs prems) 1); |
9245 | 84 |
qed "is_lubI"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
85 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
86 |
Goalw [chain_def] "chain F ==> F(i) << F(Suc(i))"; |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
87 |
by Auto_tac; |
9245 | 88 |
qed "chainE"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
89 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
90 |
val prems = Goalw [chain_def] "(!!i. F i << F(Suc i)) ==> chain F"; |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
91 |
by (blast_tac (claset() addIs prems) 1); |
9245 | 92 |
qed "chainI"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
93 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
94 |
Goal "chain Y ==> chain (%i. Y (i + j))"; |
12484 | 95 |
by (rtac chainI 1); |
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
96 |
by (Clarsimp_tac 1); |
12484 | 97 |
by (etac chainE 1); |
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
98 |
qed "chain_shift"; |
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
99 |
|
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
100 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
101 |
(* technical lemmas about (least) upper bounds of chains *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
102 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
103 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
104 |
Goalw [is_ub_def] "range S <| x ==> S(i) << x"; |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
105 |
by (Blast_tac 1); |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
106 |
qed "ub_rangeD"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
107 |
|
11347
4e41f71179ed
corrected ML names of definitions, added chain_shift
oheimb
parents:
9970
diff
changeset
|
108 |
val prems = Goalw [is_ub_def] "(!!i. S i << x) ==> range S <| x"; |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
109 |
by (blast_tac (claset() addIs prems) 1); |
9245 | 110 |
qed "ub_rangeI"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
111 |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
112 |
bind_thm ("is_ub_lub", is_lubD1 RS ub_rangeD); |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
113 |
(* range(?S1) <<| ?x1 ==> ?S1(?x) << ?x1 *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
114 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
115 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
116 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
117 |
(* results about finite chains *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
118 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
119 |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
120 |
Goalw [max_in_chain_def] |
9245 | 121 |
"[| chain C; max_in_chain i C|] ==> range C <<| C i"; |
122 |
by (rtac is_lubI 1); |
|
123 |
by (rtac ub_rangeI 1); |
|
124 |
by (res_inst_tac [("m","i")] nat_less_cases 1); |
|
125 |
by (rtac (antisym_less_inverse RS conjunct2) 1); |
|
126 |
by (etac (disjI1 RS less_or_eq_imp_le RS rev_mp) 1); |
|
127 |
by (etac spec 1); |
|
128 |
by (rtac (antisym_less_inverse RS conjunct2) 1); |
|
129 |
by (etac (disjI2 RS less_or_eq_imp_le RS rev_mp) 1); |
|
130 |
by (etac spec 1); |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
131 |
by (etac chain_mono 1); |
9245 | 132 |
by (atac 1); |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
133 |
by (etac (ub_rangeD) 1); |
9245 | 134 |
qed "lub_finch1"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
135 |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
136 |
Goalw [finite_chain_def] |
9245 | 137 |
"finite_chain(C) ==> range(C) <<| C(@ i. max_in_chain i C)"; |
138 |
by (rtac lub_finch1 1); |
|
9970 | 139 |
by (best_tac (claset() addIs [someI]) 2); |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
140 |
by (Blast_tac 1); |
9245 | 141 |
qed "lub_finch2"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
142 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
143 |
|
9169 | 144 |
Goal "x<<y ==> chain (%i. if i=0 then x else y)"; |
145 |
by (rtac chainI 1); |
|
146 |
by (induct_tac "i" 1); |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
147 |
by Auto_tac; |
9169 | 148 |
qed "bin_chain"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
149 |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
150 |
Goalw [max_in_chain_def,le_def] |
9245 | 151 |
"x<<y ==> max_in_chain (Suc 0) (%i. if (i=0) then x else y)"; |
152 |
by (rtac allI 1); |
|
153 |
by (induct_tac "j" 1); |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
154 |
by Auto_tac; |
9245 | 155 |
qed "bin_chainmax"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
156 |
|
9169 | 157 |
Goal "x << y ==> range(%i::nat. if (i=0) then x else y) <<| y"; |
158 |
by (res_inst_tac [("s","if (Suc 0) = 0 then x else y")] subst 1 |
|
159 |
THEN rtac lub_finch1 2); |
|
160 |
by (etac bin_chain 2); |
|
161 |
by (etac bin_chainmax 2); |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
162 |
by (Simp_tac 1); |
9169 | 163 |
qed "lub_bin_chain"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
164 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
165 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
166 |
(* the maximal element in a chain is its lub *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
167 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
168 |
|
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
169 |
Goal "[| Y i = c; ALL i. Y i<<c |] ==> lub(range Y) = c"; |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
170 |
by (blast_tac (claset() addDs [ub_rangeD] |
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
171 |
addIs [thelubI, is_lubI, ub_rangeI]) 1); |
9169 | 172 |
qed "lub_chain_maxelem"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
173 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
174 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
175 |
(* the lub of a constant chain is the constant *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
176 |
(* ------------------------------------------------------------------------ *) |
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
177 |
|
9169 | 178 |
Goal "range(%x. c) <<| c"; |
9248
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
paulson
parents:
9245
diff
changeset
|
179 |
by (blast_tac (claset() addDs [ub_rangeD] addIs [is_lubI, ub_rangeI]) 1); |
9169 | 180 |
qed "lub_const"; |
243
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
181 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
182 |
|
c22b85994e17
Franz Regensburger's Higher-Order Logic of Computable Functions embedding LCF
nipkow
parents:
diff
changeset
|
183 |