src/HOLCF/FOCUS/Fstream.thy
author huffman
Tue, 12 Oct 2010 09:32:21 -0700
changeset 40009 f2c78550c0b7
parent 39159 0dec18004e75
child 40087 1b5f394866d9
permissions -rw-r--r--
remove unneeded lemmas Lift_exhaust, Lift_cases
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
     1
(*  Title:      HOLCF/FOCUS/Fstream.thy
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
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
32960
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30807
diff changeset
     4
FOCUS streams (with lifted elements).
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30807
diff changeset
     5
69916a850301 eliminated hard tabulators, guessing at each author's individual tab-width;
wenzelm
parents: 30807
diff changeset
     6
TODO: integrate Fstreams.thy
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
     7
*)
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
     8
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
     9
header {* FOCUS flat streams *}
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    10
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    11
theory Fstream
37110
7ffdbc24b27f move Strict_Fun and Stream theories to new HOLCF/Library directory; add HOLCF/Library to search path
huffman
parents: 36452
diff changeset
    12
imports Stream
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    13
begin
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    14
36452
d37c6eed8117 renamed command 'defaultsort' to 'default_sort';
wenzelm
parents: 35781
diff changeset
    15
default_sort type
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    16
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    17
types 'a fstream = "'a lift stream"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    18
19763
wenzelm
parents: 19759
diff changeset
    19
definition
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21210
diff changeset
    20
  fscons        :: "'a     \<Rightarrow> 'a fstream \<rightarrow> 'a fstream" where
19763
wenzelm
parents: 19759
diff changeset
    21
  "fscons a = (\<Lambda> s. Def a && s)"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    22
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21210
diff changeset
    23
definition
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21210
diff changeset
    24
  fsfilter      :: "'a set \<Rightarrow> 'a fstream \<rightarrow> 'a fstream" where
19763
wenzelm
parents: 19759
diff changeset
    25
  "fsfilter A = (sfilter\<cdot>(flift2 (\<lambda>x. x\<in>A)))"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    26
19763
wenzelm
parents: 19759
diff changeset
    27
abbreviation
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21210
diff changeset
    28
  emptystream   :: "'a fstream"                          ("<>") where
19763
wenzelm
parents: 19759
diff changeset
    29
  "<> == \<bottom>"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    30
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21210
diff changeset
    31
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21210
diff changeset
    32
  fscons'       :: "'a \<Rightarrow> 'a fstream \<Rightarrow> 'a fstream"       ("(_~>_)"    [66,65] 65) where
19763
wenzelm
parents: 19759
diff changeset
    33
  "a~>s == fscons a\<cdot>s"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    34
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21210
diff changeset
    35
abbreviation
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21210
diff changeset
    36
  fsfilter'     :: "'a set \<Rightarrow> 'a fstream \<Rightarrow> 'a fstream"   ("(_'(C')_)" [64,63] 63) where
19763
wenzelm
parents: 19759
diff changeset
    37
  "A(C)s == fsfilter A\<cdot>s"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    38
21210
c17fd2df4e9e renamed 'const_syntax' to 'notation';
wenzelm
parents: 19764
diff changeset
    39
notation (xsymbols)
21404
eb85850d3eb7 more robust syntax for definition/abbreviation/notation;
wenzelm
parents: 21210
diff changeset
    40
  fscons'  ("(_\<leadsto>_)"                                                 [66,65] 65) and
