src/HOL/HOLCF/FOCUS/Buffer.thy
author blanchet
Thu, 11 Sep 2014 18:54:36 +0200
changeset 58305 57752a91eec4
parent 42151 4da4fc77664b
child 58310 91ea607a34d8
permissions -rw-r--r--
renamed 'datatype' to 'old_datatype'; 'datatype' is now alias for 'datatype_new'
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42151
4da4fc77664b tuned headers;
wenzelm
parents: 41476
diff changeset
     1
(*  Title:      HOL/HOLCF/FOCUS/Buffer.thy
17293
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
58305
57752a91eec4 renamed 'datatype' to 'old_datatype'; 'datatype' is now alias for 'datatype_new'
blanchet
parents: 42151
diff changeset
    28
datatype_new
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    29
  M     = Md D | Mreq ("\<bullet>")
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    30
58305
57752a91eec4 renamed 'datatype' to 'old_datatype'; 'datatype' is now alias for 'datatype_new'
blanchet
parents: 42151
diff changeset
    31
datatype_new
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    32
  State = Sd D | Snil ("\<currency>")
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    33
41476
0fa9629aa399 types -> type_synonym
huffman
parents: 40774
diff changeset
    34
type_synonym
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    35
  SPF11         = "M fstream \<rightarrow> D fstream"
41476
0fa9629aa399 types -> type_synonym
huffman
parents: 40774
diff changeset
    36
0fa9629aa399 types -> type_synonym
huffman
parents: 40774
diff changeset
    37
type_synonym
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    38
  SPEC11        = "SPF11 set"
41476
0fa9629aa399 types -> type_synonym
huffman
parents: 40774
diff changeset
    39
0fa9629aa399 types -> type_synonym
huffman
parents: 40774
diff changeset
    40
type_synonym
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    41
  SPSF11        = "State \<Rightarrow> SPF11"
41476
0fa9629aa399 types -> type_synonym
huffman
parents: 40774
diff changeset
    42
0fa9629aa399 types -> type_synonym
huffman
parents: 40774
diff changeset
    43
type_synonym
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    44
  SPECS11       = "SPSF11 set"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    45
19763
wenzelm
parents: 19759
diff changeset
    46
definition
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    47
  BufEq_F       :: "SPEC11 \<Rightarrow> SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    48
  "BufEq_F B = {f. \<forall>d. f\<cdot>(Md d\<leadsto><>) = <> \<and>
wenzelm
parents: 19759
diff changeset
    49
                (\<forall>x. \<exists>ff\<in>B. f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x) = d\<leadsto>ff\<cdot>x)}"
wenzelm
parents: 19759
diff changeset
    50
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    51
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    52
  BufEq         :: "SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    53
  "BufEq = gfp BufEq_F"
wenzelm
parents: 19759
diff changeset
    54
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    55
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    56
  BufEq_alt     :: "SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    57
  "BufEq_alt = gfp (\<lambda>B. {f. \<forall>d. f\<cdot>(Md d\<leadsto><> ) = <> \<and>
