| author | obua | 
| Mon, 14 Jun 2004 14:20:55 +0200 | |
| changeset 14940 | b9ab8babd8b3 | 
| 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: 
9970diff
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: 
9245diff
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: 
9970diff
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: 
9245diff
changeset | 25 | by Auto_tac; | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
changeset | 26 | by (blast_tac (claset() addIs [trans_less]) 2); | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
changeset | 27 | by (blast_tac (claset() addSEs [less_SucE]) 1); | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
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: 
9245diff
changeset | 31 | by (dtac le_imp_less_or_eq 1); | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
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: 
9970diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9970diff
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: 
2640diff
changeset | 66 | qed "lub_singleton"; | 
| 
c2508f4ab739
Added "discrete" CPOs and modified IMP to use those rather than "lift"
 nipkow parents: 
2640diff
changeset | 67 | Addsimps [lub_singleton]; | 
| 
c2508f4ab739
Added "discrete" CPOs and modified IMP to use those rather than "lift"
 nipkow parents: 
2640diff
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: 
9970diff
changeset | 73 | Goalw [is_lub_def] "S <<| x ==> S <| x"; | 
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
changeset | 74 | by Auto_tac; | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
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: 
9970diff
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: 
9245diff
changeset | 78 | by Auto_tac; | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
changeset | 79 | qed "is_lub_lub"; | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
changeset | 80 | |
| 11347 
4e41f71179ed
corrected ML names of definitions, added chain_shift
 oheimb parents: 
9970diff
changeset | 81 | val prems = Goalw [is_lub_def] | 
| 9248 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
changeset | 82 | "[| S <| x; !!u. S <| u ==> x << u |] ==> S <<| x"; | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
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: 
9970diff
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: 
9245diff
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: 
9970diff
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: 
9245diff
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: 
9970diff
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: 
9970diff
changeset | 96 | by (Clarsimp_tac 1); | 
| 12484 | 97 | by (etac chainE 1); | 
| 11347 
4e41f71179ed
corrected ML names of definitions, added chain_shift
 oheimb parents: 
9970diff
changeset | 98 | qed "chain_shift"; | 
| 
4e41f71179ed
corrected ML names of definitions, added chain_shift
 oheimb parents: 
9970diff
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: 
9970diff
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: 
9245diff
changeset | 105 | by (Blast_tac 1); | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
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: 
9970diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
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: 
9245diff
changeset | 170 | by (blast_tac (claset() addDs [ub_rangeD] | 
| 
e1dee89de037
massive tidy-up: goal -> Goal, remove use of prems, etc.
 paulson parents: 
9245diff
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: 
9245diff
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 |