170 by (Blast_tac 2); |
170 by (Blast_tac 2); |
171 by Auto_tac; |
171 by Auto_tac; |
172 by (etac order_trans 1); |
172 by (etac order_trans 1); |
173 by (Blast_tac 1); |
173 by (Blast_tac 1); |
174 qed "Increasing_preserves_Stable"; |
174 qed "Increasing_preserves_Stable"; |
|
175 |
|
176 |
|
177 (*** givenBy ***) |
|
178 |
|
179 Goalw [givenBy_def] "givenBy id = UNIV"; |
|
180 by Auto_tac; |
|
181 qed "givenBy_id"; |
|
182 Addsimps [givenBy_id]; |
|
183 |
|
184 Goalw [givenBy_def] "(givenBy v) = {A. ALL x:A. ALL y. v x = v y --> y: A}"; |
|
185 by Safe_tac; |
|
186 by (res_inst_tac [("x", "v `` ?u")] image_eqI 2); |
|
187 by Auto_tac; |
|
188 qed "givenBy_eq_all"; |
|
189 |
|
190 Goal "givenBy v = {A. EX P. A = {s. P(v s)}}"; |
|
191 by (simp_tac (simpset() addsimps [givenBy_eq_all]) 1); |
|
192 by Safe_tac; |
|
193 by (res_inst_tac [("x", "%n. EX s. v s = n & s : ?A")] exI 1); |
|
194 by (Blast_tac 1); |
|
195 by Auto_tac; |
|
196 qed "givenBy_eq_Collect"; |
|
197 |
|
198 val prems = |
|
199 Goal "(!!x y. [| x:A; v x = v y |] ==> y: A) ==> A: givenBy v"; |
|
200 by (stac givenBy_eq_all 1); |
|
201 by (blast_tac (claset() addIs prems) 1); |
|
202 qed "givenByI"; |
|
203 |
|
204 Goalw [givenBy_def] "[| A: givenBy v; x:A; v x = v y |] ==> y: A"; |
|
205 by Auto_tac; |
|
206 qed "givenByD"; |
|
207 |
|
208 Goal "{} : givenBy v"; |
|
209 by (blast_tac (claset() addSIs [givenByI]) 1); |
|
210 qed "empty_mem_givenBy"; |
|
211 |
|
212 AddIffs [empty_mem_givenBy]; |
|
213 |
|
214 Goal "A: givenBy v ==> EX P. A = {s. P(v s)}"; |
|
215 by (res_inst_tac [("x", "%n. EX s. v s = n & s : A")] exI 1); |
|
216 by (full_simp_tac (simpset() addsimps [givenBy_eq_all]) 1); |
|
217 by (Blast_tac 1); |
|
218 qed "givenBy_imp_eq_Collect"; |
|
219 |
|
220 Goalw [givenBy_def] "{s. P(v s)} : givenBy v"; |
|
221 by (Best_tac 1); |
|
222 qed "Collect_mem_givenBy"; |
|
223 |
|
224 Goal "givenBy v = {A. EX P. A = {s. P(v s)}}"; |
|
225 by (blast_tac (claset() addIs [Collect_mem_givenBy, |
|
226 givenBy_imp_eq_Collect]) 1); |
|
227 qed "givenBy_eq_eq_Collect"; |
|
228 |
|
229 (*preserving v preserves properties given by v*) |
|
230 Goal "[| F : preserves v; D : givenBy v |] ==> F : stable D"; |
|
231 by (force_tac (claset(), |
|
232 simpset() addsimps [impOfSubs preserves_subset_stable, |
|
233 givenBy_eq_Collect]) 1); |
|
234 qed "preserves_givenBy_imp_stable"; |
|
235 |
|
236 Goal "givenBy (w o v) <= givenBy v"; |
|
237 by (simp_tac (simpset() addsimps [givenBy_eq_Collect]) 1); |
|
238 by (Deepen_tac 0 1); |
|
239 qed "givenBy_o_subset"; |
|
240 |
|
241 Goal "[| A : givenBy v; B : givenBy v |] ==> A-B : givenBy v"; |
|
242 by (full_simp_tac (simpset() addsimps [givenBy_eq_Collect]) 1); |
|
243 by Safe_tac; |
|
244 by (res_inst_tac [("x", "%z. ?R z & ~ ?Q z")] exI 1); |
|
245 by (deepen_tac (set_cs addSIs [equalityI]) 0 1); |
|
246 qed "givenBy_DiffI"; |