src/HOLCF/FOCUS/Buffer.thy
author wenzelm
Fri, 02 Jun 2006 19:41:37 +0200
changeset 19763 ec18656a2c10
parent 19759 2d0896653e7a
child 21404 eb85850d3eb7
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
     1
(*  Title:      HOLCF/FOCUS/Buffer.thy
11355
wenzelm
parents: 11350
diff changeset
     2
    ID:         $Id$
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
     3
    Author:     David von Oheimb, TU Muenchen
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
     4
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
     5
Formalization of section 4 of
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
     6
15038
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
     7
@inproceedings {broy_mod94,
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
     8
    author = {Manfred Broy},
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
     9
    title = {{Specification and Refinement of a Buffer of Length One}},
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
    10
    booktitle = {Deductive Program Design},
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
    11
    year = {1994},
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
    12
    editor = {Manfred Broy},
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
    13
    volume = {152},
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
    14
    series = {ASI Series, Series F: Computer and System Sciences},
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
    15
    pages = {273 -- 304},
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
    16
    publisher = {Springer}
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    17
}
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    18
17646
c5a4fe81857e adjusted web link
haftmann
parents: 17293
diff changeset
    19
Slides available from http://ddvo.net/talks/1-Buffer.ps.gz
15038
eb2469e495cd corrected bibtex entry
oheimb
parents: 14981
diff changeset
    20
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    21
*)
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    22
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    23
theory Buffer
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    24
imports FOCUS
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    25
begin
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    26
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    27
typedecl D
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    28
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    29
datatype
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    30
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    31
  M     = Md D | Mreq ("\<bullet>")
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    32
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    33
datatype
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    34
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    35
  State = Sd D | Snil ("\<currency>")
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    36
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    37
types
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    38
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    39
  SPF11         = "M fstream \<rightarrow> D fstream"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    40
  SPEC11        = "SPF11 set"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    41
  SPSF11        = "State \<Rightarrow> SPF11"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    42
  SPECS11       = "SPSF11 set"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    43
19763
wenzelm
parents: 19759
diff changeset
    44
definition
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    45
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    46
  BufEq_F       :: "SPEC11 \<Rightarrow> SPEC11"
19763
wenzelm
parents: 19759
diff changeset
    47
  "BufEq_F B = {f. \<forall>d. f\<cdot>(Md d\<leadsto><>) = <> \<and>
wenzelm
parents: 19759
diff changeset
    48
                (\<forall>x. \<exists>ff\<in>B. f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x) = d\<leadsto>ff\<cdot>x)}"
wenzelm
parents: 19759
diff changeset
    49
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    50
  BufEq         :: "SPEC11"
19763
wenzelm
parents: 19759
diff changeset
    51
  "BufEq = gfp BufEq_F"
wenzelm
parents: 19759
diff changeset
    52
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    53
  BufEq_alt     :: "SPEC11"
19763
wenzelm
parents: 19759
diff changeset
    54
  "BufEq_alt = gfp (\<lambda>B. {f. \<forall>d. f\<cdot>(Md d\<leadsto><> ) = <> \<and>
wenzelm
parents: 19759
diff changeset
    55
                         (\<exists>ff\<in>B. (\<forall>x. f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x) = d\<leadsto>ff\<cdot>x))})"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    56
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    57
  BufAC_Asm_F   :: " (M fstream set) \<Rightarrow> (M fstream set)"
19763
wenzelm
parents: 19759
diff changeset
    58
  "BufAC_Asm_F A = {s. s = <> \<or>
wenzelm
parents: 19759
diff changeset
    59
                  (\<exists>d x. s = Md d\<leadsto>x \<and> (x = <> \<or> (ft\<cdot>x = Def \<bullet> \<and> (rt\<cdot>x)\<in>A)))}"
wenzelm
parents: 19759
diff changeset
    60
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    61
  BufAC_Asm     :: " (M fstream set)"
19763
wenzelm
parents: 19759
diff changeset
    62
  "BufAC_Asm = gfp BufAC_Asm_F"
wenzelm
parents: 19759
diff changeset
    63
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    64
  BufAC_Cmt_F   :: "((M fstream * D fstream) set) \<Rightarrow>
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    65
                    ((M fstream * D fstream) set)"
19763
wenzelm
parents: 19759
diff changeset
    66
  "BufAC_Cmt_F C = {(s,t). \<forall>d x.
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    67
                           (s = <>         \<longrightarrow>     t = <>                 ) \<and>
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    68
                           (s = Md d\<leadsto><>   \<longrightarrow>     t = <>                 ) \<and>
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    69
                           (s = Md d\<leadsto>\<bullet>\<leadsto>x \<longrightarrow> (ft\<cdot>t = Def d \<and> (x,rt\<cdot>t)\<in>C))}"
