Myhill.thy
author zhang
Fri, 28 Jan 2011 11:52:11 +0000
changeset 45 7aa6c20e6d31
parent 43 cb4403fabda7
child 47 bea2466a6084
permissions -rw-r--r--
More improvement
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
     1
theory Myhill
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
     2
  imports Myhill_1
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
     3
begin
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
     4
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
     5
section {* Direction: @{text "regular language \<Rightarrow>finite partition"} *}
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
     6
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
     7
subsection {* The scheme for this direction *}
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
     8
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
     9
text {* 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    10
  The following convenient notation @{text "x \<approx>Lang y"} means:
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    11
  string @{text "x"} and @{text "y"} are equivalent with respect to 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    12
  language @{text "Lang"}.
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    13
  *}
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    14
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    15
definition
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    16
  str_eq ("_ \<approx>_ _")
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    17
where
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    18
  "x \<approx>Lang y \<equiv> (x, y) \<in> (\<approx>Lang)"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    19
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
    20
text {*
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    21
  The basic idea to show the finiteness of the partition induced by relation @{text "\<approx>Lang"}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    22
  is to attach a tag @{text "tag(x)"} to every string @{text "x"}, the set of tags are carfully 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    23
  choosen, so that the range of tagging function @{text "tag"} (denoted @{text "range(tag)"}) is finite. 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    24
  If strings with the same tag are equivlent with respect @{text "\<approx>Lang"},
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    25
  i.e. @{text "tag(x) = tag(y) \<Longrightarrow> x \<approx>Lang y"} (this property is named `injectivity' in the following), 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    26
  then it can be proved that: the partition given rise by @{text "(\<approx>Lang)"} is finite. 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    27
  
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    28
  There are two arguments for this. The first goes as the following:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    29
  \begin{enumerate}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    30
    \item First, the tagging function @{text "tag"} induces an equivalent relation @{text "(=tag=)"} 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    31
          (defiintion of @{text "f_eq_rel"} and lemma @{text "equiv_f_eq_rel"}).
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    32
    \item It is shown that: if the range of @{text "tag"} is finite, 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    33
           the partition given rise by @{text "(=tag=)"} is finite (lemma @{text "finite_eq_f_rel"}).
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    34
    \item It is proved that if equivalent relation @{text "R1"} is more refined than @{text "R2"}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    35
           (expressed as @{text "R1 \<subseteq> R2"}),
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    36
           and the partition induced by @{text "R1"} is finite, then the partition induced by @{text "R2"}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    37
           is finite as well (lemma @{text "refined_partition_finite"}).
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    38
    \item The injectivity assumption @{text "tag(x) = tag(y) \<Longrightarrow> x \<approx>Lang y"} implies that
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    39
            @{text "(=tag=)"} is more refined than @{text "(\<approx>Lang)"}.
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    40
    \item Combining the points above, we have: the partition induced by language @{text "Lang"}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    41
          is finite (lemma @{text "tag_finite_imageD"}).
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    42
  \end{enumerate}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    43
*}
39
a59473f0229d tuned a little bit the section about finite partitions
urbanc
parents: 35
diff changeset
    44
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    45
definition 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    46
   f_eq_rel ("=_=")
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    47
where
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    48
   "(=f=) = {(x, y) | x y. f x = f y}"
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    49
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    50
lemma equiv_f_eq_rel:"equiv UNIV (=f=)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    51
  by (auto simp:equiv_def f_eq_rel_def refl_on_def sym_def trans_def)
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    52
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    53
lemma finite_range_image: "finite (range f) \<Longrightarrow> finite (f ` A)"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    54
  by (rule_tac B = "{y. \<exists>x. y = f x}" in finite_subset, auto simp:image_def)
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    55
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    56
lemma finite_eq_f_rel:
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    57
  assumes rng_fnt: "finite (range tag)"
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    58
  shows "finite (UNIV // (=tag=))"
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    59
proof -
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    60
  let "?f" =  "op ` tag" and ?A = "(UNIV // (=tag=))"
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    61
  show ?thesis
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    62
  proof (rule_tac f = "?f" and A = ?A in finite_imageD) 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    63
    -- {* 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    64
      The finiteness of @{text "f"}-image is a simple consequence of assumption @{text "rng_fnt"}:
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    65
      *}
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    66
    show "finite (?f ` ?A)" 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    67
    proof -
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    68
      have "\<forall> X. ?f X \<in> (Pow (range tag))" by (auto simp:image_def Pow_def)
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    69
      moreover from rng_fnt have "finite (Pow (range tag))" by simp
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    70
      ultimately have "finite (range ?f)"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    71
        by (auto simp only:image_def intro:finite_subset)
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    72
      from finite_range_image [OF this] show ?thesis .
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    73
    qed
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    74
  next
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    75
    -- {* 
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    76
      The injectivity of @{text "f"}-image is a consequence of the definition of @{text "(=tag=)"}:
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    77
      *}
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    78
    show "inj_on ?f ?A" 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    79
    proof-
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    80
      { fix X Y
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    81
        assume X_in: "X \<in> ?A"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    82
          and  Y_in: "Y \<in> ?A"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    83
          and  tag_eq: "?f X = ?f Y"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    84
        have "X = Y"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    85
        proof -
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    86
          from X_in Y_in tag_eq 
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    87
          obtain x y 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    88
            where x_in: "x \<in> X" and y_in: "y \<in> Y" and eq_tg: "tag x = tag y"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    89
            unfolding quotient_def Image_def str_eq_rel_def 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
    90
                                   str_eq_def image_def f_eq_rel_def
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    91
            apply simp by blast
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    92
          with X_in Y_in show ?thesis 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    93
            by (auto simp:quotient_def str_eq_rel_def str_eq_def f_eq_rel_def) 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    94
        qed
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    95
      } thus ?thesis unfolding inj_on_def by auto
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    96
    qed
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    97
  qed
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    98
qed
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
    99
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   100
lemma finite_image_finite: "\<lbrakk>\<forall> x \<in> A. f x \<in> B; finite B\<rbrakk> \<Longrightarrow> finite (f ` A)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   101
  by (rule finite_subset [of _ B], auto)
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   102
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   103
lemma refined_partition_finite:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   104
  fixes R1 R2 A
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   105
  assumes fnt: "finite (A // R1)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   106
  and refined: "R1 \<subseteq> R2"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   107
  and eq1: "equiv A R1" and eq2: "equiv A R2"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   108
  shows "finite (A // R2)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   109
proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   110
  let ?f = "\<lambda> X. {R1 `` {x} | x. x \<in> X}" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   111
    and ?A = "(A // R2)" and ?B = "(A // R1)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   112
  show ?thesis
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   113
  proof(rule_tac f = ?f and A = ?A in finite_imageD)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   114
    show "finite (?f ` ?A)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   115
    proof(rule finite_subset [of _ "Pow ?B"])
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   116
      from fnt show "finite (Pow (A // R1))" by simp
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   117
    next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   118
      from eq2
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   119
      show " ?f ` A // R2 \<subseteq> Pow ?B"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   120
        apply (unfold image_def Pow_def quotient_def, auto)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   121
        by (rule_tac x = xb in bexI, simp, 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   122
                 unfold equiv_def sym_def refl_on_def, blast)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   123
    qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   124
  next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   125
    show "inj_on ?f ?A"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   126
    proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   127
      { fix X Y
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   128
        assume X_in: "X \<in> ?A" and Y_in: "Y \<in> ?A" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   129
          and eq_f: "?f X = ?f Y" (is "?L = ?R")
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   130
        have "X = Y" using X_in
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   131
        proof(rule quotientE)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   132
          fix x
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   133
          assume "X = R2 `` {x}" and "x \<in> A" with eq2
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   134
          have x_in: "x \<in> X" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   135
            by (unfold equiv_def quotient_def refl_on_def, auto)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   136
          with eq_f have "R1 `` {x} \<in> ?R" by auto
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   137
          then obtain y where 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   138
            y_in: "y \<in> Y" and eq_r: "R1 `` {x} = R1 ``{y}" by auto
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   139
          have "(x, y) \<in> R1"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   140
          proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   141
            from x_in X_in y_in Y_in eq2
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   142
            have "x \<in> A" and "y \<in> A" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   143
              by (unfold equiv_def quotient_def refl_on_def, auto)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   144
            from eq_equiv_class_iff [OF eq1 this] and eq_r
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   145
            show ?thesis by simp
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   146
          qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   147
          with refined have xy_r2: "(x, y) \<in> R2" by auto
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   148
          from quotient_eqI [OF eq2 X_in Y_in x_in y_in this]
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   149
          show ?thesis .
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   150
        qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   151
      } thus ?thesis by (auto simp:inj_on_def)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   152
    qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   153
  qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   154
qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   155
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   156
lemma equiv_lang_eq: "equiv UNIV (\<approx>Lang)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   157
  apply (unfold equiv_def str_eq_rel_def sym_def refl_on_def trans_def)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   158
  by blast
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   159
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   160
lemma tag_finite_imageD:
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   161
  fixes tag
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   162
  assumes rng_fnt: "finite (range tag)" 
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   163
  -- {* Suppose the rang of tagging fucntion @{text "tag"} is finite. *}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   164
  and same_tag_eqvt: "\<And> m n. tag m = tag (n::string) \<Longrightarrow> m \<approx>Lang n"
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   165
  -- {* And strings with same tag are equivalent *}
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   166
  shows "finite (UNIV // (\<approx>Lang))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   167
proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   168
  let ?R1 = "(=tag=)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   169
  show ?thesis
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   170
  proof(rule_tac refined_partition_finite [of _ ?R1])
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   171
    from finite_eq_f_rel [OF rng_fnt]
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   172
     show "finite (UNIV // =tag=)" . 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   173
   next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   174
     from same_tag_eqvt
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   175
     show "(=tag=) \<subseteq> (\<approx>Lang)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   176
       by (auto simp:f_eq_rel_def str_eq_def)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   177
   next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   178
     from equiv_f_eq_rel
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   179
     show "equiv UNIV (=tag=)" by blast
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   180
   next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   181
     from equiv_lang_eq
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   182
     show "equiv UNIV (\<approx>Lang)" by blast
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   183
  qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   184
qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   185
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   186
text {*
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   187
  A more concise, but less intelligible argument for @{text "tag_finite_imageD"} 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   188
  is given as the following. The basic idea is still using standard library 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   189
  lemma @{thm [source] "finite_imageD"}:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   190
  \[
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   191
  @{thm "finite_imageD" [no_vars]}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   192
  \]
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   193
  which says: if the image of injective function @{text "f"} over set @{text "A"} is 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   194
  finite, then @{text "A"} must be finte, as we did in the lemmas above.
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   195
  *}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   196
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   197
lemma 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   198
  fixes tag
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   199
  assumes rng_fnt: "finite (range tag)" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   200
  -- {* Suppose the rang of tagging fucntion @{text "tag"} is finite. *}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   201
  and same_tag_eqvt: "\<And> m n. tag m = tag (n::string) \<Longrightarrow> m \<approx>Lang n"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   202
  -- {* And strings with same tag are equivalent *}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   203
  shows "finite (UNIV // (\<approx>Lang))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   204
  -- {* Then the partition generated by @{text "(\<approx>Lang)"} is finite. *}
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   205
proof -
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   206
  -- {* The particular @{text "f"} and @{text "A"} used in @{thm [source] "finite_imageD"} are:*}
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   207
  let "?f" =  "op ` tag" and ?A = "(UNIV // \<approx>Lang)"
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   208
  show ?thesis
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   209
  proof (rule_tac f = "?f" and A = ?A in finite_imageD) 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   210
    -- {* 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   211
      The finiteness of @{text "f"}-image is a simple consequence of assumption @{text "rng_fnt"}:
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   212
      *}
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   213
    show "finite (?f ` ?A)" 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   214
    proof -
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   215
      have "\<forall> X. ?f X \<in> (Pow (range tag))" by (auto simp:image_def Pow_def)
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   216
      moreover from rng_fnt have "finite (Pow (range tag))" by simp
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   217
      ultimately have "finite (range ?f)"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   218
        by (auto simp only:image_def intro:finite_subset)
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   219
      from finite_range_image [OF this] show ?thesis .
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   220
    qed
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   221
  next
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   222
    -- {* 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   223
      The injectivity of @{text "f"} is the consequence of assumption @{text "same_tag_eqvt"}:
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   224
      *}
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   225
    show "inj_on ?f ?A" 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   226
    proof-
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   227
      { fix X Y
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   228
        assume X_in: "X \<in> ?A"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   229
          and  Y_in: "Y \<in> ?A"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   230
          and  tag_eq: "?f X = ?f Y"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   231
        have "X = Y"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   232
        proof -
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   233
          from X_in Y_in tag_eq 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   234
          obtain x y where x_in: "x \<in> X" and y_in: "y \<in> Y" and eq_tg: "tag x = tag y"
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   235
            unfolding quotient_def Image_def str_eq_rel_def str_eq_def image_def
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   236
            apply simp by blast 
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   237
          from same_tag_eqvt [OF eq_tg] have "x \<approx>Lang y" .
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   238
          with X_in Y_in x_in y_in
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   239
          show ?thesis by (auto simp:quotient_def str_eq_rel_def str_eq_def) 
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   240
        qed
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   241
      } thus ?thesis unfolding inj_on_def by auto
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   242
    qed
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   243
  qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   244
qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   245
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   246
subsection {* Lemmas for basic cases *}
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   247
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   248
text {*
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   249
  The the final result of this direction is in @{text "easier_direction"}, which
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   250
  is an induction on the structure of regular expressions. There is one case 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   251
  for each regular expression operator. For basic operators such as @{text "NULL, EMPTY, CHAR c"},
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   252
  the finiteness of their language partition can be established directly with no need
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   253
  of taggiing. This section contains several technical lemma for these base cases.
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   254
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   255
  The inductive cases involve operators @{text "ALT, SEQ"} and @{text "STAR"}. 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   256
  Tagging functions need to be defined individually for each of them. There will be one
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   257
  dedicated section for each of these cases, and each section goes virtually the same way:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   258
  gives definition of the tagging function and prove that strings 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   259
  with the same tag are equivalent.
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   260
  *}
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   261
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   262
lemma quot_empty_subset:
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   263
  "UNIV // (\<approx>{[]}) \<subseteq> {{[]}, UNIV - {[]}}"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   264
proof
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   265
  fix x
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   266
  assume "x \<in> UNIV // \<approx>{[]}"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   267
  then obtain y where h: "x = {z. (y, z) \<in> \<approx>{[]}}" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   268
    unfolding quotient_def Image_def by blast
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   269
  show "x \<in> {{[]}, UNIV - {[]}}" 
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   270
  proof (cases "y = []")
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   271
    case True with h
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   272
    have "x = {[]}" by (auto simp:str_eq_rel_def)
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   273
    thus ?thesis by simp
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   274
  next
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   275
    case False with h
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   276
    have "x = UNIV - {[]}" by (auto simp:str_eq_rel_def)
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   277
    thus ?thesis by simp
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   278
  qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   279
qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   280
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   281
lemma quot_char_subset:
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   282
  "UNIV // (\<approx>{[c]}) \<subseteq> {{[]},{[c]}, UNIV - {[], [c]}}"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   283
proof 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   284
  fix x 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   285
  assume "x \<in> UNIV // \<approx>{[c]}"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   286
  then obtain y where h: "x = {z. (y, z) \<in> \<approx>{[c]}}" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   287
    unfolding quotient_def Image_def by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   288
  show "x \<in> {{[]},{[c]}, UNIV - {[], [c]}}"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   289
  proof -
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   290
    { assume "y = []" hence "x = {[]}" using h 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   291
        by (auto simp:str_eq_rel_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   292
    } moreover {
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   293
      assume "y = [c]" hence "x = {[c]}" using h 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   294
        by (auto dest!:spec[where x = "[]"] simp:str_eq_rel_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   295
    } moreover {
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   296
      assume "y \<noteq> []" and "y \<noteq> [c]"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   297
      hence "\<forall> z. (y @ z) \<noteq> [c]" by (case_tac y, auto)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   298
      moreover have "\<And> p. (p \<noteq> [] \<and> p \<noteq> [c]) = (\<forall> q. p @ q \<noteq> [c])" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   299
        by (case_tac p, auto)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   300
      ultimately have "x = UNIV - {[],[c]}" using h
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   301
        by (auto simp add:str_eq_rel_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   302
    } ultimately show ?thesis by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   303
  qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   304
qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   305
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   306
subsection {* The case for @{text "SEQ"}*}
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   307
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   308
definition 
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   309
  "tag_str_SEQ L\<^isub>1 L\<^isub>2 x \<equiv> 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   310
       ((\<approx>L\<^isub>1) `` {x}, {(\<approx>L\<^isub>2) `` {x - xa}| xa.  xa \<le> x \<and> xa \<in> L\<^isub>1})"
42
f809cb54de4e Trying to solve the confict
zhang
parents: 40
diff changeset
   311
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   312
lemma tag_str_seq_range_finite:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   313
  "\<lbrakk>finite (UNIV // \<approx>L\<^isub>1); finite (UNIV // \<approx>L\<^isub>2)\<rbrakk> 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   314
                              \<Longrightarrow> finite (range (tag_str_SEQ L\<^isub>1 L\<^isub>2))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   315
apply (rule_tac B = "(UNIV // \<approx>L\<^isub>1) \<times> (Pow (UNIV // \<approx>L\<^isub>2))" in finite_subset)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   316
by (auto simp:tag_str_SEQ_def Image_def quotient_def split:if_splits)
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   317
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   318
lemma append_seq_elim:
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   319
  assumes "x @ y \<in> L\<^isub>1 ;; L\<^isub>2"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   320
  shows "(\<exists> xa \<le> x. xa \<in> L\<^isub>1 \<and> (x - xa) @ y \<in> L\<^isub>2) \<or> 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   321
          (\<exists> ya \<le> y. (x @ ya) \<in> L\<^isub>1 \<and> (y - ya) \<in> L\<^isub>2)"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   322
proof-
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   323
  from assms obtain s\<^isub>1 s\<^isub>2 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   324
    where "x @ y = s\<^isub>1 @ s\<^isub>2" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   325
    and in_seq: "s\<^isub>1 \<in> L\<^isub>1 \<and> s\<^isub>2 \<in> L\<^isub>2" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   326
    by (auto simp:Seq_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   327
  hence "(x \<le> s\<^isub>1 \<and> (s\<^isub>1 - x) @ s\<^isub>2 = y) \<or> (s\<^isub>1 \<le> x \<and> (x - s\<^isub>1) @ y = s\<^isub>2)"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   328
    using app_eq_dest by auto
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   329
  moreover have "\<lbrakk>x \<le> s\<^isub>1; (s\<^isub>1 - x) @ s\<^isub>2 = y\<rbrakk> \<Longrightarrow> 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   330
                       \<exists> ya \<le> y. (x @ ya) \<in> L\<^isub>1 \<and> (y - ya) \<in> L\<^isub>2" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   331
    using in_seq by (rule_tac x = "s\<^isub>1 - x" in exI, auto elim:prefixE)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   332
  moreover have "\<lbrakk>s\<^isub>1 \<le> x; (x - s\<^isub>1) @ y = s\<^isub>2\<rbrakk> \<Longrightarrow> 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   333
                    \<exists> xa \<le> x. xa \<in> L\<^isub>1 \<and> (x - xa) @ y \<in> L\<^isub>2" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   334
    using in_seq by (rule_tac x = s\<^isub>1 in exI, auto)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   335
  ultimately show ?thesis by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   336
qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   337
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   338
lemma tag_str_SEQ_injI:
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   339
  "tag_str_SEQ L\<^isub>1 L\<^isub>2 m = tag_str_SEQ L\<^isub>1 L\<^isub>2 n \<Longrightarrow> m \<approx>(L\<^isub>1 ;; L\<^isub>2) n"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   340
proof-
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   341
  { fix x y z
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   342
    assume xz_in_seq: "x @ z \<in> L\<^isub>1 ;; L\<^isub>2"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   343
    and tag_xy: "tag_str_SEQ L\<^isub>1 L\<^isub>2 x = tag_str_SEQ L\<^isub>1 L\<^isub>2 y"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   344
    have"y @ z \<in> L\<^isub>1 ;; L\<^isub>2" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   345
    proof-
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   346
      have "(\<exists> xa \<le> x. xa \<in> L\<^isub>1 \<and> (x - xa) @ z \<in> L\<^isub>2) \<or> 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   347
               (\<exists> za \<le> z. (x @ za) \<in> L\<^isub>1 \<and> (z - za) \<in> L\<^isub>2)"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   348
        using xz_in_seq append_seq_elim by simp
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   349
      moreover {
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   350
        fix xa
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   351
        assume h1: "xa \<le> x" and h2: "xa \<in> L\<^isub>1" and h3: "(x - xa) @ z \<in> L\<^isub>2"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   352
        obtain ya where "ya \<le> y" and "ya \<in> L\<^isub>1" and "(y - ya) @ z \<in> L\<^isub>2" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   353
        proof -
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   354
          have "\<exists> ya.  ya \<le> y \<and> ya \<in> L\<^isub>1 \<and> (x - xa) \<approx>L\<^isub>2 (y - ya)"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   355
          proof -
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   356
            have "{\<approx>L\<^isub>2 `` {x - xa} |xa. xa \<le> x \<and> xa \<in> L\<^isub>1} = 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   357
                  {\<approx>L\<^isub>2 `` {y - xa} |xa. xa \<le> y \<and> xa \<in> L\<^isub>1}" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   358
                          (is "?Left = ?Right") 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   359
              using h1 tag_xy by (auto simp:tag_str_SEQ_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   360
            moreover have "\<approx>L\<^isub>2 `` {x - xa} \<in> ?Left" using h1 h2 by auto
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   361
            ultimately have "\<approx>L\<^isub>2 `` {x - xa} \<in> ?Right" by simp
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   362
            thus ?thesis by (auto simp:Image_def str_eq_rel_def str_eq_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   363
          qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   364
          with prems show ?thesis by (auto simp:str_eq_rel_def str_eq_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   365
        qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   366
        hence "y @ z \<in> L\<^isub>1 ;; L\<^isub>2" by (erule_tac prefixE, auto simp:Seq_def)          
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   367
      } moreover {
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   368
        fix za
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   369
        assume h1: "za \<le> z" and h2: "(x @ za) \<in> L\<^isub>1" and h3: "z - za \<in> L\<^isub>2"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   370
        hence "y @ za \<in> L\<^isub>1"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   371
        proof-
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   372
          have "\<approx>L\<^isub>1 `` {x} = \<approx>L\<^isub>1 `` {y}" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   373
            using h1 tag_xy by (auto simp:tag_str_SEQ_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   374
          with h2 show ?thesis 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   375
            by (auto simp:Image_def str_eq_rel_def str_eq_def) 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   376
        qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   377
        with h1 h3 have "y @ z \<in> L\<^isub>1 ;; L\<^isub>2" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   378
          by (drule_tac A = L\<^isub>1 in seq_intro, auto elim:prefixE)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   379
      }
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   380
      ultimately show ?thesis by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   381
    qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   382
  } thus "tag_str_SEQ L\<^isub>1 L\<^isub>2 m = tag_str_SEQ L\<^isub>1 L\<^isub>2 n \<Longrightarrow> m \<approx>(L\<^isub>1 ;; L\<^isub>2) n" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   383
    by (auto simp add: str_eq_def str_eq_rel_def)
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   384
qed 
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   385
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   386
lemma quot_seq_finiteI:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   387
  "\<lbrakk>finite (UNIV // \<approx>L\<^isub>1); finite (UNIV // \<approx>L\<^isub>2)\<rbrakk> 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   388
  \<Longrightarrow> finite (UNIV // \<approx>(L\<^isub>1 ;; L\<^isub>2))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   389
  apply (rule_tac tag = "tag_str_SEQ L\<^isub>1 L\<^isub>2" in tag_finite_imageD)  
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   390
  by (auto intro:tag_str_SEQ_injI elim:tag_str_seq_range_finite)
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   391
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   392
subsection {* The case for @{text "ALT"} *}
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   393
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   394
definition 
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   395
  "tag_str_ALT L\<^isub>1 L\<^isub>2 (x::string) \<equiv> ((\<approx>L\<^isub>1) `` {x}, (\<approx>L\<^isub>2) `` {x})"
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   396
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   397
lemma quot_union_finiteI:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   398
  assumes finite1: "finite (UNIV // \<approx>(L\<^isub>1::string set))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   399
  and finite2: "finite (UNIV // \<approx>L\<^isub>2)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   400
  shows "finite (UNIV // \<approx>(L\<^isub>1 \<union> L\<^isub>2))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   401
proof (rule_tac tag = "tag_str_ALT L\<^isub>1 L\<^isub>2" in tag_finite_imageD)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   402
  show "\<And>m n. tag_str_ALT L\<^isub>1 L\<^isub>2 m = tag_str_ALT L\<^isub>1 L\<^isub>2 n \<Longrightarrow> m \<approx>(L\<^isub>1 \<union> L\<^isub>2) n"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   403
    unfolding tag_str_ALT_def str_eq_def Image_def str_eq_rel_def by auto
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   404
next
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   405
  show "finite (range (tag_str_ALT L\<^isub>1 L\<^isub>2))" using finite1 finite2
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   406
    apply (rule_tac B = "(UNIV // \<approx>L\<^isub>1) \<times> (UNIV // \<approx>L\<^isub>2)" in finite_subset)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   407
    by (auto simp:tag_str_ALT_def Image_def quotient_def)
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   408
qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   409
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   410
subsection {*
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   411
  The case for @{text "STAR"}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   412
  *}
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   413
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   414
text {* 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   415
  This turned out to be the trickiest case. 
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   416
  Any string @{text "x"} in language @{text "L\<^isub>1\<star>"}, 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   417
  can be splited into a prefix @{text "xa \<in> L\<^isub>1\<star>"} and a suffix @{text "x - xa \<in> L\<^isub>1"}.
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   418
  For one such @{text "x"}, there can be many such splits. The tagging of @{text "x"} is then 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   419
  defined by collecting the @{text "L\<^isub>1"}-state of the suffixes from every possible split.
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   420
  *} 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   421
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   422
(* I will make some illustrations for it. *)
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   423
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   424
definition 
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   425
  "tag_str_STAR L\<^isub>1 x \<equiv> {(\<approx>L\<^isub>1) `` {x - xa} | xa. xa < x \<and> xa \<in> L\<^isub>1\<star>}"
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   426
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   427
text {* A technical lemma. *}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   428
lemma finite_set_has_max: "\<lbrakk>finite A; A \<noteq> {}\<rbrakk> \<Longrightarrow> 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   429
           (\<exists> max \<in> A. \<forall> a \<in> A. f a <= (f max :: nat))"
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   430
proof (induct rule:finite.induct)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   431
  case emptyI thus ?case by simp
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   432
next
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   433
  case (insertI A a)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   434
  show ?case
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   435
  proof (cases "A = {}")
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   436
    case True thus ?thesis by (rule_tac x = a in bexI, auto)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   437
  next
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   438
    case False
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   439
    with prems obtain max 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   440
      where h1: "max \<in> A" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   441
      and h2: "\<forall>a\<in>A. f a \<le> f max" by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   442
    show ?thesis
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   443
    proof (cases "f a \<le> f max")
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   444
      assume "f a \<le> f max"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   445
      with h1 h2 show ?thesis by (rule_tac x = max in bexI, auto)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   446
    next
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   447
      assume "\<not> (f a \<le> f max)"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   448
      thus ?thesis using h2 by (rule_tac x = a in bexI, auto)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   449
    qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   450
  qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   451
qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   452
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   453
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   454
text {* Technical lemma. *}
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   455
lemma finite_strict_prefix_set: "finite {xa. xa < (x::string)}"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   456
apply (induct x rule:rev_induct, simp)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   457
apply (subgoal_tac "{xa. xa < xs @ [x]} = {xa. xa < xs} \<union> {xs}")
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   458
by (auto simp:strict_prefix_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   459
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   460
text {* 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   461
  The following lemma @{text "tag_str_star_range_finite"} establishes the range finiteness 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   462
  of the tagging function.
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   463
  *}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   464
lemma tag_str_star_range_finite:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   465
  "finite (UNIV // \<approx>L\<^isub>1) \<Longrightarrow> finite (range (tag_str_STAR L\<^isub>1))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   466
apply (rule_tac B = "Pow (UNIV // \<approx>L\<^isub>1)" in finite_subset)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   467
by (auto simp:tag_str_STAR_def Image_def 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   468
                       quotient_def split:if_splits)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   469
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   470
text {*
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   471
  The following lemma @{text "tag_str_STAR_injI"} establishes the injectivity of 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   472
  the tagging function for case @{text "STAR"}.
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   473
  *}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   474
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   475
lemma tag_str_STAR_injI:
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   476
  fixes v w
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   477
  assumes eq_tag: "tag_str_STAR L\<^isub>1 v = tag_str_STAR L\<^isub>1 w"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   478
  shows "(v::string) \<approx>(L\<^isub>1\<star>) w"
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   479
proof-
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   480
    -- {* 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   481
    \begin{minipage}{0.9\textwidth}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   482
    According to the definition of @{text "\<approx>Lang"}, 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   483
    proving @{text "v \<approx>(L\<^isub>1\<star>) w"} amounts to
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   484
    showing: for any string @{text "u"},
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   485
    if @{text "v @ u \<in> (L\<^isub>1\<star>)"} then @{text "w @ u \<in> (L\<^isub>1\<star>)"} and vice versa.
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   486
    The reasoning pattern for both directions are the same, as derived
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   487
    in the following:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   488
    \end{minipage}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   489
    *}
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   490
  { fix x y z
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   491
    assume xz_in_star: "x @ z \<in> L\<^isub>1\<star>" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   492
      and tag_xy: "tag_str_STAR L\<^isub>1 x = tag_str_STAR L\<^isub>1 y"
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   493
    have "y @ z \<in> L\<^isub>1\<star>"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   494
    proof(cases "x = []")
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   495
      -- {* 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   496
        The degenerated case when @{text "x"} is a null string is easy to prove:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   497
        *}
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   498
      case True
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   499
      with tag_xy have "y = []" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   500
        by (auto simp:tag_str_STAR_def strict_prefix_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   501
      thus ?thesis using xz_in_star True by simp
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   502
    next
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   503
        -- {*
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   504
        \begin{minipage}{0.9\textwidth}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   505
        The case when @{text "x"} is not null, and
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   506
        @{text "x @ z"} is in @{text "L\<^isub>1\<star>"}, 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   507
        \end{minipage}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   508
        *}
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   509
      case False
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   510
      obtain x_max 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   511
        where h1: "x_max < x" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   512
        and h2: "x_max \<in> L\<^isub>1\<star>" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   513
        and h3: "(x - x_max) @ z \<in> L\<^isub>1\<star>" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   514
        and h4:"\<forall> xa < x. xa \<in> L\<^isub>1\<star> \<and> (x - xa) @ z \<in> L\<^isub>1\<star> 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   515
                                     \<longrightarrow> length xa \<le> length x_max"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   516
      proof-
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   517
        let ?S = "{xa. xa < x \<and> xa \<in> L\<^isub>1\<star> \<and> (x - xa) @ z \<in> L\<^isub>1\<star>}"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   518
        have "finite ?S"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   519
          by (rule_tac B = "{xa. xa < x}" in finite_subset, 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   520
                                auto simp:finite_strict_prefix_set)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   521
        moreover have "?S \<noteq> {}" using False xz_in_star
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   522
          by (simp, rule_tac x = "[]" in exI, auto simp:strict_prefix_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   523
        ultimately have "\<exists> max \<in> ?S. \<forall> a \<in> ?S. length a \<le> length max" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   524
          using finite_set_has_max by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   525
        with prems show ?thesis by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   526
      qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   527
      obtain ya 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   528
        where h5: "ya < y" and h6: "ya \<in> L\<^isub>1\<star>" and h7: "(x - x_max) \<approx>L\<^isub>1 (y - ya)"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   529
      proof-
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   530
        from tag_xy have "{\<approx>L\<^isub>1 `` {x - xa} |xa. xa < x \<and> xa \<in> L\<^isub>1\<star>} = 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   531
          {\<approx>L\<^isub>1 `` {y - xa} |xa. xa < y \<and> xa \<in> L\<^isub>1\<star>}" (is "?left = ?right")
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   532
          by (auto simp:tag_str_STAR_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   533
        moreover have "\<approx>L\<^isub>1 `` {x - x_max} \<in> ?left" using h1 h2 by auto
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   534
        ultimately have "\<approx>L\<^isub>1 `` {x - x_max} \<in> ?right" by simp
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   535
        with prems show ?thesis apply 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   536
          (simp add:Image_def str_eq_rel_def str_eq_def) by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   537
      qed      
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   538
      have "(y - ya) @ z \<in> L\<^isub>1\<star>" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   539
      proof-
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   540
        from h3 h1 obtain a b where a_in: "a \<in> L\<^isub>1" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   541
          and a_neq: "a \<noteq> []" and b_in: "b \<in> L\<^isub>1\<star>" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   542
          and ab_max: "(x - x_max) @ z = a @ b" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   543
          by (drule_tac star_decom, auto simp:strict_prefix_def elim:prefixE)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   544
        have "(x - x_max) \<le> a \<and> (a - (x - x_max)) @ b = z" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   545
        proof -
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   546
          have "((x - x_max) \<le> a \<and> (a - (x - x_max)) @ b = z) \<or> 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   547
                            (a < (x - x_max) \<and> ((x - x_max) - a) @ z = b)" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   548
            using app_eq_dest[OF ab_max] by (auto simp:strict_prefix_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   549
          moreover { 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   550
            assume np: "a < (x - x_max)" and b_eqs: " ((x - x_max) - a) @ z = b"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   551
            have "False"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   552
            proof -
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   553
              let ?x_max' = "x_max @ a"
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   554
              have "?x_max' < x" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   555
                using np h1 by (clarsimp simp:strict_prefix_def diff_prefix) 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   556
              moreover have "?x_max' \<in> L\<^isub>1\<star>" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   557
                using a_in h2 by (simp add:star_intro3) 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   558
              moreover have "(x - ?x_max') @ z \<in> L\<^isub>1\<star>" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   559
                using b_eqs b_in np h1 by (simp add:diff_diff_appd)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   560
              moreover have "\<not> (length ?x_max' \<le> length x_max)" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   561
                using a_neq by simp
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   562
              ultimately show ?thesis using h4 by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   563
            qed 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   564
          } ultimately show ?thesis by blast
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   565
        qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   566
        then obtain za where z_decom: "z = za @ b" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   567
          and x_za: "(x - x_max) @ za \<in> L\<^isub>1" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   568
          using a_in by (auto elim:prefixE)        
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   569
        from x_za h7 have "(y - ya) @ za \<in> L\<^isub>1" 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   570
          by (auto simp:str_eq_def str_eq_rel_def)
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   571
        with z_decom b_in show ?thesis by (auto dest!:step[of "(y - ya) @ za"])
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   572
      qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   573
      with h5 h6 show ?thesis 
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   574
        by (drule_tac star_intro1, auto simp:strict_prefix_def elim:prefixE)
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   575
    qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   576
  } 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   577
  -- {* By instantiating the reasoning pattern just derived for both directions:*} 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   578
  from this [OF _ eq_tag] and this [OF _ eq_tag [THEN sym]]
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   579
  -- {* The thesis is proved as a trival consequence: *} 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   580
    show  ?thesis by (unfold str_eq_def str_eq_rel_def, blast)
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   581
qed
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   582
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   583
lemma quot_star_finiteI:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   584
  "finite (UNIV // \<approx>L\<^isub>1) \<Longrightarrow> finite (UNIV // \<approx>(L\<^isub>1\<star>))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   585
  apply (rule_tac tag = "tag_str_STAR L\<^isub>1" in tag_finite_imageD)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   586
  by (auto intro:tag_str_STAR_injI elim:tag_str_star_range_finite)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   587
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   588
subsection {*
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   589
  The main lemma
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   590
  *}
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   591
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   592
lemma easier_direction:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   593
  "Lang = L (r::rexp) \<Longrightarrow> finite (UNIV // (\<approx>Lang))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   594
proof (induct arbitrary:Lang rule:rexp.induct)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   595
  case NULL
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   596
  have "UNIV // (\<approx>{}) \<subseteq> {UNIV} "
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   597
    by (auto simp:quotient_def str_eq_rel_def str_eq_def)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   598
  with prems show "?case" by (auto intro:finite_subset)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   599
next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   600
  case EMPTY
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   601
  have "UNIV // (\<approx>{[]}) \<subseteq> {{[]}, UNIV - {[]}}" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   602
    by (rule quot_empty_subset)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   603
  with prems show ?case by (auto intro:finite_subset)
40
50d00d7dc413 tuned a bit more the last STAR-proof
wu
parents: 39
diff changeset
   604
next
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   605
  case (CHAR c)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   606
  have "UNIV // (\<approx>{[c]}) \<subseteq> {{[]},{[c]}, UNIV - {[], [c]}}" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   607
    by (rule quot_char_subset)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   608
  with prems show ?case by (auto intro:finite_subset)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   609
next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   610
  case (SEQ r\<^isub>1 r\<^isub>2)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   611
  have "\<lbrakk>finite (UNIV // \<approx>(L r\<^isub>1)); finite (UNIV // \<approx>(L r\<^isub>2))\<rbrakk> 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   612
            \<Longrightarrow> finite (UNIV // \<approx>(L r\<^isub>1 ;; L r\<^isub>2))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   613
    by (erule quot_seq_finiteI, simp)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   614
  with prems show ?case by simp
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   615
next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   616
  case (ALT r\<^isub>1 r\<^isub>2)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   617
  have "\<lbrakk>finite (UNIV // \<approx>(L r\<^isub>1)); finite (UNIV // \<approx>(L r\<^isub>2))\<rbrakk> 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   618
            \<Longrightarrow> finite (UNIV // \<approx>(L r\<^isub>1 \<union> L r\<^isub>2))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   619
    by (erule quot_union_finiteI, simp)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   620
  with prems show ?case by simp  
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   621
next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   622
  case (STAR r)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   623
  have "finite (UNIV // \<approx>(L r)) 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   624
            \<Longrightarrow> finite (UNIV // \<approx>((L r)\<star>))"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   625
    by (erule quot_star_finiteI)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   626
  with prems show ?case by simp
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   627
qed 
31
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   628
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   629
end
b6815473ee2e 1. Myhill.thy is proved to correct some typos. 2. Some sections are added to the first direction. 3. The small theory of list difference is now separated into Prefix_subtract.thy and the ROOT.ML
zhang
parents: 30
diff changeset
   630
45
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   631
(*
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   632
lemma refined_quotient_union_eq:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   633
  assumes refined: "R1 \<subseteq> R2"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   634
  and eq1: "equiv A R1" and eq2: "equiv A R2"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   635
  and y_in: "y \<in> A"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   636
  shows "\<Union>{R1 `` {x} | x. x \<in> (R2 `` {y})} = R2 `` {y}"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   637
proof
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   638
  show "\<Union>{R1 `` {x} |x. x \<in> R2 `` {y}} \<subseteq> R2 `` {y}" (is "?L \<subseteq> ?R")
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   639
  proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   640
    { fix z
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   641
      assume zl: "z \<in> ?L" and nzr: "z \<notin> ?R"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   642
      have "False"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   643
      proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   644
        from zl and eq1 eq2 and y_in 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   645
        obtain x where xy2: "(x, y) \<in> R2" and zx1: "(z, x) \<in> R1"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   646
          by (simp only:equiv_def sym_def, blast)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   647
        have "(z, y) \<in> R2"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   648
        proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   649
          from zx1 and refined have "(z, x) \<in> R2" by blast
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   650
          moreover from xy2 have "(x, y) \<in> R2" .
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   651
          ultimately show ?thesis using eq2
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   652
            by (simp only:equiv_def, unfold trans_def, blast)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   653
        qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   654
        with nzr eq2 show ?thesis by (auto simp:equiv_def sym_def)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   655
      qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   656
    } thus ?thesis by blast
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   657
  qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   658
next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   659
  show "R2 `` {y} \<subseteq> \<Union>{R1 `` {x} |x. x \<in> R2 `` {y}}" (is "?L \<subseteq> ?R")
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   660
  proof
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   661
    fix x
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   662
    assume x_in: "x \<in> ?L"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   663
    with eq1 eq2 have "x \<in> R1 `` {x}" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   664
      by (unfold equiv_def refl_on_def, auto)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   665
    with x_in show "x \<in> ?R" by auto
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   666
  qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   667
qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   668
*)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   669
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   670
(*
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   671
lemma refined_partition_finite:
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   672
  fixes R1 R2 A
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   673
  assumes fnt: "finite (A // R1)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   674
  and refined: "R1 \<subseteq> R2"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   675
  and eq1: "equiv A R1" and eq2: "equiv A R2"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   676
  shows "finite (A // R2)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   677
proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   678
  let ?f = "\<lambda> X. {R1 `` {x} | x. x \<in> X}" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   679
    and ?A = "(A // R2)" and ?B = "(A // R1)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   680
  show ?thesis
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   681
  proof(rule_tac f = ?f and A = ?A in finite_imageD)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   682
    show "finite (?f ` ?A)"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   683
    proof(rule finite_subset [of _ "Pow ?B"])
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   684
      from fnt show "finite (Pow (A // R1))" by simp
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   685
    next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   686
      from eq2
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   687
      show " ?f ` A // R2 \<subseteq> Pow ?B"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   688
        apply (unfold image_def Pow_def quotient_def, auto)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   689
        by (rule_tac x = xb in bexI, simp, 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   690
                 unfold equiv_def sym_def refl_on_def, blast)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   691
    qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   692
  next
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   693
    show "inj_on ?f ?A"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   694
    proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   695
      { fix X Y
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   696
        assume X_in: "X \<in> ?A" and Y_in: "Y \<in> ?A" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   697
          and eq_f: "?f X = ?f Y" (is "?L = ?R")
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   698
        hence "X = Y"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   699
        proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   700
          from X_in eq2
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   701
          obtain x 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   702
            where x_in: "x \<in> A" 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   703
            and eq_x: "X = R2 `` {x}" (is "X = ?X")
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   704
            by (unfold quotient_def equiv_def refl_on_def, auto)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   705
          from Y_in eq2 obtain y 
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   706
            where y_in: "y \<in> A"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   707
            and eq_y: "Y = R2 `` {y}" (is "Y = ?Y")
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   708
            by (unfold quotient_def equiv_def refl_on_def, auto)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   709
          have "?X = ?Y"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   710
          proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   711
            from eq_f have "\<Union> ?L = \<Union> ?R" by auto
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   712
            moreover have "\<Union> ?L = ?X"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   713
            proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   714
              from eq_x have "\<Union> ?L =  \<Union>{R1 `` {x} |x. x \<in> ?X}" by simp
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   715
              also from refined_quotient_union_eq [OF refined eq1 eq2 x_in]
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   716
              have "\<dots> = ?X" .
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   717
              finally show ?thesis .
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   718
            qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   719
            moreover have "\<Union> ?R = ?Y"
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   720
            proof -
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   721
              from eq_y have "\<Union> ?R =  \<Union>{R1 `` {y} |y. y \<in> ?Y}" by simp
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   722
              also from refined_quotient_union_eq [OF refined eq1 eq2 y_in]
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   723
              have "\<dots> = ?Y" .
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   724
              finally show ?thesis .
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   725
            qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   726
            ultimately show ?thesis by simp
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   727
          qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   728
          with eq_x eq_y show ?thesis by auto
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   729
        qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   730
      } thus ?thesis by (auto simp:inj_on_def)
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   731
    qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   732
  qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   733
qed
7aa6c20e6d31 More improvement
zhang
parents: 43
diff changeset
   734
*)