src/HOLCF/FOCUS/Buffer.thy
author paulson
Fri, 05 Oct 2007 09:59:03 +0200
changeset 24854 0ebcd575d3c6
parent 21404 eb85850d3eb7
child 28952 15a4b2cf8c34
permissions -rw-r--r--
filtering out some package theorems
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
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    45
  BufEq_F       :: "SPEC11 \<Rightarrow> SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    46
  "BufEq_F B = {f. \<forall>d. f\<cdot>(Md d\<leadsto><>) = <> \<and>
wenzelm
parents: 19759
diff changeset
    47
                (\<forall>x. \<exists>ff\<in>B. f\<cdot>(Md d\<leadsto>\<bullet>\<leadsto>x) = d\<leadsto>ff\<cdot>x)}"
wenzelm
parents: 19759
diff changeset
    48
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    49
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    50
  BufEq         :: "SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    51
  "BufEq = gfp BufEq_F"
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_alt     :: "SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    55
  "BufEq_alt = gfp (\<lambda>B. {f. \<forall>d. f\<cdot>(Md d\<leadsto><> ) = <> \<and>
wenzelm
parents: 19759
diff changeset
    56
                         (\<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
    57
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    58
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    59
  BufAC_Asm_F   :: " (M fstream set) \<Rightarrow> (M fstream set)" where
19763
wenzelm
parents: 19759
diff changeset
    60
  "BufAC_Asm_F A = {s. s = <> \<or>
wenzelm
parents: 19759
diff changeset
    61
                  (\<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
    62
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    63
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    64
  BufAC_Asm     :: " (M fstream set)" where
19763
wenzelm
parents: 19759
diff changeset
    65
  "BufAC_Asm = gfp BufAC_Asm_F"
wenzelm
parents: 19759
diff changeset
    66
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    67
definition
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    68
  BufAC_Cmt_F   :: "((M fstream * D fstream) set) \<Rightarrow>
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    69
                    ((M fstream * D fstream) set)" where
19763
wenzelm
parents: 19759
diff changeset
    70
  "BufAC_Cmt_F C = {(s,t). \<forall>d x.
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    71
                           (s = <>         \<longrightarrow>     t = <>                 ) \<and>
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    72
                           (s = Md d\<leadsto><>   \<longrightarrow>     t = <>                 ) \<and>
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    73
                           (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
    74
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    75
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    76
  BufAC_Cmt     :: "((M fstream * D fstream) set)" where
19763
wenzelm
parents: 19759
diff changeset
    77
  "BufAC_Cmt = gfp BufAC_Cmt_F"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
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         :: "SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    81
  "BufAC = {f. \<forall>x. x\<in>BufAC_Asm \<longrightarrow> (x,f\<cdot>x)\<in>BufAC_Cmt}"
wenzelm
parents: 19759
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
  BufSt_F       :: "SPECS11 \<Rightarrow> SPECS11" where
19763
wenzelm
parents: 19759
diff changeset
    85
  "BufSt_F H = {h. \<forall>s  . h s      \<cdot><>        = <>         \<and>
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
diff changeset
    86
                                 (\<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
    87
                                (\<exists>hh\<in>H. h (Sd d)\<cdot>(\<bullet>   \<leadsto>x) = d\<leadsto>(hh \<currency>\<cdot>x)))}"
19763
wenzelm
parents: 19759
diff changeset
    88
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    89
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 19763
diff changeset
    90
  BufSt_P       :: "SPECS11" where
19763
wenzelm
parents: 19759
diff changeset
    91
  "BufSt_P = gfp BufSt_F"
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15038
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         :: "SPEC11" where
19763
wenzelm
parents: 19759
diff changeset
    95
  "BufSt = {f. \<exists>h\<in>BufSt_P. f = h \<currency>}"
wenzelm
parents: 19759
diff changeset
    96
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    97
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    98
lemma set_cong: "!!X. A = B ==> (x:A) = (x:B)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
    99
by (erule subst, rule refl)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   100
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   101
ML {*
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   102
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
   103
        tac 1, auto_tac (claset(), simpset() addsimps eqs)]);
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   104
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   105
fun prove_forw  s thm     = B_prover s (dtac (thm RS iffD1)) [];
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   106
fun prove_backw s thm eqs = B_prover s (rtac (thm RS iffD2)) eqs;
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   107
*}
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   108
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   109
(**** BufEq *******************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   110
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   111
lemma mono_BufEq_F: "mono BufEq_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   112
by (unfold mono_def BufEq_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   113
19763
wenzelm
parents: 19759
diff changeset
   114
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
   115
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   116
lemma BufEq_unfold: "(f:BufEq) = (!d. f\<cdot>(Md d\<leadsto><>) = <> &
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   117
                 (!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
   118
apply (subst BufEq_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   119
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   120
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   121
done
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_empty: "f:BufEq \<Longrightarrow> f\<cdot><> = <>"
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: "f:BufEq \<Longrightarrow> f\<cdot>(Md d\<leadsto><>) = <>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   127
by (drule BufEq_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   128
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   129
lemma Buf_f_d_req:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   130
        "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
   131
by (drule BufEq_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   132
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   133
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   134
(**** BufAC_Asm ***************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   135
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   136
lemma mono_BufAC_Asm_F: "mono BufAC_Asm_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   137
by (unfold mono_def BufAC_Asm_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   138
19763
wenzelm
parents: 19759
diff changeset
   139
lemmas BufAC_Asm_fix =
wenzelm
parents: 19759
diff changeset
   140
  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
   141
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   142
lemma BufAC_Asm_unfold: "(s:BufAC_Asm) = (s = <> | (? d x. 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   143
        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
   144
apply (subst BufAC_Asm_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   145
apply (unfold BufAC_Asm_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   146
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   147
done
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_empty: "<>     :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
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   152
lemma BufAC_Asm_d: "Md d\<leadsto><>:BufAC_Asm"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   153
by (rule BufAC_Asm_unfold [THEN iffD2], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   154
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
   155
by (rule BufAC_Asm_unfold [THEN iffD2], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   156
lemma BufAC_Asm_prefix2: "a\<leadsto>b\<leadsto>s:BufAC_Asm ==> s:BufAC_Asm"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   157
by (drule BufAC_Asm_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   158
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   159
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   160
(**** BBufAC_Cmt **************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   161
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   162
lemma mono_BufAC_Cmt_F: "mono BufAC_Cmt_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   163
by (unfold mono_def BufAC_Cmt_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   164
19763
wenzelm
parents: 19759
diff changeset
   165
lemmas BufAC_Cmt_fix =
wenzelm
parents: 19759
diff changeset
   166
  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
   167
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   168
lemma BufAC_Cmt_unfold: "((s,t):BufAC_Cmt) = (!d x. 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   169
     (s = <>       -->      t = <>) & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   170
     (s = Md d\<leadsto><>  -->      t = <>) & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   171
     (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
   172
apply (subst BufAC_Cmt_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   173
apply (unfold BufAC_Cmt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   174
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   175
done
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_empty: "f:BufEq ==> (<>, f\<cdot><>):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_empty)
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_d: "f:BufEq ==> (a\<leadsto>\<bottom>, f\<cdot>(a\<leadsto>\<bottom>)):BufAC_Cmt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   181
by (rule BufAC_Cmt_unfold [THEN iffD2], auto simp add: Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   182
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   183
lemma BufAC_Cmt_d2:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   184
 "(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
   185
by (drule BufAC_Cmt_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   186
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   187
lemma BufAC_Cmt_d3:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   188
"(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
   189
by (drule BufAC_Cmt_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   190
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   191
lemma BufAC_Cmt_d32:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   192
"(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
   193
by (drule BufAC_Cmt_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   194
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   195
(**** BufAC *******************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   196
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   197
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
   198
apply (unfold BufAC_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   199
apply (fast intro: BufAC_Cmt_d2 BufAC_Asm_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   200
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   201
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   202
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
   203
    ((!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
   204
(*  this is an instance (though unification cannot handle this) of
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   205
lemma "(? ff:B. (!x. f\<cdot>x = d\<leadsto>ff\<cdot>x)) = \
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   206
   \((!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
   207
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   208
apply (  rule_tac [2] P="(%x. x:B)" in ssubst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   209
prefer 3
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   210
apply (   assumption)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   211
apply (  rule_tac [2] ext_cfun)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   212
apply (  drule_tac [2] spec)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   213
apply (  drule_tac [2] f="rt" in cfun_arg_cong)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   214
prefer 2
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   215
apply (  simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   216
prefer 2
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   217
apply ( simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   218
apply (rule_tac bexI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   219
apply auto
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   220
apply (drule spec)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   221
apply (erule exE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   222
apply (erule ssubst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   223
apply (simp)
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
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
   227
apply (unfold BufAC_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   228
apply (rule ex_elim_lemma [THEN iffD2])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   229
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   230
apply  (fast intro: BufAC_Cmt_d32 [THEN Def_maximal]
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   231
             monofun_cfun_arg BufAC_Asm_empty [THEN BufAC_Asm_d_req])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   232
apply (auto intro: BufAC_Cmt_d3 BufAC_Asm_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   233
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   234
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   235
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   236
(**** BufSt *******************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   237
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   238
lemma mono_BufSt_F: "mono BufSt_F"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   239
by (unfold mono_def BufSt_F_def, fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   240
19763
wenzelm
parents: 19759
diff changeset
   241
lemmas BufSt_P_fix =
wenzelm
parents: 19759
diff changeset
   242
  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
   243
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   244
lemma BufSt_P_unfold: "(h:BufSt_P) = (!s. h s\<cdot><> = <> & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   245
           (!d x. h \<currency>     \<cdot>(Md d\<leadsto>x)   =    h (Sd d)\<cdot>x & 
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   246
      (? 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
   247
apply (subst BufSt_P_fix [THEN set_cong])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   248
apply (unfold BufSt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   249
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   250
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   251
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   252
lemma BufSt_P_empty: "h:BufSt_P ==> h s     \<cdot> <>       = <>"
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
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
   255
by (drule BufSt_P_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   256
lemma BufSt_P_d_req: "h:BufSt_P ==> \<exists>hh\<in>BufSt_P.
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   257
                                          h (Sd d)\<cdot>(\<bullet>   \<leadsto>x) = d\<leadsto>(hh \<currency>    \<cdot>x)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   258
by (drule BufSt_P_unfold [THEN iffD1], auto)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   259
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   260
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   261
(**** Buf_AC_imp_Eq ***********************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   262
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   263
lemma Buf_AC_imp_Eq: "BufAC \<subseteq> BufEq"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   264
apply (unfold BufEq_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   265
apply (rule gfp_upperbound)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   266
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   267
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   268
apply  (erule BufAC_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   269
apply (drule BufAC_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   270
apply (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   271
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   272
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   273
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   274
(**** Buf_Eq_imp_AC by coinduction ********************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   275
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   276
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
   277
  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
   278
apply (induct_tac "n")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   279
apply  (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   280
apply (intro strip)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   281
apply (drule BufAC_Asm_unfold [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   282
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   283
apply   (simp add: Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   284
apply  (simp add: Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   285
apply (drule ft_eq [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   286
apply (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   287
apply (drule Buf_f_d_req)+
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   288
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   289
apply (erule ssubst)+
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   290
apply (simp (no_asm))
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   291
apply (fast)
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 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
   295
apply (rule stream.take_lemmas)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   296
apply (erule (2) BufAC_Asm_cong_lemma)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   297
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   298
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   299
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
   300
apply (unfold BufAC_Cmt_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   301
apply (rotate_tac)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   302
apply (erule weak_coinduct_image)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   303
apply (unfold BufAC_Cmt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   304
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   305
apply    (erule Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   306
apply   (erule Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   307
apply  (drule Buf_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   308
apply  (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   309
apply  (erule exI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   310
apply (drule BufAC_Asm_prefix2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   311
apply (frule Buf_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   312
apply (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   313
apply (erule ssubst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   314
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   315
apply (drule (2) BufAC_Asm_cong)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   316
apply (erule subst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   317
apply (erule imageI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   318
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   319
lemma Buf_Eq_imp_AC: "BufEq \<subseteq> BufAC"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   320
apply (unfold BufAC_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   321
apply (clarify)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   322
apply (erule (1) Buf_Eq_imp_AC_lemma)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   323
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   324
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   325
(**** Buf_Eq_eq_AC ************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   326
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   327
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
   328
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   329
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   330
(**** alternative (not strictly) stronger version of Buf_Eq *******************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   331
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   332
lemma Buf_Eq_alt_imp_Eq: "BufEq_alt \<subseteq> BufEq"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   333
apply (unfold BufEq_def BufEq_alt_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   334
apply (rule gfp_mono)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   335
apply (unfold BufEq_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   336
apply (fast)
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
(* direct proof of "BufEq \<subseteq> BufEq_alt" seems impossible *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   340
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   341
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   342
lemma Buf_AC_imp_Eq_alt: "BufAC <= BufEq_alt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   343
apply (unfold BufEq_alt_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   344
apply (rule gfp_upperbound)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   345
apply (fast elim: BufAC_f_d BufAC_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   346
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   347
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   348
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
   349
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   350
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
   351
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   352
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   353
(**** Buf_Eq_eq_St ************************************************************)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   354
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   355
lemma Buf_St_imp_Eq: "BufSt <= BufEq"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   356
apply (unfold BufSt_def BufEq_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   357
apply (rule gfp_upperbound)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   358
apply (unfold BufEq_F_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 ( simp add: BufSt_P_d BufSt_P_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   361
apply (simp add: BufSt_P_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   362
apply (drule BufSt_P_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   363
apply (force)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   364
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   365
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   366
lemma Buf_Eq_imp_St: "BufEq <= BufSt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   367
apply (unfold BufSt_def BufSt_P_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   368
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   369
apply (rename_tac f)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   370
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
   371
apply ( simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   372
apply (erule weak_coinduct_image)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   373
apply (unfold BufSt_F_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   374
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   375
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   376
apply (  rename_tac "s")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   377
apply (  induct_tac "s")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   378
apply (   simp add: Buf_f_d)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   379
apply (  simp add: Buf_f_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   380
apply ( simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   381
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   382
apply (rename_tac f d x)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   383
apply (drule_tac d="d" and x="x" in Buf_f_d_req)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   384
apply auto
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   385
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   386
2d0896653e7a removed legacy ML scripts
huffman
parents: 17646
diff changeset
   387
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
   388
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
   389
end