19763
wenzelm
parents: 19759
diff changeset
    70
wenzelm
parents: 19759
diff changeset
    71
  BufAC_Cmt     :: "((M fstream * D fstream) set)"
wenzelm
parents: 19759
diff changeset
    72
  "BufAC_Cmt = gfp BufAC_Cmt_F"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    73
19763
wenzelm
parents: 19759
diff changeset
    74
  BufAC         :: "SPEC11"
wenzelm
parents: 19759
diff changeset
    75
  "BufAC = {f. \<forall>x. x\<in>BufAC_Asm \<longrightarrow> (x,f\<cdot>x)\<in>BufAC_Cmt}"
wenzelm
parents: 19759
diff changeset
    76
wenzelm
parents: 19759
diff changeset
    77
  BufSt_F       :: "SPECS11 \<Rightarrow> SPECS11"
wenzelm
parents: 19759
diff changeset
    78
  "BufSt_F H = {h. \<forall>s  . h s      \<cdot><>        = <>         \<and>
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    79
                                 (\<forall>d x. h \<currency>     \<cdot>(Md d\<leadsto>x) = h (Sd d)\<cdot>x \<and>
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    80
                                (\<exists>hh\<in>H. h (Sd d)\<cdot>(\<bullet>   \<leadsto>x) = d\<leadsto>(hh \<currency>\<cdot>x)))}"
19763
wenzelm
parents: 19759
diff changeset
    81
wenzelm
parents: 19759
diff changeset
    82
  BufSt_P       :: "SPECS11"
wenzelm
parents: 19759
diff changeset
    83
  "BufSt_P = gfp BufSt_F"
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    84
19763
wenzelm
parents: 19759
diff changeset
    85
  BufSt         :: "SPEC11"
wenzelm
parents: 19759
diff changeset
    86
  "BufSt = {f. \<exists>h\<in>BufSt_P. f = h \<currency>}"
wenzelm
parents: 19759
diff changeset
    87
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    88
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    89
lemma set_cong: "!!X. A = B ==> (x:A) = (x:B)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    90
by (erule subst, rule refl)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    91
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    92
ML {*
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    93
fun B_prover s tac eqs = prove_goal (the_context ()) s (fn prems => [cut_facts_tac prems 1,
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    94
        tac 1, auto_tac (claset(), simpset() addsimps eqs)]);
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    95
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    96
fun prove_forw  s thm     = B_prover s (dtac (thm RS iffD1)) [];
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    97
fun prove_backw s thm eqs = B_prover s (rtac (thm RS iffD2)) eqs;
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    98
*}
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    99
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   100
(**** BufEq *******************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   101
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   102
lemma mono_BufEq_F: "mono BufEq_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   103
by (unfold mono_def BufEq_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   104
19763
wenzelm
parents: 19759
diff changeset
   105
lemmas BufEq_fix = mono_BufEq_F [THEN BufEq_def [THEN eq_reflection, THEN def_gfp_unfold]]
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   106
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   107
lemma BufEq_unfold: "(f:BufEq) = (!d. f\<cdot>(Md d\<leadsto><>) = <> &
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   108
                 (!x. ? ff:BufEq. f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x) = d\<leadsto>(ff\<cdot>x)))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   109
