src/HOLCF/FOCUS/Fstream.thy
author huffman
Thu, 01 Jun 2006 23:53:29 +0200
changeset 19759 2d0896653e7a
parent 17293 ecf182ccc3ca
child 19763 ec18656a2c10
permissions -rw-r--r--
removed legacy ML scripts
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
11355
wenzelm
parents: 11350
diff changeset
     2
    ID:         $Id$
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
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
FOCUS streams (with lifted elements)
15188
9d57263faf9e integrated Streams with ex/Stream.*; added FOCUS/Fstreams.thy
oheimb
parents: 14981
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
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    12
imports Stream
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
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    15
defaultsort type
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
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    19
consts
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    20
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    21
  fscons        :: "'a     \<Rightarrow> 'a fstream \<rightarrow> 'a fstream"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    22
  fsfilter      :: "'a set \<Rightarrow> 'a fstream \<rightarrow> 'a fstream"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    23
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    24
syntax
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: 15188
diff changeset
    26
  "@emptystream":: "'a fstream"                           ("<>")
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    27
  "@fscons"     :: "'a \<Rightarrow> 'a fstream \<Rightarrow> 'a fstream"       ("(_~>_)"    [66,65] 65)
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    28
  "@fsfilter"   :: "'a set \<Rightarrow> 'a fstream \<Rightarrow> 'a fstream"   ("(_'(C')_)" [64,63] 63)
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    29
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    30
syntax (xsymbols)
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    31
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    32
  "@fscons"     :: "'a \<Rightarrow> 'a fstream \<Rightarrow> 'a fstream"       ("(_\<leadsto>_)"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    33
                                                                     [66,65] 65)
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    34
  "@fsfilter"   :: "'a set \<Rightarrow> 'a fstream \<Rightarrow> 'a fstream" ("(_\<copyright>_)"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    35
                                                                     [64,63] 63)
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    36
translations
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    37
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    38
  "<>"    => "\<bottom>"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    39
  "a~>s"  == "fscons a\<cdot>s"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    40
  "A(C)s" == "fsfilter A\<cdot>s"
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    41
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    42
defs
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    43
17293
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    44
  fscons_def:    "fscons a   \<equiv> \<Lambda> s. Def a && s"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    45
  fsfilter_def:  "fsfilter A \<equiv> sfilter\<cdot>(flift2 (\<lambda>x. x\<in>A))"
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    46
ecf182ccc3ca converted to Isar theory format;
wenzelm
parents: 15188
diff changeset
    47
ML {* use_legacy_bindings (the_context ()) *}
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
    48