wenzelm
parents: 19759
diff changeset
    58
                         (\<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
    59
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    60
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    61
  BufAC_Asm_F   :: " (M fstream set) \<Rightarrow> (M fstream set)" where
19763
wenzelm
parents: 19759
diff changeset
    62
  "BufAC_Asm_F A = {s. s = <> \<or>
wenzelm
parents: 19759
diff changeset
    63
                  (\<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
    64
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    65
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    66
  BufAC_Asm     :: " (M fstream set)" where
19763
wenzelm
parents: 19759
diff changeset
    67
  "BufAC_Asm = gfp BufAC_Asm_F"
wenzelm
parents: 19759
diff changeset
    68
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    69
definition
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    70
  BufAC_Cmt_F   :: "((M fstream * D fstream) set) \<Rightarrow>
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    71
                    ((M fstream * D fstream) set)" where
19763
wenzelm
parents: 19759
diff changeset
    72
  "BufAC_Cmt_F C = {(s,t). \<forall>d x.
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    73
                           (s = <>         \<longrightarrow>     t = <>                 ) \<and>
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    74
                           (s = Md d\<leadsto><>   \<longrightarrow>     t = <>                 ) \<and>
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    75
                           (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
    76
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    77
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    78
  BufAC_Cmt     :: "((M fstream * D fstream) set)" where
19763
wenzelm
parents: 19759
diff changeset
    79
  "BufAC_Cmt = gfp BufAC_Cmt_F"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    80
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    81
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    82
  BufAC         :: "SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    83
  "BufAC = {f. \<forall>x. x\<in>BufAC_Asm \<longrightarrow> (x,f\<cdot>x)\<in>BufAC_Cmt}"
wenzelm
parents: 19759
diff changeset
    84
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    85
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    86
  BufSt_F       :: "SPECS11 \<Rightarrow> SPECS11" where
19763
wenzelm
parents: 19759
diff changeset
    87
  "BufSt_F H = {h. \<forall>s  . h s      \<cdot><>        = <>         \<and>
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    88
                                 (\<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
    89
                                (\<exists>hh\<in>H. h (Sd d)\<cdot>(\<bullet>   \<leadsto>x) = d\<leadsto>(hh \<currency>\<cdot>x)))}"
19763
wenzelm
parents: 19759
diff changeset
    90
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    91
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    92
  BufSt_P       :: "SPECS11" where
19763
wenzelm
parents: 19759
diff changeset
    93
  "BufSt_P = gfp BufSt_F"
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    94
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    95
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    96
  BufSt         :: "SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    97
  "BufSt = {f. \<exists>h\<in>BufSt_P. f = h \<currency>}"
wenzelm
parents: 19759
diff changeset
    98
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    99
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   100
lemma set_cong: "!!X. A = B ==> (x:A) = (x:B)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   101
by (erule subst, rule refl)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   102
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   103
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   104
(**** BufEq *******************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   105
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   106
lemma mono_BufEq_F: "mono BufEq_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   107
by (unfold mono_def BufEq_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   108
19763
wenzelm
parents: 19759
diff changeset
   109
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
   110
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   111
lemma BufEq_unfold: "(f:BufEq) = (!d. f\<cdot>(Md d\<leadsto><>) = <> &
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   112
                 (!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
   113
apply (subst BufEq_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   114
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   115
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   116
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   117
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   118
lemma Buf_f_empty: "f:BufEq \<Longrightarrow> f\<cdot><> = <>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   119
by (drule BufEq_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   120
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   121
lemma Buf_f_d: "f:BufEq \<Longrightarrow> f\<cdot>(Md d\<leadsto><>) = <>"
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
lemma Buf_f_d_req:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   125
        "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
   126
by (drule BufEq_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   127
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   128
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   129
(**** BufAC_Asm ***************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   130
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   131
lemma mono_BufAC_Asm_F: "mono BufAC_Asm_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   132
by (unfold mono_def BufAC_Asm_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   133
19763
wenzelm
parents: 19759
diff changeset
   134
lemmas BufAC_Asm_fix =
wenzelm
parents: 19759
diff changeset
   135
  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
   136
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   137
lemma BufAC_Asm_unfold: "(s:BufAC_Asm) = (s = <> | (? d x. 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   138
        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
   139
apply (subst BufAC_Asm_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   140
apply (unfold BufAC_Asm_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   141
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   142
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   143
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   144
lemma BufAC_Asm_empty: "<>     :BufAC_Asm"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   145
by (rule BufAC_Asm_unfold [THEN iffD2], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   146
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   147
lemma BufAC_Asm_d: "Md d\<leadsto><>:BufAC_Asm"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   148
by (rule BufAC_Asm_unfold [THEN iffD2], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   149
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
   150
by (rule BufAC_Asm_unfold [THEN iffD2], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   151
lemma BufAC_Asm_prefix2: "a\<leadsto>b\<leadsto>s:BufAC_Asm ==> s:BufAC_Asm"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   152
by (drule BufAC_Asm_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   153
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   154
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   155
(**** BBufAC_Cmt **************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   156
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   157
lemma mono_BufAC_Cmt_F: "mono BufAC_Cmt_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   158
by (unfold mono_def BufAC_Cmt_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   159
19763
wenzelm
parents: 19759
diff changeset
   160
lemmas BufAC_Cmt_fix =
wenzelm
parents: 19759
diff changeset
   161
  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
   162
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   163
lemma BufAC_Cmt_unfold: "((s,t):BufAC_Cmt) = (!d x. 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   164
     (s = <>       -->      t = <>) & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   165
     (s = Md d\<leadsto><>  -->      t = <>) & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   166
     (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
   167
apply (subst BufAC_Cmt_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   168
apply (unfold BufAC_Cmt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   169
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   170
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   171
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   172
lemma BufAC_Cmt_empty: "f:BufEq ==> (<>, f\<cdot><>):BufAC_Cmt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   173
by (rule BufAC_Cmt_unfold [THEN iffD2], auto simp add: Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   174
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   175
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
   176
by (rule BufAC_Cmt_unfold [THEN iffD2], auto simp add: Buf_f_d)
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_d2:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   179
 "(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
   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_d3:
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 ==> (x, rt\<cdot>(f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x))):BufAC_Cmt"
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
lemma BufAC_Cmt_d32:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   187
"(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
   188
by (drule BufAC_Cmt_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   189
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   190
(**** BufAC *******************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   191
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   192
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
   193
apply (unfold BufAC_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   194
apply (fast intro: BufAC_Cmt_d2 BufAC_Asm_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   195
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   196
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   197
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
   198
    ((!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
   199
(*  this is an instance (though unification cannot handle this) of
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   200
lemma "(? ff:B. (!x. f\<cdot>x = d\<leadsto>ff\<cdot>x)) = \
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   201
   \((!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
   202
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   203
apply (  rule_tac [2] P="(%x. x:B)" in ssubst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   204
prefer 3
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   205
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
   206
apply (  rule_tac [2] cfun_eqI)
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   207
apply (  drule_tac [2] spec)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   208
apply (  drule_tac [2] f="rt" in cfun_arg_cong)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   209
prefer 2
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   210
apply (  simp)
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
apply (rule_tac bexI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   214
apply auto
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   215
apply (drule spec)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   216
apply (erule exE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   217
apply (erule ssubst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   218
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   219
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   220
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   221
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
   222
apply (unfold BufAC_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   223
apply (rule ex_elim_lemma [THEN iffD2])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   224
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   225
apply  (fast intro: BufAC_Cmt_d32 [THEN Def_maximal]
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   226
             monofun_cfun_arg BufAC_Asm_empty [THEN BufAC_Asm_d_req])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   227
apply (auto intro: BufAC_Cmt_d3 BufAC_Asm_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   228
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   229
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   230
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   231
(**** BufSt *******************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   232
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   233
lemma mono_BufSt_F: "mono BufSt_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   234
by (unfold mono_def BufSt_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   235
19763
wenzelm
parents: 19759
diff changeset
   236
lemmas BufSt_P_fix =
wenzelm
parents: 19759
diff changeset
   237
  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
   238
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   239
lemma BufSt_P_unfold: "(h:BufSt_P) = (!s. h s\<cdot><> = <> & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   240
           (!d x. h \<currency>     \<cdot>(Md d\<leadsto>x)   =    h (Sd d)\<cdot>x & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   241
      (? 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
   242
apply (subst BufSt_P_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   243
apply (unfold BufSt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   244
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   245
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   246
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   247
lemma BufSt_P_empty: "h:BufSt_P ==> h s     \<cdot> <>       = <>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   248
by (drule BufSt_P_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   249
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
   250
by (drule BufSt_P_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   251
lemma BufSt_P_d_req: "h:BufSt_P ==> \<exists>hh\<in>BufSt_P.
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   252
                                          h (Sd d)\<cdot>(\<bullet>   \<leadsto>x) = d\<leadsto>(hh \<currency>    \<cdot>x)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   253
by (drule BufSt_P_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   254
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   255
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   256
(**** Buf_AC_imp_Eq ***********************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   257
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   258
lemma Buf_AC_imp_Eq: "BufAC \<subseteq> BufEq"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   259
apply (unfold BufEq_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   260
apply (rule gfp_upperbound)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   261
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   262
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   263
apply  (erule BufAC_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   264
apply (drule BufAC_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   265
apply (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   266
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   267
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   268
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   269
(**** Buf_Eq_imp_AC by coinduction ********************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   270
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   271
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
   272
  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
   273
apply (induct_tac "n")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   274
apply  (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   275
apply (intro strip)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   276
apply (drule BufAC_Asm_unfold [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   277
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   278
apply   (simp add: Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   279
apply  (simp add: Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   280
apply (drule ft_eq [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   281
apply (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   282
apply (drule Buf_f_d_req)+
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   283
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   284
apply (erule ssubst)+
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   285
apply (simp (no_asm))
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   286
apply (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   287
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   288
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   289
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
   290
apply (rule stream.take_lemma)
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   291
apply (erule (2) BufAC_Asm_cong_lemma)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   292
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   293
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   294
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
   295
apply (unfold BufAC_Cmt_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   296
apply (rotate_tac)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   297
apply (erule weak_coinduct_image)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   298
apply (unfold BufAC_Cmt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   299
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   300
apply    (erule Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   301
apply   (erule Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   302
apply  (drule 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 exI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   305
apply (drule BufAC_Asm_prefix2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   306
apply (frule Buf_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   307
apply (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   308
apply (erule ssubst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   309
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   310
apply (drule (2) BufAC_Asm_cong)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   311
apply (erule subst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   312
apply (erule imageI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   313
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   314
lemma Buf_Eq_imp_AC: "BufEq \<subseteq> BufAC"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   315
apply (unfold BufAC_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   316
apply (clarify)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   317
apply (erule (1) Buf_Eq_imp_AC_lemma)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   318
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   319
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   320
(**** Buf_Eq_eq_AC ************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   321
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   322
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
   323
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   324
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   325
(**** alternative (not strictly) stronger version of Buf_Eq *******************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   326
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   327
lemma Buf_Eq_alt_imp_Eq: "BufEq_alt \<subseteq> BufEq"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   328
apply (unfold BufEq_def BufEq_alt_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   329
apply (rule gfp_mono)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   330
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   331
apply (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   332
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   333
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   334
(* direct proof of "BufEq \<subseteq> BufEq_alt" seems impossible *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   335
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   336
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   337
lemma Buf_AC_imp_Eq_alt: "BufAC <= BufEq_alt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   338
apply (unfold BufEq_alt_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   339
apply (rule gfp_upperbound)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   340
apply (fast elim: BufAC_f_d BufAC_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   341
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   342
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   343
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
   344
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   345
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
   346
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   347
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   348
(**** Buf_Eq_eq_St ************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   349
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   350
lemma Buf_St_imp_Eq: "BufSt <= BufEq"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   351
apply (unfold BufSt_def BufEq_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   352
apply (rule gfp_upperbound)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   353
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   354
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   355
apply ( simp add: BufSt_P_d BufSt_P_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   356
apply (simp add: BufSt_P_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   357
apply (drule BufSt_P_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   358
apply (force)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   359
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   360
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   361
lemma Buf_Eq_imp_St: "BufEq <= BufSt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   362
apply (unfold BufSt_def BufSt_P_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   363
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   364
apply (rename_tac f)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   365
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
   366
apply ( simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   367
apply (erule weak_coinduct_image)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   368
apply (unfold BufSt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   369
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   370
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   371
apply (  rename_tac "s")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   372
apply (  induct_tac "s")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   373
apply (   simp add: Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   374
apply (  simp add: Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   375
apply ( simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   376
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   377
apply (rename_tac f d x)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   378
apply (drule_tac d="d" and x="x" in Buf_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   379
apply auto
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   380
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   381
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   382
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
   383
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
   384
end