178 lemma fstreams_prefix': "x << <a> ooo z = (x = <> | (EX y. x = <a> ooo y & y << z))" |
178 lemma fstreams_prefix': "x << <a> ooo z = (x = <> | (EX y. x = <a> ooo y & y << z))" |
179 apply (auto, case_tac "x=UU", auto) |
179 apply (auto, case_tac "x=UU", auto) |
180 apply (drule stream_exhaust_eq [THEN iffD1], auto) |
180 apply (drule stream_exhaust_eq [THEN iffD1], auto) |
181 apply (simp add: fsingleton_def2, auto) |
181 apply (simp add: fsingleton_def2, auto) |
182 apply (auto simp add: stream.inverts) |
182 apply (auto simp add: stream.inverts) |
183 apply (drule ax_flat [rule_format], simp) |
183 apply (drule ax_flat, simp) |
184 by (erule sconc_mono) |
184 by (erule sconc_mono) |
185 |
185 |
186 lemma ft_fstreams[simp]: "ft$(<a> ooo s) = Def a" |
186 lemma ft_fstreams[simp]: "ft$(<a> ooo s) = Def a" |
187 by (simp add: fsingleton_def2) |
187 by (simp add: fsingleton_def2) |
188 |
188 |
278 apply (drule maxinch_is_thelub, auto) |
278 apply (drule maxinch_is_thelub, auto) |
279 apply (rule_tac x="i" in exI, auto) |
279 apply (rule_tac x="i" in exI, auto) |
280 apply (simp add: max_in_chain_def, auto) |
280 apply (simp add: max_in_chain_def, auto) |
281 apply (subgoal_tac "Y i << Y j",auto) |
281 apply (subgoal_tac "Y i << Y j",auto) |
282 apply (simp add: less_cprod_def, clarsimp) |
282 apply (simp add: less_cprod_def, clarsimp) |
283 apply (drule ax_flat [rule_format], auto) |
283 apply (drule ax_flat, auto) |
284 apply (case_tac "snd (Y j) = UU",auto) |
284 apply (case_tac "snd (Y j) = UU",auto) |
285 apply (case_tac "Y j", auto) |
285 apply (case_tac "Y j", auto) |
286 apply (rule_tac x="j" in exI) |
286 apply (rule_tac x="j" in exI) |
287 apply (case_tac "Y j",auto) |
287 apply (case_tac "Y j",auto) |
288 by (drule chain_mono3, auto) |
288 by (drule chain_mono3, auto) |
290 lemma fstreams_lub_lemma2: |
290 lemma fstreams_lub_lemma2: |
291 "[| chain Y; lub (range Y) = (a, <m> ooo ms); (a::'a::flat) ~= UU |] ==> EX j t. Y j = (a, <m> ooo t)" |
291 "[| chain Y; lub (range Y) = (a, <m> ooo ms); (a::'a::flat) ~= UU |] ==> EX j t. Y j = (a, <m> ooo t)" |
292 apply (frule lub_Pair_not_UU_lemma, auto) |
292 apply (frule lub_Pair_not_UU_lemma, auto) |
293 apply (drule_tac x="j" in is_ub_thelub, auto) |
293 apply (drule_tac x="j" in is_ub_thelub, auto) |
294 apply (simp add: less_cprod_def, clarsimp) |
294 apply (simp add: less_cprod_def, clarsimp) |
295 apply (drule ax_flat [rule_format], clarsimp) |
295 apply (drule ax_flat, clarsimp) |
296 by (drule fstreams_prefix' [THEN iffD1], auto) |
296 by (drule fstreams_prefix' [THEN iffD1], auto) |
297 |
297 |
298 lemma fstreams_lub2: |
298 lemma fstreams_lub2: |
299 "[| chain Y; lub (range Y) = (a, <m> ooo ms); (a::'a::flat) ~= UU |] |
299 "[| chain Y; lub (range Y) = (a, <m> ooo ms); (a::'a::flat) ~= UU |] |
300 ==> (EX j t. Y j = (a, <m> ooo t)) & (EX X. chain X & (ALL i. EX j. (a, <m> ooo X i) << Y j) & lub (range X) = ms)" |
300 ==> (EX j t. Y j = (a, <m> ooo t)) & (EX X. chain X & (ALL i. EX j. (a, <m> ooo X i) << Y j) & lub (range X) = ms)" |
324 apply (subgoal_tac "snd (Y ja) << (LUB i. snd (Y i))", clarsimp) |
324 apply (subgoal_tac "snd (Y ja) << (LUB i. snd (Y i))", clarsimp) |
325 apply (drule fstreams_mono, simp) |
325 apply (drule fstreams_mono, simp) |
326 apply (rule is_ub_thelub chainI) |
326 apply (rule is_ub_thelub chainI) |
327 apply (simp add: chain_def less_cprod_def) |
327 apply (simp add: chain_def less_cprod_def) |
328 apply (subgoal_tac "fst (Y j) ~= fst (Y ja) | snd (Y j) ~= snd (Y ja)", simp) |
328 apply (subgoal_tac "fst (Y j) ~= fst (Y ja) | snd (Y j) ~= snd (Y ja)", simp) |
329 apply (drule ax_flat[rule_format], simp)+ |
329 apply (drule ax_flat, simp)+ |
330 apply (drule prod_eqI, auto) |
330 apply (drule prod_eqI, auto) |
331 apply (simp add: chain_mono3) |
331 apply (simp add: chain_mono3) |
332 by (rule stream_reach2) |
332 by (rule stream_reach2) |
333 |
333 |
334 |
334 |