src/HOL/HOLCF/IOA/Seq.thy
author nipkow
Wed, 10 Aug 2016 09:33:54 +0200
changeset 63648 f9f3006a5579
parent 63549 b0d31c7def86
child 66453 cc19f7ca2ed6
permissions -rw-r--r--
"split add" -> "split"
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62008
cbedaddc9351 clarified directory structure;
wenzelm
parents: 62002
diff changeset
     1
(*  Title:      HOL/HOLCF/IOA/Seq.thy
40945
b8703f63bfb2 recoded latin1 as utf8;
wenzelm
parents: 40774
diff changeset
     2
    Author:     Olaf Müller
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     3
*)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     4
62002
f1599e98c4d0 isabelle update_cartouches -c -t;
wenzelm
parents: 58880
diff changeset
     5
section \<open>Partial, Finite and Infinite Sequences (lazy lists), modeled as domain\<close>
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
     6
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     7
theory Seq
63648
f9f3006a5579 "split add" -> "split"
nipkow
parents: 63549
diff changeset
     8
imports "../HOLCF"
17233
41eee2e7b465 converted specifications to Isar theories;
wenzelm
parents: 14981
diff changeset
     9
begin
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    10
40329
73f2b99b549d change default_sort of HOLCF from pcpo to bifinite; rename command 'new_domain' to 'domain'; rename 'domain' to 'domain (unsafe)'
huffman
parents: 40322
diff changeset
    11
default_sort pcpo
73f2b99b549d change default_sort of HOLCF from pcpo to bifinite; rename command 'new_domain' to 'domain'; rename 'domain' to 'domain (unsafe)'
huffman
parents: 40322
diff changeset
    12
73f2b99b549d change default_sort of HOLCF from pcpo to bifinite; rename command 'new_domain' to 'domain'; rename 'domain' to 'domain (unsafe)'
huffman
parents: 40322
diff changeset
    13
domain (unsafe) 'a seq = nil  ("nil") | cons (HD :: 'a) (lazy TL :: "'a seq")  (infixr "##" 65)
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    14
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    15
inductive Finite :: "'a seq \<Rightarrow> bool"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    16
where
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    17
  sfinite_0: "Finite nil"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    18
| sfinite_n: "Finite tr \<Longrightarrow> a \<noteq> UU \<Longrightarrow> Finite (a ## tr)"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    19
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
    20
declare Finite.intros [simp]
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    21
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    22
definition Partial :: "'a seq \<Rightarrow> bool"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    23
  where "Partial x \<longleftrightarrow> seq_finite x \<and> \<not> Finite x"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    24
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    25
definition Infinite :: "'a seq \<Rightarrow> bool"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    26
  where "Infinite x \<longleftrightarrow> \<not> seq_finite x"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    27
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    28
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    29
subsection \<open>Recursive equations of operators\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    30
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    31
subsubsection \<open>\<open>smap\<close>\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    32
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    33
fixrec smap :: "('a \<rightarrow> 'b) \<rightarrow> 'a seq \<rightarrow> 'b seq"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
    34
where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    35
  smap_nil: "smap \<cdot> f \<cdot> nil = nil"
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    36
| smap_cons: "x \<noteq> UU \<Longrightarrow> smap \<cdot> f \<cdot> (x ## xs) = (f \<cdot> x) ## smap \<cdot> f \<cdot> xs"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    37
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    38
lemma smap_UU [simp]: "smap \<cdot> f \<cdot> UU = UU"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    39
  by fixrec_simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    40
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    41
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    42
subsubsection \<open>\<open>sfilter\<close>\<close>
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    43
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    44
fixrec sfilter :: "('a \<rightarrow> tr) \<rightarrow> 'a seq \<rightarrow> 'a seq"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
    45
where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    46
  sfilter_nil: "sfilter \<cdot> P \<cdot> nil = nil"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    47