19763
wenzelm
parents: 19759
diff changeset
    41
  fsfilter'  ("(_\<copyright>_)"                                               [64,63] 63)
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    42
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    43
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    44
lemma Def_maximal: "a = Def d \<Longrightarrow> a\<sqsubseteq>b \<Longrightarrow> b = Def d"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    45
apply (rule flat_eq [THEN iffD1, symmetric])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    46
apply (rule Def_not_UU)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    47
apply (drule antisym_less_inverse)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    48
apply (erule (1) conjunct2 [THEN trans_less])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    49
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    50
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    51
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    52
section "fscons"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    53
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    54
lemma fscons_def2: "a~>s = Def a && s"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    55
apply (unfold fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    56
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    57
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    58
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    59
lemma fstream_exhaust: "x = UU |  (? a y. x = a~> y)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    60
apply (simp add: fscons_def2)
35781
b7738ab762b1 renamed some lemmas generated by the domain package
huffman
parents: 35532
diff changeset
    61
apply (cut_tac stream.nchotomy)
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    62
apply (fast dest: not_Undef_is_Def [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    63
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    64
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    65
lemma fstream_cases: "[| x = UU ==> P; !!a y. x = a~> y ==> P |] ==> P"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    66
apply (cut_tac fstream_exhaust)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    67
apply (erule disjE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    68
apply fast
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    69
apply fast
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    70
done
27148
5b78e50adc49 removed dead code;
wenzelm
parents: 25922
diff changeset
    71
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    72
lemma fstream_exhaust_eq: "(x ~= UU) = (? a y. x = a~> y)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    73
apply (simp add: fscons_def2 stream_exhaust_eq)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    74
apply (fast dest: not_Undef_is_Def [THEN iffD1] elim: DefE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    75
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    76
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    77
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    78
lemma fscons_not_empty [simp]: "a~> s ~= <>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    79
by (simp add: fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    80
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    81
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    82
lemma fscons_inject [simp]: "(a~> s = b~> t) = (a = b &  s = t)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    83
by (simp add: fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    84
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    85
lemma fstream_prefix: "a~> s << t ==> ? tt. t = a~> tt &  s << tt"
35532
60647586b173 adapt to changed variable name in casedist theorem
huffman
parents: 35215
diff changeset
    86
apply (cases t)
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    87
apply (cut_tac fscons_not_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    88
apply (fast dest: eq_UU_iff [THEN iffD2])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    89
apply (simp add: fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    90
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    91
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    92
lemma fstream_prefix' [simp]:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    93
        "x << a~> z = (x = <> |  (? y. x = a~> y &  y << z))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    94
apply (simp add: fscons_def2 Def_not_UU [THEN stream_prefix'])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    95
apply (safe)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    96
apply (erule_tac [!] contrapos_np)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    97
prefer 2 apply (fast elim: DefE)
40009
f2c78550c0b7 remove unneeded lemmas Lift_exhaust, Lift_cases
huffman
parents: 39159
diff changeset
    98
apply (rule lift.exhaust)
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    99
apply (erule (1) notE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   100
apply (safe)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   101
apply (drule Def_inject_less_eq [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   102
apply fast
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   103
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   104
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   105
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   106
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   107
section "ft & rt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   108
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   109
lemmas ft_empty = stream.sel_rews (1)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   110
lemma ft_fscons [simp]: "ft\<cdot>(m~> s) = Def m"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   111
by (simp add: fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   112
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   113
lemmas rt_empty = stream.sel_rews (2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   114
lemma rt_fscons [simp]: "rt\<cdot>(m~> s) = s"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   115
by (simp add: fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   116
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   117
lemma ft_eq [simp]: "(ft\<cdot>s = Def a) = (? t. s = a~> t)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   118
apply (unfold fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   119
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   120
apply (safe)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   121
apply (erule subst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   122
apply (rule exI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   123
apply (rule surjectiv_scons [symmetric])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   124
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   125
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   126
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   127
lemma surjective_fscons_lemma: "(d\<leadsto>y = x) = (ft\<cdot>x = Def d & rt\<cdot>x = y)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   128
by auto
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   129
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   130
lemma surjective_fscons: "ft\<cdot>x = Def d \<Longrightarrow> d\<leadsto>rt\<cdot>x = x"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   131
by (simp add: surjective_fscons_lemma)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   132
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   133
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   134
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   135
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   136
section "take"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   137
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   138
lemma fstream_take_Suc [simp]:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   139
        "stream_take (Suc n)\<cdot>(a~> s) = a~> stream_take n\<cdot>s"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   140
by (simp add: fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   141
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   142
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   143
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   144
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   145
section "slen"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   146
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   147
lemma slen_fscons: "#(m~> s) = iSuc (#s)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   148
by (simp add: fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   149
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   150
lemma slen_fscons_eq:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   151
        "(Fin (Suc n) < #x) = (? a y. x = a~> y & Fin n < #y)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   152
apply (simp add: fscons_def2 slen_scons_eq)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   153
apply (fast dest: not_Undef_is_Def [THEN iffD1] elim: DefE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   154
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   155
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   156
lemma slen_fscons_eq_rev:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   157
        "(#x < Fin (Suc (Suc n))) = (!a y. x ~= a~> y | #y < Fin (Suc n))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   158
apply (simp add: fscons_def2 slen_scons_eq_rev)
39159
0dec18004e75 more antiquotations;
wenzelm
parents: 37110
diff changeset
   159
apply (tactic {* step_tac (HOL_cs addSEs @{thms DefE}) 1 *})
0dec18004e75 more antiquotations;
wenzelm
parents: 37110
diff changeset
   160
apply (tactic {* step_tac (HOL_cs addSEs @{thms DefE}) 1 *})
0dec18004e75 more antiquotations;
wenzelm
parents: 37110
diff changeset
   161
apply (tactic {* step_tac (HOL_cs addSEs @{thms DefE}) 1 *})
0dec18004e75 more antiquotations;
wenzelm
parents: 37110
diff changeset
   162
apply (tactic {* step_tac (HOL_cs addSEs @{thms DefE}) 1 *})
0dec18004e75 more antiquotations;
wenzelm
parents: 37110
diff changeset
   163
apply (tactic {* step_tac (HOL_cs addSEs @{thms DefE}) 1 *})
0dec18004e75 more antiquotations;
wenzelm
parents: 37110
diff changeset
   164
apply (tactic {* step_tac (HOL_cs addSEs @{thms DefE}) 1 *})
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   165
apply (erule contrapos_np)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   166
apply (fast dest: not_Undef_is_Def [THEN iffD1] elim: DefE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   167
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   168
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   169
lemma slen_fscons_less_eq:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   170
        "(#(a~> y) < Fin (Suc (Suc n))) = (#y < Fin (Suc n))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   171
apply (subst slen_fscons_eq_rev)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   172
apply (fast dest!: fscons_inject [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   173
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   174
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   175
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   176
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   177
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   178
section "induction"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   179
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   180
lemma fstream_ind:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   181
        "[| adm P; P <>; !!a s. P s ==> P (a~> s) |] ==> P x"
35781
b7738ab762b1 renamed some lemmas generated by the domain package
huffman
parents: 35532
diff changeset
   182
apply (erule stream.induct)
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   183
apply (assumption)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   184
apply (unfold fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   185
apply (fast dest: not_Undef_is_Def [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   186
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   187
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   188
lemma fstream_ind2:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   189
  "[| adm P; P UU; !!a. P (a~> UU); !!a b s. P s ==> P (a~> b~> s) |] ==> P x"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   190
apply (erule stream_ind2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   191
apply (assumption)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   192
apply (unfold fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   193
apply (fast dest: not_Undef_is_Def [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   194
apply (fast dest: not_Undef_is_Def [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   195
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   196
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   197
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   198
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   199
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   200
section "fsfilter"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   201
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   202
lemma fsfilter_empty: "A(C)UU = UU"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   203
apply (unfold fsfilter_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   204
apply (rule sfilter_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   205
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   206
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   207
lemma fsfilter_fscons:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   208
        "A(C)x~> xs = (if x:A then x~> (A(C)xs) else A(C)xs)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   209
apply (unfold fsfilter_def)
35215
a03462cbf86f get rid of warnings about duplicate simp rules in all HOLCF theories
huffman
parents: 32960
diff changeset
   210
apply (simp add: fscons_def2 If_and_if)
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   211
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   212
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   213
lemma fsfilter_emptys: "{}(C)x = UU"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   214
apply (rule_tac x="x" in fstream_ind)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   215
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   216
apply (rule fsfilter_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   217
apply (simp add: fsfilter_fscons)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   218
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   219
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   220
lemma fsfilter_insert: "(insert a A)(C)a~> x = a~> ((insert a A)(C)x)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   221
by (simp add: fsfilter_fscons)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   222
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   223
lemma fsfilter_single_in: "{a}(C)a~> x = a~> ({a}(C)x)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   224
by (rule fsfilter_insert)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   225
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   226
lemma fsfilter_single_out: "b ~= a ==> {a}(C)b~> x = ({a}(C)x)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   227
by (simp add: fsfilter_fscons)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   228
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   229
lemma fstream_lub_lemma1:
27413
3154f3765cc7 replace lub (range Y) with (LUB i. Y i)
huffman
parents: 27148
diff changeset
   230
    "\<lbrakk>chain Y; (\<Squnion>i. Y i) = a\<leadsto>s\<rbrakk> \<Longrightarrow> \<exists>j t. Y j = a\<leadsto>t"
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   231
apply (case_tac "max_in_chain i Y")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   232
apply  (drule (1) lub_finch1 [THEN thelubI, THEN sym])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   233
apply  (force)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   234
apply (unfold max_in_chain_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   235
apply auto
25922
cb04d05e95fb rename lemma chain_mono3 -> chain_mono, chain_mono -> chain_mono_less
huffman
parents: 24327
diff changeset
   236
apply (frule (1) chain_mono)
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   237
apply (rule_tac x="Y j" in fstream_cases)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   238
apply  (force)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   239
apply (drule_tac x="j" in is_ub_thelub)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   240
apply (force)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   241
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   242
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   243
lemma fstream_lub_lemma:
27413
3154f3765cc7 replace lub (range Y) with (LUB i. Y i)
huffman
parents: 27148
diff changeset
   244
      "\<lbrakk>chain Y; (\<Squnion>i. Y i) = a\<leadsto>s\<rbrakk> \<Longrightarrow> (\<exists>j t. Y j = a\<leadsto>t) & (\<exists>X. chain X & (!i. ? j. Y j = a\<leadsto>X i) & (\<Squnion>i. X i) = s)"
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   245
apply (frule (1) fstream_lub_lemma1)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   246
apply (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   247
apply (rule_tac x="%i. rt\<cdot>(Y(i+j))" in exI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   248
apply (rule conjI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   249
apply  (erule chain_shift [THEN chain_monofun])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   250
apply safe
25922
cb04d05e95fb rename lemma chain_mono3 -> chain_mono, chain_mono -> chain_mono_less
huffman
parents: 24327
diff changeset
   251
apply  (drule_tac i="j" and j="i+j" in chain_mono)
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   252
apply   (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   253
apply  (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   254
apply  (rule_tac x="i+j" in exI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   255
apply  (drule fstream_prefix)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   256
apply  (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   257
apply  (subst contlub_cfun [symmetric])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   258
apply   (rule chainI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   259
apply   (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   260
apply  (erule chain_shift)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   261
apply (subst lub_const [THEN thelubI])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   262
apply (subst lub_range_shift)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   263
apply  (assumption)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   264
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   265
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   266
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
   267
end