19759
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    49
lemma Def_maximal: "a = Def d \<Longrightarrow> a\<sqsubseteq>b \<Longrightarrow> b = Def d"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    50
apply (rule flat_eq [THEN iffD1, symmetric])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    51
apply (rule Def_not_UU)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    52
apply (drule antisym_less_inverse)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    53
apply (erule (1) conjunct2 [THEN trans_less])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    54
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    55
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    56
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    57
section "fscons"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    58
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    59
lemma fscons_def2: "a~>s = Def a && s"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    60
apply (unfold fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    61
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    62
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    63
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    64
lemma fstream_exhaust: "x = UU |  (? a y. x = a~> y)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    65
apply (simp add: fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    66
apply (cut_tac stream.exhaust)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    67
apply (fast dest: not_Undef_is_Def [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    68
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    69
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    70
lemma fstream_cases: "[| x = UU ==> P; !!a y. x = a~> y ==> P |] ==> P"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    71
apply (cut_tac fstream_exhaust)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    72
apply (erule disjE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    73
apply fast
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    74
apply fast
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
fun fstream_case_tac s i = res_inst_tac [("x",s)] fstream_cases i
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    78
                          THEN hyp_subst_tac i THEN hyp_subst_tac (i+1);
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    79
*)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    80
lemma fstream_exhaust_eq: "(x ~= UU) = (? a y. x = a~> y)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    81
apply (simp add: fscons_def2 stream_exhaust_eq)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    82
apply (fast dest: not_Undef_is_Def [THEN iffD1] elim: DefE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    83
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    84
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    85
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    86
lemma fscons_not_empty [simp]: "a~> s ~= <>"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    87
by (simp add: fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    88
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    89
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    90
lemma fscons_inject [simp]: "(a~> s = b~> t) = (a = b &  s = t)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    91
by (simp add: fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    92
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    93
lemma fstream_prefix: "a~> s << t ==> ? tt. t = a~> tt &  s << tt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    94
apply (rule_tac x="t" in stream.casedist)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    95
apply (cut_tac fscons_not_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    96
apply (fast dest: eq_UU_iff [THEN iffD2])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    97
apply (simp add: fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    98
apply (drule stream_flat_prefix)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
    99
apply (rule Def_not_UU)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   100
apply (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   101
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   102
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   103
lemma fstream_prefix' [simp]:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   104
        "x << a~> z = (x = <> |  (? y. x = a~> y &  y << z))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   105
apply (simp add: fscons_def2 Def_not_UU [THEN stream_prefix'])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   106
apply (safe)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   107
apply (erule_tac [!] contrapos_np)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   108
prefer 2 apply (fast elim: DefE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   109
apply (rule Lift_cases)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   110
apply (erule (1) notE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   111
apply (safe)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   112
apply (drule Def_inject_less_eq [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   113
apply fast
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   114
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   115
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   116
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   117
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   118
section "ft & rt"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   119
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   120
lemmas ft_empty = stream.sel_rews (1)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   121
lemma ft_fscons [simp]: "ft\<cdot>(m~> s) = Def m"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   122
by (simp add: fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   123
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   124
lemmas rt_empty = stream.sel_rews (2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   125
lemma rt_fscons [simp]: "rt\<cdot>(m~> s) = s"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   126
by (simp add: fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   127
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   128
lemma ft_eq [simp]: "(ft\<cdot>s = Def a) = (? t. s = a~> t)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   129
apply (unfold fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   130
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   131
apply (safe)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   132
apply (erule subst)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   133
apply (rule exI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   134
apply (rule surjectiv_scons [symmetric])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   135
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   136
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   137
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   138
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
   139
by auto
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   140
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   141
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
   142
by (simp add: surjective_fscons_lemma)
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
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   146
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   147
section "take"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   148
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   149
lemma fstream_take_Suc [simp]:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   150
        "stream_take (Suc n)\<cdot>(a~> s) = a~> stream_take n\<cdot>s"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   151
by (simp add: fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   152
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   153
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   154
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   155
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   156
section "slen"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   157
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   158
(*bind_thm("slen_empty", slen_empty);*)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   159
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   160
lemma slen_fscons: "#(m~> s) = iSuc (#s)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   161
by (simp add: fscons_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   162
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   163
lemma slen_fscons_eq:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   164
        "(Fin (Suc n) < #x) = (? a y. x = a~> y & Fin n < #y)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   165
apply (simp add: fscons_def2 slen_scons_eq)
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_eq_rev:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   170
        "(#x < Fin (Suc (Suc n))) = (!a y. x ~= a~> y | #y < Fin (Suc n))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   171
apply (simp add: fscons_def2 slen_scons_eq_rev)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   172
apply (tactic "step_tac (HOL_cs addSEs [DefE]) 1")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   173
apply (tactic "step_tac (HOL_cs addSEs [DefE]) 1")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   174
apply (tactic "step_tac (HOL_cs addSEs [DefE]) 1")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   175
apply (tactic "step_tac (HOL_cs addSEs [DefE]) 1")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   176
apply (tactic "step_tac (HOL_cs addSEs [DefE]) 1")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   177
apply (tactic "step_tac (HOL_cs addSEs [DefE]) 1")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   178
apply (erule contrapos_np)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   179
apply (fast dest: not_Undef_is_Def [THEN iffD1] elim: DefE)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   180
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   181
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   182
lemma slen_fscons_less_eq:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   183
        "(#(a~> y) < Fin (Suc (Suc n))) = (#y < Fin (Suc n))"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   184
apply (subst slen_fscons_eq_rev)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   185
apply (fast dest!: fscons_inject [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
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   189
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   190
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   191
section "induction"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   192
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   193
lemma fstream_ind:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   194
        "[| adm P; P <>; !!a s. P s ==> P (a~> s) |] ==> P x"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   195
apply (erule stream.ind)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   196
apply (assumption)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   197
apply (unfold fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   198
apply (fast dest: not_Undef_is_Def [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   199
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   200
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   201
lemma fstream_ind2:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   202
  "[| 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
   203
apply (erule stream_ind2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   204
apply (assumption)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   205
apply (unfold fscons_def2)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   206
apply (fast dest: not_Undef_is_Def [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   207
apply (fast dest: not_Undef_is_Def [THEN iffD1])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   208
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   209
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   210
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   211
(* ------------------------------------------------------------------------- *)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   212
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   213
section "fsfilter"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   214
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   215
lemma fsfilter_empty: "A(C)UU = UU"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   216
apply (unfold fsfilter_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   217
apply (rule sfilter_empty)
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_fscons:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   221
        "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
   222
apply (unfold fsfilter_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   223
apply (simp add: fscons_def2 sfilter_scons If_and_if)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   224
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   225
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   226
lemma fsfilter_emptys: "{}(C)x = UU"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   227
apply (rule_tac x="x" in fstream_ind)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   228
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   229
apply (rule fsfilter_empty)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   230
apply (simp add: fsfilter_fscons)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   231
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   232
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   233
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
   234
by (simp add: fsfilter_fscons)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   235
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   236
lemma fsfilter_single_in: "{a}(C)a~> x = a~> ({a}(C)x)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   237
by (rule fsfilter_insert)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   238
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   239
lemma fsfilter_single_out: "b ~= a ==> {a}(C)b~> x = ({a}(C)x)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   240
by (simp add: fsfilter_fscons)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   241
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   242
lemma fstream_lub_lemma1:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   243
    "\<lbrakk>chain Y; lub (range Y) = a\<leadsto>s\<rbrakk> \<Longrightarrow> \<exists>j t. Y j = a\<leadsto>t"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   244
apply (case_tac "max_in_chain i Y")
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   245
apply  (drule (1) lub_finch1 [THEN thelubI, THEN sym])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   246
apply  (force)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   247
apply (unfold max_in_chain_def)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   248
apply auto
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   249
apply (frule (1) chain_mono3)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   250
apply (rule_tac x="Y j" in fstream_cases)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   251
apply  (force)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   252
apply (drule_tac x="j" in is_ub_thelub)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   253
apply (force)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   254
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   255
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   256
lemma fstream_lub_lemma:
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   257
      "\<lbrakk>chain Y; lub (range Y) = 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) & lub (range X) = s)"
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   258
apply (frule (1) fstream_lub_lemma1)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   259
apply (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   260
apply (rule_tac x="%i. rt\<cdot>(Y(i+j))" in exI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   261
apply (rule conjI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   262
apply  (erule chain_shift [THEN chain_monofun])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   263
apply safe
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   264
apply  (drule_tac x="j" and y="i+j" in chain_mono3)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   265
apply   (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   266
apply  (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   267
apply  (rule_tac x="i+j" in exI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   268
apply  (drule fstream_prefix)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   269
apply  (clarsimp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   270
apply  (subst contlub_cfun [symmetric])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   271
apply   (rule chainI)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   272
apply   (fast)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   273
apply  (erule chain_shift)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   274
apply (subst lub_const [THEN thelubI])
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   275
apply (subst lub_range_shift)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   276
apply  (assumption)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   277
apply (simp)
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   278
done
2d0896653e7a removed legacy ML scripts
huffman
parents: 17293
diff changeset
   279
11350
4c55b020d6ee added FOCUS including the One-Element Buffer by Manfred Broy
oheimb
parents:
diff changeset
   280
end