| sfilter_cons:
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    48
    "x \<noteq> UU \<Longrightarrow>
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    49
      sfilter \<cdot> P \<cdot> (x ## xs) =
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    50
      (If P \<cdot> x then x ## (sfilter \<cdot> P \<cdot> xs) else sfilter \<cdot> P \<cdot> xs)"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    51
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    52
lemma sfilter_UU [simp]: "sfilter \<cdot> P \<cdot> UU = UU"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    53
  by fixrec_simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    54
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    55
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    56
subsubsection \<open>\<open>sforall2\<close>\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    57
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    58
fixrec sforall2 :: "('a \<rightarrow> tr) \<rightarrow> 'a seq \<rightarrow> tr"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    59
where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    60
  sforall2_nil: "sforall2 \<cdot> P \<cdot> nil = TT"
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    61
| sforall2_cons: "x \<noteq> UU \<Longrightarrow> sforall2 \<cdot> P \<cdot> (x ## xs) = ((P \<cdot> x) andalso sforall2 \<cdot> P \<cdot> xs)"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    62
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    63
lemma sforall2_UU [simp]: "sforall2 \<cdot> P \<cdot> UU = UU"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    64
  by fixrec_simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    65
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    66
definition "sforall P t \<longleftrightarrow> sforall2 \<cdot> P \<cdot> t \<noteq> FF"
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    67
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
    68
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    69
subsubsection \<open>\<open>stakewhile\<close>\<close>
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
    70
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    71
fixrec stakewhile :: "('a \<rightarrow> tr) \<rightarrow> 'a seq \<rightarrow> 'a seq"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
    72
where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    73
  stakewhile_nil: "stakewhile \<cdot> P \<cdot> nil = nil"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
    74
| stakewhile_cons:
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    75
    "x \<noteq> UU \<Longrightarrow> stakewhile \<cdot> P \<cdot> (x ## xs) = (If P \<cdot> x then x ## (stakewhile \<cdot> P \<cdot> xs) else nil)"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    76
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    77
lemma stakewhile_UU [simp]: "stakewhile \<cdot> P \<cdot> UU = UU"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    78
  by fixrec_simp
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
    79
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
    80
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    81
subsubsection \<open>\<open>sdropwhile\<close>\<close>
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
    82
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    83
fixrec sdropwhile :: "('a \<rightarrow> tr) \<rightarrow> 'a seq \<rightarrow> 'a seq"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
    84
where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    85
  sdropwhile_nil: "sdropwhile \<cdot> P \<cdot> nil = nil"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
    86
| sdropwhile_cons:
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    87
    "x \<noteq> UU \<Longrightarrow> sdropwhile \<cdot> P \<cdot> (x ## xs) = (If P \<cdot> x then sdropwhile \<cdot> P \<cdot> xs else x ## xs)"
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
    88
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    89
lemma sdropwhile_UU [simp]: "sdropwhile \<cdot> P \<cdot> UU = UU"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    90
  by fixrec_simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    91
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
    92
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    93
subsubsection \<open>\<open>slast\<close>\<close>
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
    94
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
    95
fixrec slast :: "'a seq \<rightarrow> 'a"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
    96
where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    97
  slast_nil: "slast \<cdot> nil = UU"
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
    98
| slast_cons: "x \<noteq> UU \<Longrightarrow> slast \<cdot> (x ## xs) = (If is_nil \<cdot> xs then x else slast \<cdot> xs)"
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
    99
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   100
lemma slast_UU [simp]: "slast \<cdot> UU = UU"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   101
  by fixrec_simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   102
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   103
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   104
subsubsection \<open>\<open>sconc\<close>\<close>
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   105
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   106
fixrec sconc :: "'a seq \<rightarrow> 'a seq \<rightarrow> 'a seq"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
   107
where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   108
  sconc_nil: "sconc \<cdot> nil \<cdot> y = y"
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   109
| sconc_cons': "x \<noteq> UU \<Longrightarrow> sconc \<cdot> (x ## xs) \<cdot> y = x ## (sconc \<cdot> xs \<cdot> y)"
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   110
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   111
abbreviation sconc_syn :: "'a seq \<Rightarrow> 'a seq \<Rightarrow> 'a seq"  (infixr "@@" 65)
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   112
  where "xs @@ ys \<equiv> sconc \<cdot> xs \<cdot> ys"
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   113
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   114
lemma sconc_UU [simp]: "UU @@ y = UU"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   115
  by fixrec_simp
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   116
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   117
lemma sconc_cons [simp]: "(x ## xs) @@ y = x ## (xs @@ y)"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   118
  by (cases "x = UU") simp_all
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   119
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
   120
declare sconc_cons' [simp del]
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   121
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   122
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   123
subsubsection \<open>\<open>sflat\<close>\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   124
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   125
fixrec sflat :: "'a seq seq \<rightarrow> 'a seq"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
   126
where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   127
  sflat_nil: "sflat \<cdot> nil = nil"
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   128
| sflat_cons': "x \<noteq> UU \<Longrightarrow> sflat \<cdot> (x ## xs) = x @@ (sflat \<cdot> xs)"
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   129
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   130
lemma sflat_UU [simp]: "sflat \<cdot> UU = UU"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   131
  by fixrec_simp
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   132
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   133
lemma sflat_cons [simp]: "sflat \<cdot> (x ## xs) = x @@ (sflat \<cdot> xs)"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   134
  by (cases "x = UU") simp_all
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   135
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
   136
declare sflat_cons' [simp del]
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   137
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   138
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   139
subsubsection \<open>\<open>szip\<close>\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   140
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   141
fixrec szip :: "'a seq \<rightarrow> 'b seq \<rightarrow> ('a \<times> 'b) seq"
35286
0e5fe22fa321 update to use fixrec package
huffman
parents: 35215
diff changeset
   142
where
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   143
  szip_nil: "szip \<cdot> nil \<cdot> y = nil"
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   144
| szip_cons_nil: "x \<noteq> UU \<Longrightarrow> szip \<cdot> (x ## xs) \<cdot> nil = UU"
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   145
| szip_cons: "x \<noteq> UU \<Longrightarrow> y \<noteq> UU \<Longrightarrow> szip \<cdot> (x ## xs) \<cdot> (y ## ys) = (x, y) ## szip \<cdot> xs \<cdot> ys"
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   146
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   147
lemma szip_UU1 [simp]: "szip \<cdot> UU \<cdot> y = UU"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   148
  by fixrec_simp
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   149
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   150
lemma szip_UU2 [simp]: "x \<noteq> nil \<Longrightarrow> szip \<cdot> x \<cdot> UU = UU"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   151
  by (cases x) (simp_all, fixrec_simp)
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   152
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   153
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   154
subsection \<open>\<open>scons\<close>, \<open>nil\<close>\<close>
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   155
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   156
lemma scons_inject_eq: "x \<noteq> UU \<Longrightarrow> y \<noteq> UU \<Longrightarrow> x ## xs = y ## ys \<longleftrightarrow> x = y \<and> xs = ys"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   157
  by simp
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   158
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   159
lemma nil_less_is_nil: "nil \<sqsubseteq> x \<Longrightarrow> nil = x"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   160
  by (cases x) simp_all
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   161
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   162
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   163
subsection \<open>\<open>sfilter\<close>, \<open>sforall\<close>, \<open>sconc\<close>\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   164
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   165
lemma if_and_sconc [simp]:
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   166
  "(if b then tr1 else tr2) @@ tr = (if b then tr1 @@ tr else tr2 @@ tr)"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   167
  by simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   168
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   169
lemma sfiltersconc: "sfilter \<cdot> P \<cdot> (x @@ y) = (sfilter \<cdot> P \<cdot> x @@ sfilter \<cdot> P \<cdot> y)"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   170
  apply (induct x)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   171
  text \<open>adm\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   172
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   173
  text \<open>base cases\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   174
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   175
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   176
  text \<open>main case\<close>
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   177
  apply (rule_tac p = "P\<cdot>a" in trE)
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   178
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   179
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   180
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   181
  done
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   182
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   183
lemma sforallPstakewhileP: "sforall P (stakewhile \<cdot> P \<cdot> x)"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   184
  apply (simp add: sforall_def)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   185
  apply (induct x)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   186
  text \<open>adm\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   187
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   188
  text \<open>base cases\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   189
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   190
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   191
  text \<open>main case\<close>
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   192
  apply (rule_tac p = "P\<cdot>a" in trE)
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   193
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   194
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   195
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   196
  done
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   197
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   198
lemma forallPsfilterP: "sforall P (sfilter \<cdot> P \<cdot> x)"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   199
  apply (simp add: sforall_def)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   200
  apply (induct x)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   201
  text \<open>adm\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   202
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   203
  text \<open>base cases\<close>
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   204
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   205
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   206
  text \<open>main case\<close>
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   207
  apply (rule_tac p="P\<cdot>a" in trE)
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   208
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   209
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   210
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   211
  done
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   212
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   213
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   214
subsection \<open>Finite\<close>
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   215
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   216
(*
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   217
  Proofs of rewrite rules for Finite:
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   218
    1. Finite nil    (by definition)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   219
    2. \<not> Finite UU
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   220
    3. a \<noteq> UU \<Longrightarrow> Finite (a ## x) = Finite x
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   221
*)
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   222
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   223
lemma Finite_UU_a: "Finite x \<longrightarrow> x \<noteq> UU"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   224
  apply (rule impI)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   225
  apply (erule Finite.induct)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   226
   apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   227
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   228
  done
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   229
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   230
lemma Finite_UU [simp]: "\<not> Finite UU"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   231
  using Finite_UU_a [where x = UU] by fast
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   232
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   233
lemma Finite_cons_a: "Finite x \<longrightarrow> a \<noteq> UU \<longrightarrow> x = a ## xs \<longrightarrow> Finite xs"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   234
  apply (intro strip)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   235
  apply (erule Finite.cases)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   236
  apply fastforce
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   237
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   238
  done
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   239
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   240
lemma Finite_cons: "a \<noteq> UU \<Longrightarrow> Finite (a##x) \<longleftrightarrow> Finite x"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   241
  apply (rule iffI)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   242
  apply (erule (1) Finite_cons_a [rule_format])
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   243
  apply fast
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   244
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   245
  done
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   246
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   247
lemma Finite_upward: "Finite x \<Longrightarrow> x \<sqsubseteq> y \<Longrightarrow> Finite y"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   248
  apply (induct arbitrary: y set: Finite)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   249
  apply (case_tac y, simp, simp, simp)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   250
  apply (case_tac y, simp, simp)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   251
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   252
  done
25803
230c9c87d739 generalized and simplified proof of adm_Finite
huffman
parents: 23778
diff changeset
   253
230c9c87d739 generalized and simplified proof of adm_Finite
huffman
parents: 23778
diff changeset
   254
lemma adm_Finite [simp]: "adm Finite"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   255
  by (rule adm_upward) (rule Finite_upward)
25803
230c9c87d739 generalized and simplified proof of adm_Finite
huffman
parents: 23778
diff changeset
   256
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   257
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   258
subsection \<open>Induction\<close>
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   259
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   260
text \<open>Extensions to Induction Theorems.\<close>
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   261
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   262
lemma seq_finite_ind_lemma:
63549
b0d31c7def86 more symbols;
wenzelm
parents: 62116
diff changeset
   263
  assumes "\<And>n. P (seq_take n \<cdot> s)"
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   264
  shows "seq_finite s \<longrightarrow> P s"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   265
  apply (unfold seq.finite_def)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   266
  apply (intro strip)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   267
  apply (erule exE)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   268
  apply (erule subst)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   269
  apply (rule assms)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   270
  done
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   271
62116
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   272
lemma seq_finite_ind:
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   273
  assumes "P UU"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   274
    and "P nil"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   275
    and "\<And>x s1. x \<noteq> UU \<Longrightarrow> P s1 \<Longrightarrow> P (x ## s1)"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   276
  shows "seq_finite s \<longrightarrow> P s"
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   277
  apply (insert assms)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   278
  apply (rule seq_finite_ind_lemma)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   279
  apply (erule seq.finite_induct)
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   280
   apply assumption
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   281
  apply simp
bc178c0fe1a1 misc tuning and modernization;
wenzelm
parents: 62008
diff changeset
   282
  done
19550
ae77a20f6995 update to reflect changes in inverts/injects lemmas
huffman
parents: 17233
diff changeset
   283
3071
981258186b71 New meta theory for IOA based on HOLCF.
mueller
parents:
diff changeset
   284
end