8 imports Buffer Stream_adm |
8 imports Buffer Stream_adm |
9 begin |
9 begin |
10 |
10 |
11 declare enat_0 [simp] |
11 declare enat_0 [simp] |
12 |
12 |
13 lemma BufAC_Asm_d2: "a\<leadsto>s:BufAC_Asm ==> ? d. a=Md d" |
13 lemma BufAC_Asm_d2: "a\<leadsto>s \<in> BufAC_Asm \<Longrightarrow> \<exists>d. a=Md d" |
14 by (drule BufAC_Asm_unfold [THEN iffD1], auto) |
14 by (drule BufAC_Asm_unfold [THEN iffD1], auto) |
15 |
15 |
16 lemma BufAC_Asm_d3: |
16 lemma BufAC_Asm_d3: |
17 "a\<leadsto>b\<leadsto>s:BufAC_Asm ==> ? d. a=Md d & b=\<bullet> & s:BufAC_Asm" |
17 "a\<leadsto>b\<leadsto>s \<in> BufAC_Asm \<Longrightarrow> \<exists>d. a=Md d \<and> b=\<bullet> \<and> s \<in> BufAC_Asm" |
18 by (drule BufAC_Asm_unfold [THEN iffD1], auto) |
18 by (drule BufAC_Asm_unfold [THEN iffD1], auto) |
19 |
19 |
20 lemma BufAC_Asm_F_def3: |
20 lemma BufAC_Asm_F_def3: |
21 "(s:BufAC_Asm_F A) = (s=<> | |
21 "(s \<in> BufAC_Asm_F A) = (s=<> \<or> |
22 (? d. ft\<cdot>s=Def(Md d)) & (rt\<cdot>s=<> | ft\<cdot>(rt\<cdot>s)=Def \<bullet> & rt\<cdot>(rt\<cdot>s):A))" |
22 (\<exists>d. ft\<cdot>s=Def(Md d)) \<and> (rt\<cdot>s=<> \<or> ft\<cdot>(rt\<cdot>s)=Def \<bullet> \<and> rt\<cdot>(rt\<cdot>s) \<in> A))" |
23 by (unfold BufAC_Asm_F_def, auto) |
23 by (unfold BufAC_Asm_F_def, auto) |
24 |
24 |
25 lemma cont_BufAC_Asm_F: "inf_continuous BufAC_Asm_F" |
25 lemma cont_BufAC_Asm_F: "inf_continuous BufAC_Asm_F" |
26 by (auto simp add: inf_continuous_def BufAC_Asm_F_def3) |
26 by (auto simp add: inf_continuous_def BufAC_Asm_F_def3) |
27 |
27 |
28 lemma BufAC_Cmt_F_def3: |
28 lemma BufAC_Cmt_F_def3: |
29 "((s,t):BufAC_Cmt_F C) = (!d x. |
29 "((s,t) \<in> BufAC_Cmt_F C) = (\<forall>d x. |
30 (s = <> --> t = <> ) & |
30 (s = <> \<longrightarrow> t = <> ) \<and> |
31 (s = Md d\<leadsto><> --> t = <> ) & |
31 (s = Md d\<leadsto><> \<longrightarrow> t = <> ) \<and> |
32 (s = Md d\<leadsto>\<bullet>\<leadsto>x --> ft\<cdot>t = Def d & (x,rt\<cdot>t):C))" |
32 (s = Md d\<leadsto>\<bullet>\<leadsto>x \<longrightarrow> ft\<cdot>t = Def d & (x,rt\<cdot>t) \<in> C))" |
33 apply (unfold BufAC_Cmt_F_def) |
33 apply (unfold BufAC_Cmt_F_def) |
34 apply (subgoal_tac "!d x. (s = Md d\<leadsto>\<bullet>\<leadsto>x --> (? y. t = d\<leadsto>y & (x,y):C)) = |
34 apply (subgoal_tac "\<forall>d x. (s = Md d\<leadsto>\<bullet>\<leadsto>x \<longrightarrow> (\<exists>y. t = d\<leadsto>y \<and> (x,y) \<in> C)) = |
35 (s = Md d\<leadsto>\<bullet>\<leadsto>x --> ft\<cdot>t = Def d & (x,rt\<cdot>t):C)") |
35 (s = Md d\<leadsto>\<bullet>\<leadsto>x \<longrightarrow> ft\<cdot>t = Def d \<and> (x,rt\<cdot>t) \<in> C)") |
36 apply (simp) |
36 apply (simp) |
37 apply (auto intro: surjectiv_scons [symmetric]) |
37 apply (auto intro: surjectiv_scons [symmetric]) |
38 done |
38 done |
39 |
39 |
40 lemma cont_BufAC_Cmt_F: "inf_continuous BufAC_Cmt_F" |
40 lemma cont_BufAC_Cmt_F: "inf_continuous BufAC_Cmt_F" |
43 |
43 |
44 (**** adm_BufAC_Asm ***********************************************************) |
44 (**** adm_BufAC_Asm ***********************************************************) |
45 |
45 |
46 lemma BufAC_Asm_F_stream_monoP: "stream_monoP BufAC_Asm_F" |
46 lemma BufAC_Asm_F_stream_monoP: "stream_monoP BufAC_Asm_F" |
47 apply (unfold BufAC_Asm_F_def stream_monoP_def) |
47 apply (unfold BufAC_Asm_F_def stream_monoP_def) |
48 apply (rule_tac x="{x. (? d. x = Md d\<leadsto>\<bullet>\<leadsto><>)}" in exI) |
48 apply (rule_tac x="{x. (\<exists>d. x = Md d\<leadsto>\<bullet>\<leadsto><>)}" in exI) |
49 apply (rule_tac x="Suc (Suc 0)" in exI) |
49 apply (rule_tac x="Suc (Suc 0)" in exI) |
50 apply (clarsimp) |
50 apply (clarsimp) |
51 done |
51 done |
52 |
52 |
53 lemma adm_BufAC_Asm: "adm (%x. x:BufAC_Asm)" |
53 lemma adm_BufAC_Asm: "adm (\<lambda>x. x \<in> BufAC_Asm)" |
54 apply (unfold BufAC_Asm_def) |
54 apply (unfold BufAC_Asm_def) |
55 apply (rule cont_BufAC_Asm_F [THEN BufAC_Asm_F_stream_monoP [THEN fstream_gfp_admI]]) |
55 apply (rule cont_BufAC_Asm_F [THEN BufAC_Asm_F_stream_monoP [THEN fstream_gfp_admI]]) |
56 done |
56 done |
57 |
57 |
58 |
58 |
59 (**** adm_non_BufAC_Asm *******************************************************) |
59 (**** adm_non_BufAC_Asm *******************************************************) |
60 |
60 |
61 lemma BufAC_Asm_F_stream_antiP: "stream_antiP BufAC_Asm_F" |
61 lemma BufAC_Asm_F_stream_antiP: "stream_antiP BufAC_Asm_F" |
62 apply (unfold stream_antiP_def BufAC_Asm_F_def) |
62 apply (unfold stream_antiP_def BufAC_Asm_F_def) |
63 apply (intro strip) |
63 apply (intro strip) |
64 apply (rule_tac x="{x. (? d. x = Md d\<leadsto>\<bullet>\<leadsto><>)}" in exI) |
64 apply (rule_tac x="{x. (\<exists>d. x = Md d\<leadsto>\<bullet>\<leadsto><>)}" in exI) |
65 apply (rule_tac x="Suc (Suc 0)" in exI) |
65 apply (rule_tac x="Suc (Suc 0)" in exI) |
66 apply (rule conjI) |
66 apply (rule conjI) |
67 prefer 2 |
67 prefer 2 |
68 apply ( intro strip) |
68 apply ( intro strip) |
69 apply ( drule slen_mono) |
69 apply ( drule slen_mono) |
70 apply ( drule (1) order_trans) |
70 apply ( drule (1) order_trans) |
71 apply (force)+ |
71 apply (force)+ |
72 done |
72 done |
73 |
73 |
74 lemma adm_non_BufAC_Asm: "adm (%u. u~:BufAC_Asm)" |
74 lemma adm_non_BufAC_Asm: "adm (\<lambda>u. u \<notin> BufAC_Asm)" |
75 apply (unfold BufAC_Asm_def) |
75 apply (unfold BufAC_Asm_def) |
76 apply (rule cont_BufAC_Asm_F [THEN BufAC_Asm_F_stream_antiP [THEN fstream_non_gfp_admI]]) |
76 apply (rule cont_BufAC_Asm_F [THEN BufAC_Asm_F_stream_antiP [THEN fstream_non_gfp_admI]]) |
77 done |
77 done |
78 |
78 |
79 (**** adm_BufAC ***************************************************************) |
79 (**** adm_BufAC ***************************************************************) |
80 |
80 |
81 (*adm_non_BufAC_Asm*) |
81 (*adm_non_BufAC_Asm*) |
82 lemma BufAC_Asm_cong [rule_format]: "!f ff. f:BufEq --> ff:BufEq --> s:BufAC_Asm --> f\<cdot>s = ff\<cdot>s" |
82 lemma BufAC_Asm_cong [rule_format]: "\<forall>f ff. f \<in> BufEq \<longrightarrow> ff \<in> BufEq \<longrightarrow> s \<in> BufAC_Asm \<longrightarrow> f\<cdot>s = ff\<cdot>s" |
83 apply (rule fstream_ind2) |
83 apply (rule fstream_ind2) |
84 apply (simp add: adm_non_BufAC_Asm) |
84 apply (simp add: adm_non_BufAC_Asm) |
85 apply (force dest: Buf_f_empty) |
85 apply (force dest: Buf_f_empty) |
86 apply (force dest!: BufAC_Asm_d2 |
86 apply (force dest!: BufAC_Asm_d2 |
87 dest: Buf_f_d elim: ssubst) |
87 dest: Buf_f_d elim: ssubst) |
90 apply (fast elim: ssubst) |
90 apply (fast elim: ssubst) |
91 done |
91 done |
92 |
92 |
93 (*adm_non_BufAC_Asm,BufAC_Asm_cong*) |
93 (*adm_non_BufAC_Asm,BufAC_Asm_cong*) |
94 lemma BufAC_Cmt_d_req: |
94 lemma BufAC_Cmt_d_req: |
95 "!!X. [|f:BufEq; s:BufAC_Asm; (s, f\<cdot>s):BufAC_Cmt|] ==> (a\<leadsto>b\<leadsto>s, f\<cdot>(a\<leadsto>b\<leadsto>s)):BufAC_Cmt" |
95 "\<And>X. [|f \<in> BufEq; s \<in> BufAC_Asm; (s, f\<cdot>s) \<in> BufAC_Cmt|] ==> (a\<leadsto>b\<leadsto>s, f\<cdot>(a\<leadsto>b\<leadsto>s)) \<in> BufAC_Cmt" |
96 apply (rule BufAC_Cmt_unfold [THEN iffD2]) |
96 apply (rule BufAC_Cmt_unfold [THEN iffD2]) |
97 apply (intro strip) |
97 apply (intro strip) |
98 apply (frule Buf_f_d_req) |
98 apply (frule Buf_f_d_req) |
99 apply (auto elim: BufAC_Asm_cong [THEN subst]) |
99 apply (auto elim: BufAC_Asm_cong [THEN subst]) |
100 done |
100 done |
114 apply ( force dest!: fstream_prefix |
114 apply ( force dest!: fstream_prefix |
115 dest: BufAC_Asm_d3 intro!: BufAC_Asm_d_req) |
115 dest: BufAC_Asm_d3 intro!: BufAC_Asm_d_req) |
116 done |
116 done |
117 |
117 |
118 (*adm_BufAC_Asm,BufAC_Asm_antiton,adm_non_BufAC_Asm,BufAC_Asm_cong*) |
118 (*adm_BufAC_Asm,BufAC_Asm_antiton,adm_non_BufAC_Asm,BufAC_Asm_cong*) |
119 lemma BufAC_Cmt_2stream_monoP: "f:BufEq ==> ? l. !i x s. s:BufAC_Asm --> x << s --> enat (l i) < #x --> |
119 lemma BufAC_Cmt_2stream_monoP: "f \<in> BufEq \<Longrightarrow> \<exists>l. \<forall>i x s. s \<in> BufAC_Asm \<longrightarrow> x << s \<longrightarrow> enat (l i) < #x \<longrightarrow> |
120 (x,f\<cdot>x):(BufAC_Cmt_F ^^ i) top --> |
120 (x,f\<cdot>x) \<in> (BufAC_Cmt_F ^^ i) top \<longrightarrow> |
121 (s,f\<cdot>s):(BufAC_Cmt_F ^^ i) top" |
121 (s,f\<cdot>s) \<in> (BufAC_Cmt_F ^^ i) top" |
122 apply (rule_tac x="%i. 2*i" in exI) |
122 apply (rule_tac x="%i. 2*i" in exI) |
123 apply (rule allI) |
123 apply (rule allI) |
124 apply (induct_tac "i") |
124 apply (induct_tac "i") |
125 apply ( simp) |
125 apply ( simp) |
126 apply (simp add: add.commute) |
126 apply (simp add: add.commute) |
188 apply (fast) |
188 apply (fast) |
189 done |
189 done |
190 |
190 |
191 (*adm_BufAC_Asm,BufAC_Asm_antiton,adm_non_BufAC_Asm,BufAC_Asm_cong, |
191 (*adm_BufAC_Asm,BufAC_Asm_antiton,adm_non_BufAC_Asm,BufAC_Asm_cong, |
192 BufAC_Cmt_2stream_monoP*) |
192 BufAC_Cmt_2stream_monoP*) |
193 lemma adm_BufAC: "f:BufEq ==> adm (%s. s:BufAC_Asm --> (s, f\<cdot>s):BufAC_Cmt)" |
193 lemma adm_BufAC: "f \<in> BufEq \<Longrightarrow> adm (\<lambda>s. s \<in> BufAC_Asm \<longrightarrow> (s, f\<cdot>s) \<in> BufAC_Cmt)" |
194 apply (rule flatstream_admI) |
194 apply (rule flatstream_admI) |
195 apply (subst BufAC_Cmt_iterate_all) |
195 apply (subst BufAC_Cmt_iterate_all) |
196 apply (drule BufAC_Cmt_2stream_monoP) |
196 apply (drule BufAC_Cmt_2stream_monoP) |
197 apply safe |
197 apply safe |
198 apply (drule spec, erule exE) |
198 apply (drule spec, erule exE) |