apply (subst BufEq_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   110
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   111
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   112
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   113
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   114
lemma Buf_f_empty: "f:BufEq \<Longrightarrow> f\<cdot><> = <>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   115
by (drule BufEq_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   116
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   117
lemma Buf_f_d: "f:BufEq \<Longrightarrow> f\<cdot>(Md d\<leadsto><>) = <>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   118
by (drule BufEq_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   119
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   120
lemma Buf_f_d_req:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   121
        "f:BufEq \<Longrightarrow> \<exists>ff. ff:BufEq \<and> f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x) = d\<leadsto>ff\<cdot>x"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   122
by (drule BufEq_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   123
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   124
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   125
(**** BufAC_Asm ***************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   126
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   127
lemma mono_BufAC_Asm_F: "mono BufAC_Asm_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   128
by (unfold mono_def BufAC_Asm_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   129
19763
wenzelm
parents: 19759
diff changeset
   130
lemmas BufAC_Asm_fix =
wenzelm
parents: 19759
diff changeset
   131
  mono_BufAC_Asm_F [THEN BufAC_Asm_def [THEN eq_reflection, THEN def_gfp_unfold]]
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   132
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   133
lemma BufAC_Asm_unfold: "(s:BufAC_Asm) = (s = <> | (? d x. 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   134
        s = Md d\<leadsto>x & (x = <> | (ft\<cdot>x = Def \<bullet> & (rt\<cdot>x):BufAC_Asm))))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   135
apply (subst BufAC_Asm_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   136
apply (unfold BufAC_Asm_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   137
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   138
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   139
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   140
lemma BufAC_Asm_empty: "<>     :BufAC_Asm"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   141
by (rule BufAC_Asm_unfold [THEN iffD2], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   142
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   143
lemma BufAC_Asm_d: "Md d\<leadsto><>:BufAC_Asm"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   144
by (rule BufAC_Asm_unfold [THEN iffD2], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   145
lemma BufAC_Asm_d_req: "x:BufAC_Asm ==> Md d\<leadsto>\<bullet>\<leadsto>x:BufAC_Asm"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   146
by (rule BufAC_Asm_unfold [THEN iffD2], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   147
lemma BufAC_Asm_prefix2: "a\<leadsto>b\<leadsto>s:BufAC_Asm ==> s:BufAC_Asm"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   148
by (drule BufAC_Asm_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   149
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   150
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   151
(**** BBufAC_Cmt **************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   152
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   153
lemma mono_BufAC_Cmt_F: "mono BufAC_Cmt_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   154
by (unfold mono_def BufAC_Cmt_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   155
19763
wenzelm
parents: 19759
diff changeset
   156
lemmas BufAC_Cmt_fix =
wenzelm
parents: 19759
diff changeset
   157
  mono_BufAC_Cmt_F [THEN BufAC_Cmt_def [THEN eq_reflection, THEN def_gfp_unfold]]
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   158
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   159
lemma BufAC_Cmt_unfold: "((s,t):BufAC_Cmt) = (!d x. 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   160
     (s = <>       -->      t = <>) & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   161
     (s = Md d\<leadsto><>  -->      t = <>) & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   162
     (s = Md d\<leadsto>\<bullet>\<leadsto>x --> ft\<cdot>t = Def d & (x, rt\<cdot>t):BufAC_Cmt))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   163
apply (subst BufAC_Cmt_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   164
apply (unfold BufAC_Cmt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   165
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   166
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   167
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   168
lemma BufAC_Cmt_empty: "f:BufEq ==> (<>, f\<cdot><>):BufAC_Cmt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   169
by (rule BufAC_Cmt_unfold [THEN iffD2], auto simp add: Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   170
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   171
lemma BufAC_Cmt_d: "f:BufEq ==> (a\<leadsto>\<bottom>, f\<cdot>(a\<leadsto>\<bottom>)):BufAC_Cmt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   172
by (rule BufAC_Cmt_unfold [THEN iffD2], auto simp add: Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   173
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   174
lemma BufAC_Cmt_d2:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   175
 "(Md d\<leadsto>\<bottom>, f\<cdot>(Md d\<leadsto>\<bottom>)):BufAC_Cmt ==> f\<cdot>(Md d\<leadsto>\<bottom>) = \<bottom>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   176
by (drule BufAC_Cmt_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   177
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   178
lemma BufAC_Cmt_d3:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   179
"(Md d\<leadsto>\<bullet>\<leadsto>x, f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x)):BufAC_Cmt ==> (x, rt\<cdot>(f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x))):BufAC_Cmt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   180
by (drule BufAC_Cmt_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   181
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   182
lemma BufAC_Cmt_d32:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   183
"(Md d\<leadsto>\<bullet>\<leadsto>x, f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x)):BufAC_Cmt ==> ft\<cdot>(f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x)) = Def d"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   184
by (drule BufAC_Cmt_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   185
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   186
(**** BufAC *******************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   187
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   188
lemma BufAC_f_d: "f \<in> BufAC \<Longrightarrow> f\<cdot>(Md d\<leadsto>\<bottom>) = \<bottom>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   189
apply (unfold BufAC_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   190
apply (fast intro: BufAC_Cmt_d2 BufAC_Asm_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   191
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   192
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   193
lemma ex_elim_lemma: "(? ff:B. (!x. f\<cdot>(a\<leadsto>b\<leadsto>x) = d\<leadsto>ff\<cdot>x)) = 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   194
    ((!x. ft\<cdot>(f\<cdot>(a\<leadsto>b\<leadsto>x)) = Def d) & (LAM x. rt\<cdot>(f\<cdot>(a\<leadsto>b\<leadsto>x))):B)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   195
(*  this is an instance (though unification cannot handle this) of
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   196
lemma "(? ff:B. (!x. f\<cdot>x = d\<leadsto>ff\<cdot>x)) = \
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   197
   \((!x. ft\<cdot>(f\<cdot>x) = Def d) & (LAM x. rt\<cdot>(f\<cdot>x)):B)"*)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   198
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   199
apply (  rule_tac [2] P="(%x. x:B)" in ssubst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   200
prefer 3
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   201
apply (   assumption)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   202
apply (  rule_tac [2] ext_cfun)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   203
apply (  drule_tac [2] spec)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   204
apply (  drule_tac [2] f="rt" in cfun_arg_cong)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   205
prefer 2
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   206
apply (  simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   207
prefer 2
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   208
apply ( simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   209
apply (rule_tac bexI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   210
apply auto
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   211
apply (drule spec)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   212
apply (erule exE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   213
apply (erule ssubst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   214
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   215
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   216
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   217
lemma BufAC_f_d_req: "f\<in>BufAC \<Longrightarrow> \<exists>ff\<in>BufAC. \<forall>x. f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x) = d\<leadsto>ff\<cdot>x"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   218
apply (unfold BufAC_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   219
apply (rule ex_elim_lemma [THEN iffD2])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   220
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   221
apply  (fast intro: BufAC_Cmt_d32 [THEN Def_maximal]
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   222
             monofun_cfun_arg BufAC_Asm_empty [THEN BufAC_Asm_d_req])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   223
apply (auto intro: BufAC_Cmt_d3 BufAC_Asm_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   224
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   225
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   226
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   227
(**** BufSt *******************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   228
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   229
lemma mono_BufSt_F: "mono BufSt_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   230
by (unfold mono_def BufSt_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   231
19763
wenzelm
parents: 19759
diff changeset
   232
lemmas BufSt_P_fix =
wenzelm
parents: 19759
diff changeset
   233
  mono_BufSt_F [THEN BufSt_P_def [THEN eq_reflection, THEN def_gfp_unfold]]
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   234
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   235
lemma BufSt_P_unfold: "(h:BufSt_P) = (!s. h s\<cdot><> = <> & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   236
           (!d x. h \<currency>     \<cdot>(Md d\<leadsto>x)   =    h (Sd d)\<cdot>x & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   237
      (? hh:BufSt_P. h (Sd d)\<cdot>(\<bullet>\<leadsto>x)   = d\<leadsto>(hh \<currency>    \<cdot>x))))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   238
apply (subst BufSt_P_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   239
apply (unfold BufSt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   240
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   241
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   242
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   243
lemma BufSt_P_empty: "h:BufSt_P ==> h s     \<cdot> <>       = <>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   244
by (drule BufSt_P_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   245
lemma BufSt_P_d: "h:BufSt_P ==> h  \<currency>    \<cdot>(Md d\<leadsto>x) = h (Sd d)\<cdot>x"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   246
by (drule BufSt_P_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   247
lemma BufSt_P_d_req: "h:BufSt_P ==> \<exists>hh\<in>BufSt_P.
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   248
                                          h (Sd d)\<cdot>(\<bullet>   \<leadsto>x) = d\<leadsto>(hh \<currency>    \<cdot>x)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   249
by (drule BufSt_P_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   250
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   251
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   252
(**** Buf_AC_imp_Eq ***********************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   253
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   254
lemma Buf_AC_imp_Eq: "BufAC \<subseteq> BufEq"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   255
apply (unfold BufEq_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   256
apply (rule gfp_upperbound)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   257
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   258
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   259
apply  (erule BufAC_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   260
apply (drule BufAC_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   261
apply (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   262
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   263
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   264
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   265
(**** Buf_Eq_imp_AC by coinduction ********************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   266
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   267
lemma BufAC_Asm_cong_lemma [rule_format]: "\<forall>s f ff. f\<in>BufEq \<longrightarrow> ff\<in>BufEq \<longrightarrow> 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   268
  s\<in>BufAC_Asm \<longrightarrow> stream_take n\<cdot>(f\<cdot>s) = stream_take n\<cdot>(ff\<cdot>s)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   269
apply (induct_tac "n")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   270
apply  (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   271
apply (intro strip)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   272
apply (drule BufAC_Asm_unfold [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   273
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   274
apply   (simp add: Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   275
apply  (simp add: Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   276
apply (drule ft_eq [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   277
apply (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   278
apply (drule Buf_f_d_req)+
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   279
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   280
apply (erule ssubst)+
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   281
apply (simp (no_asm))
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   282
apply (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   283
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   284
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   285
lemma BufAC_Asm_cong: "\<lbrakk>f \<in> BufEq; ff \<in> BufEq; s \<in> BufAC_Asm\<rbrakk> \<Longrightarrow> f\<cdot>s = ff\<cdot>s"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   286
apply (rule stream.take_lemmas)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   287
apply (erule (2) BufAC_Asm_cong_lemma)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   288
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   289
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   290
lemma Buf_Eq_imp_AC_lemma: "\<lbrakk>f \<in> BufEq; x \<in> BufAC_Asm\<rbrakk> \<Longrightarrow> (x, f\<cdot>x) \<in> BufAC_Cmt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   291
apply (unfold BufAC_Cmt_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   292
apply (rotate_tac)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   293
apply (erule weak_coinduct_image)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   294
apply (unfold BufAC_Cmt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   295
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   296
apply    (erule Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   297
apply   (erule Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   298
apply  (drule Buf_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   299
apply  (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   300
apply  (erule exI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   301
apply (drule BufAC_Asm_prefix2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   302
apply (frule Buf_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   303
apply (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   304
apply (erule ssubst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   305
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   306
apply (drule (2) BufAC_Asm_cong)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   307
apply (erule subst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   308
apply (erule imageI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   309
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   310
lemma Buf_Eq_imp_AC: "BufEq \<subseteq> BufAC"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   311
apply (unfold BufAC_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   312
apply (clarify)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   313
apply (erule (1) Buf_Eq_imp_AC_lemma)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   314
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   315
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   316
(**** Buf_Eq_eq_AC ************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   317
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   318
lemmas Buf_Eq_eq_AC = Buf_AC_imp_Eq [THEN Buf_Eq_imp_AC [THEN subset_antisym]]
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   319
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   320
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   321
(**** alternative (not strictly) stronger version of Buf_Eq *******************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   322
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   323
lemma Buf_Eq_alt_imp_Eq: "BufEq_alt \<subseteq> BufEq"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   324
apply (unfold BufEq_def BufEq_alt_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   325
apply (rule gfp_mono)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   326
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   327
apply (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   328
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   329
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   330
(* direct proof of "BufEq \<subseteq> BufEq_alt" seems impossible *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   331
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   332
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   333
lemma Buf_AC_imp_Eq_alt: "BufAC <= BufEq_alt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   334
apply (unfold BufEq_alt_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   335
apply (rule gfp_upperbound)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   336
apply (fast elim: BufAC_f_d BufAC_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   337
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   338
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   339
lemmas Buf_Eq_imp_Eq_alt = subset_trans [OF Buf_Eq_imp_AC Buf_AC_imp_Eq_alt]
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   340
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   341
lemmas Buf_Eq_alt_eq = subset_antisym [OF Buf_Eq_alt_imp_Eq Buf_Eq_imp_Eq_alt]
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   342
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   343
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   344
(**** Buf_Eq_eq_St ************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   345
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   346
lemma Buf_St_imp_Eq: "BufSt <= BufEq"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   347
apply (unfold BufSt_def BufEq_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   348
apply (rule gfp_upperbound)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   349
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   350
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   351
apply ( simp add: BufSt_P_d BufSt_P_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   352
apply (simp add: BufSt_P_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   353
apply (drule BufSt_P_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   354
apply (force)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   355
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   356
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   357
lemma Buf_Eq_imp_St: "BufEq <= BufSt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   358
apply (unfold BufSt_def BufSt_P_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   359
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   360
apply (rename_tac f)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   361
apply (rule_tac x="\<lambda>s. case s of Sd d => \<Lambda> x. f\<cdot>(Md d\<leadsto>x)| \<currency> => f" in bexI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   362
apply ( simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   363
apply (erule weak_coinduct_image)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   364
apply (unfold BufSt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   365
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   366
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   367
apply (  rename_tac "s")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   368
apply (  induct_tac "s")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   369
apply (   simp add: Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   370
apply (  simp add: Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   371
apply ( simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   372
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   373
apply (rename_tac f d x)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   374
apply (drule_tac d="d" and x="x" in Buf_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   375
apply auto
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   376
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   377
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   378
lemmas Buf_Eq_eq_St = Buf_St_imp_Eq [THEN Buf_Eq_imp_St [THEN subset_antisym]]
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   379
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
   380
end