979 |
979 |
980 \noindent |
980 \noindent |
981 where @{text "A"} and @{text "B"} are some arbitrary languages. |
981 where @{text "A"} and @{text "B"} are some arbitrary languages. |
982 We can show in general, if @{term "finite (UNIV // \<approx>A)"} and @{term "finite (UNIV // \<approx>B)"} |
982 We can show in general, if @{term "finite (UNIV // \<approx>A)"} and @{term "finite (UNIV // \<approx>B)"} |
983 then @{term "finite ((UNIV // \<approx>A) \<times> (UNIV // \<approx>B))"} holds. The range of |
983 then @{term "finite ((UNIV // \<approx>A) \<times> (UNIV // \<approx>B))"} holds. The range of |
984 @{term "tag_str_ALT A B"} is a subset of this product set, so finite. It remains to be shown |
984 @{term "tag_str_ALT A B"} is a subset of this product set---so finite. It remains to be shown |
985 that @{text "=tag\<^isub>A\<^isub>L\<^isub>T A B="} refines @{term "\<approx>(A \<union> B)"}. This amounts to |
985 that @{text "=tag\<^isub>A\<^isub>L\<^isub>T A B="} refines @{term "\<approx>(A \<union> B)"}. This amounts to |
986 showing |
986 showing |
987 % |
987 % |
988 \begin{center} |
988 \begin{center} |
989 @{term "tag\<^isub>A\<^isub>L\<^isub>T A B x = tag\<^isub>A\<^isub>L\<^isub>T A B y \<longrightarrow> x \<approx>(A \<union> B) y"} |
989 @{term "tag\<^isub>A\<^isub>L\<^isub>T A B x = tag\<^isub>A\<^isub>L\<^isub>T A B y \<longrightarrow> x \<approx>(A \<union> B) y"} |
1038 \end{tabular} |
1038 \end{tabular} |
1039 \end{center} |
1039 \end{center} |
1040 |
1040 |
1041 \noindent |
1041 \noindent |
1042 where @{text c} and @{text d} are characters, and @{text x} and @{text y} are strings. |
1042 where @{text c} and @{text d} are characters, and @{text x} and @{text y} are strings. |
1043 Now assuming @{term "x @ z \<in> A ;; B"} there are only two possible ways how this string |
1043 Now assuming @{term "x @ z \<in> A ;; B"} there are only two possible ways of how to `split' |
1044 can be `distributed' over @{term "A ;; B"}: |
1044 this string to be in @{term "A ;; B"}: |
1045 |
1045 |
1046 \begin{center} |
1046 \begin{center} |
1047 \scalebox{0.7}{ |
1047 \scalebox{0.7}{ |
1048 \begin{tikzpicture} |
1048 \begin{tikzpicture} |
1049 \node[draw,minimum height=3.8ex] (xa) { $\hspace{4em}x'\hspace{4em}$ }; |
1049 \node[draw,minimum height=3.8ex] (xa) { $\hspace{4em}x'\hspace{4em}$ }; |
1108 \begin{center} |
1108 \begin{center} |
1109 @{thm tag_str_SEQ_def[where ?L1.0="A" and ?L2.0="B", THEN meta_eq_app]} |
1109 @{thm tag_str_SEQ_def[where ?L1.0="A" and ?L2.0="B", THEN meta_eq_app]} |
1110 \end{center} |
1110 \end{center} |
1111 |
1111 |
1112 \noindent |
1112 \noindent |
1113 with the idea ??? |
1113 with the idea that in the first split we have to make sure that @{text "x - x'"} |
|
1114 is in the language @{text B}. |
1114 |
1115 |
1115 \begin{proof}[@{const SEQ}-Case] |
1116 \begin{proof}[@{const SEQ}-Case] |
1116 |
1117 If @{term "finite (UNIV // \<approx>A)"} and @{term "finite (UNIV // \<approx>B)"} |
1117 |
1118 then @{term "finite ((UNIV // \<approx>A) \<times> (Pow (UNIV // \<approx>B)))"} holds. The range of |
|
1119 @{term "tag_str_SEQ A B"} is a subset of this product set, and therefore finite. |
|
1120 We have to show injectivity of this tagging function as |
|
1121 |
|
1122 \begin{center} |
|
1123 @{term "\<forall>z. tag_str_SEQ A B x = tag_str_SEQ A B y \<and> x @ z \<in> A ;; B \<longrightarrow> y @ z \<in> A ;; B"} |
|
1124 \end{center} |
|
1125 |
|
1126 \noindent |
|
1127 There are two cases to be considered. First, there exists a @{text "x'"} such that |
|
1128 @{text "x' \<in> A"}, @{text "x' \<le> x"} and @{text "(x - x') @ z \<in> B"} hold. We therefore have |
|
1129 |
|
1130 \begin{center} |
|
1131 @{term "(\<approx>B `` {x - x'}) \<in> ({\<approx>B `` {x - x'} |x'. x' \<le> x \<and> x' \<in> A})"} |
|
1132 \end{center} |
|
1133 |
|
1134 \noindent |
|
1135 and by the assumption about @{term "tag_str_SEQ A B"} also |
|
1136 |
|
1137 \begin{center} |
|
1138 @{term "(\<approx>B `` {x - x'}) \<in> ({\<approx>B `` {y - y'} |y'. y' \<le> y \<and> y' \<in> A})"} |
|
1139 \end{center} |
|
1140 |
|
1141 \noindent |
|
1142 That means there must be a @{text "y'"} such that @{text "y' \<in> A"} and |
|
1143 @{term "\<approx>B `` {x - x'} = \<approx>B `` {y - y'}"}. This equality means that |
|
1144 @{term "(x - x') \<approx>B (y - y')"} holds. Unfolding the Myhill-Nerode |
|
1145 relation and together with the fact that @{text "(x - x') @ z \<in> B"}, we |
|
1146 have @{text "(y - y') @ z \<in> B"}. We already know @{text "y' \<in> A"}, therefore |
|
1147 @{term "y @ z \<in> A ;; B"}, as needed in this case. |
|
1148 |
|
1149 Second, there exists a @{text "z'"} such that @{term "x @ z' \<in> A"} and @{text "z - z' \<in> B"}. |
|
1150 By the assumption about @{term "tag_str_SEQ A B"} we have |
|
1151 @{term "\<approx>A `` {x} = \<approx>A `` {y}"} and thus @{term "x \<approx>A y"}. Which means by the Myhill-Nerode |
|
1152 relation that @{term "y @ z' \<in> A"} holds. Using @{text "z - z' \<in> B"}, we can conclude aslo in this case |
|
1153 with @{term "y @ z \<in> A ;; B"}. That completes the @{const SEQ}-case.\qed |
1118 \end{proof} |
1154 \end{proof} |
1119 |
1155 |
1120 \begin{proof}[@{const STAR}-Case] |
1156 \begin{proof}[@{const STAR}-Case] |
1121 |
1157 |
1122 \begin{center} |
1158 \begin{center} |