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