src/HOLCF/FOCUS/Fstreams.thy
changeset 25920 8df5eabda5f6
parent 24107 fecafd71e758
child 25922 cb04d05e95fb
equal deleted inserted replaced
25919:8b1c0d434824 25920:8df5eabda5f6
   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