tphols-2011/generated/Myhill.tex
changeset 38 a1268fb0deea
parent 37 e4d0e6cdc3d2
child 39 a59473f0229d
equal deleted inserted replaced
37:e4d0e6cdc3d2 38:a1268fb0deea
     1 %
       
     2 \begin{isabellebody}%
       
     3 \def\isabellecontext{Myhill}%
       
     4 %
       
     5 \isadelimtheory
       
     6 %
       
     7 \endisadelimtheory
       
     8 %
       
     9 \isatagtheory
       
    10 \isacommand{theory}\isamarkupfalse%
       
    11 \ Myhill\isanewline
       
    12 \ \ \isakeyword{imports}\ Main\ List{\isacharunderscore}Prefix\isanewline
       
    13 \isakeyword{begin}%
       
    14 \endisatagtheory
       
    15 {\isafoldtheory}%
       
    16 %
       
    17 \isadelimtheory
       
    18 %
       
    19 \endisadelimtheory
       
    20 %
       
    21 \isamarkupsection{Preliminary definitions%
       
    22 }
       
    23 \isamarkuptrue%
       
    24 %
       
    25 \begin{isamarkuptext}%
       
    26 Sequential composition of two languages \isa{L{\isadigit{1}}} and \isa{L{\isadigit{2}}}%
       
    27 \end{isamarkuptext}%
       
    28 \isamarkuptrue%
       
    29 \isacommand{definition}\isamarkupfalse%
       
    30 \ Seq\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}string\ set\ {\isasymRightarrow}\ string\ set\ {\isasymRightarrow}\ string\ set{\isachardoublequoteclose}\ {\isacharparenleft}{\isachardoublequoteopen}{\isacharunderscore}\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharunderscore}{\isachardoublequoteclose}\ {\isacharbrackleft}{\isadigit{1}}{\isadigit{0}}{\isadigit{0}}{\isacharcomma}{\isadigit{1}}{\isadigit{0}}{\isadigit{0}}{\isacharbrackright}\ {\isadigit{1}}{\isadigit{0}}{\isadigit{0}}{\isacharparenright}\isanewline
       
    31 \isakeyword{where}\ \isanewline
       
    32 \ \ {\isachardoublequoteopen}L{\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L{\isadigit{2}}\ {\isacharequal}\ {\isacharbraceleft}s{\isadigit{1}}\ {\isacharat}\ s{\isadigit{2}}\ {\isacharbar}\ s{\isadigit{1}}\ s{\isadigit{2}}{\isachardot}\ s{\isadigit{1}}\ {\isasymin}\ L{\isadigit{1}}\ {\isasymand}\ s{\isadigit{2}}\ {\isasymin}\ L{\isadigit{2}}{\isacharbraceright}{\isachardoublequoteclose}%
       
    33 \begin{isamarkuptext}%
       
    34 Transitive closure of language \isa{L}.%
       
    35 \end{isamarkuptext}%
       
    36 \isamarkuptrue%
       
    37 \isacommand{inductive{\isacharunderscore}set}\isamarkupfalse%
       
    38 \isanewline
       
    39 \ \ Star\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}string\ set\ {\isasymRightarrow}\ string\ set{\isachardoublequoteclose}\ {\isacharparenleft}{\isachardoublequoteopen}{\isacharunderscore}{\isasymstar}{\isachardoublequoteclose}\ {\isacharbrackleft}{\isadigit{1}}{\isadigit{0}}{\isadigit{1}}{\isacharbrackright}\ {\isadigit{1}}{\isadigit{0}}{\isadigit{2}}{\isacharparenright}\isanewline
       
    40 \ \ \isakeyword{for}\ L\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}string\ set{\isachardoublequoteclose}\isanewline
       
    41 \isakeyword{where}\isanewline
       
    42 \ \ start{\isacharbrackleft}intro{\isacharbrackright}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}\ {\isasymin}\ L{\isasymstar}{\isachardoublequoteclose}\isanewline
       
    43 {\isacharbar}\ step{\isacharbrackleft}intro{\isacharbrackright}{\isacharcolon}\ \ {\isachardoublequoteopen}{\isasymlbrakk}s{\isadigit{1}}\ {\isasymin}\ L{\isacharsemicolon}\ s{\isadigit{2}}\ {\isasymin}\ L{\isasymstar}{\isasymrbrakk}\ {\isasymLongrightarrow}\ s{\isadigit{1}}{\isacharat}s{\isadigit{2}}\ {\isasymin}\ L{\isasymstar}{\isachardoublequoteclose}%
       
    44 \begin{isamarkuptext}%
       
    45 Some properties of operator \isa{{\isacharsemicolon}{\isacharsemicolon}}.%
       
    46 \end{isamarkuptext}%
       
    47 \isamarkuptrue%
       
    48 \isacommand{lemma}\isamarkupfalse%
       
    49 \ seq{\isacharunderscore}union{\isacharunderscore}distrib{\isacharcolon}\isanewline
       
    50 \ \ {\isachardoublequoteopen}{\isacharparenleft}A\ {\isasymunion}\ B{\isacharparenright}\ {\isacharsemicolon}{\isacharsemicolon}\ C\ {\isacharequal}\ {\isacharparenleft}A\ {\isacharsemicolon}{\isacharsemicolon}\ C{\isacharparenright}\ {\isasymunion}\ {\isacharparenleft}B\ {\isacharsemicolon}{\isacharsemicolon}\ C{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
    51 %
       
    52 \isadelimproof
       
    53 %
       
    54 \endisadelimproof
       
    55 %
       
    56 \isatagproof
       
    57 \isacommand{by}\isamarkupfalse%
       
    58 \ {\isacharparenleft}auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}%
       
    59 \endisatagproof
       
    60 {\isafoldproof}%
       
    61 %
       
    62 \isadelimproof
       
    63 \isanewline
       
    64 %
       
    65 \endisadelimproof
       
    66 \isanewline
       
    67 \isacommand{lemma}\isamarkupfalse%
       
    68 \ seq{\isacharunderscore}intro{\isacharcolon}\isanewline
       
    69 \ \ {\isachardoublequoteopen}{\isasymlbrakk}x\ {\isasymin}\ A{\isacharsemicolon}\ y\ {\isasymin}\ B{\isasymrbrakk}\ {\isasymLongrightarrow}\ x\ {\isacharat}\ y\ {\isasymin}\ A\ {\isacharsemicolon}{\isacharsemicolon}\ B\ {\isachardoublequoteclose}\isanewline
       
    70 %
       
    71 \isadelimproof
       
    72 %
       
    73 \endisadelimproof
       
    74 %
       
    75 \isatagproof
       
    76 \isacommand{by}\isamarkupfalse%
       
    77 \ {\isacharparenleft}auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}%
       
    78 \endisatagproof
       
    79 {\isafoldproof}%
       
    80 %
       
    81 \isadelimproof
       
    82 \isanewline
       
    83 %
       
    84 \endisadelimproof
       
    85 \isanewline
       
    86 \isacommand{lemma}\isamarkupfalse%
       
    87 \ seq{\isacharunderscore}assoc{\isacharcolon}\isanewline
       
    88 \ \ {\isachardoublequoteopen}{\isacharparenleft}A\ {\isacharsemicolon}{\isacharsemicolon}\ B{\isacharparenright}\ {\isacharsemicolon}{\isacharsemicolon}\ C\ {\isacharequal}\ A\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharparenleft}B\ {\isacharsemicolon}{\isacharsemicolon}\ C{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
    89 %
       
    90 \isadelimproof
       
    91 %
       
    92 \endisadelimproof
       
    93 %
       
    94 \isatagproof
       
    95 \isacommand{apply}\isamarkupfalse%
       
    96 {\isacharparenleft}auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}\isanewline
       
    97 \isacommand{apply}\isamarkupfalse%
       
    98 \ blast\isanewline
       
    99 \isacommand{by}\isamarkupfalse%
       
   100 \ {\isacharparenleft}metis\ append{\isacharunderscore}assoc{\isacharparenright}%
       
   101 \endisatagproof
       
   102 {\isafoldproof}%
       
   103 %
       
   104 \isadelimproof
       
   105 \isanewline
       
   106 %
       
   107 \endisadelimproof
       
   108 \isanewline
       
   109 \isacommand{lemma}\isamarkupfalse%
       
   110 \ star{\isacharunderscore}intro{\isadigit{1}}{\isacharbrackleft}rule{\isacharunderscore}format{\isacharbrackright}{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isasymin}\ lang{\isasymstar}\ {\isasymLongrightarrow}\ {\isasymforall}\ y{\isachardot}\ y\ {\isasymin}\ lang{\isasymstar}\ {\isasymlongrightarrow}\ x\ {\isacharat}\ y\ {\isasymin}\ lang{\isasymstar}{\isachardoublequoteclose}\isanewline
       
   111 %
       
   112 \isadelimproof
       
   113 %
       
   114 \endisadelimproof
       
   115 %
       
   116 \isatagproof
       
   117 \isacommand{by}\isamarkupfalse%
       
   118 \ {\isacharparenleft}erule\ Star{\isachardot}induct{\isacharcomma}\ auto{\isacharparenright}%
       
   119 \endisatagproof
       
   120 {\isafoldproof}%
       
   121 %
       
   122 \isadelimproof
       
   123 \isanewline
       
   124 %
       
   125 \endisadelimproof
       
   126 \isanewline
       
   127 \isacommand{lemma}\isamarkupfalse%
       
   128 \ star{\isacharunderscore}intro{\isadigit{2}}{\isacharcolon}\ {\isachardoublequoteopen}y\ {\isasymin}\ lang\ {\isasymLongrightarrow}\ y\ {\isasymin}\ lang{\isasymstar}{\isachardoublequoteclose}\isanewline
       
   129 %
       
   130 \isadelimproof
       
   131 %
       
   132 \endisadelimproof
       
   133 %
       
   134 \isatagproof
       
   135 \isacommand{by}\isamarkupfalse%
       
   136 \ {\isacharparenleft}drule\ step{\isacharbrackleft}of\ y\ lang\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}{\isacharbrackright}{\isacharcomma}\ auto\ simp{\isacharcolon}start{\isacharparenright}%
       
   137 \endisatagproof
       
   138 {\isafoldproof}%
       
   139 %
       
   140 \isadelimproof
       
   141 \isanewline
       
   142 %
       
   143 \endisadelimproof
       
   144 \isanewline
       
   145 \isacommand{lemma}\isamarkupfalse%
       
   146 \ star{\isacharunderscore}intro{\isadigit{3}}{\isacharbrackleft}rule{\isacharunderscore}format{\isacharbrackright}{\isacharcolon}\ \isanewline
       
   147 \ \ {\isachardoublequoteopen}x\ {\isasymin}\ lang{\isasymstar}\ {\isasymLongrightarrow}\ {\isasymforall}y\ {\isachardot}\ y\ {\isasymin}\ lang\ {\isasymlongrightarrow}\ x\ {\isacharat}\ y\ {\isasymin}\ lang{\isasymstar}{\isachardoublequoteclose}\isanewline
       
   148 %
       
   149 \isadelimproof
       
   150 %
       
   151 \endisadelimproof
       
   152 %
       
   153 \isatagproof
       
   154 \isacommand{by}\isamarkupfalse%
       
   155 \ {\isacharparenleft}erule\ Star{\isachardot}induct{\isacharcomma}\ auto\ intro{\isacharcolon}star{\isacharunderscore}intro{\isadigit{2}}{\isacharparenright}%
       
   156 \endisatagproof
       
   157 {\isafoldproof}%
       
   158 %
       
   159 \isadelimproof
       
   160 \isanewline
       
   161 %
       
   162 \endisadelimproof
       
   163 \isanewline
       
   164 \isacommand{lemma}\isamarkupfalse%
       
   165 \ star{\isacharunderscore}decom{\isacharcolon}\ \isanewline
       
   166 \ \ {\isachardoublequoteopen}{\isasymlbrakk}x\ {\isasymin}\ lang{\isasymstar}{\isacharsemicolon}\ x\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}{\isasymrbrakk}\ {\isasymLongrightarrow}{\isacharparenleft}{\isasymexists}\ a\ b{\isachardot}\ x\ {\isacharequal}\ a\ {\isacharat}\ b\ {\isasymand}\ a\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}\ {\isasymand}\ a\ {\isasymin}\ lang\ {\isasymand}\ b\ {\isasymin}\ lang{\isasymstar}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   167 %
       
   168 \isadelimproof
       
   169 %
       
   170 \endisadelimproof
       
   171 %
       
   172 \isatagproof
       
   173 \isacommand{by}\isamarkupfalse%
       
   174 \ {\isacharparenleft}induct\ x\ rule{\isacharcolon}\ Star{\isachardot}induct{\isacharcomma}\ simp{\isacharcomma}\ blast{\isacharparenright}%
       
   175 \endisatagproof
       
   176 {\isafoldproof}%
       
   177 %
       
   178 \isadelimproof
       
   179 \isanewline
       
   180 %
       
   181 \endisadelimproof
       
   182 \isanewline
       
   183 \isacommand{lemma}\isamarkupfalse%
       
   184 \ star{\isacharunderscore}decom{\isacharprime}{\isacharcolon}\ \isanewline
       
   185 \ \ {\isachardoublequoteopen}{\isasymlbrakk}x\ {\isasymin}\ lang{\isasymstar}{\isacharsemicolon}\ x\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}{\isasymrbrakk}\ {\isasymLongrightarrow}\ {\isasymexists}a\ b{\isachardot}\ x\ {\isacharequal}\ a\ {\isacharat}\ b\ {\isasymand}\ a\ {\isasymin}\ lang{\isasymstar}\ {\isasymand}\ b\ {\isasymin}\ lang{\isachardoublequoteclose}\isanewline
       
   186 %
       
   187 \isadelimproof
       
   188 %
       
   189 \endisadelimproof
       
   190 %
       
   191 \isatagproof
       
   192 \isacommand{apply}\isamarkupfalse%
       
   193 \ {\isacharparenleft}induct\ x\ rule{\isacharcolon}Star{\isachardot}induct{\isacharcomma}\ simp{\isacharparenright}\isanewline
       
   194 \isacommand{apply}\isamarkupfalse%
       
   195 \ {\isacharparenleft}case{\isacharunderscore}tac\ {\isachardoublequoteopen}s{\isadigit{2}}\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
   196 \isacommand{apply}\isamarkupfalse%
       
   197 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ rule{\isacharunderscore}tac\ x\ {\isacharequal}\ s{\isadigit{1}}\ \isakeyword{in}\ exI{\isacharcomma}\ simp\ add{\isacharcolon}start{\isacharparenright}\isanewline
       
   198 \isacommand{apply}\isamarkupfalse%
       
   199 \ {\isacharparenleft}simp{\isacharcomma}\ {\isacharparenleft}erule\ exE{\isacharbar}\ erule\ conjE{\isacharparenright}{\isacharplus}{\isacharparenright}\isanewline
       
   200 \isacommand{by}\isamarkupfalse%
       
   201 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}s{\isadigit{1}}\ {\isacharat}\ a{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ rule{\isacharunderscore}tac\ x\ {\isacharequal}\ b\ \isakeyword{in}\ exI{\isacharcomma}\ simp\ add{\isacharcolon}step{\isacharparenright}%
       
   202 \endisatagproof
       
   203 {\isafoldproof}%
       
   204 %
       
   205 \isadelimproof
       
   206 %
       
   207 \endisadelimproof
       
   208 %
       
   209 \begin{isamarkuptext}%
       
   210 Ardens lemma expressed at the level of language, rather than the level of regular expression.%
       
   211 \end{isamarkuptext}%
       
   212 \isamarkuptrue%
       
   213 \isacommand{theorem}\isamarkupfalse%
       
   214 \ ardens{\isacharunderscore}revised{\isacharcolon}\isanewline
       
   215 \ \ \isakeyword{assumes}\ nemp{\isacharcolon}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}\ {\isasymnotin}\ A{\isachardoublequoteclose}\isanewline
       
   216 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}{\isacharparenleft}X\ {\isacharequal}\ X\ {\isacharsemicolon}{\isacharsemicolon}\ A\ {\isasymunion}\ B{\isacharparenright}\ {\isasymlongleftrightarrow}\ {\isacharparenleft}X\ {\isacharequal}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   217 %
       
   218 \isadelimproof
       
   219 %
       
   220 \endisadelimproof
       
   221 %
       
   222 \isatagproof
       
   223 \isacommand{proof}\isamarkupfalse%
       
   224 \isanewline
       
   225 \ \ \isacommand{assume}\isamarkupfalse%
       
   226 \ eq{\isacharcolon}\ {\isachardoublequoteopen}X\ {\isacharequal}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isachardoublequoteclose}\isanewline
       
   227 \ \ \isacommand{have}\isamarkupfalse%
       
   228 \ {\isachardoublequoteopen}A{\isasymstar}\ {\isacharequal}\ \ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}\ {\isasymunion}\ A{\isasymstar}\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isachardoublequoteclose}\ \isanewline
       
   229 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
   230 \ {\isacharparenleft}auto\ simp{\isacharcolon}Seq{\isacharunderscore}def\ star{\isacharunderscore}intro{\isadigit{3}}\ star{\isacharunderscore}decom{\isacharprime}{\isacharparenright}\ \ \isanewline
       
   231 \ \ \isacommand{then}\isamarkupfalse%
       
   232 \ \isacommand{have}\isamarkupfalse%
       
   233 \ {\isachardoublequoteopen}B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}\ {\isacharequal}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharparenleft}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}\ {\isasymunion}\ A{\isasymstar}\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
   234 \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
   235 \ Seq{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
   236 \ simp\isanewline
       
   237 \ \ \isacommand{also}\isamarkupfalse%
       
   238 \ \isacommand{have}\isamarkupfalse%
       
   239 \ {\isachardoublequoteopen}{\isasymdots}\ {\isacharequal}\ B\ {\isasymunion}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharparenleft}A{\isasymstar}\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isacharparenright}{\isachardoublequoteclose}\ \ \isanewline
       
   240 \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
   241 \ Seq{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
   242 \ auto\isanewline
       
   243 \ \ \isacommand{also}\isamarkupfalse%
       
   244 \ \isacommand{have}\isamarkupfalse%
       
   245 \ {\isachardoublequoteopen}{\isasymdots}\ {\isacharequal}\ B\ {\isasymunion}\ {\isacharparenleft}B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isacharparenright}\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isachardoublequoteclose}\ \isanewline
       
   246 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
   247 \ {\isacharparenleft}simp\ only{\isacharcolon}seq{\isacharunderscore}assoc{\isacharparenright}\isanewline
       
   248 \ \ \isacommand{finally}\isamarkupfalse%
       
   249 \ \isacommand{show}\isamarkupfalse%
       
   250 \ {\isachardoublequoteopen}X\ {\isacharequal}\ X\ {\isacharsemicolon}{\isacharsemicolon}\ A\ {\isasymunion}\ B{\isachardoublequoteclose}\ \isanewline
       
   251 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
   252 \ eq\ \isacommand{by}\isamarkupfalse%
       
   253 \ blast\ \isanewline
       
   254 \isacommand{next}\isamarkupfalse%
       
   255 \isanewline
       
   256 \ \ \isacommand{assume}\isamarkupfalse%
       
   257 \ eq{\isacharprime}{\isacharcolon}\ {\isachardoublequoteopen}X\ {\isacharequal}\ X\ {\isacharsemicolon}{\isacharsemicolon}\ A\ {\isasymunion}\ B{\isachardoublequoteclose}\isanewline
       
   258 \ \ \isacommand{hence}\isamarkupfalse%
       
   259 \ c{\isadigit{1}}{\isacharprime}{\isacharcolon}\ {\isachardoublequoteopen}{\isasymAnd}\ x{\isachardot}\ x\ {\isasymin}\ B\ {\isasymLongrightarrow}\ x\ {\isasymin}\ X{\isachardoublequoteclose}\ \isanewline
       
   260 \ \ \ \ \isakeyword{and}\ c{\isadigit{2}}{\isacharprime}{\isacharcolon}\ {\isachardoublequoteopen}{\isasymAnd}\ x\ y{\isachardot}\ {\isasymlbrakk}x\ {\isasymin}\ X{\isacharsemicolon}\ y\ {\isasymin}\ A{\isasymrbrakk}\ {\isasymLongrightarrow}\ x\ {\isacharat}\ y\ {\isasymin}\ X{\isachardoublequoteclose}\ \isanewline
       
   261 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
   262 \ Seq{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
   263 \ auto\isanewline
       
   264 \ \ \isacommand{show}\isamarkupfalse%
       
   265 \ {\isachardoublequoteopen}X\ {\isacharequal}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isachardoublequoteclose}\ \isanewline
       
   266 \ \ \isacommand{proof}\isamarkupfalse%
       
   267 \isanewline
       
   268 \ \ \ \ \isacommand{show}\isamarkupfalse%
       
   269 \ {\isachardoublequoteopen}B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}\ {\isasymsubseteq}\ X{\isachardoublequoteclose}\isanewline
       
   270 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
   271 {\isacharminus}\isanewline
       
   272 \ \ \ \ \ \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
   273 \ \isacommand{fix}\isamarkupfalse%
       
   274 \ x\ y\isanewline
       
   275 \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
   276 \ {\isachardoublequoteopen}{\isasymlbrakk}y\ {\isasymin}\ A{\isasymstar}{\isacharsemicolon}\ x\ {\isasymin}\ X{\isasymrbrakk}\ {\isasymLongrightarrow}\ x\ {\isacharat}\ y\ {\isasymin}\ X\ {\isachardoublequoteclose}\isanewline
       
   277 \ \ \ \ \ \ \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
   278 \ {\isacharparenleft}induct\ arbitrary{\isacharcolon}x\ rule{\isacharcolon}Star{\isachardot}induct{\isacharcomma}\ simp{\isacharparenright}\isanewline
       
   279 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
   280 \ {\isacharparenleft}auto\ simp\ only{\isacharcolon}append{\isacharunderscore}assoc{\isacharbrackleft}THEN\ sym{\isacharbrackright}\ dest{\isacharcolon}c{\isadigit{2}}{\isacharprime}{\isacharparenright}\isanewline
       
   281 \ \ \ \ \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
   282 \ \isacommand{thus}\isamarkupfalse%
       
   283 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
   284 \ c{\isadigit{1}}{\isacharprime}\ \isacommand{by}\isamarkupfalse%
       
   285 \ {\isacharparenleft}auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}\ \isanewline
       
   286 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
   287 \isanewline
       
   288 \ \ \isacommand{next}\isamarkupfalse%
       
   289 \isanewline
       
   290 \ \ \ \ \isacommand{show}\isamarkupfalse%
       
   291 \ {\isachardoublequoteopen}X\ {\isasymsubseteq}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isachardoublequoteclose}\isanewline
       
   292 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
   293 {\isacharminus}\isanewline
       
   294 \ \ \ \ \ \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
   295 \ \isacommand{fix}\isamarkupfalse%
       
   296 \ x\ \isanewline
       
   297 \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
   298 \ {\isachardoublequoteopen}x\ {\isasymin}\ X\ {\isasymLongrightarrow}\ x\ {\isasymin}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isachardoublequoteclose}\isanewline
       
   299 \ \ \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
   300 \ {\isacharparenleft}induct\ x\ taking{\isacharcolon}length\ rule{\isacharcolon}measure{\isacharunderscore}induct{\isacharparenright}\isanewline
       
   301 \ \ \ \ \ \ \ \ \ \ \isacommand{fix}\isamarkupfalse%
       
   302 \ z\isanewline
       
   303 \ \ \ \ \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
   304 \ hyps{\isacharcolon}\ \isanewline
       
   305 \ \ \ \ \ \ \ \ \ \ \ \ {\isachardoublequoteopen}{\isasymforall}y{\isachardot}\ length\ y\ {\isacharless}\ length\ z\ {\isasymlongrightarrow}\ y\ {\isasymin}\ X\ {\isasymlongrightarrow}\ y\ {\isasymin}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isachardoublequoteclose}\ \isanewline
       
   306 \ \ \ \ \ \ \ \ \ \ \ \ \isakeyword{and}\ z{\isacharunderscore}in{\isacharcolon}\ {\isachardoublequoteopen}z\ {\isasymin}\ X{\isachardoublequoteclose}\isanewline
       
   307 \ \ \ \ \ \ \ \ \ \ \isacommand{show}\isamarkupfalse%
       
   308 \ {\isachardoublequoteopen}z\ {\isasymin}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isachardoublequoteclose}\isanewline
       
   309 \ \ \ \ \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
   310 \ {\isacharparenleft}cases\ {\isachardoublequoteopen}z\ {\isasymin}\ B{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
   311 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{case}\isamarkupfalse%
       
   312 \ True\ \isacommand{thus}\isamarkupfalse%
       
   313 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
   314 \ {\isacharparenleft}auto\ simp{\isacharcolon}Seq{\isacharunderscore}def\ start{\isacharparenright}\isanewline
       
   315 \ \ \ \ \ \ \ \ \ \ \isacommand{next}\isamarkupfalse%
       
   316 \isanewline
       
   317 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{case}\isamarkupfalse%
       
   318 \ False\ \isacommand{hence}\isamarkupfalse%
       
   319 \ {\isachardoublequoteopen}z\ {\isasymin}\ X\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
   320 \ eq{\isacharprime}\ z{\isacharunderscore}in\ \isacommand{by}\isamarkupfalse%
       
   321 \ auto\isanewline
       
   322 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{then}\isamarkupfalse%
       
   323 \ \isacommand{obtain}\isamarkupfalse%
       
   324 \ za\ zb\ \isakeyword{where}\ za{\isacharunderscore}in{\isacharcolon}\ {\isachardoublequoteopen}za\ {\isasymin}\ X{\isachardoublequoteclose}\ \isanewline
       
   325 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isakeyword{and}\ zab{\isacharcolon}\ {\isachardoublequoteopen}z\ {\isacharequal}\ za\ {\isacharat}\ zb\ {\isasymand}\ zb\ {\isasymin}\ A{\isachardoublequoteclose}\ \isakeyword{and}\ zbne{\isacharcolon}\ {\isachardoublequoteopen}zb\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\ \isanewline
       
   326 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
   327 \ nemp\ \isacommand{unfolding}\isamarkupfalse%
       
   328 \ Seq{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
   329 \ blast\isanewline
       
   330 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{from}\isamarkupfalse%
       
   331 \ zbne\ zab\ \isacommand{have}\isamarkupfalse%
       
   332 \ {\isachardoublequoteopen}length\ za\ {\isacharless}\ length\ z{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
   333 \ auto\isanewline
       
   334 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
   335 \ za{\isacharunderscore}in\ hyps\ \isacommand{have}\isamarkupfalse%
       
   336 \ {\isachardoublequoteopen}za\ {\isasymin}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
   337 \ blast\isanewline
       
   338 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
       
   339 \ {\isachardoublequoteopen}za\ {\isacharat}\ zb\ {\isasymin}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
   340 \ zab\ \isanewline
       
   341 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
   342 \ {\isacharparenleft}clarsimp\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharcomma}\ blast\ dest{\isacharcolon}star{\isacharunderscore}intro{\isadigit{3}}{\isacharparenright}\isanewline
       
   343 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
   344 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
   345 \ zab\ \isacommand{by}\isamarkupfalse%
       
   346 \ simp\ \ \ \ \ \ \ \isanewline
       
   347 \ \ \ \ \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
   348 \isanewline
       
   349 \ \ \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
   350 \ \isanewline
       
   351 \ \ \ \ \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
   352 \ \isacommand{thus}\isamarkupfalse%
       
   353 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
   354 \ blast\isanewline
       
   355 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
   356 \isanewline
       
   357 \ \ \isacommand{qed}\isamarkupfalse%
       
   358 \isanewline
       
   359 \isacommand{qed}\isamarkupfalse%
       
   360 %
       
   361 \endisatagproof
       
   362 {\isafoldproof}%
       
   363 %
       
   364 \isadelimproof
       
   365 %
       
   366 \endisadelimproof
       
   367 %
       
   368 \begin{isamarkuptext}%
       
   369 The syntax of regular expressions is defined by the datatype \isa{rexp}.%
       
   370 \end{isamarkuptext}%
       
   371 \isamarkuptrue%
       
   372 \isacommand{datatype}\isamarkupfalse%
       
   373 \ rexp\ {\isacharequal}\isanewline
       
   374 \ \ NULL\isanewline
       
   375 {\isacharbar}\ EMPTY\isanewline
       
   376 {\isacharbar}\ CHAR\ char\isanewline
       
   377 {\isacharbar}\ SEQ\ rexp\ rexp\isanewline
       
   378 {\isacharbar}\ ALT\ rexp\ rexp\isanewline
       
   379 {\isacharbar}\ STAR\ rexp%
       
   380 \begin{isamarkuptext}%
       
   381 The following \isa{L} is an overloaded operator, where \isa{L{\isacharparenleft}x{\isacharparenright}} evaluates to 
       
   382   the language represented by the syntactic object \isa{x}.%
       
   383 \end{isamarkuptext}%
       
   384 \isamarkuptrue%
       
   385 \isacommand{consts}\isamarkupfalse%
       
   386 \ L{\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ {\isasymRightarrow}\ string\ set{\isachardoublequoteclose}%
       
   387 \begin{isamarkuptext}%
       
   388 The \isa{L{\isacharparenleft}rexp{\isacharparenright}} for regular expression \isa{rexp} is defined by the 
       
   389   following overloading function \isa{L{\isacharunderscore}rexp}.%
       
   390 \end{isamarkuptext}%
       
   391 \isamarkuptrue%
       
   392 \isacommand{overloading}\isamarkupfalse%
       
   393 \ L{\isacharunderscore}rexp\ {\isasymequiv}\ {\isachardoublequoteopen}L{\isacharcolon}{\isacharcolon}\ \ rexp\ {\isasymRightarrow}\ string\ set{\isachardoublequoteclose}\isanewline
       
   394 \isakeyword{begin}\isanewline
       
   395 \isacommand{fun}\isamarkupfalse%
       
   396 \isanewline
       
   397 \ \ L{\isacharunderscore}rexp\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}rexp\ {\isasymRightarrow}\ string\ set{\isachardoublequoteclose}\isanewline
       
   398 \isakeyword{where}\isanewline
       
   399 \ \ \ \ {\isachardoublequoteopen}L{\isacharunderscore}rexp\ {\isacharparenleft}NULL{\isacharparenright}\ {\isacharequal}\ {\isacharbraceleft}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
   400 \ \ {\isacharbar}\ {\isachardoublequoteopen}L{\isacharunderscore}rexp\ {\isacharparenleft}EMPTY{\isacharparenright}\ {\isacharequal}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
   401 \ \ {\isacharbar}\ {\isachardoublequoteopen}L{\isacharunderscore}rexp\ {\isacharparenleft}CHAR\ c{\isacharparenright}\ {\isacharequal}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
   402 \ \ {\isacharbar}\ {\isachardoublequoteopen}L{\isacharunderscore}rexp\ {\isacharparenleft}SEQ\ r{\isadigit{1}}\ r{\isadigit{2}}{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}L{\isacharunderscore}rexp\ r{\isadigit{1}}{\isacharparenright}\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharparenleft}L{\isacharunderscore}rexp\ r{\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   403 \ \ {\isacharbar}\ {\isachardoublequoteopen}L{\isacharunderscore}rexp\ {\isacharparenleft}ALT\ r{\isadigit{1}}\ r{\isadigit{2}}{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}L{\isacharunderscore}rexp\ r{\isadigit{1}}{\isacharparenright}\ {\isasymunion}\ {\isacharparenleft}L{\isacharunderscore}rexp\ r{\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   404 \ \ {\isacharbar}\ {\isachardoublequoteopen}L{\isacharunderscore}rexp\ {\isacharparenleft}STAR\ r{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}L{\isacharunderscore}rexp\ r{\isacharparenright}{\isasymstar}{\isachardoublequoteclose}\isanewline
       
   405 \isacommand{end}\isamarkupfalse%
       
   406 %
       
   407 \begin{isamarkuptext}%
       
   408 To obtain equational system out of finite set of equivalent classes, a fold operation
       
   409   on finite set \isa{folds} is defined. The use of \isa{SOME} makes \isa{fold}
       
   410   more robust than the \isa{fold} in Isabelle library. The expression \isa{folds\ f}
       
   411   makes sense when \isa{f} is not \isa{associative} and \isa{commutitive},
       
   412   while \isa{fold\ f} does not.%
       
   413 \end{isamarkuptext}%
       
   414 \isamarkuptrue%
       
   415 \isacommand{definition}\isamarkupfalse%
       
   416 \ \isanewline
       
   417 \ \ folds\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}b\ {\isasymRightarrow}\ {\isacharprime}b{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}b\ {\isasymRightarrow}\ {\isacharprime}a\ set\ {\isasymRightarrow}\ {\isacharprime}b{\isachardoublequoteclose}\isanewline
       
   418 \isakeyword{where}\isanewline
       
   419 \ \ {\isachardoublequoteopen}folds\ f\ z\ S\ {\isasymequiv}\ SOME\ x{\isachardot}\ fold{\isacharunderscore}graph\ f\ z\ S\ x{\isachardoublequoteclose}%
       
   420 \begin{isamarkuptext}%
       
   421 The following lemma assures that the arbitrary choice made by the \isa{SOME} in \isa{folds}
       
   422   does not affect the \isa{L}-value of the resultant regular expression.%
       
   423 \end{isamarkuptext}%
       
   424 \isamarkuptrue%
       
   425 \isacommand{lemma}\isamarkupfalse%
       
   426 \ folds{\isacharunderscore}alt{\isacharunderscore}simp\ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\isanewline
       
   427 \ \ {\isachardoublequoteopen}finite\ rs\ {\isasymLongrightarrow}\ L\ {\isacharparenleft}folds\ ALT\ NULL\ rs{\isacharparenright}\ {\isacharequal}\ {\isasymUnion}\ {\isacharparenleft}L\ {\isacharbackquote}\ rs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   428 %
       
   429 \isadelimproof
       
   430 %
       
   431 \endisadelimproof
       
   432 %
       
   433 \isatagproof
       
   434 \isacommand{apply}\isamarkupfalse%
       
   435 \ {\isacharparenleft}rule\ set{\isacharunderscore}ext{\isacharcomma}\ simp\ add{\isacharcolon}folds{\isacharunderscore}def{\isacharparenright}\isanewline
       
   436 \isacommand{apply}\isamarkupfalse%
       
   437 \ {\isacharparenleft}rule\ someI{\isadigit{2}}{\isacharunderscore}ex{\isacharcomma}\ erule\ finite{\isacharunderscore}imp{\isacharunderscore}fold{\isacharunderscore}graph{\isacharparenright}\isanewline
       
   438 \isacommand{by}\isamarkupfalse%
       
   439 \ {\isacharparenleft}erule\ fold{\isacharunderscore}graph{\isachardot}induct{\isacharcomma}\ auto{\isacharparenright}%
       
   440 \endisatagproof
       
   441 {\isafoldproof}%
       
   442 %
       
   443 \isadelimproof
       
   444 \isanewline
       
   445 %
       
   446 \endisadelimproof
       
   447 \isanewline
       
   448 \isanewline
       
   449 \isacommand{lemma}\isamarkupfalse%
       
   450 \ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\isanewline
       
   451 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}{\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}\ {\isasymin}\ {\isacharbraceleft}{\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}{\isachardot}\ P\ x\ y{\isacharbraceright}\ {\isasymlongleftrightarrow}\ P\ x\ y{\isachardoublequoteclose}\isanewline
       
   452 %
       
   453 \isadelimproof
       
   454 %
       
   455 \endisadelimproof
       
   456 %
       
   457 \isatagproof
       
   458 \isacommand{by}\isamarkupfalse%
       
   459 \ simp%
       
   460 \endisatagproof
       
   461 {\isafoldproof}%
       
   462 %
       
   463 \isadelimproof
       
   464 %
       
   465 \endisadelimproof
       
   466 %
       
   467 \begin{isamarkuptext}%
       
   468 \isa{{\isasymapprox}L} is an equivalent class defined by language \isa{Lang}.%
       
   469 \end{isamarkuptext}%
       
   470 \isamarkuptrue%
       
   471 \isacommand{definition}\isamarkupfalse%
       
   472 \isanewline
       
   473 \ \ str{\isacharunderscore}eq{\isacharunderscore}rel\ {\isacharparenleft}{\isachardoublequoteopen}{\isasymapprox}{\isacharunderscore}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
   474 \isakeyword{where}\isanewline
       
   475 \ \ {\isachardoublequoteopen}{\isasymapprox}Lang\ {\isasymequiv}\ {\isacharbraceleft}{\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}{\isachardot}\ \ {\isacharparenleft}{\isasymforall}z{\isachardot}\ x\ {\isacharat}\ z\ {\isasymin}\ Lang\ {\isasymlongleftrightarrow}\ y\ {\isacharat}\ z\ {\isasymin}\ Lang{\isacharparenright}{\isacharbraceright}{\isachardoublequoteclose}%
       
   476 \begin{isamarkuptext}%
       
   477 Among equivlant clases of \isa{{\isasymapprox}Lang}, the set \isa{finals{\isacharparenleft}Lang{\isacharparenright}} singles out 
       
   478   those which contains strings from \isa{Lang}.%
       
   479 \end{isamarkuptext}%
       
   480 \isamarkuptrue%
       
   481 \isacommand{definition}\isamarkupfalse%
       
   482 \ \isanewline
       
   483 \ \ \ {\isachardoublequoteopen}finals\ Lang\ {\isasymequiv}\ {\isacharbraceleft}{\isasymapprox}Lang\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x{\isacharbraceright}\ {\isacharbar}\ x\ {\isachardot}\ x\ {\isasymin}\ Lang{\isacharbraceright}{\isachardoublequoteclose}%
       
   484 \begin{isamarkuptext}%
       
   485 The following lemma show the relationshipt between \isa{finals{\isacharparenleft}Lang{\isacharparenright}} and \isa{Lang}.%
       
   486 \end{isamarkuptext}%
       
   487 \isamarkuptrue%
       
   488 \isacommand{lemma}\isamarkupfalse%
       
   489 \ lang{\isacharunderscore}is{\isacharunderscore}union{\isacharunderscore}of{\isacharunderscore}finals{\isacharcolon}\ \isanewline
       
   490 \ \ {\isachardoublequoteopen}Lang\ {\isacharequal}\ {\isasymUnion}\ finals{\isacharparenleft}Lang{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   491 %
       
   492 \isadelimproof
       
   493 %
       
   494 \endisadelimproof
       
   495 %
       
   496 \isatagproof
       
   497 \isacommand{proof}\isamarkupfalse%
       
   498 \ \isanewline
       
   499 \ \ \isacommand{show}\isamarkupfalse%
       
   500 \ {\isachardoublequoteopen}Lang\ {\isasymsubseteq}\ {\isasymUnion}\ {\isacharparenleft}finals\ Lang{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   501 \ \ \isacommand{proof}\isamarkupfalse%
       
   502 \isanewline
       
   503 \ \ \ \ \isacommand{fix}\isamarkupfalse%
       
   504 \ x\isanewline
       
   505 \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
   506 \ {\isachardoublequoteopen}x\ {\isasymin}\ Lang{\isachardoublequoteclose}\ \ \ \isanewline
       
   507 \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
   508 \ {\isachardoublequoteopen}x\ {\isasymin}\ {\isasymUnion}\ {\isacharparenleft}finals\ Lang{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   509 \ \ \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
   510 \ {\isacharparenleft}simp\ add{\isacharcolon}finals{\isacharunderscore}def{\isacharcomma}\ rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x{\isacharbraceright}{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharparenright}\isanewline
       
   511 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
   512 \ {\isacharparenleft}auto\ simp{\isacharcolon}Image{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\ \ \ \ \isanewline
       
   513 \ \ \isacommand{qed}\isamarkupfalse%
       
   514 \isanewline
       
   515 \isacommand{next}\isamarkupfalse%
       
   516 \isanewline
       
   517 \ \ \isacommand{show}\isamarkupfalse%
       
   518 \ {\isachardoublequoteopen}{\isasymUnion}\ {\isacharparenleft}finals\ Lang{\isacharparenright}\ {\isasymsubseteq}\ Lang{\isachardoublequoteclose}\isanewline
       
   519 \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
   520 \ {\isacharparenleft}clarsimp\ simp{\isacharcolon}finals{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
   521 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
   522 \ {\isacharparenleft}drule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\ \isakeyword{in}\ spec{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
   523 \isacommand{qed}\isamarkupfalse%
       
   524 %
       
   525 \endisatagproof
       
   526 {\isafoldproof}%
       
   527 %
       
   528 \isadelimproof
       
   529 %
       
   530 \endisadelimproof
       
   531 %
       
   532 \isamarkupsection{Direction \isa{finite\ partition\ {\isasymRightarrow}\ regular\ language}%
       
   533 }
       
   534 \isamarkuptrue%
       
   535 %
       
   536 \begin{isamarkuptext}%
       
   537 The relationship between equivalent classes can be described by an
       
   538   equational system.
       
   539   For example, in equational system \eqref{example_eqns},  $X_0, X_1$ are equivalent 
       
   540   classes. The first equation says every string in $X_0$ is obtained either by
       
   541   appending one $b$ to a string in $X_0$ or by appending one $a$ to a string in
       
   542   $X_1$ or just be an empty string (represented by the regular expression $\lambda$). Similary,
       
   543   the second equation tells how the strings inside $X_1$ are composed.
       
   544   \begin{equation}\label{example_eqns}
       
   545     \begin{aligned}
       
   546       X_0 & = X_0 b + X_1 a + \lambda \\
       
   547       X_1 & = X_0 a + X_1 b
       
   548     \end{aligned}
       
   549   \end{equation}
       
   550   The summands on the right hand side is represented by the following data type
       
   551   \isa{rhs{\isacharunderscore}item}, mnemonic for 'right hand side item'.
       
   552   Generally, there are two kinds of right hand side items, one kind corresponds to
       
   553   pure regular expressions, like the $\lambda$ in \eqref{example_eqns}, the other kind corresponds to
       
   554   transitions from one one equivalent class to another, like the $X_0 b, X_1 a$ etc.%
       
   555 \end{isamarkuptext}%
       
   556 \isamarkuptrue%
       
   557 \isacommand{datatype}\isamarkupfalse%
       
   558 \ rhs{\isacharunderscore}item\ {\isacharequal}\ \isanewline
       
   559 \ \ \ Lam\ {\isachardoublequoteopen}rexp{\isachardoublequoteclose}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isanewline
       
   560 \ {\isacharbar}\ Trn\ {\isachardoublequoteopen}{\isacharparenleft}string\ set{\isacharparenright}{\isachardoublequoteclose}\ {\isachardoublequoteopen}rexp{\isachardoublequoteclose}%
       
   561 \begin{isamarkuptext}%
       
   562 In this formalization, pure regular expressions like $\lambda$ is 
       
   563   repsented by \isa{Lam{\isacharparenleft}EMPTY{\isacharparenright}}, while transitions like $X_0 a$ is represented by $Trn~X_0~(CHAR~a)$.%
       
   564 \end{isamarkuptext}%
       
   565 \isamarkuptrue%
       
   566 %
       
   567 \begin{isamarkuptext}%
       
   568 The functions \isa{the{\isacharunderscore}r} and \isa{the{\isacharunderscore}Trn} are used to extract
       
   569   subcomponents from right hand side items.%
       
   570 \end{isamarkuptext}%
       
   571 \isamarkuptrue%
       
   572 \isacommand{fun}\isamarkupfalse%
       
   573 \ the{\isacharunderscore}r\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}rhs{\isacharunderscore}item\ {\isasymRightarrow}\ rexp{\isachardoublequoteclose}\isanewline
       
   574 \isakeyword{where}\ {\isachardoublequoteopen}the{\isacharunderscore}r\ {\isacharparenleft}Lam\ r{\isacharparenright}\ {\isacharequal}\ r{\isachardoublequoteclose}\isanewline
       
   575 \isanewline
       
   576 \isacommand{fun}\isamarkupfalse%
       
   577 \ the{\isacharunderscore}Trn{\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}rhs{\isacharunderscore}item\ {\isasymRightarrow}\ {\isacharparenleft}string\ set\ {\isasymtimes}\ rexp{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   578 \isakeyword{where}\ {\isachardoublequoteopen}the{\isacharunderscore}Trn\ {\isacharparenleft}Trn\ Y\ r{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}Y{\isacharcomma}\ r{\isacharparenright}{\isachardoublequoteclose}%
       
   579 \begin{isamarkuptext}%
       
   580 Every right hand side item \isa{itm} defines a string set given 
       
   581   \isa{L{\isacharparenleft}itm{\isacharparenright}}, defined as:%
       
   582 \end{isamarkuptext}%
       
   583 \isamarkuptrue%
       
   584 \isacommand{overloading}\isamarkupfalse%
       
   585 \ L{\isacharunderscore}rhs{\isacharunderscore}e\ {\isasymequiv}\ {\isachardoublequoteopen}L{\isacharcolon}{\isacharcolon}\ rhs{\isacharunderscore}item\ {\isasymRightarrow}\ string\ set{\isachardoublequoteclose}\isanewline
       
   586 \isakeyword{begin}\isanewline
       
   587 \ \ \isacommand{fun}\isamarkupfalse%
       
   588 \ L{\isacharunderscore}rhs{\isacharunderscore}e{\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}rhs{\isacharunderscore}item\ {\isasymRightarrow}\ string\ set{\isachardoublequoteclose}\isanewline
       
   589 \ \ \isakeyword{where}\isanewline
       
   590 \ \ \ \ \ {\isachardoublequoteopen}L{\isacharunderscore}rhs{\isacharunderscore}e\ {\isacharparenleft}Lam\ r{\isacharparenright}\ {\isacharequal}\ L\ r{\isachardoublequoteclose}\ {\isacharbar}\isanewline
       
   591 \ \ \ \ \ {\isachardoublequoteopen}L{\isacharunderscore}rhs{\isacharunderscore}e\ {\isacharparenleft}Trn\ X\ r{\isacharparenright}\ {\isacharequal}\ X\ {\isacharsemicolon}{\isacharsemicolon}\ L\ r{\isachardoublequoteclose}\isanewline
       
   592 \isacommand{end}\isamarkupfalse%
       
   593 %
       
   594 \begin{isamarkuptext}%
       
   595 The right hand side of every equation is represented by a set of
       
   596   items. The string set defined by such a set \isa{itms} is given
       
   597   by \isa{L{\isacharparenleft}itms{\isacharparenright}}, defined as:%
       
   598 \end{isamarkuptext}%
       
   599 \isamarkuptrue%
       
   600 \isacommand{overloading}\isamarkupfalse%
       
   601 \ L{\isacharunderscore}rhs\ {\isasymequiv}\ {\isachardoublequoteopen}L{\isacharcolon}{\isacharcolon}\ rhs{\isacharunderscore}item\ set\ {\isasymRightarrow}\ string\ set{\isachardoublequoteclose}\isanewline
       
   602 \isakeyword{begin}\isanewline
       
   603 \ \ \ \isacommand{fun}\isamarkupfalse%
       
   604 \ L{\isacharunderscore}rhs{\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}rhs{\isacharunderscore}item\ set\ {\isasymRightarrow}\ string\ set{\isachardoublequoteclose}\isanewline
       
   605 \ \ \ \isakeyword{where}\ {\isachardoublequoteopen}L{\isacharunderscore}rhs\ rhs\ {\isacharequal}\ {\isasymUnion}\ {\isacharparenleft}L\ {\isacharbackquote}\ rhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   606 \isacommand{end}\isamarkupfalse%
       
   607 %
       
   608 \begin{isamarkuptext}%
       
   609 Given a set of equivalent classses \isa{CS} and one equivalent class \isa{X} among
       
   610   \isa{CS}, the term \isa{init{\isacharunderscore}rhs\ CS\ X} is used to extract the right hand side of
       
   611   the equation describing the formation of \isa{X}. The definition of \isa{init{\isacharunderscore}rhs}
       
   612   is:%
       
   613 \end{isamarkuptext}%
       
   614 \isamarkuptrue%
       
   615 \isacommand{definition}\isamarkupfalse%
       
   616 \isanewline
       
   617 \ \ {\isachardoublequoteopen}init{\isacharunderscore}rhs\ CS\ X\ {\isasymequiv}\ \ \isanewline
       
   618 \ \ \ \ \ \ if\ {\isacharparenleft}{\isacharbrackleft}{\isacharbrackright}\ {\isasymin}\ X{\isacharparenright}\ then\ \isanewline
       
   619 \ \ \ \ \ \ \ \ \ \ {\isacharbraceleft}Lam{\isacharparenleft}EMPTY{\isacharparenright}{\isacharbraceright}\ {\isasymunion}\ {\isacharbraceleft}Trn\ Y\ {\isacharparenleft}CHAR\ c{\isacharparenright}\ {\isacharbar}\ Y\ c{\isachardot}\ Y\ {\isasymin}\ CS\ {\isasymand}\ Y\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}\ {\isasymsubseteq}\ X{\isacharbraceright}\isanewline
       
   620 \ \ \ \ \ \ else\ \isanewline
       
   621 \ \ \ \ \ \ \ \ \ \ {\isacharbraceleft}Trn\ Y\ {\isacharparenleft}CHAR\ c{\isacharparenright}{\isacharbar}\ Y\ c{\isachardot}\ Y\ {\isasymin}\ CS\ {\isasymand}\ Y\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}\ {\isasymsubseteq}\ X{\isacharbraceright}{\isachardoublequoteclose}%
       
   622 \begin{isamarkuptext}%
       
   623 In the definition of \isa{init{\isacharunderscore}rhs}, the term 
       
   624   \isa{{\isacharbraceleft}Trn\ Y\ {\isacharparenleft}CHAR\ c{\isacharparenright}{\isacharbar}\ Y\ c{\isachardot}\ Y\ {\isasymin}\ CS\ {\isasymand}\ Y\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}\ {\isasymsubseteq}\ X{\isacharbraceright}} appearing on both branches
       
   625   describes the formation of strings in \isa{X} out of transitions, while 
       
   626   the term \isa{{\isacharbraceleft}Lam{\isacharparenleft}EMPTY{\isacharparenright}{\isacharbraceright}} describes the empty string which is intrinsically contained in
       
   627   \isa{X} rather than by transition. This \isa{{\isacharbraceleft}Lam{\isacharparenleft}EMPTY{\isacharparenright}{\isacharbraceright}} corresponds to 
       
   628   the $\lambda$ in \eqref{example_eqns}.
       
   629 
       
   630   With the help of \isa{init{\isacharunderscore}rhs}, the equitional system descrbing the formation of every
       
   631   equivalent class inside \isa{CS} is given by the following \isa{eqs{\isacharparenleft}CS{\isacharparenright}}.%
       
   632 \end{isamarkuptext}%
       
   633 \isamarkuptrue%
       
   634 \isacommand{definition}\isamarkupfalse%
       
   635 \ {\isachardoublequoteopen}eqs\ CS\ {\isasymequiv}\ {\isacharbraceleft}{\isacharparenleft}X{\isacharcomma}\ init{\isacharunderscore}rhs\ CS\ X{\isacharparenright}\ {\isacharbar}\ X{\isachardot}\ \ X\ {\isasymin}\ CS{\isacharbraceright}{\isachardoublequoteclose}%
       
   636 \begin{isamarkuptext}%
       
   637 The following \isa{items{\isacharunderscore}of\ rhs\ X} returns all \isa{X}-items in \isa{rhs}.%
       
   638 \end{isamarkuptext}%
       
   639 \isamarkuptrue%
       
   640 \isacommand{definition}\isamarkupfalse%
       
   641 \isanewline
       
   642 \ \ {\isachardoublequoteopen}items{\isacharunderscore}of\ rhs\ X\ {\isasymequiv}\ {\isacharbraceleft}Trn\ X\ r\ {\isacharbar}\ r{\isachardot}\ {\isacharparenleft}Trn\ X\ r{\isacharparenright}\ {\isasymin}\ rhs{\isacharbraceright}{\isachardoublequoteclose}%
       
   643 \begin{isamarkuptext}%
       
   644 The following \isa{rexp{\isacharunderscore}of\ rhs\ X} combines all regular expressions in \isa{X}-items
       
   645   using \isa{ALT} to form a single regular expression. 
       
   646   It will be used later to implement \isa{arden{\isacharunderscore}variate} and \isa{rhs{\isacharunderscore}subst}.%
       
   647 \end{isamarkuptext}%
       
   648 \isamarkuptrue%
       
   649 \isacommand{definition}\isamarkupfalse%
       
   650 \ \isanewline
       
   651 \ \ {\isachardoublequoteopen}rexp{\isacharunderscore}of\ rhs\ X\ {\isasymequiv}\ folds\ ALT\ NULL\ {\isacharparenleft}{\isacharparenleft}snd\ o\ the{\isacharunderscore}Trn{\isacharparenright}\ {\isacharbackquote}\ items{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}%
       
   652 \begin{isamarkuptext}%
       
   653 The following \isa{lam{\isacharunderscore}of\ rhs} returns all pure regular expression items in \isa{rhs}.%
       
   654 \end{isamarkuptext}%
       
   655 \isamarkuptrue%
       
   656 \isacommand{definition}\isamarkupfalse%
       
   657 \isanewline
       
   658 \ \ {\isachardoublequoteopen}lam{\isacharunderscore}of\ rhs\ {\isasymequiv}\ {\isacharbraceleft}Lam\ r\ {\isacharbar}\ r{\isachardot}\ Lam\ r\ {\isasymin}\ rhs{\isacharbraceright}{\isachardoublequoteclose}%
       
   659 \begin{isamarkuptext}%
       
   660 The following \isa{rexp{\isacharunderscore}of{\isacharunderscore}lam\ rhs} combines pure regular expression items in \isa{rhs}
       
   661   using \isa{ALT} to form a single regular expression. 
       
   662   When all variables inside \isa{rhs} are eliminated, \isa{rexp{\isacharunderscore}of{\isacharunderscore}lam\ rhs}
       
   663   is used to compute compute the regular expression corresponds to \isa{rhs}.%
       
   664 \end{isamarkuptext}%
       
   665 \isamarkuptrue%
       
   666 \isacommand{definition}\isamarkupfalse%
       
   667 \isanewline
       
   668 \ \ {\isachardoublequoteopen}rexp{\isacharunderscore}of{\isacharunderscore}lam\ rhs\ {\isasymequiv}\ folds\ ALT\ NULL\ {\isacharparenleft}the{\isacharunderscore}r\ {\isacharbackquote}\ lam{\isacharunderscore}of\ rhs{\isacharparenright}{\isachardoublequoteclose}%
       
   669 \begin{isamarkuptext}%
       
   670 The following \isa{attach{\isacharunderscore}rexp\ rexp{\isacharprime}\ itm} attach 
       
   671   the regular expression \isa{rexp{\isacharprime}} to
       
   672   the right of right hand side item \isa{itm}.%
       
   673 \end{isamarkuptext}%
       
   674 \isamarkuptrue%
       
   675 \isacommand{fun}\isamarkupfalse%
       
   676 \ attach{\isacharunderscore}rexp\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}rexp\ {\isasymRightarrow}\ rhs{\isacharunderscore}item\ {\isasymRightarrow}\ rhs{\isacharunderscore}item{\isachardoublequoteclose}\isanewline
       
   677 \isakeyword{where}\isanewline
       
   678 \ \ {\isachardoublequoteopen}attach{\isacharunderscore}rexp\ rexp{\isacharprime}\ {\isacharparenleft}Lam\ rexp{\isacharparenright}\ \ \ {\isacharequal}\ Lam\ {\isacharparenleft}SEQ\ rexp\ rexp{\isacharprime}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   679 {\isacharbar}\ {\isachardoublequoteopen}attach{\isacharunderscore}rexp\ rexp{\isacharprime}\ {\isacharparenleft}Trn\ X\ rexp{\isacharparenright}\ {\isacharequal}\ Trn\ X\ {\isacharparenleft}SEQ\ rexp\ rexp{\isacharprime}{\isacharparenright}{\isachardoublequoteclose}%
       
   680 \begin{isamarkuptext}%
       
   681 The following \isa{append{\isacharunderscore}rhs{\isacharunderscore}rexp\ rhs\ rexp} attaches 
       
   682   \isa{rexp} to every item in \isa{rhs}.%
       
   683 \end{isamarkuptext}%
       
   684 \isamarkuptrue%
       
   685 \isacommand{definition}\isamarkupfalse%
       
   686 \isanewline
       
   687 \ \ {\isachardoublequoteopen}append{\isacharunderscore}rhs{\isacharunderscore}rexp\ rhs\ rexp\ {\isasymequiv}\ {\isacharparenleft}attach{\isacharunderscore}rexp\ rexp{\isacharparenright}\ {\isacharbackquote}\ rhs{\isachardoublequoteclose}%
       
   688 \begin{isamarkuptext}%
       
   689 With the help of the two functions immediately above, Ardens'
       
   690   transformation on right hand side \isa{rhs} is implemented
       
   691   by the following function \isa{arden{\isacharunderscore}variate\ X\ rhs}.
       
   692   After this transformation, the recursive occurent of \isa{X}
       
   693   in \isa{rhs} will be eliminated, while the 
       
   694   string set defined by \isa{rhs} is kept unchanged.%
       
   695 \end{isamarkuptext}%
       
   696 \isamarkuptrue%
       
   697 \isacommand{definition}\isamarkupfalse%
       
   698 \ \isanewline
       
   699 \ \ {\isachardoublequoteopen}arden{\isacharunderscore}variate\ X\ rhs\ {\isasymequiv}\ \isanewline
       
   700 \ \ \ \ \ \ \ \ append{\isacharunderscore}rhs{\isacharunderscore}rexp\ {\isacharparenleft}rhs\ {\isacharminus}\ items{\isacharunderscore}of\ rhs\ X{\isacharparenright}\ {\isacharparenleft}STAR\ {\isacharparenleft}rexp{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}%
       
   701 \begin{isamarkuptext}%
       
   702 Suppose the equation defining \isa{X} is $X = xrhs$,
       
   703   the purpose of \isa{rhs{\isacharunderscore}subst} is to substitute all occurences of \isa{X} in
       
   704   \isa{rhs} by \isa{xrhs}.
       
   705   A litte thought may reveal that the final result
       
   706   should be: first append $(a_1 | a_2 | \ldots | a_n)$ to every item of \isa{xrhs} and then
       
   707   union the result with all non-\isa{X}-items of \isa{rhs}.%
       
   708 \end{isamarkuptext}%
       
   709 \isamarkuptrue%
       
   710 \isacommand{definition}\isamarkupfalse%
       
   711 \ \isanewline
       
   712 \ \ {\isachardoublequoteopen}rhs{\isacharunderscore}subst\ rhs\ X\ xrhs\ {\isasymequiv}\ \isanewline
       
   713 \ \ \ \ \ \ \ \ {\isacharparenleft}rhs\ {\isacharminus}\ {\isacharparenleft}items{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isacharparenright}\ {\isasymunion}\ {\isacharparenleft}append{\isacharunderscore}rhs{\isacharunderscore}rexp\ xrhs\ {\isacharparenleft}rexp{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}%
       
   714 \begin{isamarkuptext}%
       
   715 Suppose the equation defining \isa{X} is $X = xrhs$, the follwing
       
   716   \isa{eqs{\isacharunderscore}subst\ ES\ X\ xrhs} substitute \isa{xrhs} into every equation
       
   717   of the equational system \isa{ES}.%
       
   718 \end{isamarkuptext}%
       
   719 \isamarkuptrue%
       
   720 \isacommand{definition}\isamarkupfalse%
       
   721 \isanewline
       
   722 \ \ {\isachardoublequoteopen}eqs{\isacharunderscore}subst\ ES\ X\ xrhs\ {\isasymequiv}\ {\isacharbraceleft}{\isacharparenleft}Y{\isacharcomma}\ rhs{\isacharunderscore}subst\ yrhs\ X\ xrhs{\isacharparenright}\ {\isacharbar}\ Y\ yrhs{\isachardot}\ {\isacharparenleft}Y{\isacharcomma}\ yrhs{\isacharparenright}\ {\isasymin}\ ES{\isacharbraceright}{\isachardoublequoteclose}%
       
   723 \begin{isamarkuptext}%
       
   724 The computation of regular expressions for equivalent classes is accomplished
       
   725   using a iteration principle given by the following lemma.%
       
   726 \end{isamarkuptext}%
       
   727 \isamarkuptrue%
       
   728 \isacommand{lemma}\isamarkupfalse%
       
   729 \ wf{\isacharunderscore}iter\ {\isacharbrackleft}rule{\isacharunderscore}format{\isacharbrackright}{\isacharcolon}\ \isanewline
       
   730 \ \ \isakeyword{fixes}\ f\isanewline
       
   731 \ \ \isakeyword{assumes}\ step{\isacharcolon}\ {\isachardoublequoteopen}{\isasymAnd}\ e{\isachardot}\ {\isasymlbrakk}P\ e{\isacharsemicolon}\ {\isasymnot}\ Q\ e{\isasymrbrakk}\ {\isasymLongrightarrow}\ {\isacharparenleft}{\isasymexists}\ e{\isacharprime}{\isachardot}\ P\ e{\isacharprime}\ {\isasymand}\ \ {\isacharparenleft}f{\isacharparenleft}e{\isacharprime}{\isacharparenright}{\isacharcomma}\ f{\isacharparenleft}e{\isacharparenright}{\isacharparenright}\ {\isasymin}\ less{\isacharunderscore}than{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   732 \ \ \isakeyword{shows}\ pe{\isacharcolon}\ \ \ \ \ {\isachardoublequoteopen}P\ e\ {\isasymlongrightarrow}\ {\isacharparenleft}{\isasymexists}\ e{\isacharprime}{\isachardot}\ P\ e{\isacharprime}\ {\isasymand}\ \ Q\ e{\isacharprime}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   733 %
       
   734 \isadelimproof
       
   735 %
       
   736 \endisadelimproof
       
   737 %
       
   738 \isatagproof
       
   739 \isacommand{proof}\isamarkupfalse%
       
   740 {\isacharparenleft}induct\ e\ rule{\isacharcolon}\ wf{\isacharunderscore}induct\ \isanewline
       
   741 \ \ \ \ \ \ \ \ \ \ \ {\isacharbrackleft}OF\ wf{\isacharunderscore}inv{\isacharunderscore}image{\isacharbrackleft}OF\ wf{\isacharunderscore}less{\isacharunderscore}than{\isacharcomma}\ \isakeyword{where}\ f\ {\isacharequal}\ {\isachardoublequoteopen}f{\isachardoublequoteclose}{\isacharbrackright}{\isacharbrackright}{\isacharcomma}\ clarify{\isacharparenright}\isanewline
       
   742 \ \ \isacommand{fix}\isamarkupfalse%
       
   743 \ x\ \isanewline
       
   744 \ \ \isacommand{assume}\isamarkupfalse%
       
   745 \ h\ {\isacharbrackleft}rule{\isacharunderscore}format{\isacharbrackright}{\isacharcolon}\ \isanewline
       
   746 \ \ \ \ {\isachardoublequoteopen}{\isasymforall}y{\isachardot}\ {\isacharparenleft}y{\isacharcomma}\ x{\isacharparenright}\ {\isasymin}\ inv{\isacharunderscore}image\ less{\isacharunderscore}than\ f\ {\isasymlongrightarrow}\ P\ y\ {\isasymlongrightarrow}\ {\isacharparenleft}{\isasymexists}e{\isacharprime}{\isachardot}\ P\ e{\isacharprime}\ {\isasymand}\ Q\ e{\isacharprime}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   747 \ \ \ \ \isakeyword{and}\ px{\isacharcolon}\ {\isachardoublequoteopen}P\ x{\isachardoublequoteclose}\isanewline
       
   748 \ \ \isacommand{show}\isamarkupfalse%
       
   749 \ {\isachardoublequoteopen}{\isasymexists}e{\isacharprime}{\isachardot}\ P\ e{\isacharprime}\ {\isasymand}\ Q\ e{\isacharprime}{\isachardoublequoteclose}\isanewline
       
   750 \ \ \isacommand{proof}\isamarkupfalse%
       
   751 {\isacharparenleft}cases\ {\isachardoublequoteopen}Q\ x{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
   752 \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
   753 \ {\isachardoublequoteopen}Q\ x{\isachardoublequoteclose}\ \isacommand{with}\isamarkupfalse%
       
   754 \ px\ \isacommand{show}\isamarkupfalse%
       
   755 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
   756 \ blast\isanewline
       
   757 \ \ \isacommand{next}\isamarkupfalse%
       
   758 \isanewline
       
   759 \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
   760 \ nq{\isacharcolon}\ {\isachardoublequoteopen}{\isasymnot}\ Q\ x{\isachardoublequoteclose}\isanewline
       
   761 \ \ \ \ \isacommand{from}\isamarkupfalse%
       
   762 \ step\ {\isacharbrackleft}OF\ px\ nq{\isacharbrackright}\isanewline
       
   763 \ \ \ \ \isacommand{obtain}\isamarkupfalse%
       
   764 \ e{\isacharprime}\ \isakeyword{where}\ pe{\isacharprime}{\isacharcolon}\ {\isachardoublequoteopen}P\ e{\isacharprime}{\isachardoublequoteclose}\ \isakeyword{and}\ ltf{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}f\ e{\isacharprime}{\isacharcomma}\ f\ x{\isacharparenright}\ {\isasymin}\ less{\isacharunderscore}than{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
   765 \ auto\isanewline
       
   766 \ \ \ \ \isacommand{show}\isamarkupfalse%
       
   767 \ {\isacharquery}thesis\isanewline
       
   768 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
   769 {\isacharparenleft}rule\ h{\isacharparenright}\isanewline
       
   770 \ \ \ \ \ \ \isacommand{from}\isamarkupfalse%
       
   771 \ ltf\ \isacommand{show}\isamarkupfalse%
       
   772 \ {\isachardoublequoteopen}{\isacharparenleft}e{\isacharprime}{\isacharcomma}\ x{\isacharparenright}\ {\isasymin}\ inv{\isacharunderscore}image\ less{\isacharunderscore}than\ f{\isachardoublequoteclose}\ \isanewline
       
   773 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
   774 \ {\isacharparenleft}simp\ add{\isacharcolon}inv{\isacharunderscore}image{\isacharunderscore}def{\isacharparenright}\isanewline
       
   775 \ \ \ \ \isacommand{next}\isamarkupfalse%
       
   776 \isanewline
       
   777 \ \ \ \ \ \ \isacommand{from}\isamarkupfalse%
       
   778 \ pe{\isacharprime}\ \isacommand{show}\isamarkupfalse%
       
   779 \ {\isachardoublequoteopen}P\ e{\isacharprime}{\isachardoublequoteclose}\ \isacommand{{\isachardot}}\isamarkupfalse%
       
   780 \isanewline
       
   781 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
   782 \isanewline
       
   783 \ \ \isacommand{qed}\isamarkupfalse%
       
   784 \isanewline
       
   785 \isacommand{qed}\isamarkupfalse%
       
   786 %
       
   787 \endisatagproof
       
   788 {\isafoldproof}%
       
   789 %
       
   790 \isadelimproof
       
   791 %
       
   792 \endisadelimproof
       
   793 %
       
   794 \begin{isamarkuptext}%
       
   795 The \isa{P} in lemma \isa{wf{\isacharunderscore}iter} is an invaiant kept throughout the iteration procedure.
       
   796   The particular invariant used to solve our problem is defined by function \isa{Inv{\isacharparenleft}ES{\isacharparenright}},
       
   797   an invariant over equal system \isa{ES}.
       
   798   Every definition starting next till \isa{Inv} stipulates a property to be satisfied by \isa{ES}.%
       
   799 \end{isamarkuptext}%
       
   800 \isamarkuptrue%
       
   801 %
       
   802 \begin{isamarkuptext}%
       
   803 Every variable is defined at most onece in \isa{ES}.%
       
   804 \end{isamarkuptext}%
       
   805 \isamarkuptrue%
       
   806 \isacommand{definition}\isamarkupfalse%
       
   807 \ \isanewline
       
   808 \ \ {\isachardoublequoteopen}distinct{\isacharunderscore}equas\ ES\ {\isasymequiv}\ \isanewline
       
   809 \ \ \ \ \ \ \ \ \ \ \ \ {\isasymforall}\ X\ rhs\ rhs{\isacharprime}{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ rhs{\isacharparenright}\ {\isasymin}\ ES\ {\isasymand}\ {\isacharparenleft}X{\isacharcomma}\ rhs{\isacharprime}{\isacharparenright}\ {\isasymin}\ ES\ {\isasymlongrightarrow}\ rhs\ {\isacharequal}\ rhs{\isacharprime}{\isachardoublequoteclose}%
       
   810 \begin{isamarkuptext}%
       
   811 Every equation in \isa{ES} (represented by \isa{{\isacharparenleft}X{\isacharcomma}\ rhs{\isacharparenright}}) is valid, i.e. \isa{{\isacharparenleft}X\ {\isacharequal}\ L\ rhs{\isacharparenright}}.%
       
   812 \end{isamarkuptext}%
       
   813 \isamarkuptrue%
       
   814 \isacommand{definition}\isamarkupfalse%
       
   815 \ \isanewline
       
   816 \ \ {\isachardoublequoteopen}valid{\isacharunderscore}eqns\ ES\ {\isasymequiv}\ {\isasymforall}\ X\ rhs{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ rhs{\isacharparenright}\ {\isasymin}\ ES\ {\isasymlongrightarrow}\ {\isacharparenleft}X\ {\isacharequal}\ L\ rhs{\isacharparenright}{\isachardoublequoteclose}%
       
   817 \begin{isamarkuptext}%
       
   818 \isa{rhs{\isacharunderscore}nonempty\ rhs} requires regular expressions occuring in transitional 
       
   819   items of \isa{rhs} does not contain empty string. This is necessary for
       
   820   the application of Arden's transformation to \isa{rhs}.%
       
   821 \end{isamarkuptext}%
       
   822 \isamarkuptrue%
       
   823 \isacommand{definition}\isamarkupfalse%
       
   824 \ \isanewline
       
   825 \ \ {\isachardoublequoteopen}rhs{\isacharunderscore}nonempty\ rhs\ {\isasymequiv}\ {\isacharparenleft}{\isasymforall}\ Y\ r{\isachardot}\ Trn\ Y\ r\ {\isasymin}\ rhs\ {\isasymlongrightarrow}\ {\isacharbrackleft}{\isacharbrackright}\ {\isasymnotin}\ L\ r{\isacharparenright}{\isachardoublequoteclose}%
       
   826 \begin{isamarkuptext}%
       
   827 \isa{ardenable\ ES} requires that Arden's transformation is applicable
       
   828   to every equation of equational system \isa{ES}.%
       
   829 \end{isamarkuptext}%
       
   830 \isamarkuptrue%
       
   831 \isacommand{definition}\isamarkupfalse%
       
   832 \ \isanewline
       
   833 \ \ {\isachardoublequoteopen}ardenable\ ES\ {\isasymequiv}\ {\isasymforall}\ X\ rhs{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ rhs{\isacharparenright}\ {\isasymin}\ ES\ {\isasymlongrightarrow}\ rhs{\isacharunderscore}nonempty\ rhs{\isachardoublequoteclose}\isanewline
       
   834 \isanewline
       
   835 \isanewline
       
   836 \isacommand{definition}\isamarkupfalse%
       
   837 \ \isanewline
       
   838 \ \ {\isachardoublequoteopen}non{\isacharunderscore}empty\ ES\ {\isasymequiv}\ {\isasymforall}\ X\ rhs{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ rhs{\isacharparenright}\ {\isasymin}\ ES\ {\isasymlongrightarrow}\ X\ {\isasymnoteq}\ {\isacharbraceleft}{\isacharbraceright}{\isachardoublequoteclose}%
       
   839 \begin{isamarkuptext}%
       
   840 The following \isa{finite{\isacharunderscore}rhs\ ES} requires every equation in \isa{rhs} be finite.%
       
   841 \end{isamarkuptext}%
       
   842 \isamarkuptrue%
       
   843 \isacommand{definition}\isamarkupfalse%
       
   844 \isanewline
       
   845 \ \ {\isachardoublequoteopen}finite{\isacharunderscore}rhs\ ES\ {\isasymequiv}\ {\isasymforall}\ X\ rhs{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ rhs{\isacharparenright}\ {\isasymin}\ ES\ {\isasymlongrightarrow}\ finite\ rhs{\isachardoublequoteclose}%
       
   846 \begin{isamarkuptext}%
       
   847 The following \isa{classes{\isacharunderscore}of\ rhs} returns all variables (or equivalent classes)
       
   848   occuring in \isa{rhs}.%
       
   849 \end{isamarkuptext}%
       
   850 \isamarkuptrue%
       
   851 \isacommand{definition}\isamarkupfalse%
       
   852 \ \isanewline
       
   853 \ \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ rhs\ {\isasymequiv}\ {\isacharbraceleft}X{\isachardot}\ {\isasymexists}\ r{\isachardot}\ Trn\ X\ r\ {\isasymin}\ rhs{\isacharbraceright}{\isachardoublequoteclose}%
       
   854 \begin{isamarkuptext}%
       
   855 The following \isa{lefts{\isacharunderscore}of\ ES} returns all variables 
       
   856   defined by equational system \isa{ES}.%
       
   857 \end{isamarkuptext}%
       
   858 \isamarkuptrue%
       
   859 \isacommand{definition}\isamarkupfalse%
       
   860 \isanewline
       
   861 \ \ {\isachardoublequoteopen}lefts{\isacharunderscore}of\ ES\ {\isasymequiv}\ {\isacharbraceleft}Y\ {\isacharbar}\ Y\ yrhs{\isachardot}\ {\isacharparenleft}Y{\isacharcomma}\ yrhs{\isacharparenright}\ {\isasymin}\ ES{\isacharbraceright}{\isachardoublequoteclose}%
       
   862 \begin{isamarkuptext}%
       
   863 The following \isa{self{\isacharunderscore}contained\ ES} requires that every
       
   864   variable occuring on the right hand side of equations is already defined by some
       
   865   equation in \isa{ES}.%
       
   866 \end{isamarkuptext}%
       
   867 \isamarkuptrue%
       
   868 \isacommand{definition}\isamarkupfalse%
       
   869 \ \isanewline
       
   870 \ \ {\isachardoublequoteopen}self{\isacharunderscore}contained\ ES\ {\isasymequiv}\ {\isasymforall}\ {\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}\ {\isasymin}\ ES{\isachardot}\ classes{\isacharunderscore}of\ xrhs\ {\isasymsubseteq}\ lefts{\isacharunderscore}of\ ES{\isachardoublequoteclose}%
       
   871 \begin{isamarkuptext}%
       
   872 The invariant \isa{Inv{\isacharparenleft}ES{\isacharparenright}} is obtained by conjunctioning all the previous
       
   873   defined constaints on \isa{ES}.%
       
   874 \end{isamarkuptext}%
       
   875 \isamarkuptrue%
       
   876 \isacommand{definition}\isamarkupfalse%
       
   877 \ \isanewline
       
   878 \ \ {\isachardoublequoteopen}Inv\ ES\ {\isasymequiv}\ valid{\isacharunderscore}eqns\ ES\ {\isasymand}\ finite\ ES\ {\isasymand}\ distinct{\isacharunderscore}equas\ ES\ {\isasymand}\ ardenable\ ES\ {\isasymand}\ \isanewline
       
   879 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ non{\isacharunderscore}empty\ ES\ {\isasymand}\ finite{\isacharunderscore}rhs\ ES\ {\isasymand}\ self{\isacharunderscore}contained\ ES{\isachardoublequoteclose}%
       
   880 \isamarkupsubsection{Proof for this direction%
       
   881 }
       
   882 \isamarkuptrue%
       
   883 %
       
   884 \begin{isamarkuptext}%
       
   885 The following are some basic properties of the above definitions.%
       
   886 \end{isamarkuptext}%
       
   887 \isamarkuptrue%
       
   888 \isacommand{lemma}\isamarkupfalse%
       
   889 \ L{\isacharunderscore}rhs{\isacharunderscore}union{\isacharunderscore}distrib{\isacharcolon}\isanewline
       
   890 \ \ {\isachardoublequoteopen}\ L\ {\isacharparenleft}A{\isacharcolon}{\isacharcolon}rhs{\isacharunderscore}item\ set{\isacharparenright}\ {\isasymunion}\ L\ B\ {\isacharequal}\ L\ {\isacharparenleft}A\ {\isasymunion}\ B{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   891 %
       
   892 \isadelimproof
       
   893 %
       
   894 \endisadelimproof
       
   895 %
       
   896 \isatagproof
       
   897 \isacommand{by}\isamarkupfalse%
       
   898 \ simp%
       
   899 \endisatagproof
       
   900 {\isafoldproof}%
       
   901 %
       
   902 \isadelimproof
       
   903 \isanewline
       
   904 %
       
   905 \endisadelimproof
       
   906 \isanewline
       
   907 \isacommand{lemma}\isamarkupfalse%
       
   908 \ finite{\isacharunderscore}snd{\isacharunderscore}Trn{\isacharcolon}\isanewline
       
   909 \ \ \isakeyword{assumes}\ finite{\isacharcolon}{\isachardoublequoteopen}finite\ rhs{\isachardoublequoteclose}\isanewline
       
   910 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}finite\ {\isacharbraceleft}r\isactrlisub {\isadigit{2}}{\isachardot}\ Trn\ Y\ r\isactrlisub {\isadigit{2}}\ {\isasymin}\ rhs{\isacharbraceright}{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}finite\ {\isacharquery}B{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
   911 %
       
   912 \isadelimproof
       
   913 %
       
   914 \endisadelimproof
       
   915 %
       
   916 \isatagproof
       
   917 \isacommand{proof}\isamarkupfalse%
       
   918 {\isacharminus}\isanewline
       
   919 \ \ \isacommand{def}\isamarkupfalse%
       
   920 \ rhs{\isacharprime}\ {\isasymequiv}\ {\isachardoublequoteopen}{\isacharbraceleft}e\ {\isasymin}\ rhs{\isachardot}\ {\isasymexists}\ r{\isachardot}\ e\ {\isacharequal}\ Trn\ Y\ r{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
   921 \ \ \isacommand{have}\isamarkupfalse%
       
   922 \ {\isachardoublequoteopen}{\isacharquery}B\ {\isacharequal}\ {\isacharparenleft}snd\ o\ the{\isacharunderscore}Trn{\isacharparenright}\ {\isacharbackquote}\ rhs{\isacharprime}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
   923 \ rhs{\isacharprime}{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
   924 \ {\isacharparenleft}auto\ simp{\isacharcolon}image{\isacharunderscore}def{\isacharparenright}\isanewline
       
   925 \ \ \isacommand{moreover}\isamarkupfalse%
       
   926 \ \isacommand{have}\isamarkupfalse%
       
   927 \ {\isachardoublequoteopen}finite\ rhs{\isacharprime}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
   928 \ finite\ rhs{\isacharprime}{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
   929 \ auto\isanewline
       
   930 \ \ \isacommand{ultimately}\isamarkupfalse%
       
   931 \ \isacommand{show}\isamarkupfalse%
       
   932 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
   933 \ simp\isanewline
       
   934 \isacommand{qed}\isamarkupfalse%
       
   935 %
       
   936 \endisatagproof
       
   937 {\isafoldproof}%
       
   938 %
       
   939 \isadelimproof
       
   940 \isanewline
       
   941 %
       
   942 \endisadelimproof
       
   943 \isanewline
       
   944 \isacommand{lemma}\isamarkupfalse%
       
   945 \ rexp{\isacharunderscore}of{\isacharunderscore}empty{\isacharcolon}\isanewline
       
   946 \ \ \isakeyword{assumes}\ finite{\isacharcolon}{\isachardoublequoteopen}finite\ rhs{\isachardoublequoteclose}\isanewline
       
   947 \ \ \isakeyword{and}\ nonempty{\isacharcolon}{\isachardoublequoteopen}rhs{\isacharunderscore}nonempty\ rhs{\isachardoublequoteclose}\isanewline
       
   948 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}\ {\isasymnotin}\ L\ {\isacharparenleft}rexp{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   949 %
       
   950 \isadelimproof
       
   951 %
       
   952 \endisadelimproof
       
   953 %
       
   954 \isatagproof
       
   955 \isacommand{using}\isamarkupfalse%
       
   956 \ finite\ nonempty\ rhs{\isacharunderscore}nonempty{\isacharunderscore}def\isanewline
       
   957 \isacommand{by}\isamarkupfalse%
       
   958 \ {\isacharparenleft}drule{\isacharunderscore}tac\ finite{\isacharunderscore}snd{\isacharunderscore}Trn{\isacharbrackleft}\isakeyword{where}\ Y\ {\isacharequal}\ X{\isacharbrackright}{\isacharcomma}\ auto\ simp{\isacharcolon}rexp{\isacharunderscore}of{\isacharunderscore}def\ items{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}%
       
   959 \endisatagproof
       
   960 {\isafoldproof}%
       
   961 %
       
   962 \isadelimproof
       
   963 \isanewline
       
   964 %
       
   965 \endisadelimproof
       
   966 \isanewline
       
   967 \isacommand{lemma}\isamarkupfalse%
       
   968 \ {\isacharbrackleft}intro{\isacharbang}{\isacharbrackright}{\isacharcolon}\isanewline
       
   969 \ \ {\isachardoublequoteopen}P\ {\isacharparenleft}Trn\ X\ r{\isacharparenright}\ {\isasymLongrightarrow}\ {\isacharparenleft}{\isasymexists}a{\isachardot}\ {\isacharparenleft}{\isasymexists}r{\isachardot}\ a\ {\isacharequal}\ Trn\ X\ r\ {\isasymand}\ P\ a{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}%
       
   970 \isadelimproof
       
   971 \ %
       
   972 \endisadelimproof
       
   973 %
       
   974 \isatagproof
       
   975 \isacommand{by}\isamarkupfalse%
       
   976 \ auto%
       
   977 \endisatagproof
       
   978 {\isafoldproof}%
       
   979 %
       
   980 \isadelimproof
       
   981 %
       
   982 \endisadelimproof
       
   983 \isanewline
       
   984 \isanewline
       
   985 \isacommand{lemma}\isamarkupfalse%
       
   986 \ finite{\isacharunderscore}items{\isacharunderscore}of{\isacharcolon}\isanewline
       
   987 \ \ {\isachardoublequoteopen}finite\ rhs\ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}items{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   988 %
       
   989 \isadelimproof
       
   990 %
       
   991 \endisadelimproof
       
   992 %
       
   993 \isatagproof
       
   994 \isacommand{by}\isamarkupfalse%
       
   995 \ {\isacharparenleft}auto\ simp{\isacharcolon}items{\isacharunderscore}of{\isacharunderscore}def\ intro{\isacharcolon}finite{\isacharunderscore}subset{\isacharparenright}%
       
   996 \endisatagproof
       
   997 {\isafoldproof}%
       
   998 %
       
   999 \isadelimproof
       
  1000 \isanewline
       
  1001 %
       
  1002 \endisadelimproof
       
  1003 \isanewline
       
  1004 \isacommand{lemma}\isamarkupfalse%
       
  1005 \ lang{\isacharunderscore}of{\isacharunderscore}rexp{\isacharunderscore}of{\isacharcolon}\isanewline
       
  1006 \ \ \isakeyword{assumes}\ finite{\isacharcolon}{\isachardoublequoteopen}finite\ rhs{\isachardoublequoteclose}\isanewline
       
  1007 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}L\ {\isacharparenleft}items{\isacharunderscore}of\ rhs\ X{\isacharparenright}\ {\isacharequal}\ X\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharparenleft}L\ {\isacharparenleft}rexp{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1008 %
       
  1009 \isadelimproof
       
  1010 %
       
  1011 \endisadelimproof
       
  1012 %
       
  1013 \isatagproof
       
  1014 \isacommand{proof}\isamarkupfalse%
       
  1015 \ {\isacharminus}\isanewline
       
  1016 \ \ \isacommand{have}\isamarkupfalse%
       
  1017 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}{\isacharparenleft}snd\ {\isasymcirc}\ the{\isacharunderscore}Trn{\isacharparenright}\ {\isacharbackquote}\ items{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1018 \ finite{\isacharunderscore}items{\isacharunderscore}of{\isacharbrackleft}OF\ finite{\isacharbrackright}\ \isacommand{by}\isamarkupfalse%
       
  1019 \ auto\isanewline
       
  1020 \ \ \isacommand{thus}\isamarkupfalse%
       
  1021 \ {\isacharquery}thesis\isanewline
       
  1022 \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
  1023 \ {\isacharparenleft}auto\ simp{\isacharcolon}rexp{\isacharunderscore}of{\isacharunderscore}def\ Seq{\isacharunderscore}def\ items{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1024 \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
  1025 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ s{\isadigit{1}}\ \isakeyword{in}\ exI{\isacharcomma}\ rule{\isacharunderscore}tac\ x\ {\isacharequal}\ s{\isadigit{2}}\ \isakeyword{in}\ exI{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  1026 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1027 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x{\isacharequal}\ {\isachardoublequoteopen}Trn\ X\ r{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1028 \isacommand{qed}\isamarkupfalse%
       
  1029 %
       
  1030 \endisatagproof
       
  1031 {\isafoldproof}%
       
  1032 %
       
  1033 \isadelimproof
       
  1034 \isanewline
       
  1035 %
       
  1036 \endisadelimproof
       
  1037 \isanewline
       
  1038 \isacommand{lemma}\isamarkupfalse%
       
  1039 \ rexp{\isacharunderscore}of{\isacharunderscore}lam{\isacharunderscore}eq{\isacharunderscore}lam{\isacharunderscore}set{\isacharcolon}\isanewline
       
  1040 \ \ \isakeyword{assumes}\ finite{\isacharcolon}\ {\isachardoublequoteopen}finite\ rhs{\isachardoublequoteclose}\isanewline
       
  1041 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}L\ {\isacharparenleft}rexp{\isacharunderscore}of{\isacharunderscore}lam\ rhs{\isacharparenright}\ {\isacharequal}\ L\ {\isacharparenleft}lam{\isacharunderscore}of\ rhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1042 %
       
  1043 \isadelimproof
       
  1044 %
       
  1045 \endisadelimproof
       
  1046 %
       
  1047 \isatagproof
       
  1048 \isacommand{proof}\isamarkupfalse%
       
  1049 \ {\isacharminus}\isanewline
       
  1050 \ \ \isacommand{have}\isamarkupfalse%
       
  1051 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}the{\isacharunderscore}r\ {\isacharbackquote}\ {\isacharbraceleft}Lam\ r\ {\isacharbar}r{\isachardot}\ Lam\ r\ {\isasymin}\ rhs{\isacharbraceright}{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1052 \ finite\isanewline
       
  1053 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1054 \ {\isacharparenleft}rule{\isacharunderscore}tac\ finite{\isacharunderscore}imageI{\isacharcomma}\ auto\ intro{\isacharcolon}finite{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  1055 \ \ \isacommand{thus}\isamarkupfalse%
       
  1056 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1057 \ {\isacharparenleft}auto\ simp{\isacharcolon}rexp{\isacharunderscore}of{\isacharunderscore}lam{\isacharunderscore}def\ lam{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1058 \isacommand{qed}\isamarkupfalse%
       
  1059 %
       
  1060 \endisatagproof
       
  1061 {\isafoldproof}%
       
  1062 %
       
  1063 \isadelimproof
       
  1064 \isanewline
       
  1065 %
       
  1066 \endisadelimproof
       
  1067 \isanewline
       
  1068 \isacommand{lemma}\isamarkupfalse%
       
  1069 \ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\isanewline
       
  1070 \ \ {\isachardoublequoteopen}\ L\ {\isacharparenleft}attach{\isacharunderscore}rexp\ r\ xb{\isacharparenright}\ {\isacharequal}\ L\ xb\ {\isacharsemicolon}{\isacharsemicolon}\ L\ r{\isachardoublequoteclose}\isanewline
       
  1071 %
       
  1072 \isadelimproof
       
  1073 %
       
  1074 \endisadelimproof
       
  1075 %
       
  1076 \isatagproof
       
  1077 \isacommand{apply}\isamarkupfalse%
       
  1078 \ {\isacharparenleft}cases\ xb{\isacharcomma}\ auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1079 \isacommand{by}\isamarkupfalse%
       
  1080 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}s{\isadigit{1}}\ {\isacharat}\ s{\isadigit{1}}a{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ rule{\isacharunderscore}tac\ x\ {\isacharequal}\ s{\isadigit{2}}a\ \isakeyword{in}\ exI{\isacharcomma}auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}%
       
  1081 \endisatagproof
       
  1082 {\isafoldproof}%
       
  1083 %
       
  1084 \isadelimproof
       
  1085 \isanewline
       
  1086 %
       
  1087 \endisadelimproof
       
  1088 \isanewline
       
  1089 \isacommand{lemma}\isamarkupfalse%
       
  1090 \ lang{\isacharunderscore}of{\isacharunderscore}append{\isacharunderscore}rhs{\isacharcolon}\isanewline
       
  1091 \ \ {\isachardoublequoteopen}L\ {\isacharparenleft}append{\isacharunderscore}rhs{\isacharunderscore}rexp\ rhs\ r{\isacharparenright}\ {\isacharequal}\ L\ rhs\ {\isacharsemicolon}{\isacharsemicolon}\ L\ r{\isachardoublequoteclose}\isanewline
       
  1092 %
       
  1093 \isadelimproof
       
  1094 %
       
  1095 \endisadelimproof
       
  1096 %
       
  1097 \isatagproof
       
  1098 \isacommand{apply}\isamarkupfalse%
       
  1099 \ {\isacharparenleft}auto\ simp{\isacharcolon}append{\isacharunderscore}rhs{\isacharunderscore}rexp{\isacharunderscore}def\ image{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1100 \isacommand{apply}\isamarkupfalse%
       
  1101 \ {\isacharparenleft}auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1102 \isacommand{apply}\isamarkupfalse%
       
  1103 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}L\ xb\ {\isacharsemicolon}{\isacharsemicolon}\ L\ r{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ auto\ simp\ add{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1104 \isacommand{by}\isamarkupfalse%
       
  1105 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}attach{\isacharunderscore}rexp\ r\ xb{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}%
       
  1106 \endisatagproof
       
  1107 {\isafoldproof}%
       
  1108 %
       
  1109 \isadelimproof
       
  1110 \isanewline
       
  1111 %
       
  1112 \endisadelimproof
       
  1113 \isanewline
       
  1114 \isacommand{lemma}\isamarkupfalse%
       
  1115 \ classes{\isacharunderscore}of{\isacharunderscore}union{\isacharunderscore}distrib{\isacharcolon}\isanewline
       
  1116 \ \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ A\ {\isasymunion}\ classes{\isacharunderscore}of\ B\ {\isacharequal}\ classes{\isacharunderscore}of\ {\isacharparenleft}A\ {\isasymunion}\ B{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1117 %
       
  1118 \isadelimproof
       
  1119 %
       
  1120 \endisadelimproof
       
  1121 %
       
  1122 \isatagproof
       
  1123 \isacommand{by}\isamarkupfalse%
       
  1124 \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}classes{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}%
       
  1125 \endisatagproof
       
  1126 {\isafoldproof}%
       
  1127 %
       
  1128 \isadelimproof
       
  1129 \isanewline
       
  1130 %
       
  1131 \endisadelimproof
       
  1132 \isanewline
       
  1133 \isacommand{lemma}\isamarkupfalse%
       
  1134 \ lefts{\isacharunderscore}of{\isacharunderscore}union{\isacharunderscore}distrib{\isacharcolon}\isanewline
       
  1135 \ \ {\isachardoublequoteopen}lefts{\isacharunderscore}of\ A\ {\isasymunion}\ lefts{\isacharunderscore}of\ B\ {\isacharequal}\ lefts{\isacharunderscore}of\ {\isacharparenleft}A\ {\isasymunion}\ B{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1136 %
       
  1137 \isadelimproof
       
  1138 %
       
  1139 \endisadelimproof
       
  1140 %
       
  1141 \isatagproof
       
  1142 \isacommand{by}\isamarkupfalse%
       
  1143 \ {\isacharparenleft}auto\ simp{\isacharcolon}lefts{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}%
       
  1144 \endisatagproof
       
  1145 {\isafoldproof}%
       
  1146 %
       
  1147 \isadelimproof
       
  1148 %
       
  1149 \endisadelimproof
       
  1150 %
       
  1151 \begin{isamarkuptext}%
       
  1152 The following several lemmas until \isa{init{\isacharunderscore}ES{\isacharunderscore}satisfy{\isacharunderscore}Inv} are
       
  1153   to prove that initial equational system satisfies invariant \isa{Inv}.%
       
  1154 \end{isamarkuptext}%
       
  1155 \isamarkuptrue%
       
  1156 \isacommand{lemma}\isamarkupfalse%
       
  1157 \ defined{\isacharunderscore}by{\isacharunderscore}str{\isacharcolon}\isanewline
       
  1158 \ \ {\isachardoublequoteopen}{\isasymlbrakk}s\ {\isasymin}\ X{\isacharsemicolon}\ X\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isasymrbrakk}\ {\isasymLongrightarrow}\ X\ {\isacharequal}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}s{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  1159 %
       
  1160 \isadelimproof
       
  1161 %
       
  1162 \endisadelimproof
       
  1163 %
       
  1164 \isatagproof
       
  1165 \isacommand{by}\isamarkupfalse%
       
  1166 \ {\isacharparenleft}auto\ simp{\isacharcolon}quotient{\isacharunderscore}def\ Image{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}%
       
  1167 \endisatagproof
       
  1168 {\isafoldproof}%
       
  1169 %
       
  1170 \isadelimproof
       
  1171 \isanewline
       
  1172 %
       
  1173 \endisadelimproof
       
  1174 \isanewline
       
  1175 \isacommand{lemma}\isamarkupfalse%
       
  1176 \ every{\isacharunderscore}eqclass{\isacharunderscore}has{\isacharunderscore}transition{\isacharcolon}\isanewline
       
  1177 \ \ \isakeyword{assumes}\ has{\isacharunderscore}str{\isacharcolon}\ {\isachardoublequoteopen}s\ {\isacharat}\ {\isacharbrackleft}c{\isacharbrackright}\ {\isasymin}\ X{\isachardoublequoteclose}\isanewline
       
  1178 \ \ \isakeyword{and}\ \ \ \ \ in{\isacharunderscore}CS{\isacharcolon}\ \ \ {\isachardoublequoteopen}X\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1179 \ \ \isakeyword{obtains}\ Y\ \isakeyword{where}\ {\isachardoublequoteopen}Y\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{and}\ {\isachardoublequoteopen}Y\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}\ {\isasymsubseteq}\ X{\isachardoublequoteclose}\ \isakeyword{and}\ {\isachardoublequoteopen}s\ {\isasymin}\ Y{\isachardoublequoteclose}\isanewline
       
  1180 %
       
  1181 \isadelimproof
       
  1182 %
       
  1183 \endisadelimproof
       
  1184 %
       
  1185 \isatagproof
       
  1186 \isacommand{proof}\isamarkupfalse%
       
  1187 \ {\isacharminus}\isanewline
       
  1188 \ \ \isacommand{def}\isamarkupfalse%
       
  1189 \ Y\ {\isasymequiv}\ {\isachardoublequoteopen}{\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}s{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  1190 \ \ \isacommand{have}\isamarkupfalse%
       
  1191 \ {\isachardoublequoteopen}Y\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  1192 \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
  1193 \ Y{\isacharunderscore}def\ quotient{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
  1194 \ auto\isanewline
       
  1195 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1196 \isanewline
       
  1197 \ \ \isacommand{have}\isamarkupfalse%
       
  1198 \ {\isachardoublequoteopen}X\ {\isacharequal}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}s\ {\isacharat}\ {\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  1199 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1200 \ has{\isacharunderscore}str\ in{\isacharunderscore}CS\ defined{\isacharunderscore}by{\isacharunderscore}str\ \isacommand{by}\isamarkupfalse%
       
  1201 \ blast\isanewline
       
  1202 \ \ \isacommand{then}\isamarkupfalse%
       
  1203 \ \isacommand{have}\isamarkupfalse%
       
  1204 \ {\isachardoublequoteopen}Y\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}\ {\isasymsubseteq}\ X{\isachardoublequoteclose}\ \isanewline
       
  1205 \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
  1206 \ Y{\isacharunderscore}def\ Image{\isacharunderscore}def\ Seq{\isacharunderscore}def\isanewline
       
  1207 \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
  1208 \ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\isanewline
       
  1209 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1210 \ clarsimp\isanewline
       
  1211 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1212 \isanewline
       
  1213 \ \ \isacommand{have}\isamarkupfalse%
       
  1214 \ {\isachardoublequoteopen}s\ {\isasymin}\ Y{\isachardoublequoteclose}\ \isacommand{unfolding}\isamarkupfalse%
       
  1215 \ Y{\isacharunderscore}def\ \isanewline
       
  1216 \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
  1217 \ Image{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
  1218 \ simp\isanewline
       
  1219 \ \ \isacommand{ultimately}\isamarkupfalse%
       
  1220 \ \isacommand{show}\isamarkupfalse%
       
  1221 \ thesis\ \isacommand{by}\isamarkupfalse%
       
  1222 \ {\isacharparenleft}blast\ intro{\isacharcolon}\ that{\isacharparenright}\isanewline
       
  1223 \isacommand{qed}\isamarkupfalse%
       
  1224 %
       
  1225 \endisatagproof
       
  1226 {\isafoldproof}%
       
  1227 %
       
  1228 \isadelimproof
       
  1229 \isanewline
       
  1230 %
       
  1231 \endisadelimproof
       
  1232 \isanewline
       
  1233 \isacommand{lemma}\isamarkupfalse%
       
  1234 \ l{\isacharunderscore}eq{\isacharunderscore}r{\isacharunderscore}in{\isacharunderscore}eqs{\isacharcolon}\isanewline
       
  1235 \ \ \isakeyword{assumes}\ X{\isacharunderscore}in{\isacharunderscore}eqs{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}\ {\isasymin}\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1236 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}X\ {\isacharequal}\ L\ xrhs{\isachardoublequoteclose}\isanewline
       
  1237 %
       
  1238 \isadelimproof
       
  1239 %
       
  1240 \endisadelimproof
       
  1241 %
       
  1242 \isatagproof
       
  1243 \isacommand{proof}\isamarkupfalse%
       
  1244 \ \isanewline
       
  1245 \ \ \isacommand{show}\isamarkupfalse%
       
  1246 \ {\isachardoublequoteopen}X\ {\isasymsubseteq}\ L\ xrhs{\isachardoublequoteclose}\isanewline
       
  1247 \ \ \isacommand{proof}\isamarkupfalse%
       
  1248 \isanewline
       
  1249 \ \ \ \ \isacommand{fix}\isamarkupfalse%
       
  1250 \ x\isanewline
       
  1251 \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  1252 \ {\isachardoublequoteopen}{\isacharparenleft}{\isadigit{1}}{\isacharparenright}{\isachardoublequoteclose}{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isasymin}\ X{\isachardoublequoteclose}\isanewline
       
  1253 \ \ \ \ \isacommand{show}\isamarkupfalse%
       
  1254 \ {\isachardoublequoteopen}x\ {\isasymin}\ L\ xrhs{\isachardoublequoteclose}\ \ \ \ \ \ \ \ \ \ \isanewline
       
  1255 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  1256 \ {\isacharparenleft}cases\ {\isachardoublequoteopen}x\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  1257 \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  1258 \ empty{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\isanewline
       
  1259 \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  1260 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  1261 \ X{\isacharunderscore}in{\isacharunderscore}eqs\ {\isachardoublequoteopen}{\isacharparenleft}{\isadigit{1}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1262 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1263 \ {\isacharparenleft}auto\ simp{\isacharcolon}eqs{\isacharunderscore}def\ init{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1264 \ \ \ \ \isacommand{next}\isamarkupfalse%
       
  1265 \isanewline
       
  1266 \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  1267 \ not{\isacharunderscore}empty{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\isanewline
       
  1268 \ \ \ \ \ \ \isacommand{then}\isamarkupfalse%
       
  1269 \ \isacommand{obtain}\isamarkupfalse%
       
  1270 \ clist\ c\ \isakeyword{where}\ decom{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isacharequal}\ clist\ {\isacharat}\ {\isacharbrackleft}c{\isacharbrackright}{\isachardoublequoteclose}\isanewline
       
  1271 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1272 \ {\isacharparenleft}case{\isacharunderscore}tac\ x\ rule{\isacharcolon}rev{\isacharunderscore}cases{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  1273 \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1274 \ {\isachardoublequoteopen}X\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1275 \ X{\isacharunderscore}in{\isacharunderscore}eqs\ \isacommand{by}\isamarkupfalse%
       
  1276 \ {\isacharparenleft}auto\ simp{\isacharcolon}eqs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1277 \ \ \ \ \ \ \isacommand{then}\isamarkupfalse%
       
  1278 \ \isacommand{obtain}\isamarkupfalse%
       
  1279 \ Y\ \isanewline
       
  1280 \ \ \ \ \ \ \ \ \isakeyword{where}\ {\isachardoublequoteopen}Y\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  1281 \ \ \ \ \ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}Y\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}\ {\isasymsubseteq}\ X{\isachardoublequoteclose}\isanewline
       
  1282 \ \ \ \ \ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}clist\ {\isasymin}\ Y{\isachardoublequoteclose}\isanewline
       
  1283 \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1284 \ decom\ {\isachardoublequoteopen}{\isacharparenleft}{\isadigit{1}}{\isacharparenright}{\isachardoublequoteclose}\ every{\isacharunderscore}eqclass{\isacharunderscore}has{\isacharunderscore}transition\ \isacommand{by}\isamarkupfalse%
       
  1285 \ blast\isanewline
       
  1286 \ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
       
  1287 \ \isanewline
       
  1288 \ \ \ \ \ \ \ \ {\isachardoublequoteopen}x\ {\isasymin}\ L\ {\isacharbraceleft}Trn\ Y\ {\isacharparenleft}CHAR\ c{\isacharparenright}{\isacharbar}\ Y\ c{\isachardot}\ Y\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}\ {\isasymand}\ Y\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}\ {\isasymsubseteq}\ X{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  1289 \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1290 \ {\isachardoublequoteopen}{\isacharparenleft}{\isadigit{1}}{\isacharparenright}{\isachardoublequoteclose}\ decom\isanewline
       
  1291 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1292 \ {\isacharparenleft}simp{\isacharcomma}\ rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}Trn\ Y\ {\isacharparenleft}CHAR\ c{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ simp\ add{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1293 \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  1294 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  1295 \ X{\isacharunderscore}in{\isacharunderscore}eqs\ {\isachardoublequoteopen}{\isacharparenleft}{\isadigit{1}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1296 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1297 \ {\isacharparenleft}simp\ add{\isacharcolon}eqs{\isacharunderscore}def\ init{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1298 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  1299 \isanewline
       
  1300 \ \ \isacommand{qed}\isamarkupfalse%
       
  1301 \isanewline
       
  1302 \isacommand{next}\isamarkupfalse%
       
  1303 \isanewline
       
  1304 \ \ \isacommand{show}\isamarkupfalse%
       
  1305 \ {\isachardoublequoteopen}L\ xrhs\ {\isasymsubseteq}\ X{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1306 \ X{\isacharunderscore}in{\isacharunderscore}eqs\isanewline
       
  1307 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1308 \ {\isacharparenleft}auto\ simp{\isacharcolon}eqs{\isacharunderscore}def\ init{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\ \isanewline
       
  1309 \isacommand{qed}\isamarkupfalse%
       
  1310 %
       
  1311 \endisatagproof
       
  1312 {\isafoldproof}%
       
  1313 %
       
  1314 \isadelimproof
       
  1315 \isanewline
       
  1316 %
       
  1317 \endisadelimproof
       
  1318 \isanewline
       
  1319 \isacommand{lemma}\isamarkupfalse%
       
  1320 \ finite{\isacharunderscore}init{\isacharunderscore}rhs{\isacharcolon}\ \isanewline
       
  1321 \ \ \isakeyword{assumes}\ finite{\isacharcolon}\ {\isachardoublequoteopen}finite\ CS{\isachardoublequoteclose}\isanewline
       
  1322 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}init{\isacharunderscore}rhs\ CS\ X{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1323 %
       
  1324 \isadelimproof
       
  1325 %
       
  1326 \endisadelimproof
       
  1327 %
       
  1328 \isatagproof
       
  1329 \isacommand{proof}\isamarkupfalse%
       
  1330 {\isacharminus}\isanewline
       
  1331 \ \ \isacommand{have}\isamarkupfalse%
       
  1332 \ {\isachardoublequoteopen}finite\ {\isacharbraceleft}Trn\ Y\ {\isacharparenleft}CHAR\ c{\isacharparenright}\ {\isacharbar}Y\ c{\isachardot}\ Y\ {\isasymin}\ CS\ {\isasymand}\ Y\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}\ {\isasymsubseteq}\ X{\isacharbraceright}{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}finite\ {\isacharquery}A{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  1333 \ \ \isacommand{proof}\isamarkupfalse%
       
  1334 \ {\isacharminus}\isanewline
       
  1335 \ \ \ \ \isacommand{def}\isamarkupfalse%
       
  1336 \ S\ {\isasymequiv}\ {\isachardoublequoteopen}{\isacharbraceleft}{\isacharparenleft}Y{\isacharcomma}\ c{\isacharparenright}{\isacharbar}\ Y\ c{\isachardot}\ Y\ {\isasymin}\ CS\ {\isasymand}\ Y\ {\isacharsemicolon}{\isacharsemicolon}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}\ {\isasymsubseteq}\ X{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  1337 \ \ \ \ \isacommand{def}\isamarkupfalse%
       
  1338 \ h\ {\isasymequiv}\ {\isachardoublequoteopen}{\isasymlambda}\ {\isacharparenleft}Y{\isacharcomma}\ c{\isacharparenright}{\isachardot}\ Trn\ Y\ {\isacharparenleft}CHAR\ c{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1339 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1340 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}CS\ {\isasymtimes}\ {\isacharparenleft}UNIV{\isacharcolon}{\isacharcolon}char\ set{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1341 \ finite\ \isacommand{by}\isamarkupfalse%
       
  1342 \ auto\isanewline
       
  1343 \ \ \ \ \isacommand{hence}\isamarkupfalse%
       
  1344 \ {\isachardoublequoteopen}finite\ S{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1345 \ S{\isacharunderscore}def\ \isanewline
       
  1346 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1347 \ {\isacharparenleft}rule{\isacharunderscore}tac\ B\ {\isacharequal}\ {\isachardoublequoteopen}CS\ {\isasymtimes}\ UNIV{\isachardoublequoteclose}\ \isakeyword{in}\ finite{\isacharunderscore}subset{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  1348 \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  1349 \ \isacommand{have}\isamarkupfalse%
       
  1350 \ {\isachardoublequoteopen}{\isacharquery}A\ {\isacharequal}\ h\ {\isacharbackquote}\ S{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  1351 \ {\isacharparenleft}auto\ simp{\isacharcolon}\ S{\isacharunderscore}def\ h{\isacharunderscore}def\ image{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1352 \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  1353 \ \isacommand{show}\isamarkupfalse%
       
  1354 \ {\isacharquery}thesis\ \isanewline
       
  1355 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1356 \ auto\isanewline
       
  1357 \ \ \isacommand{qed}\isamarkupfalse%
       
  1358 \isanewline
       
  1359 \ \ \isacommand{thus}\isamarkupfalse%
       
  1360 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1361 \ {\isacharparenleft}simp\ add{\isacharcolon}init{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1362 \isacommand{qed}\isamarkupfalse%
       
  1363 %
       
  1364 \endisatagproof
       
  1365 {\isafoldproof}%
       
  1366 %
       
  1367 \isadelimproof
       
  1368 \isanewline
       
  1369 %
       
  1370 \endisadelimproof
       
  1371 \isanewline
       
  1372 \isacommand{lemma}\isamarkupfalse%
       
  1373 \ init{\isacharunderscore}ES{\isacharunderscore}satisfy{\isacharunderscore}Inv{\isacharcolon}\isanewline
       
  1374 \ \ \isakeyword{assumes}\ finite{\isacharunderscore}CS{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1375 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}Inv\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1376 %
       
  1377 \isadelimproof
       
  1378 %
       
  1379 \endisadelimproof
       
  1380 %
       
  1381 \isatagproof
       
  1382 \isacommand{proof}\isamarkupfalse%
       
  1383 \ {\isacharminus}\isanewline
       
  1384 \ \ \isacommand{have}\isamarkupfalse%
       
  1385 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1386 \ finite{\isacharunderscore}CS\isanewline
       
  1387 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1388 \ {\isacharparenleft}simp\ add{\isacharcolon}eqs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1389 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1390 \ \isacommand{have}\isamarkupfalse%
       
  1391 \ {\isachardoublequoteopen}distinct{\isacharunderscore}equas\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\ \ \ \ \ \isanewline
       
  1392 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1393 \ {\isacharparenleft}simp\ add{\isacharcolon}distinct{\isacharunderscore}equas{\isacharunderscore}def\ eqs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1394 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1395 \ \isacommand{have}\isamarkupfalse%
       
  1396 \ {\isachardoublequoteopen}ardenable\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1397 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1398 \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}ardenable{\isacharunderscore}def\ eqs{\isacharunderscore}def\ init{\isacharunderscore}rhs{\isacharunderscore}def\ rhs{\isacharunderscore}nonempty{\isacharunderscore}def\ del{\isacharcolon}L{\isacharunderscore}rhs{\isachardot}simps{\isacharparenright}\isanewline
       
  1399 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1400 \ \isacommand{have}\isamarkupfalse%
       
  1401 \ {\isachardoublequoteopen}valid{\isacharunderscore}eqns\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1402 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1403 \ l{\isacharunderscore}eq{\isacharunderscore}r{\isacharunderscore}in{\isacharunderscore}eqs\ \isacommand{by}\isamarkupfalse%
       
  1404 \ {\isacharparenleft}simp\ add{\isacharcolon}valid{\isacharunderscore}eqns{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1405 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1406 \ \isacommand{have}\isamarkupfalse%
       
  1407 \ {\isachardoublequoteopen}non{\isacharunderscore}empty\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1408 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1409 \ {\isacharparenleft}auto\ simp{\isacharcolon}non{\isacharunderscore}empty{\isacharunderscore}def\ eqs{\isacharunderscore}def\ quotient{\isacharunderscore}def\ Image{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1410 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1411 \ \isacommand{have}\isamarkupfalse%
       
  1412 \ {\isachardoublequoteopen}finite{\isacharunderscore}rhs\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1413 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1414 \ finite{\isacharunderscore}init{\isacharunderscore}rhs{\isacharbrackleft}OF\ finite{\isacharunderscore}CS{\isacharbrackright}\ \isanewline
       
  1415 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1416 \ {\isacharparenleft}auto\ simp{\isacharcolon}finite{\isacharunderscore}rhs{\isacharunderscore}def\ eqs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1417 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1418 \ \isacommand{have}\isamarkupfalse%
       
  1419 \ {\isachardoublequoteopen}self{\isacharunderscore}contained\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1420 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1421 \ {\isacharparenleft}auto\ simp{\isacharcolon}self{\isacharunderscore}contained{\isacharunderscore}def\ eqs{\isacharunderscore}def\ init{\isacharunderscore}rhs{\isacharunderscore}def\ classes{\isacharunderscore}of{\isacharunderscore}def\ lefts{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1422 \ \ \isacommand{ultimately}\isamarkupfalse%
       
  1423 \ \isacommand{show}\isamarkupfalse%
       
  1424 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1425 \ {\isacharparenleft}simp\ add{\isacharcolon}Inv{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1426 \isacommand{qed}\isamarkupfalse%
       
  1427 %
       
  1428 \endisatagproof
       
  1429 {\isafoldproof}%
       
  1430 %
       
  1431 \isadelimproof
       
  1432 %
       
  1433 \endisadelimproof
       
  1434 %
       
  1435 \begin{isamarkuptext}%
       
  1436 From this point until \isa{iteration{\isacharunderscore}step}, we are trying to prove 
       
  1437   that there exists iteration steps which keep \isa{Inv{\isacharparenleft}ES{\isacharparenright}} while
       
  1438   decreasing the size of \isa{ES} with every iteration.%
       
  1439 \end{isamarkuptext}%
       
  1440 \isamarkuptrue%
       
  1441 \isacommand{lemma}\isamarkupfalse%
       
  1442 \ arden{\isacharunderscore}variate{\isacharunderscore}keeps{\isacharunderscore}eq{\isacharcolon}\isanewline
       
  1443 \ \ \isakeyword{assumes}\ l{\isacharunderscore}eq{\isacharunderscore}r{\isacharcolon}\ {\isachardoublequoteopen}X\ {\isacharequal}\ L\ rhs{\isachardoublequoteclose}\isanewline
       
  1444 \ \ \isakeyword{and}\ not{\isacharunderscore}empty{\isacharcolon}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}\ {\isasymnotin}\ L\ {\isacharparenleft}rexp{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1445 \ \ \isakeyword{and}\ finite{\isacharcolon}\ {\isachardoublequoteopen}finite\ rhs{\isachardoublequoteclose}\isanewline
       
  1446 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}X\ {\isacharequal}\ L\ {\isacharparenleft}arden{\isacharunderscore}variate\ X\ rhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1447 %
       
  1448 \isadelimproof
       
  1449 %
       
  1450 \endisadelimproof
       
  1451 %
       
  1452 \isatagproof
       
  1453 \isacommand{proof}\isamarkupfalse%
       
  1454 \ {\isacharminus}\isanewline
       
  1455 \ \ \isacommand{def}\isamarkupfalse%
       
  1456 \ A\ {\isasymequiv}\ {\isachardoublequoteopen}L\ {\isacharparenleft}rexp{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1457 \ \ \isacommand{def}\isamarkupfalse%
       
  1458 \ b\ {\isasymequiv}\ {\isachardoublequoteopen}rhs\ {\isacharminus}\ items{\isacharunderscore}of\ rhs\ X{\isachardoublequoteclose}\isanewline
       
  1459 \ \ \isacommand{def}\isamarkupfalse%
       
  1460 \ B\ {\isasymequiv}\ {\isachardoublequoteopen}L\ b{\isachardoublequoteclose}\ \isanewline
       
  1461 \ \ \isacommand{have}\isamarkupfalse%
       
  1462 \ {\isachardoublequoteopen}X\ {\isacharequal}\ B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isachardoublequoteclose}\isanewline
       
  1463 \ \ \isacommand{proof}\isamarkupfalse%
       
  1464 {\isacharminus}\isanewline
       
  1465 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1466 \ {\isachardoublequoteopen}rhs\ {\isacharequal}\ items{\isacharunderscore}of\ rhs\ X\ {\isasymunion}\ b{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  1467 \ {\isacharparenleft}auto\ simp{\isacharcolon}b{\isacharunderscore}def\ items{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1468 \ \ \ \ \isacommand{hence}\isamarkupfalse%
       
  1469 \ {\isachardoublequoteopen}L\ rhs\ {\isacharequal}\ L{\isacharparenleft}items{\isacharunderscore}of\ rhs\ X\ {\isasymunion}\ b{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  1470 \ simp\isanewline
       
  1471 \ \ \ \ \isacommand{hence}\isamarkupfalse%
       
  1472 \ {\isachardoublequoteopen}L\ rhs\ {\isacharequal}\ L{\isacharparenleft}items{\isacharunderscore}of\ rhs\ X{\isacharparenright}\ {\isasymunion}\ B{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  1473 \ {\isacharparenleft}simp\ only{\isacharcolon}L{\isacharunderscore}rhs{\isacharunderscore}union{\isacharunderscore}distrib\ B{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1474 \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  1475 \ lang{\isacharunderscore}of{\isacharunderscore}rexp{\isacharunderscore}of\isanewline
       
  1476 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1477 \ {\isachardoublequoteopen}L\ rhs\ {\isacharequal}\ X\ {\isacharsemicolon}{\isacharsemicolon}\ A\ {\isasymunion}\ B\ {\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1478 \ finite\ \isacommand{by}\isamarkupfalse%
       
  1479 \ {\isacharparenleft}simp\ only{\isacharcolon}B{\isacharunderscore}def\ b{\isacharunderscore}def\ A{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1480 \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  1481 \ {\isacharquery}thesis\isanewline
       
  1482 \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1483 \ l{\isacharunderscore}eq{\isacharunderscore}r\ not{\isacharunderscore}empty\isanewline
       
  1484 \ \ \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
  1485 \ {\isacharparenleft}drule{\isacharunderscore}tac\ B\ {\isacharequal}\ B\ \isakeyword{and}\ X\ {\isacharequal}\ X\ \isakeyword{in}\ ardens{\isacharunderscore}revised{\isacharparenright}\isanewline
       
  1486 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1487 \ {\isacharparenleft}auto\ simp{\isacharcolon}A{\isacharunderscore}def\ simp\ del{\isacharcolon}L{\isacharunderscore}rhs{\isachardot}simps{\isacharparenright}\isanewline
       
  1488 \ \ \isacommand{qed}\isamarkupfalse%
       
  1489 \isanewline
       
  1490 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1491 \ \isacommand{have}\isamarkupfalse%
       
  1492 \ {\isachardoublequoteopen}L\ {\isacharparenleft}arden{\isacharunderscore}variate\ X\ rhs{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}B\ {\isacharsemicolon}{\isacharsemicolon}\ A{\isasymstar}{\isacharparenright}{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}{\isacharquery}L\ {\isacharequal}\ {\isacharquery}R{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  1493 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1494 \ {\isacharparenleft}simp\ only{\isacharcolon}arden{\isacharunderscore}variate{\isacharunderscore}def\ L{\isacharunderscore}rhs{\isacharunderscore}union{\isacharunderscore}distrib\ lang{\isacharunderscore}of{\isacharunderscore}append{\isacharunderscore}rhs\ \isanewline
       
  1495 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ B{\isacharunderscore}def\ A{\isacharunderscore}def\ b{\isacharunderscore}def\ L{\isacharunderscore}rexp{\isachardot}simps\ seq{\isacharunderscore}union{\isacharunderscore}distrib{\isacharparenright}\isanewline
       
  1496 \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  1497 \ \isacommand{show}\isamarkupfalse%
       
  1498 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1499 \ simp\isanewline
       
  1500 \isacommand{qed}\isamarkupfalse%
       
  1501 %
       
  1502 \endisatagproof
       
  1503 {\isafoldproof}%
       
  1504 %
       
  1505 \isadelimproof
       
  1506 \ \isanewline
       
  1507 %
       
  1508 \endisadelimproof
       
  1509 \isanewline
       
  1510 \isacommand{lemma}\isamarkupfalse%
       
  1511 \ append{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharcolon}\isanewline
       
  1512 \ \ {\isachardoublequoteopen}finite\ rhs\ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}append{\isacharunderscore}rhs{\isacharunderscore}rexp\ rhs\ r{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1513 %
       
  1514 \isadelimproof
       
  1515 %
       
  1516 \endisadelimproof
       
  1517 %
       
  1518 \isatagproof
       
  1519 \isacommand{by}\isamarkupfalse%
       
  1520 \ {\isacharparenleft}auto\ simp{\isacharcolon}append{\isacharunderscore}rhs{\isacharunderscore}rexp{\isacharunderscore}def{\isacharparenright}%
       
  1521 \endisatagproof
       
  1522 {\isafoldproof}%
       
  1523 %
       
  1524 \isadelimproof
       
  1525 \isanewline
       
  1526 %
       
  1527 \endisadelimproof
       
  1528 \isanewline
       
  1529 \isacommand{lemma}\isamarkupfalse%
       
  1530 \ arden{\isacharunderscore}variate{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharcolon}\isanewline
       
  1531 \ \ {\isachardoublequoteopen}finite\ rhs\ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}arden{\isacharunderscore}variate\ X\ rhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1532 %
       
  1533 \isadelimproof
       
  1534 %
       
  1535 \endisadelimproof
       
  1536 %
       
  1537 \isatagproof
       
  1538 \isacommand{by}\isamarkupfalse%
       
  1539 \ {\isacharparenleft}auto\ simp{\isacharcolon}arden{\isacharunderscore}variate{\isacharunderscore}def\ append{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharparenright}%
       
  1540 \endisatagproof
       
  1541 {\isafoldproof}%
       
  1542 %
       
  1543 \isadelimproof
       
  1544 \isanewline
       
  1545 %
       
  1546 \endisadelimproof
       
  1547 \isanewline
       
  1548 \isacommand{lemma}\isamarkupfalse%
       
  1549 \ append{\isacharunderscore}keeps{\isacharunderscore}nonempty{\isacharcolon}\isanewline
       
  1550 \ \ {\isachardoublequoteopen}rhs{\isacharunderscore}nonempty\ rhs\ {\isasymLongrightarrow}\ rhs{\isacharunderscore}nonempty\ {\isacharparenleft}append{\isacharunderscore}rhs{\isacharunderscore}rexp\ rhs\ r{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1551 %
       
  1552 \isadelimproof
       
  1553 %
       
  1554 \endisadelimproof
       
  1555 %
       
  1556 \isatagproof
       
  1557 \isacommand{apply}\isamarkupfalse%
       
  1558 \ {\isacharparenleft}auto\ simp{\isacharcolon}rhs{\isacharunderscore}nonempty{\isacharunderscore}def\ append{\isacharunderscore}rhs{\isacharunderscore}rexp{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1559 \isacommand{by}\isamarkupfalse%
       
  1560 \ {\isacharparenleft}case{\isacharunderscore}tac\ x{\isacharcomma}\ auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}%
       
  1561 \endisatagproof
       
  1562 {\isafoldproof}%
       
  1563 %
       
  1564 \isadelimproof
       
  1565 \isanewline
       
  1566 %
       
  1567 \endisadelimproof
       
  1568 \isanewline
       
  1569 \isacommand{lemma}\isamarkupfalse%
       
  1570 \ nonempty{\isacharunderscore}set{\isacharunderscore}sub{\isacharcolon}\isanewline
       
  1571 \ \ {\isachardoublequoteopen}rhs{\isacharunderscore}nonempty\ rhs\ {\isasymLongrightarrow}\ rhs{\isacharunderscore}nonempty\ {\isacharparenleft}rhs\ {\isacharminus}\ A{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1572 %
       
  1573 \isadelimproof
       
  1574 %
       
  1575 \endisadelimproof
       
  1576 %
       
  1577 \isatagproof
       
  1578 \isacommand{by}\isamarkupfalse%
       
  1579 \ {\isacharparenleft}auto\ simp{\isacharcolon}rhs{\isacharunderscore}nonempty{\isacharunderscore}def{\isacharparenright}%
       
  1580 \endisatagproof
       
  1581 {\isafoldproof}%
       
  1582 %
       
  1583 \isadelimproof
       
  1584 \isanewline
       
  1585 %
       
  1586 \endisadelimproof
       
  1587 \isanewline
       
  1588 \isacommand{lemma}\isamarkupfalse%
       
  1589 \ nonempty{\isacharunderscore}set{\isacharunderscore}union{\isacharcolon}\isanewline
       
  1590 \ \ {\isachardoublequoteopen}{\isasymlbrakk}rhs{\isacharunderscore}nonempty\ rhs{\isacharsemicolon}\ rhs{\isacharunderscore}nonempty\ rhs{\isacharprime}{\isasymrbrakk}\ {\isasymLongrightarrow}\ rhs{\isacharunderscore}nonempty\ {\isacharparenleft}rhs\ {\isasymunion}\ rhs{\isacharprime}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1591 %
       
  1592 \isadelimproof
       
  1593 %
       
  1594 \endisadelimproof
       
  1595 %
       
  1596 \isatagproof
       
  1597 \isacommand{by}\isamarkupfalse%
       
  1598 \ {\isacharparenleft}auto\ simp{\isacharcolon}rhs{\isacharunderscore}nonempty{\isacharunderscore}def{\isacharparenright}%
       
  1599 \endisatagproof
       
  1600 {\isafoldproof}%
       
  1601 %
       
  1602 \isadelimproof
       
  1603 \isanewline
       
  1604 %
       
  1605 \endisadelimproof
       
  1606 \isanewline
       
  1607 \isacommand{lemma}\isamarkupfalse%
       
  1608 \ arden{\isacharunderscore}variate{\isacharunderscore}keeps{\isacharunderscore}nonempty{\isacharcolon}\isanewline
       
  1609 \ \ {\isachardoublequoteopen}rhs{\isacharunderscore}nonempty\ rhs\ {\isasymLongrightarrow}\ rhs{\isacharunderscore}nonempty\ {\isacharparenleft}arden{\isacharunderscore}variate\ X\ rhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1610 %
       
  1611 \isadelimproof
       
  1612 %
       
  1613 \endisadelimproof
       
  1614 %
       
  1615 \isatagproof
       
  1616 \isacommand{by}\isamarkupfalse%
       
  1617 \ {\isacharparenleft}simp\ only{\isacharcolon}arden{\isacharunderscore}variate{\isacharunderscore}def\ append{\isacharunderscore}keeps{\isacharunderscore}nonempty\ nonempty{\isacharunderscore}set{\isacharunderscore}sub{\isacharparenright}%
       
  1618 \endisatagproof
       
  1619 {\isafoldproof}%
       
  1620 %
       
  1621 \isadelimproof
       
  1622 \isanewline
       
  1623 %
       
  1624 \endisadelimproof
       
  1625 \isanewline
       
  1626 \isanewline
       
  1627 \isacommand{lemma}\isamarkupfalse%
       
  1628 \ rhs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}nonempty{\isacharcolon}\isanewline
       
  1629 \ \ {\isachardoublequoteopen}{\isasymlbrakk}rhs{\isacharunderscore}nonempty\ rhs{\isacharsemicolon}\ rhs{\isacharunderscore}nonempty\ xrhs{\isasymrbrakk}\ {\isasymLongrightarrow}\ rhs{\isacharunderscore}nonempty\ {\isacharparenleft}rhs{\isacharunderscore}subst\ rhs\ X\ xrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1630 %
       
  1631 \isadelimproof
       
  1632 %
       
  1633 \endisadelimproof
       
  1634 %
       
  1635 \isatagproof
       
  1636 \isacommand{by}\isamarkupfalse%
       
  1637 \ {\isacharparenleft}simp\ only{\isacharcolon}rhs{\isacharunderscore}subst{\isacharunderscore}def\ append{\isacharunderscore}keeps{\isacharunderscore}nonempty\ \ nonempty{\isacharunderscore}set{\isacharunderscore}union\ nonempty{\isacharunderscore}set{\isacharunderscore}sub{\isacharparenright}%
       
  1638 \endisatagproof
       
  1639 {\isafoldproof}%
       
  1640 %
       
  1641 \isadelimproof
       
  1642 \isanewline
       
  1643 %
       
  1644 \endisadelimproof
       
  1645 \isanewline
       
  1646 \isacommand{lemma}\isamarkupfalse%
       
  1647 \ rhs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}eq{\isacharcolon}\isanewline
       
  1648 \ \ \isakeyword{assumes}\ substor{\isacharcolon}\ {\isachardoublequoteopen}X\ {\isacharequal}\ L\ xrhs{\isachardoublequoteclose}\isanewline
       
  1649 \ \ \isakeyword{and}\ finite{\isacharcolon}\ {\isachardoublequoteopen}finite\ rhs{\isachardoublequoteclose}\isanewline
       
  1650 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}L\ {\isacharparenleft}rhs{\isacharunderscore}subst\ rhs\ X\ xrhs{\isacharparenright}\ {\isacharequal}\ L\ rhs{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}{\isacharquery}Left\ {\isacharequal}\ {\isacharquery}Right{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  1651 %
       
  1652 \isadelimproof
       
  1653 %
       
  1654 \endisadelimproof
       
  1655 %
       
  1656 \isatagproof
       
  1657 \isacommand{proof}\isamarkupfalse%
       
  1658 {\isacharminus}\isanewline
       
  1659 \ \ \isacommand{def}\isamarkupfalse%
       
  1660 \ A\ {\isasymequiv}\ {\isachardoublequoteopen}L\ {\isacharparenleft}rhs\ {\isacharminus}\ items{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1661 \ \ \isacommand{have}\isamarkupfalse%
       
  1662 \ {\isachardoublequoteopen}{\isacharquery}Left\ {\isacharequal}\ A\ {\isasymunion}\ L\ {\isacharparenleft}append{\isacharunderscore}rhs{\isacharunderscore}rexp\ xrhs\ {\isacharparenleft}rexp{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1663 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1664 \ {\isacharparenleft}simp\ only{\isacharcolon}rhs{\isacharunderscore}subst{\isacharunderscore}def\ L{\isacharunderscore}rhs{\isacharunderscore}union{\isacharunderscore}distrib\ A{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1665 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1666 \ \isacommand{have}\isamarkupfalse%
       
  1667 \ {\isachardoublequoteopen}{\isacharquery}Right\ {\isacharequal}\ A\ {\isasymunion}\ L\ {\isacharparenleft}items{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1668 \ \ \isacommand{proof}\isamarkupfalse%
       
  1669 {\isacharminus}\isanewline
       
  1670 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1671 \ {\isachardoublequoteopen}rhs\ {\isacharequal}\ {\isacharparenleft}rhs\ {\isacharminus}\ items{\isacharunderscore}of\ rhs\ X{\isacharparenright}\ {\isasymunion}\ {\isacharparenleft}items{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  1672 \ {\isacharparenleft}auto\ simp{\isacharcolon}items{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1673 \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  1674 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1675 \ {\isacharparenleft}simp\ only{\isacharcolon}L{\isacharunderscore}rhs{\isacharunderscore}union{\isacharunderscore}distrib\ A{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1676 \ \ \isacommand{qed}\isamarkupfalse%
       
  1677 \isanewline
       
  1678 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1679 \ \isacommand{have}\isamarkupfalse%
       
  1680 \ {\isachardoublequoteopen}L\ {\isacharparenleft}append{\isacharunderscore}rhs{\isacharunderscore}rexp\ xrhs\ {\isacharparenleft}rexp{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isacharparenright}\ {\isacharequal}\ L\ {\isacharparenleft}items{\isacharunderscore}of\ rhs\ X{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  1681 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1682 \ finite\ substor\ \ \isacommand{by}\isamarkupfalse%
       
  1683 \ {\isacharparenleft}simp\ only{\isacharcolon}lang{\isacharunderscore}of{\isacharunderscore}append{\isacharunderscore}rhs\ lang{\isacharunderscore}of{\isacharunderscore}rexp{\isacharunderscore}of{\isacharparenright}\isanewline
       
  1684 \ \ \isacommand{ultimately}\isamarkupfalse%
       
  1685 \ \isacommand{show}\isamarkupfalse%
       
  1686 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1687 \ simp\isanewline
       
  1688 \isacommand{qed}\isamarkupfalse%
       
  1689 %
       
  1690 \endisatagproof
       
  1691 {\isafoldproof}%
       
  1692 %
       
  1693 \isadelimproof
       
  1694 \isanewline
       
  1695 %
       
  1696 \endisadelimproof
       
  1697 \isanewline
       
  1698 \isacommand{lemma}\isamarkupfalse%
       
  1699 \ rhs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharunderscore}rhs{\isacharcolon}\isanewline
       
  1700 \ \ {\isachardoublequoteopen}{\isasymlbrakk}finite\ rhs{\isacharsemicolon}\ finite\ yrhs{\isasymrbrakk}\ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}rhs{\isacharunderscore}subst\ rhs\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1701 %
       
  1702 \isadelimproof
       
  1703 %
       
  1704 \endisadelimproof
       
  1705 %
       
  1706 \isatagproof
       
  1707 \isacommand{by}\isamarkupfalse%
       
  1708 \ {\isacharparenleft}auto\ simp{\isacharcolon}rhs{\isacharunderscore}subst{\isacharunderscore}def\ append{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharparenright}%
       
  1709 \endisatagproof
       
  1710 {\isafoldproof}%
       
  1711 %
       
  1712 \isadelimproof
       
  1713 \isanewline
       
  1714 %
       
  1715 \endisadelimproof
       
  1716 \isanewline
       
  1717 \isacommand{lemma}\isamarkupfalse%
       
  1718 \ eqs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharcolon}\isanewline
       
  1719 \ \ \isakeyword{assumes}\ finite{\isacharcolon}{\isachardoublequoteopen}finite\ {\isacharparenleft}ES{\isacharcolon}{\isacharcolon}\ {\isacharparenleft}string\ set\ {\isasymtimes}\ rhs{\isacharunderscore}item\ set{\isacharparenright}\ set{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1720 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1721 %
       
  1722 \isadelimproof
       
  1723 %
       
  1724 \endisadelimproof
       
  1725 %
       
  1726 \isatagproof
       
  1727 \isacommand{proof}\isamarkupfalse%
       
  1728 \ {\isacharminus}\isanewline
       
  1729 \ \ \isacommand{have}\isamarkupfalse%
       
  1730 \ {\isachardoublequoteopen}finite\ {\isacharbraceleft}{\isacharparenleft}Ya{\isacharcomma}\ rhs{\isacharunderscore}subst\ yrhsa\ Y\ yrhs{\isacharparenright}\ {\isacharbar}Ya\ yrhsa{\isachardot}\ {\isacharparenleft}Ya{\isacharcomma}\ yrhsa{\isacharparenright}\ {\isasymin}\ ES{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  1731 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}finite\ {\isacharquery}A{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  1732 \ \ \isacommand{proof}\isamarkupfalse%
       
  1733 {\isacharminus}\isanewline
       
  1734 \ \ \ \ \isacommand{def}\isamarkupfalse%
       
  1735 \ eqns{\isacharprime}\ {\isasymequiv}\ {\isachardoublequoteopen}{\isacharbraceleft}{\isacharparenleft}{\isacharparenleft}Ya{\isacharcolon}{\isacharcolon}string\ set{\isacharparenright}{\isacharcomma}\ yrhsa{\isacharparenright}{\isacharbar}\ Ya\ yrhsa{\isachardot}\ {\isacharparenleft}Ya{\isacharcomma}\ yrhsa{\isacharparenright}\ {\isasymin}\ ES{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  1736 \ \ \ \ \isacommand{def}\isamarkupfalse%
       
  1737 \ h\ {\isasymequiv}\ {\isachardoublequoteopen}{\isasymlambda}\ {\isacharparenleft}{\isacharparenleft}Ya{\isacharcolon}{\isacharcolon}string\ set{\isacharparenright}{\isacharcomma}\ yrhsa{\isacharparenright}{\isachardot}\ {\isacharparenleft}Ya{\isacharcomma}\ rhs{\isacharunderscore}subst\ yrhsa\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1738 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1739 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}h\ {\isacharbackquote}\ eqns{\isacharprime}{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1740 \ finite\ h{\isacharunderscore}def\ eqns{\isacharprime}{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
  1741 \ auto\isanewline
       
  1742 \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  1743 \ \isacommand{have}\isamarkupfalse%
       
  1744 \ {\isachardoublequoteopen}{\isacharquery}A\ {\isacharequal}\ h\ {\isacharbackquote}\ eqns{\isacharprime}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  1745 \ {\isacharparenleft}auto\ simp{\isacharcolon}h{\isacharunderscore}def\ eqns{\isacharprime}{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1746 \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  1747 \ \isacommand{show}\isamarkupfalse%
       
  1748 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1749 \ auto\ \ \ \ \ \ \isanewline
       
  1750 \ \ \isacommand{qed}\isamarkupfalse%
       
  1751 \isanewline
       
  1752 \ \ \isacommand{thus}\isamarkupfalse%
       
  1753 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1754 \ {\isacharparenleft}simp\ add{\isacharcolon}eqs{\isacharunderscore}subst{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1755 \isacommand{qed}\isamarkupfalse%
       
  1756 %
       
  1757 \endisatagproof
       
  1758 {\isafoldproof}%
       
  1759 %
       
  1760 \isadelimproof
       
  1761 \isanewline
       
  1762 %
       
  1763 \endisadelimproof
       
  1764 \isanewline
       
  1765 \isacommand{lemma}\isamarkupfalse%
       
  1766 \ eqs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharunderscore}rhs{\isacharcolon}\isanewline
       
  1767 \ \ {\isachardoublequoteopen}{\isasymlbrakk}finite{\isacharunderscore}rhs\ ES{\isacharsemicolon}\ finite\ yrhs{\isasymrbrakk}\ {\isasymLongrightarrow}\ finite{\isacharunderscore}rhs\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1768 %
       
  1769 \isadelimproof
       
  1770 %
       
  1771 \endisadelimproof
       
  1772 %
       
  1773 \isatagproof
       
  1774 \isacommand{by}\isamarkupfalse%
       
  1775 \ {\isacharparenleft}auto\ intro{\isacharcolon}rhs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharunderscore}rhs\ simp\ add{\isacharcolon}eqs{\isacharunderscore}subst{\isacharunderscore}def\ finite{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}%
       
  1776 \endisatagproof
       
  1777 {\isafoldproof}%
       
  1778 %
       
  1779 \isadelimproof
       
  1780 \isanewline
       
  1781 %
       
  1782 \endisadelimproof
       
  1783 \isanewline
       
  1784 \isacommand{lemma}\isamarkupfalse%
       
  1785 \ append{\isacharunderscore}rhs{\isacharunderscore}keeps{\isacharunderscore}cls{\isacharcolon}\isanewline
       
  1786 \ \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ {\isacharparenleft}append{\isacharunderscore}rhs{\isacharunderscore}rexp\ rhs\ r{\isacharparenright}\ {\isacharequal}\ classes{\isacharunderscore}of\ rhs{\isachardoublequoteclose}\isanewline
       
  1787 %
       
  1788 \isadelimproof
       
  1789 %
       
  1790 \endisadelimproof
       
  1791 %
       
  1792 \isatagproof
       
  1793 \isacommand{apply}\isamarkupfalse%
       
  1794 \ {\isacharparenleft}auto\ simp{\isacharcolon}classes{\isacharunderscore}of{\isacharunderscore}def\ append{\isacharunderscore}rhs{\isacharunderscore}rexp{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1795 \isacommand{apply}\isamarkupfalse%
       
  1796 \ {\isacharparenleft}case{\isacharunderscore}tac\ xa{\isacharcomma}\ auto\ simp{\isacharcolon}image{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1797 \isacommand{by}\isamarkupfalse%
       
  1798 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}SEQ\ ra\ r{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}Trn\ x\ ra{\isachardoublequoteclose}\ \isakeyword{in}\ bexI{\isacharcomma}\ simp{\isacharplus}{\isacharparenright}%
       
  1799 \endisatagproof
       
  1800 {\isafoldproof}%
       
  1801 %
       
  1802 \isadelimproof
       
  1803 \isanewline
       
  1804 %
       
  1805 \endisadelimproof
       
  1806 \isanewline
       
  1807 \isacommand{lemma}\isamarkupfalse%
       
  1808 \ arden{\isacharunderscore}variate{\isacharunderscore}removes{\isacharunderscore}cl{\isacharcolon}\isanewline
       
  1809 \ \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}\ {\isacharequal}\ classes{\isacharunderscore}of\ yrhs\ {\isacharminus}\ {\isacharbraceleft}Y{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  1810 %
       
  1811 \isadelimproof
       
  1812 %
       
  1813 \endisadelimproof
       
  1814 %
       
  1815 \isatagproof
       
  1816 \isacommand{apply}\isamarkupfalse%
       
  1817 \ {\isacharparenleft}simp\ add{\isacharcolon}arden{\isacharunderscore}variate{\isacharunderscore}def\ append{\isacharunderscore}rhs{\isacharunderscore}keeps{\isacharunderscore}cls\ items{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1818 \isacommand{by}\isamarkupfalse%
       
  1819 \ {\isacharparenleft}auto\ simp{\isacharcolon}classes{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}%
       
  1820 \endisatagproof
       
  1821 {\isafoldproof}%
       
  1822 %
       
  1823 \isadelimproof
       
  1824 \isanewline
       
  1825 %
       
  1826 \endisadelimproof
       
  1827 \isanewline
       
  1828 \isacommand{lemma}\isamarkupfalse%
       
  1829 \ lefts{\isacharunderscore}of{\isacharunderscore}keeps{\isacharunderscore}cls{\isacharcolon}\isanewline
       
  1830 \ \ {\isachardoublequoteopen}lefts{\isacharunderscore}of\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ yrhs{\isacharparenright}\ {\isacharequal}\ lefts{\isacharunderscore}of\ ES{\isachardoublequoteclose}\isanewline
       
  1831 %
       
  1832 \isadelimproof
       
  1833 %
       
  1834 \endisadelimproof
       
  1835 %
       
  1836 \isatagproof
       
  1837 \isacommand{by}\isamarkupfalse%
       
  1838 \ {\isacharparenleft}auto\ simp{\isacharcolon}lefts{\isacharunderscore}of{\isacharunderscore}def\ eqs{\isacharunderscore}subst{\isacharunderscore}def{\isacharparenright}%
       
  1839 \endisatagproof
       
  1840 {\isafoldproof}%
       
  1841 %
       
  1842 \isadelimproof
       
  1843 \isanewline
       
  1844 %
       
  1845 \endisadelimproof
       
  1846 \isanewline
       
  1847 \isacommand{lemma}\isamarkupfalse%
       
  1848 \ rhs{\isacharunderscore}subst{\isacharunderscore}updates{\isacharunderscore}cls{\isacharcolon}\isanewline
       
  1849 \ \ {\isachardoublequoteopen}X\ {\isasymnotin}\ classes{\isacharunderscore}of\ xrhs\ {\isasymLongrightarrow}\ \isanewline
       
  1850 \ \ \ \ \ \ classes{\isacharunderscore}of\ {\isacharparenleft}rhs{\isacharunderscore}subst\ rhs\ X\ xrhs{\isacharparenright}\ {\isacharequal}\ classes{\isacharunderscore}of\ rhs\ {\isasymunion}\ classes{\isacharunderscore}of\ xrhs\ {\isacharminus}\ {\isacharbraceleft}X{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  1851 %
       
  1852 \isadelimproof
       
  1853 %
       
  1854 \endisadelimproof
       
  1855 %
       
  1856 \isatagproof
       
  1857 \isacommand{apply}\isamarkupfalse%
       
  1858 \ {\isacharparenleft}simp\ only{\isacharcolon}rhs{\isacharunderscore}subst{\isacharunderscore}def\ append{\isacharunderscore}rhs{\isacharunderscore}keeps{\isacharunderscore}cls\ \isanewline
       
  1859 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ classes{\isacharunderscore}of{\isacharunderscore}union{\isacharunderscore}distrib{\isacharbrackleft}THEN\ sym{\isacharbrackright}{\isacharparenright}\isanewline
       
  1860 \isacommand{by}\isamarkupfalse%
       
  1861 \ {\isacharparenleft}auto\ simp{\isacharcolon}classes{\isacharunderscore}of{\isacharunderscore}def\ items{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}%
       
  1862 \endisatagproof
       
  1863 {\isafoldproof}%
       
  1864 %
       
  1865 \isadelimproof
       
  1866 \isanewline
       
  1867 %
       
  1868 \endisadelimproof
       
  1869 \isanewline
       
  1870 \isacommand{lemma}\isamarkupfalse%
       
  1871 \ eqs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}self{\isacharunderscore}contained{\isacharcolon}\isanewline
       
  1872 \ \ \isakeyword{fixes}\ Y\isanewline
       
  1873 \ \ \isakeyword{assumes}\ sc{\isacharcolon}\ {\isachardoublequoteopen}self{\isacharunderscore}contained\ {\isacharparenleft}ES\ {\isasymunion}\ {\isacharbraceleft}{\isacharparenleft}Y{\isacharcomma}\ yrhs{\isacharparenright}{\isacharbraceright}{\isacharparenright}{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}self{\isacharunderscore}contained\ {\isacharquery}A{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  1874 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}self{\isacharunderscore}contained\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  1875 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}self{\isacharunderscore}contained\ {\isacharquery}B{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  1876 %
       
  1877 \isadelimproof
       
  1878 %
       
  1879 \endisadelimproof
       
  1880 %
       
  1881 \isatagproof
       
  1882 \isacommand{proof}\isamarkupfalse%
       
  1883 {\isacharminus}\isanewline
       
  1884 \ \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  1885 \ \isacommand{fix}\isamarkupfalse%
       
  1886 \ X\ xrhs{\isacharprime}\isanewline
       
  1887 \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  1888 \ {\isachardoublequoteopen}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharprime}{\isacharparenright}\ {\isasymin}\ {\isacharquery}B{\isachardoublequoteclose}\isanewline
       
  1889 \ \ \ \ \isacommand{then}\isamarkupfalse%
       
  1890 \ \isacommand{obtain}\isamarkupfalse%
       
  1891 \ xrhs\ \isanewline
       
  1892 \ \ \ \ \ \ \isakeyword{where}\ xrhs{\isacharunderscore}xrhs{\isacharprime}{\isacharcolon}\ {\isachardoublequoteopen}xrhs{\isacharprime}\ {\isacharequal}\ rhs{\isacharunderscore}subst\ xrhs\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1893 \ \ \ \ \ \ \isakeyword{and}\ X{\isacharunderscore}in{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}\ {\isasymin}\ ES{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  1894 \ {\isacharparenleft}simp\ add{\isacharcolon}eqs{\isacharunderscore}subst{\isacharunderscore}def{\isacharcomma}\ blast{\isacharparenright}\ \ \ \ \isanewline
       
  1895 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1896 \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ xrhs{\isacharprime}\ {\isasymsubseteq}\ lefts{\isacharunderscore}of\ {\isacharquery}B{\isachardoublequoteclose}\isanewline
       
  1897 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  1898 {\isacharminus}\isanewline
       
  1899 \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1900 \ {\isachardoublequoteopen}lefts{\isacharunderscore}of\ {\isacharquery}B\ {\isacharequal}\ lefts{\isacharunderscore}of\ ES{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  1901 \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}lefts{\isacharunderscore}of{\isacharunderscore}def\ eqs{\isacharunderscore}subst{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1902 \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  1903 \ \isacommand{have}\isamarkupfalse%
       
  1904 \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ xrhs{\isacharprime}\ {\isasymsubseteq}\ lefts{\isacharunderscore}of\ ES{\isachardoublequoteclose}\isanewline
       
  1905 \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  1906 {\isacharminus}\isanewline
       
  1907 \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1908 \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ xrhs{\isacharprime}\ {\isasymsubseteq}\ \isanewline
       
  1909 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ classes{\isacharunderscore}of\ xrhs\ {\isasymunion}\ classes{\isacharunderscore}of\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}\ {\isacharminus}\ {\isacharbraceleft}Y{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  1910 \ \ \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  1911 {\isacharminus}\isanewline
       
  1912 \ \ \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  1913 \ {\isachardoublequoteopen}Y\ {\isasymnotin}\ classes{\isacharunderscore}of\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  1914 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1915 \ arden{\isacharunderscore}variate{\isacharunderscore}removes{\isacharunderscore}cl\ \isacommand{by}\isamarkupfalse%
       
  1916 \ simp\isanewline
       
  1917 \ \ \ \ \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  1918 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  1919 \ xrhs{\isacharunderscore}xrhs{\isacharprime}\ \isacommand{by}\isamarkupfalse%
       
  1920 \ {\isacharparenleft}auto\ simp{\isacharcolon}rhs{\isacharunderscore}subst{\isacharunderscore}updates{\isacharunderscore}cls{\isacharparenright}\isanewline
       
  1921 \ \ \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  1922 \isanewline
       
  1923 \ \ \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  1924 \ \isacommand{have}\isamarkupfalse%
       
  1925 \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ xrhs\ {\isasymsubseteq}\ lefts{\isacharunderscore}of\ ES\ {\isasymunion}\ {\isacharbraceleft}Y{\isacharbraceright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  1926 \ X{\isacharunderscore}in\ sc\isanewline
       
  1927 \ \ \ \ \ \ \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
  1928 \ {\isacharparenleft}simp\ only{\isacharcolon}self{\isacharunderscore}contained{\isacharunderscore}def\ lefts{\isacharunderscore}of{\isacharunderscore}union{\isacharunderscore}distrib{\isacharbrackleft}THEN\ sym{\isacharbrackright}{\isacharparenright}\isanewline
       
  1929 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1930 \ {\isacharparenleft}drule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ bspec{\isacharcomma}\ auto\ simp{\isacharcolon}lefts{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1931 \ \ \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  1932 \ \isacommand{have}\isamarkupfalse%
       
  1933 \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}\ {\isasymsubseteq}\ lefts{\isacharunderscore}of\ ES\ {\isasymunion}\ {\isacharbraceleft}Y{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  1934 \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1935 \ sc\ \isanewline
       
  1936 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1937 \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}arden{\isacharunderscore}variate{\isacharunderscore}removes{\isacharunderscore}cl\ self{\isacharunderscore}contained{\isacharunderscore}def\ lefts{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1938 \ \ \ \ \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  1939 \ \isacommand{show}\isamarkupfalse%
       
  1940 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1941 \ auto\isanewline
       
  1942 \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  1943 \isanewline
       
  1944 \ \ \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  1945 \ \isacommand{show}\isamarkupfalse%
       
  1946 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1947 \ simp\isanewline
       
  1948 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  1949 \isanewline
       
  1950 \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  1951 \ \isacommand{thus}\isamarkupfalse%
       
  1952 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  1953 \ {\isacharparenleft}auto\ simp\ only{\isacharcolon}eqs{\isacharunderscore}subst{\isacharunderscore}def\ self{\isacharunderscore}contained{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1954 \isacommand{qed}\isamarkupfalse%
       
  1955 %
       
  1956 \endisatagproof
       
  1957 {\isafoldproof}%
       
  1958 %
       
  1959 \isadelimproof
       
  1960 \isanewline
       
  1961 %
       
  1962 \endisadelimproof
       
  1963 \isanewline
       
  1964 \isacommand{lemma}\isamarkupfalse%
       
  1965 \ eqs{\isacharunderscore}subst{\isacharunderscore}satisfy{\isacharunderscore}Inv{\isacharcolon}\isanewline
       
  1966 \ \ \isakeyword{assumes}\ Inv{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}Inv\ {\isacharparenleft}ES\ {\isasymunion}\ {\isacharbraceleft}{\isacharparenleft}Y{\isacharcomma}\ yrhs{\isacharparenright}{\isacharbraceright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1967 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}Inv\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  1968 %
       
  1969 \isadelimproof
       
  1970 %
       
  1971 \endisadelimproof
       
  1972 %
       
  1973 \isatagproof
       
  1974 \isacommand{proof}\isamarkupfalse%
       
  1975 \ {\isacharminus}\ \ \isanewline
       
  1976 \ \ \isacommand{have}\isamarkupfalse%
       
  1977 \ finite{\isacharunderscore}yrhs{\isacharcolon}\ {\isachardoublequoteopen}finite\ yrhs{\isachardoublequoteclose}\ \isanewline
       
  1978 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1979 \ Inv{\isacharunderscore}ES\ \isacommand{by}\isamarkupfalse%
       
  1980 \ {\isacharparenleft}auto\ simp{\isacharcolon}Inv{\isacharunderscore}def\ finite{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1981 \ \ \isacommand{have}\isamarkupfalse%
       
  1982 \ nonempty{\isacharunderscore}yrhs{\isacharcolon}\ {\isachardoublequoteopen}rhs{\isacharunderscore}nonempty\ yrhs{\isachardoublequoteclose}\ \isanewline
       
  1983 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1984 \ Inv{\isacharunderscore}ES\ \isacommand{by}\isamarkupfalse%
       
  1985 \ {\isacharparenleft}auto\ simp{\isacharcolon}Inv{\isacharunderscore}def\ ardenable{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1986 \ \ \isacommand{have}\isamarkupfalse%
       
  1987 \ Y{\isacharunderscore}eq{\isacharunderscore}yrhs{\isacharcolon}\ {\isachardoublequoteopen}Y\ {\isacharequal}\ L\ yrhs{\isachardoublequoteclose}\ \isanewline
       
  1988 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1989 \ Inv{\isacharunderscore}ES\ \isacommand{by}\isamarkupfalse%
       
  1990 \ {\isacharparenleft}simp\ only{\isacharcolon}Inv{\isacharunderscore}def\ valid{\isacharunderscore}eqns{\isacharunderscore}def{\isacharcomma}\ blast{\isacharparenright}\isanewline
       
  1991 \ \ \isacommand{have}\isamarkupfalse%
       
  1992 \ {\isachardoublequoteopen}distinct{\isacharunderscore}equas\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  1993 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  1994 \ Inv{\isacharunderscore}ES\isanewline
       
  1995 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  1996 \ {\isacharparenleft}auto\ simp{\isacharcolon}distinct{\isacharunderscore}equas{\isacharunderscore}def\ eqs{\isacharunderscore}subst{\isacharunderscore}def\ Inv{\isacharunderscore}def{\isacharparenright}\isanewline
       
  1997 \ \ \isacommand{moreover}\isamarkupfalse%
       
  1998 \ \isacommand{have}\isamarkupfalse%
       
  1999 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  2000 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  2001 \ Inv{\isacharunderscore}ES\ \isacommand{by}\isamarkupfalse%
       
  2002 \ {\isacharparenleft}simp\ add{\isacharcolon}Inv{\isacharunderscore}def\ eqs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharparenright}\isanewline
       
  2003 \ \ \isacommand{moreover}\isamarkupfalse%
       
  2004 \ \isacommand{have}\isamarkupfalse%
       
  2005 \ {\isachardoublequoteopen}finite{\isacharunderscore}rhs\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2006 \ \ \isacommand{proof}\isamarkupfalse%
       
  2007 {\isacharminus}\isanewline
       
  2008 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2009 \ {\isachardoublequoteopen}finite{\isacharunderscore}rhs\ ES{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2010 \ Inv{\isacharunderscore}ES\ \isanewline
       
  2011 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2012 \ {\isacharparenleft}simp\ add{\isacharcolon}Inv{\isacharunderscore}def\ finite{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2013 \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  2014 \ \isacommand{have}\isamarkupfalse%
       
  2015 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2016 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  2017 \ {\isacharminus}\isanewline
       
  2018 \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2019 \ {\isachardoublequoteopen}finite\ yrhs{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2020 \ Inv{\isacharunderscore}ES\ \isanewline
       
  2021 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2022 \ {\isacharparenleft}auto\ simp{\isacharcolon}Inv{\isacharunderscore}def\ finite{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2023 \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  2024 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  2025 \ arden{\isacharunderscore}variate{\isacharunderscore}keeps{\isacharunderscore}finite\ \isacommand{by}\isamarkupfalse%
       
  2026 \ simp\isanewline
       
  2027 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  2028 \isanewline
       
  2029 \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  2030 \ \isacommand{show}\isamarkupfalse%
       
  2031 \ {\isacharquery}thesis\ \isanewline
       
  2032 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2033 \ {\isacharparenleft}simp\ add{\isacharcolon}eqs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharunderscore}rhs{\isacharparenright}\isanewline
       
  2034 \ \ \isacommand{qed}\isamarkupfalse%
       
  2035 \isanewline
       
  2036 \ \ \isacommand{moreover}\isamarkupfalse%
       
  2037 \ \isacommand{have}\isamarkupfalse%
       
  2038 \ {\isachardoublequoteopen}ardenable\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2039 \ \ \isacommand{proof}\isamarkupfalse%
       
  2040 \ {\isacharminus}\ \isanewline
       
  2041 \ \ \ \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  2042 \ \isacommand{fix}\isamarkupfalse%
       
  2043 \ X\ rhs\isanewline
       
  2044 \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  2045 \ {\isachardoublequoteopen}{\isacharparenleft}X{\isacharcomma}\ rhs{\isacharparenright}\ {\isasymin}\ ES{\isachardoublequoteclose}\isanewline
       
  2046 \ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
       
  2047 \ {\isachardoublequoteopen}rhs{\isacharunderscore}nonempty\ rhs{\isachardoublequoteclose}\ \ \isacommand{using}\isamarkupfalse%
       
  2048 \ prems\ Inv{\isacharunderscore}ES\ \ \isanewline
       
  2049 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2050 \ {\isacharparenleft}simp\ add{\isacharcolon}Inv{\isacharunderscore}def\ ardenable{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2051 \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  2052 \ nonempty{\isacharunderscore}yrhs\ \isanewline
       
  2053 \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2054 \ {\isachardoublequoteopen}rhs{\isacharunderscore}nonempty\ {\isacharparenleft}rhs{\isacharunderscore}subst\ rhs\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2055 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2056 \ {\isacharparenleft}simp\ add{\isacharcolon}nonempty{\isacharunderscore}yrhs\ \isanewline
       
  2057 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ rhs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}nonempty\ arden{\isacharunderscore}variate{\isacharunderscore}keeps{\isacharunderscore}nonempty{\isacharparenright}\isanewline
       
  2058 \ \ \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  2059 \ \isacommand{thus}\isamarkupfalse%
       
  2060 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  2061 \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}ardenable{\isacharunderscore}def\ eqs{\isacharunderscore}subst{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2062 \ \ \isacommand{qed}\isamarkupfalse%
       
  2063 \isanewline
       
  2064 \ \ \isacommand{moreover}\isamarkupfalse%
       
  2065 \ \isacommand{have}\isamarkupfalse%
       
  2066 \ {\isachardoublequoteopen}valid{\isacharunderscore}eqns\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2067 \ \ \isacommand{proof}\isamarkupfalse%
       
  2068 {\isacharminus}\isanewline
       
  2069 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2070 \ {\isachardoublequoteopen}Y\ {\isacharequal}\ L\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  2071 \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  2072 \ Y{\isacharunderscore}eq{\isacharunderscore}yrhs\ Inv{\isacharunderscore}ES\ finite{\isacharunderscore}yrhs\ nonempty{\isacharunderscore}yrhs\ \ \ \ \ \ \isanewline
       
  2073 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2074 \ {\isacharparenleft}rule{\isacharunderscore}tac\ arden{\isacharunderscore}variate{\isacharunderscore}keeps{\isacharunderscore}eq{\isacharcomma}\ {\isacharparenleft}simp\ add{\isacharcolon}rexp{\isacharunderscore}of{\isacharunderscore}empty{\isacharparenright}{\isacharplus}{\isacharparenright}\isanewline
       
  2075 \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  2076 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  2077 \ Inv{\isacharunderscore}ES\ \isanewline
       
  2078 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2079 \ {\isacharparenleft}clarsimp\ simp\ add{\isacharcolon}valid{\isacharunderscore}eqns{\isacharunderscore}def\ \isanewline
       
  2080 \ \ \ \ \ \ \ \ \ \ \ \ \ \ eqs{\isacharunderscore}subst{\isacharunderscore}def\ rhs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}eq\ Inv{\isacharunderscore}def\ finite{\isacharunderscore}rhs{\isacharunderscore}def\isanewline
       
  2081 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ simp\ del{\isacharcolon}L{\isacharunderscore}rhs{\isachardot}simps{\isacharparenright}\isanewline
       
  2082 \ \ \isacommand{qed}\isamarkupfalse%
       
  2083 \isanewline
       
  2084 \ \ \isacommand{moreover}\isamarkupfalse%
       
  2085 \ \isacommand{have}\isamarkupfalse%
       
  2086 \ \isanewline
       
  2087 \ \ \ \ non{\isacharunderscore}empty{\isacharunderscore}subst{\isacharcolon}\ {\isachardoublequoteopen}non{\isacharunderscore}empty\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2088 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  2089 \ Inv{\isacharunderscore}ES\ \isacommand{by}\isamarkupfalse%
       
  2090 \ {\isacharparenleft}auto\ simp{\isacharcolon}Inv{\isacharunderscore}def\ non{\isacharunderscore}empty{\isacharunderscore}def\ eqs{\isacharunderscore}subst{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2091 \ \ \isacommand{moreover}\isamarkupfalse%
       
  2092 \ \isanewline
       
  2093 \ \ \isacommand{have}\isamarkupfalse%
       
  2094 \ self{\isacharunderscore}subst{\isacharcolon}\ {\isachardoublequoteopen}self{\isacharunderscore}contained\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2095 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  2096 \ Inv{\isacharunderscore}ES\ eqs{\isacharunderscore}subst{\isacharunderscore}keeps{\isacharunderscore}self{\isacharunderscore}contained\ \isacommand{by}\isamarkupfalse%
       
  2097 \ {\isacharparenleft}simp\ add{\isacharcolon}Inv{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2098 \ \ \isacommand{ultimately}\isamarkupfalse%
       
  2099 \ \isacommand{show}\isamarkupfalse%
       
  2100 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  2101 \ Inv{\isacharunderscore}ES\ \isacommand{by}\isamarkupfalse%
       
  2102 \ {\isacharparenleft}simp\ add{\isacharcolon}Inv{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2103 \isacommand{qed}\isamarkupfalse%
       
  2104 %
       
  2105 \endisatagproof
       
  2106 {\isafoldproof}%
       
  2107 %
       
  2108 \isadelimproof
       
  2109 \isanewline
       
  2110 %
       
  2111 \endisadelimproof
       
  2112 \isanewline
       
  2113 \isacommand{lemma}\isamarkupfalse%
       
  2114 \ eqs{\isacharunderscore}subst{\isacharunderscore}card{\isacharunderscore}le{\isacharcolon}\ \isanewline
       
  2115 \ \ \isakeyword{assumes}\ finite{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}ES{\isacharcolon}{\isacharcolon}{\isacharparenleft}string\ set\ {\isasymtimes}\ rhs{\isacharunderscore}item\ set{\isacharparenright}\ set{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2116 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}card\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ yrhs{\isacharparenright}\ {\isacharless}{\isacharequal}\ card\ ES{\isachardoublequoteclose}\isanewline
       
  2117 %
       
  2118 \isadelimproof
       
  2119 %
       
  2120 \endisadelimproof
       
  2121 %
       
  2122 \isatagproof
       
  2123 \isacommand{proof}\isamarkupfalse%
       
  2124 {\isacharminus}\isanewline
       
  2125 \ \ \isacommand{def}\isamarkupfalse%
       
  2126 \ f\ {\isasymequiv}\ {\isachardoublequoteopen}{\isasymlambda}\ x{\isachardot}\ {\isacharparenleft}{\isacharparenleft}fst\ x{\isacharparenright}{\isacharcolon}{\isacharcolon}string\ set{\isacharcomma}\ rhs{\isacharunderscore}subst\ {\isacharparenleft}snd\ x{\isacharparenright}\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2127 \ \ \isacommand{have}\isamarkupfalse%
       
  2128 \ {\isachardoublequoteopen}eqs{\isacharunderscore}subst\ ES\ Y\ yrhs\ {\isacharequal}\ f\ {\isacharbackquote}\ ES{\isachardoublequoteclose}\ \isanewline
       
  2129 \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
  2130 \ {\isacharparenleft}auto\ simp{\isacharcolon}eqs{\isacharunderscore}subst{\isacharunderscore}def\ f{\isacharunderscore}def\ image{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2131 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2132 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharparenleft}Ya{\isacharcomma}\ yrhsa{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ bexI{\isacharcomma}\ simp{\isacharplus}{\isacharparenright}\isanewline
       
  2133 \ \ \isacommand{thus}\isamarkupfalse%
       
  2134 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  2135 \ finite\ \isacommand{by}\isamarkupfalse%
       
  2136 \ {\isacharparenleft}auto\ intro{\isacharcolon}card{\isacharunderscore}image{\isacharunderscore}le{\isacharparenright}\isanewline
       
  2137 \isacommand{qed}\isamarkupfalse%
       
  2138 %
       
  2139 \endisatagproof
       
  2140 {\isafoldproof}%
       
  2141 %
       
  2142 \isadelimproof
       
  2143 \isanewline
       
  2144 %
       
  2145 \endisadelimproof
       
  2146 \isanewline
       
  2147 \isacommand{lemma}\isamarkupfalse%
       
  2148 \ eqs{\isacharunderscore}subst{\isacharunderscore}cls{\isacharunderscore}remains{\isacharcolon}\ \isanewline
       
  2149 \ \ {\isachardoublequoteopen}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}\ {\isasymin}\ ES\ {\isasymLongrightarrow}\ {\isasymexists}\ xrhs{\isacharprime}{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharprime}{\isacharparenright}\ {\isasymin}\ {\isacharparenleft}eqs{\isacharunderscore}subst\ ES\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2150 %
       
  2151 \isadelimproof
       
  2152 %
       
  2153 \endisadelimproof
       
  2154 %
       
  2155 \isatagproof
       
  2156 \isacommand{by}\isamarkupfalse%
       
  2157 \ {\isacharparenleft}auto\ simp{\isacharcolon}eqs{\isacharunderscore}subst{\isacharunderscore}def{\isacharparenright}%
       
  2158 \endisatagproof
       
  2159 {\isafoldproof}%
       
  2160 %
       
  2161 \isadelimproof
       
  2162 \isanewline
       
  2163 %
       
  2164 \endisadelimproof
       
  2165 \isanewline
       
  2166 \isacommand{lemma}\isamarkupfalse%
       
  2167 \ card{\isacharunderscore}noteq{\isacharunderscore}{\isadigit{1}}{\isacharunderscore}has{\isacharunderscore}more{\isacharcolon}\isanewline
       
  2168 \ \ \isakeyword{assumes}\ card{\isacharcolon}{\isachardoublequoteopen}card\ S\ {\isasymnoteq}\ {\isadigit{1}}{\isachardoublequoteclose}\isanewline
       
  2169 \ \ \isakeyword{and}\ e{\isacharunderscore}in{\isacharcolon}\ {\isachardoublequoteopen}e\ {\isasymin}\ S{\isachardoublequoteclose}\isanewline
       
  2170 \ \ \isakeyword{and}\ finite{\isacharcolon}\ {\isachardoublequoteopen}finite\ S{\isachardoublequoteclose}\isanewline
       
  2171 \ \ \isakeyword{obtains}\ e{\isacharprime}\ \isakeyword{where}\ {\isachardoublequoteopen}e{\isacharprime}\ {\isasymin}\ S\ {\isasymand}\ e\ {\isasymnoteq}\ e{\isacharprime}{\isachardoublequoteclose}\ \isanewline
       
  2172 %
       
  2173 \isadelimproof
       
  2174 %
       
  2175 \endisadelimproof
       
  2176 %
       
  2177 \isatagproof
       
  2178 \isacommand{proof}\isamarkupfalse%
       
  2179 {\isacharminus}\isanewline
       
  2180 \ \ \isacommand{have}\isamarkupfalse%
       
  2181 \ {\isachardoublequoteopen}card\ {\isacharparenleft}S\ {\isacharminus}\ {\isacharbraceleft}e{\isacharbraceright}{\isacharparenright}\ {\isachargreater}\ {\isadigit{0}}{\isachardoublequoteclose}\isanewline
       
  2182 \ \ \isacommand{proof}\isamarkupfalse%
       
  2183 \ {\isacharminus}\isanewline
       
  2184 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2185 \ {\isachardoublequoteopen}card\ S\ {\isachargreater}\ {\isadigit{1}}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2186 \ card\ e{\isacharunderscore}in\ finite\ \ \isanewline
       
  2187 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2188 \ {\isacharparenleft}case{\isacharunderscore}tac\ {\isachardoublequoteopen}card\ S{\isachardoublequoteclose}{\isacharcomma}\ auto{\isacharparenright}\ \isanewline
       
  2189 \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  2190 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  2191 \ finite\ e{\isacharunderscore}in\ \isacommand{by}\isamarkupfalse%
       
  2192 \ auto\isanewline
       
  2193 \ \ \isacommand{qed}\isamarkupfalse%
       
  2194 \isanewline
       
  2195 \ \ \isacommand{hence}\isamarkupfalse%
       
  2196 \ {\isachardoublequoteopen}S\ {\isacharminus}\ {\isacharbraceleft}e{\isacharbraceright}\ {\isasymnoteq}\ {\isacharbraceleft}{\isacharbraceright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2197 \ finite\ \isacommand{by}\isamarkupfalse%
       
  2198 \ {\isacharparenleft}rule{\isacharunderscore}tac\ notI{\isacharcomma}\ simp{\isacharparenright}\isanewline
       
  2199 \ \ \isacommand{thus}\isamarkupfalse%
       
  2200 \ {\isachardoublequoteopen}{\isacharparenleft}{\isasymAnd}e{\isacharprime}{\isachardot}\ e{\isacharprime}\ {\isasymin}\ S\ {\isasymand}\ e\ {\isasymnoteq}\ e{\isacharprime}\ {\isasymLongrightarrow}\ thesis{\isacharparenright}\ {\isasymLongrightarrow}\ thesis{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  2201 \ auto\isanewline
       
  2202 \isacommand{qed}\isamarkupfalse%
       
  2203 %
       
  2204 \endisatagproof
       
  2205 {\isafoldproof}%
       
  2206 %
       
  2207 \isadelimproof
       
  2208 \isanewline
       
  2209 %
       
  2210 \endisadelimproof
       
  2211 \isanewline
       
  2212 \isacommand{lemma}\isamarkupfalse%
       
  2213 \ iteration{\isacharunderscore}step{\isacharcolon}\ \isanewline
       
  2214 \ \ \isakeyword{assumes}\ Inv{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}Inv\ ES{\isachardoublequoteclose}\isanewline
       
  2215 \ \ \isakeyword{and}\ \ \ \ X{\isacharunderscore}in{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}\ {\isasymin}\ ES{\isachardoublequoteclose}\isanewline
       
  2216 \ \ \isakeyword{and}\ \ \ \ not{\isacharunderscore}T{\isacharcolon}\ {\isachardoublequoteopen}card\ ES\ {\isasymnoteq}\ {\isadigit{1}}{\isachardoublequoteclose}\isanewline
       
  2217 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}{\isasymexists}\ ES{\isacharprime}{\isachardot}\ {\isacharparenleft}Inv\ ES{\isacharprime}\ {\isasymand}\ {\isacharparenleft}{\isasymexists}\ xrhs{\isacharprime}{\isachardot}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharprime}{\isacharparenright}\ {\isasymin}\ ES{\isacharprime}{\isacharparenright}{\isacharparenright}\ {\isasymand}\ \isanewline
       
  2218 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}card\ ES{\isacharprime}{\isacharcomma}\ card\ ES{\isacharparenright}\ {\isasymin}\ less{\isacharunderscore}than{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}{\isasymexists}\ ES{\isacharprime}{\isachardot}\ {\isacharquery}P\ ES{\isacharprime}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  2219 %
       
  2220 \isadelimproof
       
  2221 %
       
  2222 \endisadelimproof
       
  2223 %
       
  2224 \isatagproof
       
  2225 \isacommand{proof}\isamarkupfalse%
       
  2226 \ {\isacharminus}\isanewline
       
  2227 \ \ \isacommand{have}\isamarkupfalse%
       
  2228 \ finite{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}finite\ ES{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2229 \ Inv{\isacharunderscore}ES\ \isacommand{by}\isamarkupfalse%
       
  2230 \ {\isacharparenleft}simp\ add{\isacharcolon}Inv{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2231 \ \ \isacommand{then}\isamarkupfalse%
       
  2232 \ \isacommand{obtain}\isamarkupfalse%
       
  2233 \ Y\ yrhs\ \isanewline
       
  2234 \ \ \ \ \isakeyword{where}\ Y{\isacharunderscore}in{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}Y{\isacharcomma}\ yrhs{\isacharparenright}\ {\isasymin}\ ES{\isachardoublequoteclose}\ \isakeyword{and}\ not{\isacharunderscore}eq{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}\ {\isasymnoteq}\ {\isacharparenleft}Y{\isacharcomma}\ yrhs{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  2235 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  2236 \ not{\isacharunderscore}T\ X{\isacharunderscore}in{\isacharunderscore}ES\ \isacommand{by}\isamarkupfalse%
       
  2237 \ {\isacharparenleft}drule{\isacharunderscore}tac\ card{\isacharunderscore}noteq{\isacharunderscore}{\isadigit{1}}{\isacharunderscore}has{\isacharunderscore}more{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  2238 \ \ \isacommand{def}\isamarkupfalse%
       
  2239 \ ES{\isacharprime}\ {\isacharequal}{\isacharequal}\ {\isachardoublequoteopen}ES\ {\isacharminus}\ {\isacharbraceleft}{\isacharparenleft}Y{\isacharcomma}\ yrhs{\isacharparenright}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  2240 \ \ \isacommand{let}\isamarkupfalse%
       
  2241 \ {\isacharquery}ES{\isacharprime}{\isacharprime}\ {\isacharequal}\ {\isachardoublequoteopen}eqs{\isacharunderscore}subst\ ES{\isacharprime}\ Y\ {\isacharparenleft}arden{\isacharunderscore}variate\ Y\ yrhs{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2242 \ \ \isacommand{have}\isamarkupfalse%
       
  2243 \ {\isachardoublequoteopen}{\isacharquery}P\ {\isacharquery}ES{\isacharprime}{\isacharprime}{\isachardoublequoteclose}\isanewline
       
  2244 \ \ \isacommand{proof}\isamarkupfalse%
       
  2245 \ {\isacharminus}\isanewline
       
  2246 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2247 \ {\isachardoublequoteopen}Inv\ {\isacharquery}ES{\isacharprime}{\isacharprime}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2248 \ Y{\isacharunderscore}in{\isacharunderscore}ES\ Inv{\isacharunderscore}ES\isanewline
       
  2249 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2250 \ {\isacharparenleft}rule{\isacharunderscore}tac\ eqs{\isacharunderscore}subst{\isacharunderscore}satisfy{\isacharunderscore}Inv{\isacharcomma}\ simp\ add{\isacharcolon}ES{\isacharprime}{\isacharunderscore}def\ insert{\isacharunderscore}absorb{\isacharparenright}\isanewline
       
  2251 \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  2252 \ \isacommand{have}\isamarkupfalse%
       
  2253 \ {\isachardoublequoteopen}{\isasymexists}xrhs{\isacharprime}{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharprime}{\isacharparenright}\ {\isasymin}\ {\isacharquery}ES{\isacharprime}{\isacharprime}{\isachardoublequoteclose}\ \ \isacommand{using}\isamarkupfalse%
       
  2254 \ not{\isacharunderscore}eq\ X{\isacharunderscore}in{\isacharunderscore}ES\isanewline
       
  2255 \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2256 \ {\isacharparenleft}rule{\isacharunderscore}tac\ ES\ {\isacharequal}\ ES{\isacharprime}\ \isakeyword{in}\ eqs{\isacharunderscore}subst{\isacharunderscore}cls{\isacharunderscore}remains{\isacharcomma}\ auto\ simp\ add{\isacharcolon}ES{\isacharprime}{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2257 \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  2258 \ \isacommand{have}\isamarkupfalse%
       
  2259 \ {\isachardoublequoteopen}{\isacharparenleft}card\ {\isacharquery}ES{\isacharprime}{\isacharprime}{\isacharcomma}\ card\ ES{\isacharparenright}\ {\isasymin}\ less{\isacharunderscore}than{\isachardoublequoteclose}\ \isanewline
       
  2260 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  2261 \ {\isacharminus}\isanewline
       
  2262 \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2263 \ {\isachardoublequoteopen}finite\ ES{\isacharprime}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2264 \ finite{\isacharunderscore}ES\ ES{\isacharprime}{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
  2265 \ auto\isanewline
       
  2266 \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  2267 \ \isacommand{have}\isamarkupfalse%
       
  2268 \ {\isachardoublequoteopen}card\ ES{\isacharprime}\ {\isacharless}\ card\ ES{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2269 \ finite{\isacharunderscore}ES\ Y{\isacharunderscore}in{\isacharunderscore}ES\isanewline
       
  2270 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2271 \ {\isacharparenleft}auto\ simp{\isacharcolon}ES{\isacharprime}{\isacharunderscore}def\ card{\isacharunderscore}gt{\isacharunderscore}{\isadigit{0}}{\isacharunderscore}iff\ intro{\isacharcolon}diff{\isacharunderscore}Suc{\isacharunderscore}less{\isacharparenright}\isanewline
       
  2272 \ \ \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  2273 \ \isacommand{show}\isamarkupfalse%
       
  2274 \ {\isacharquery}thesis\ \isanewline
       
  2275 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2276 \ {\isacharparenleft}auto\ dest{\isacharcolon}eqs{\isacharunderscore}subst{\isacharunderscore}card{\isacharunderscore}le\ elim{\isacharcolon}le{\isacharunderscore}less{\isacharunderscore}trans{\isacharparenright}\isanewline
       
  2277 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  2278 \isanewline
       
  2279 \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  2280 \ \isacommand{show}\isamarkupfalse%
       
  2281 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  2282 \ simp\isanewline
       
  2283 \ \ \isacommand{qed}\isamarkupfalse%
       
  2284 \isanewline
       
  2285 \ \ \isacommand{thus}\isamarkupfalse%
       
  2286 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  2287 \ blast\isanewline
       
  2288 \isacommand{qed}\isamarkupfalse%
       
  2289 %
       
  2290 \endisatagproof
       
  2291 {\isafoldproof}%
       
  2292 %
       
  2293 \isadelimproof
       
  2294 %
       
  2295 \endisadelimproof
       
  2296 %
       
  2297 \begin{isamarkuptext}%
       
  2298 From this point until \isa{hard{\isacharunderscore}direction}, the hard direction is proved
       
  2299   through a simple application of the iteration principle.%
       
  2300 \end{isamarkuptext}%
       
  2301 \isamarkuptrue%
       
  2302 \isacommand{lemma}\isamarkupfalse%
       
  2303 \ iteration{\isacharunderscore}conc{\isacharcolon}\ \isanewline
       
  2304 \ \ \isakeyword{assumes}\ history{\isacharcolon}\ {\isachardoublequoteopen}Inv\ ES{\isachardoublequoteclose}\isanewline
       
  2305 \ \ \isakeyword{and}\ \ \ \ X{\isacharunderscore}in{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}{\isasymexists}\ xrhs{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}\ {\isasymin}\ ES{\isachardoublequoteclose}\isanewline
       
  2306 \ \ \isakeyword{shows}\ \isanewline
       
  2307 \ \ {\isachardoublequoteopen}{\isasymexists}\ ES{\isacharprime}{\isachardot}\ {\isacharparenleft}Inv\ ES{\isacharprime}\ {\isasymand}\ {\isacharparenleft}{\isasymexists}\ xrhs{\isacharprime}{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharprime}{\isacharparenright}\ {\isasymin}\ ES{\isacharprime}{\isacharparenright}{\isacharparenright}\ {\isasymand}\ card\ ES{\isacharprime}\ {\isacharequal}\ {\isadigit{1}}{\isachardoublequoteclose}\ \isanewline
       
  2308 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}{\isasymexists}\ ES{\isacharprime}{\isachardot}\ {\isacharquery}P\ ES{\isacharprime}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  2309 %
       
  2310 \isadelimproof
       
  2311 %
       
  2312 \endisadelimproof
       
  2313 %
       
  2314 \isatagproof
       
  2315 \isacommand{proof}\isamarkupfalse%
       
  2316 \ {\isacharparenleft}cases\ {\isachardoublequoteopen}card\ ES\ {\isacharequal}\ {\isadigit{1}}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  2317 \ \ \isacommand{case}\isamarkupfalse%
       
  2318 \ True\isanewline
       
  2319 \ \ \isacommand{thus}\isamarkupfalse%
       
  2320 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  2321 \ history\ X{\isacharunderscore}in{\isacharunderscore}ES\isanewline
       
  2322 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2323 \ blast\isanewline
       
  2324 \isacommand{next}\isamarkupfalse%
       
  2325 \isanewline
       
  2326 \ \ \isacommand{case}\isamarkupfalse%
       
  2327 \ False\ \ \isanewline
       
  2328 \ \ \isacommand{thus}\isamarkupfalse%
       
  2329 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  2330 \ history\ iteration{\isacharunderscore}step\ X{\isacharunderscore}in{\isacharunderscore}ES\isanewline
       
  2331 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2332 \ {\isacharparenleft}rule{\isacharunderscore}tac\ f\ {\isacharequal}\ card\ \isakeyword{in}\ wf{\isacharunderscore}iter{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  2333 \isacommand{qed}\isamarkupfalse%
       
  2334 %
       
  2335 \endisatagproof
       
  2336 {\isafoldproof}%
       
  2337 %
       
  2338 \isadelimproof
       
  2339 \isanewline
       
  2340 %
       
  2341 \endisadelimproof
       
  2342 \ \ \isanewline
       
  2343 \isacommand{lemma}\isamarkupfalse%
       
  2344 \ last{\isacharunderscore}cl{\isacharunderscore}exists{\isacharunderscore}rexp{\isacharcolon}\isanewline
       
  2345 \ \ \isakeyword{assumes}\ ES{\isacharunderscore}single{\isacharcolon}\ {\isachardoublequoteopen}ES\ {\isacharequal}\ {\isacharbraceleft}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  2346 \ \ \isakeyword{and}\ Inv{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}Inv\ ES{\isachardoublequoteclose}\isanewline
       
  2347 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}{\isasymexists}\ {\isacharparenleft}r{\isacharcolon}{\isacharcolon}rexp{\isacharparenright}{\isachardot}\ L\ r\ {\isacharequal}\ X{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}{\isasymexists}\ r{\isachardot}\ {\isacharquery}P\ r{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  2348 %
       
  2349 \isadelimproof
       
  2350 %
       
  2351 \endisadelimproof
       
  2352 %
       
  2353 \isatagproof
       
  2354 \isacommand{proof}\isamarkupfalse%
       
  2355 {\isacharminus}\isanewline
       
  2356 \ \ \isacommand{let}\isamarkupfalse%
       
  2357 \ {\isacharquery}A\ {\isacharequal}\ {\isachardoublequoteopen}arden{\isacharunderscore}variate\ X\ xrhs{\isachardoublequoteclose}\isanewline
       
  2358 \ \ \isacommand{have}\isamarkupfalse%
       
  2359 \ {\isachardoublequoteopen}{\isacharquery}P\ {\isacharparenleft}rexp{\isacharunderscore}of{\isacharunderscore}lam\ {\isacharquery}A{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2360 \ \ \isacommand{proof}\isamarkupfalse%
       
  2361 \ {\isacharminus}\isanewline
       
  2362 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2363 \ {\isachardoublequoteopen}L\ {\isacharparenleft}rexp{\isacharunderscore}of{\isacharunderscore}lam\ {\isacharquery}A{\isacharparenright}\ {\isacharequal}\ L\ {\isacharparenleft}lam{\isacharunderscore}of\ {\isacharquery}A{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2364 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  2365 {\isacharparenleft}rule\ rexp{\isacharunderscore}of{\isacharunderscore}lam{\isacharunderscore}eq{\isacharunderscore}lam{\isacharunderscore}set{\isacharparenright}\isanewline
       
  2366 \ \ \ \ \ \ \isacommand{show}\isamarkupfalse%
       
  2367 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}arden{\isacharunderscore}variate\ X\ xrhs{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2368 \ Inv{\isacharunderscore}ES\ ES{\isacharunderscore}single\ \isanewline
       
  2369 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2370 \ {\isacharparenleft}rule{\isacharunderscore}tac\ arden{\isacharunderscore}variate{\isacharunderscore}keeps{\isacharunderscore}finite{\isacharcomma}\ \isanewline
       
  2371 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ auto\ simp\ add{\isacharcolon}Inv{\isacharunderscore}def\ finite{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2372 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  2373 \isanewline
       
  2374 \ \ \ \ \isacommand{also}\isamarkupfalse%
       
  2375 \ \isacommand{have}\isamarkupfalse%
       
  2376 \ {\isachardoublequoteopen}{\isasymdots}\ {\isacharequal}\ L\ {\isacharquery}A{\isachardoublequoteclose}\isanewline
       
  2377 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  2378 {\isacharminus}\isanewline
       
  2379 \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2380 \ {\isachardoublequoteopen}lam{\isacharunderscore}of\ {\isacharquery}A\ {\isacharequal}\ {\isacharquery}A{\isachardoublequoteclose}\isanewline
       
  2381 \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  2382 {\isacharminus}\isanewline
       
  2383 \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2384 \ {\isachardoublequoteopen}classes{\isacharunderscore}of\ {\isacharquery}A\ {\isacharequal}\ {\isacharbraceleft}{\isacharbraceright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2385 \ Inv{\isacharunderscore}ES\ ES{\isacharunderscore}single\isanewline
       
  2386 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2387 \ {\isacharparenleft}simp\ add{\isacharcolon}arden{\isacharunderscore}variate{\isacharunderscore}removes{\isacharunderscore}cl\ \isanewline
       
  2388 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ self{\isacharunderscore}contained{\isacharunderscore}def\ Inv{\isacharunderscore}def\ lefts{\isacharunderscore}of{\isacharunderscore}def{\isacharparenright}\ \isanewline
       
  2389 \ \ \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  2390 \ {\isacharquery}thesis\ \isanewline
       
  2391 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2392 \ {\isacharparenleft}auto\ simp\ only{\isacharcolon}lam{\isacharunderscore}of{\isacharunderscore}def\ classes{\isacharunderscore}of{\isacharunderscore}def{\isacharcomma}\ case{\isacharunderscore}tac\ x{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  2393 \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  2394 \isanewline
       
  2395 \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  2396 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  2397 \ simp\isanewline
       
  2398 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  2399 \isanewline
       
  2400 \ \ \ \ \isacommand{also}\isamarkupfalse%
       
  2401 \ \isacommand{have}\isamarkupfalse%
       
  2402 \ {\isachardoublequoteopen}{\isasymdots}\ {\isacharequal}\ X{\isachardoublequoteclose}\isanewline
       
  2403 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  2404 {\isacharparenleft}rule\ arden{\isacharunderscore}variate{\isacharunderscore}keeps{\isacharunderscore}eq\ {\isacharbrackleft}THEN\ sym{\isacharbrackright}{\isacharparenright}\isanewline
       
  2405 \ \ \ \ \ \ \isacommand{show}\isamarkupfalse%
       
  2406 \ {\isachardoublequoteopen}X\ {\isacharequal}\ L\ xrhs{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2407 \ Inv{\isacharunderscore}ES\ ES{\isacharunderscore}single\ \isanewline
       
  2408 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2409 \ {\isacharparenleft}auto\ simp\ only{\isacharcolon}Inv{\isacharunderscore}def\ valid{\isacharunderscore}eqns{\isacharunderscore}def{\isacharparenright}\ \ \isanewline
       
  2410 \ \ \ \ \isacommand{next}\isamarkupfalse%
       
  2411 \isanewline
       
  2412 \ \ \ \ \ \ \isacommand{from}\isamarkupfalse%
       
  2413 \ Inv{\isacharunderscore}ES\ ES{\isacharunderscore}single\ \isacommand{show}\isamarkupfalse%
       
  2414 \ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}\ {\isasymnotin}\ L\ {\isacharparenleft}rexp{\isacharunderscore}of\ xrhs\ X{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2415 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2416 {\isacharparenleft}simp\ add{\isacharcolon}Inv{\isacharunderscore}def\ ardenable{\isacharunderscore}def\ rexp{\isacharunderscore}of{\isacharunderscore}empty\ finite{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2417 \ \ \ \ \isacommand{next}\isamarkupfalse%
       
  2418 \isanewline
       
  2419 \ \ \ \ \ \ \isacommand{from}\isamarkupfalse%
       
  2420 \ Inv{\isacharunderscore}ES\ ES{\isacharunderscore}single\ \isacommand{show}\isamarkupfalse%
       
  2421 \ {\isachardoublequoteopen}finite\ xrhs{\isachardoublequoteclose}\ \isanewline
       
  2422 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2423 \ {\isacharparenleft}simp\ add{\isacharcolon}Inv{\isacharunderscore}def\ finite{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2424 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  2425 \isanewline
       
  2426 \ \ \ \ \isacommand{finally}\isamarkupfalse%
       
  2427 \ \isacommand{show}\isamarkupfalse%
       
  2428 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  2429 \ simp\isanewline
       
  2430 \ \ \isacommand{qed}\isamarkupfalse%
       
  2431 \isanewline
       
  2432 \ \ \isacommand{thus}\isamarkupfalse%
       
  2433 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  2434 \ auto\isanewline
       
  2435 \isacommand{qed}\isamarkupfalse%
       
  2436 %
       
  2437 \endisatagproof
       
  2438 {\isafoldproof}%
       
  2439 %
       
  2440 \isadelimproof
       
  2441 \isanewline
       
  2442 %
       
  2443 \endisadelimproof
       
  2444 \ \ \ \isanewline
       
  2445 \isacommand{lemma}\isamarkupfalse%
       
  2446 \ every{\isacharunderscore}eqcl{\isacharunderscore}has{\isacharunderscore}reg{\isacharcolon}\ \isanewline
       
  2447 \ \ \isakeyword{assumes}\ finite{\isacharunderscore}CS{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2448 \ \ \isakeyword{and}\ X{\isacharunderscore}in{\isacharunderscore}CS{\isacharcolon}\ {\isachardoublequoteopen}X\ {\isasymin}\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2449 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}{\isasymexists}\ {\isacharparenleft}reg{\isacharcolon}{\isacharcolon}rexp{\isacharparenright}{\isachardot}\ L\ reg\ {\isacharequal}\ X{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}{\isasymexists}\ r{\isachardot}\ {\isacharquery}E\ r{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  2450 %
       
  2451 \isadelimproof
       
  2452 %
       
  2453 \endisadelimproof
       
  2454 %
       
  2455 \isatagproof
       
  2456 \isacommand{proof}\isamarkupfalse%
       
  2457 \ {\isacharminus}\isanewline
       
  2458 \ \ \isacommand{from}\isamarkupfalse%
       
  2459 \ X{\isacharunderscore}in{\isacharunderscore}CS\ \isacommand{have}\isamarkupfalse%
       
  2460 \ {\isachardoublequoteopen}{\isasymexists}\ xrhs{\isachardot}\ {\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}\ {\isasymin}\ {\isacharparenleft}eqs\ {\isacharparenleft}UNIV\ \ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2461 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2462 \ {\isacharparenleft}auto\ simp{\isacharcolon}eqs{\isacharunderscore}def\ init{\isacharunderscore}rhs{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2463 \ \ \isacommand{then}\isamarkupfalse%
       
  2464 \ \isacommand{obtain}\isamarkupfalse%
       
  2465 \ ES\ xrhs\ \isakeyword{where}\ Inv{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}Inv\ ES{\isachardoublequoteclose}\ \isanewline
       
  2466 \ \ \ \ \isakeyword{and}\ X{\isacharunderscore}in{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}\ {\isasymin}\ ES{\isachardoublequoteclose}\isanewline
       
  2467 \ \ \ \ \isakeyword{and}\ card{\isacharunderscore}ES{\isacharcolon}\ {\isachardoublequoteopen}card\ ES\ {\isacharequal}\ {\isadigit{1}}{\isachardoublequoteclose}\isanewline
       
  2468 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  2469 \ finite{\isacharunderscore}CS\ X{\isacharunderscore}in{\isacharunderscore}CS\ init{\isacharunderscore}ES{\isacharunderscore}satisfy{\isacharunderscore}Inv\ iteration{\isacharunderscore}conc\isanewline
       
  2470 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2471 \ blast\isanewline
       
  2472 \ \ \isacommand{hence}\isamarkupfalse%
       
  2473 \ ES{\isacharunderscore}single{\isacharunderscore}equa{\isacharcolon}\ {\isachardoublequoteopen}ES\ {\isacharequal}\ {\isacharbraceleft}{\isacharparenleft}X{\isacharcomma}\ xrhs{\isacharparenright}{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  2474 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2475 \ {\isacharparenleft}auto\ simp{\isacharcolon}Inv{\isacharunderscore}def\ dest{\isacharbang}{\isacharcolon}card{\isacharunderscore}Suc{\isacharunderscore}Diff{\isadigit{1}}\ simp{\isacharcolon}card{\isacharunderscore}eq{\isacharunderscore}{\isadigit{0}}{\isacharunderscore}iff{\isacharparenright}\ \isanewline
       
  2476 \ \ \isacommand{thus}\isamarkupfalse%
       
  2477 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  2478 \ Inv{\isacharunderscore}ES\isanewline
       
  2479 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2480 \ {\isacharparenleft}rule\ last{\isacharunderscore}cl{\isacharunderscore}exists{\isacharunderscore}rexp{\isacharparenright}\isanewline
       
  2481 \isacommand{qed}\isamarkupfalse%
       
  2482 %
       
  2483 \endisatagproof
       
  2484 {\isafoldproof}%
       
  2485 %
       
  2486 \isadelimproof
       
  2487 \isanewline
       
  2488 %
       
  2489 \endisadelimproof
       
  2490 \isanewline
       
  2491 \isacommand{lemma}\isamarkupfalse%
       
  2492 \ finals{\isacharunderscore}in{\isacharunderscore}partitions{\isacharcolon}\isanewline
       
  2493 \ \ {\isachardoublequoteopen}finals\ Lang\ {\isasymsubseteq}\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2494 %
       
  2495 \isadelimproof
       
  2496 \ \ %
       
  2497 \endisadelimproof
       
  2498 %
       
  2499 \isatagproof
       
  2500 \isacommand{by}\isamarkupfalse%
       
  2501 \ {\isacharparenleft}auto\ simp{\isacharcolon}finals{\isacharunderscore}def\ quotient{\isacharunderscore}def{\isacharparenright}%
       
  2502 \endisatagproof
       
  2503 {\isafoldproof}%
       
  2504 %
       
  2505 \isadelimproof
       
  2506 \ \ \ \isanewline
       
  2507 %
       
  2508 \endisadelimproof
       
  2509 \isanewline
       
  2510 \isacommand{theorem}\isamarkupfalse%
       
  2511 \ hard{\isacharunderscore}direction{\isacharcolon}\ \isanewline
       
  2512 \ \ \isakeyword{assumes}\ finite{\isacharunderscore}CS{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2513 \ \ \isakeyword{shows}\ \ \ {\isachardoublequoteopen}{\isasymexists}\ {\isacharparenleft}reg{\isacharcolon}{\isacharcolon}rexp{\isacharparenright}{\isachardot}\ Lang\ {\isacharequal}\ L\ reg{\isachardoublequoteclose}\isanewline
       
  2514 %
       
  2515 \isadelimproof
       
  2516 %
       
  2517 \endisadelimproof
       
  2518 %
       
  2519 \isatagproof
       
  2520 \isacommand{proof}\isamarkupfalse%
       
  2521 \ {\isacharminus}\isanewline
       
  2522 \ \ \isacommand{have}\isamarkupfalse%
       
  2523 \ {\isachardoublequoteopen}{\isasymforall}\ X\ {\isasymin}\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isachardot}\ {\isasymexists}\ {\isacharparenleft}reg{\isacharcolon}{\isacharcolon}rexp{\isacharparenright}{\isachardot}\ X\ {\isacharequal}\ L\ reg{\isachardoublequoteclose}\ \isanewline
       
  2524 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  2525 \ finite{\isacharunderscore}CS\ every{\isacharunderscore}eqcl{\isacharunderscore}has{\isacharunderscore}reg\ \isacommand{by}\isamarkupfalse%
       
  2526 \ blast\isanewline
       
  2527 \ \ \isacommand{then}\isamarkupfalse%
       
  2528 \ \isacommand{obtain}\isamarkupfalse%
       
  2529 \ f\ \isanewline
       
  2530 \ \ \ \ \isakeyword{where}\ f{\isacharunderscore}prop{\isacharcolon}\ {\isachardoublequoteopen}{\isasymforall}\ X\ {\isasymin}\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isachardot}\ X\ {\isacharequal}\ L\ {\isacharparenleft}{\isacharparenleft}f\ X{\isacharparenright}{\isacharcolon}{\isacharcolon}rexp{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  2531 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2532 \ {\isacharparenleft}auto\ dest{\isacharcolon}bchoice{\isacharparenright}\isanewline
       
  2533 \ \ \isacommand{def}\isamarkupfalse%
       
  2534 \ rs\ {\isasymequiv}\ {\isachardoublequoteopen}f\ {\isacharbackquote}\ {\isacharparenleft}finals\ Lang{\isacharparenright}{\isachardoublequoteclose}\ \ \isanewline
       
  2535 \ \ \isacommand{have}\isamarkupfalse%
       
  2536 \ {\isachardoublequoteopen}Lang\ {\isacharequal}\ {\isasymUnion}\ {\isacharparenleft}finals\ Lang{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  2537 \ lang{\isacharunderscore}is{\isacharunderscore}union{\isacharunderscore}of{\isacharunderscore}finals\ \isacommand{by}\isamarkupfalse%
       
  2538 \ auto\isanewline
       
  2539 \ \ \isacommand{also}\isamarkupfalse%
       
  2540 \ \isacommand{have}\isamarkupfalse%
       
  2541 \ {\isachardoublequoteopen}{\isasymdots}\ {\isacharequal}\ L\ {\isacharparenleft}folds\ ALT\ NULL\ rs{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  2542 \ \ \isacommand{proof}\isamarkupfalse%
       
  2543 \ {\isacharminus}\isanewline
       
  2544 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2545 \ {\isachardoublequoteopen}finite\ rs{\isachardoublequoteclose}\isanewline
       
  2546 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  2547 \ {\isacharminus}\isanewline
       
  2548 \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2549 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}finals\ Lang{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  2550 \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  2551 \ finite{\isacharunderscore}CS\ finals{\isacharunderscore}in{\isacharunderscore}partitions{\isacharbrackleft}of\ {\isachardoublequoteopen}Lang{\isachardoublequoteclose}{\isacharbrackright}\ \ \ \isanewline
       
  2552 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2553 \ {\isacharparenleft}erule{\isacharunderscore}tac\ finite{\isacharunderscore}subset{\isacharcomma}\ simp{\isacharparenright}\isanewline
       
  2554 \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  2555 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  2556 \ rs{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
  2557 \ auto\isanewline
       
  2558 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  2559 \isanewline
       
  2560 \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  2561 \ {\isacharquery}thesis\ \isanewline
       
  2562 \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  2563 \ f{\isacharunderscore}prop\ rs{\isacharunderscore}def\ finals{\isacharunderscore}in{\isacharunderscore}partitions{\isacharbrackleft}of\ {\isachardoublequoteopen}Lang{\isachardoublequoteclose}{\isacharbrackright}\ \isacommand{by}\isamarkupfalse%
       
  2564 \ auto\isanewline
       
  2565 \ \ \isacommand{qed}\isamarkupfalse%
       
  2566 \isanewline
       
  2567 \ \ \isacommand{finally}\isamarkupfalse%
       
  2568 \ \isacommand{show}\isamarkupfalse%
       
  2569 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  2570 \ blast\isanewline
       
  2571 \isacommand{qed}\isamarkupfalse%
       
  2572 %
       
  2573 \endisatagproof
       
  2574 {\isafoldproof}%
       
  2575 %
       
  2576 \isadelimproof
       
  2577 %
       
  2578 \endisadelimproof
       
  2579 %
       
  2580 \isamarkupsection{Direction: \isa{regular\ language\ {\isasymRightarrow}finite\ partition}%
       
  2581 }
       
  2582 \isamarkuptrue%
       
  2583 %
       
  2584 \isamarkupsubsection{The scheme for this direction%
       
  2585 }
       
  2586 \isamarkuptrue%
       
  2587 %
       
  2588 \begin{isamarkuptext}%
       
  2589 The following convenient notation \isa{x\ {\isasymapprox}Lang\ y} means:
       
  2590   string \isa{x} and \isa{y} are equivalent with respect to 
       
  2591   language \isa{Lang}.%
       
  2592 \end{isamarkuptext}%
       
  2593 \isamarkuptrue%
       
  2594 \isacommand{definition}\isamarkupfalse%
       
  2595 \isanewline
       
  2596 \ \ str{\isacharunderscore}eq\ {\isacharparenleft}{\isachardoublequoteopen}{\isacharunderscore}\ {\isasymapprox}{\isacharunderscore}\ {\isacharunderscore}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  2597 \isakeyword{where}\isanewline
       
  2598 \ \ {\isachardoublequoteopen}x\ {\isasymapprox}Lang\ y\ {\isasymequiv}\ {\isacharparenleft}x{\isacharcomma}\ y{\isacharparenright}\ {\isasymin}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isachardoublequoteclose}%
       
  2599 \begin{isamarkuptext}%
       
  2600 The very basic scheme to show the finiteness of the partion generated by a language \isa{Lang}
       
  2601   is by attaching tags to every string. The set of tags are carfully choosen to make it finite.
       
  2602   If it can be proved that strings with the same tag are equivlent with respect \isa{Lang},
       
  2603   then the partition given rise by \isa{Lang} must be finite. The reason for this is a lemma 
       
  2604   in standard library (\isa{finite{\isacharunderscore}imageD}), which says: if the image of an injective 
       
  2605   function on a set \isa{A} is finite, then \isa{A} is finite. It can be shown that
       
  2606   the function obtained by llifting \isa{tag}
       
  2607   to the level of equalent classes (i.e. \isa{{\isacharparenleft}{\isacharparenleft}op\ {\isacharbackquote}{\isacharparenright}\ tag{\isacharparenright}}) is injective 
       
  2608   (by lemma \isa{tag{\isacharunderscore}image{\isacharunderscore}injI}) and the image of this function is finite 
       
  2609   (with the help of lemma \isa{finite{\isacharunderscore}tag{\isacharunderscore}imageI}).
       
  2610 
       
  2611   BUT, I think this argument can be encapsulated by one lemma instead of the current presentation.%
       
  2612 \end{isamarkuptext}%
       
  2613 \isamarkuptrue%
       
  2614 \isacommand{lemma}\isamarkupfalse%
       
  2615 \ eq{\isacharunderscore}class{\isacharunderscore}equalI{\isacharcolon}\isanewline
       
  2616 \ \ {\isachardoublequoteopen}{\isasymlbrakk}X\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}lang{\isacharsemicolon}\ Y\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}lang{\isacharsemicolon}\ x\ {\isasymin}\ X{\isacharsemicolon}\ y\ {\isasymin}\ Y{\isacharsemicolon}\ x\ {\isasymapprox}lang\ y{\isasymrbrakk}\ \isanewline
       
  2617 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ X\ {\isacharequal}\ Y{\isachardoublequoteclose}\isanewline
       
  2618 %
       
  2619 \isadelimproof
       
  2620 %
       
  2621 \endisadelimproof
       
  2622 %
       
  2623 \isatagproof
       
  2624 \isacommand{by}\isamarkupfalse%
       
  2625 \ {\isacharparenleft}auto\ simp{\isacharcolon}quotient{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}def{\isacharparenright}%
       
  2626 \endisatagproof
       
  2627 {\isafoldproof}%
       
  2628 %
       
  2629 \isadelimproof
       
  2630 \isanewline
       
  2631 %
       
  2632 \endisadelimproof
       
  2633 \isanewline
       
  2634 \isacommand{lemma}\isamarkupfalse%
       
  2635 \ tag{\isacharunderscore}image{\isacharunderscore}injI{\isacharcolon}\isanewline
       
  2636 \ \ \isakeyword{assumes}\ str{\isacharunderscore}inj{\isacharcolon}\ {\isachardoublequoteopen}{\isasymAnd}\ x\ y{\isachardot}\ tag\ x\ {\isacharequal}\ tag\ {\isacharparenleft}y{\isacharcolon}{\isacharcolon}string{\isacharparenright}\ {\isasymLongrightarrow}\ x\ {\isasymapprox}lang\ y{\isachardoublequoteclose}\isanewline
       
  2637 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}inj{\isacharunderscore}on\ {\isacharparenleft}{\isacharparenleft}op\ {\isacharbackquote}{\isacharparenright}\ tag{\isacharparenright}\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}lang{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2638 %
       
  2639 \isadelimproof
       
  2640 %
       
  2641 \endisadelimproof
       
  2642 %
       
  2643 \isatagproof
       
  2644 \isacommand{proof}\isamarkupfalse%
       
  2645 {\isacharminus}\isanewline
       
  2646 \ \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  2647 \ \isacommand{fix}\isamarkupfalse%
       
  2648 \ X\ Y\isanewline
       
  2649 \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  2650 \ X{\isacharunderscore}in{\isacharcolon}\ {\isachardoublequoteopen}X\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}lang{\isachardoublequoteclose}\isanewline
       
  2651 \ \ \ \ \ \ \isakeyword{and}\ \ Y{\isacharunderscore}in{\isacharcolon}\ {\isachardoublequoteopen}Y\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}lang{\isachardoublequoteclose}\isanewline
       
  2652 \ \ \ \ \ \ \isakeyword{and}\ \ tag{\isacharunderscore}eq{\isacharcolon}\ {\isachardoublequoteopen}tag\ {\isacharbackquote}\ X\ {\isacharequal}\ tag\ {\isacharbackquote}\ Y{\isachardoublequoteclose}\isanewline
       
  2653 \ \ \ \ \isacommand{then}\isamarkupfalse%
       
  2654 \ \isacommand{obtain}\isamarkupfalse%
       
  2655 \ x\ y\ \isakeyword{where}\ {\isachardoublequoteopen}x\ {\isasymin}\ X{\isachardoublequoteclose}\ \isakeyword{and}\ {\isachardoublequoteopen}y\ {\isasymin}\ Y{\isachardoublequoteclose}\ \isakeyword{and}\ {\isachardoublequoteopen}tag\ x\ {\isacharequal}\ tag\ y{\isachardoublequoteclose}\isanewline
       
  2656 \ \ \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
  2657 \ quotient{\isacharunderscore}def\ Image{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}def\ image{\isacharunderscore}def\isanewline
       
  2658 \ \ \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
  2659 \ simp\ \isacommand{by}\isamarkupfalse%
       
  2660 \ blast\isanewline
       
  2661 \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  2662 \ X{\isacharunderscore}in\ Y{\isacharunderscore}in\ str{\isacharunderscore}inj\isanewline
       
  2663 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2664 \ {\isachardoublequoteopen}X\ {\isacharequal}\ Y{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  2665 \ {\isacharparenleft}rule{\isacharunderscore}tac\ eq{\isacharunderscore}class{\isacharunderscore}equalI{\isacharcomma}\ simp{\isacharplus}{\isacharparenright}\isanewline
       
  2666 \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  2667 \isanewline
       
  2668 \ \ \isacommand{thus}\isamarkupfalse%
       
  2669 \ {\isacharquery}thesis\ \isacommand{unfolding}\isamarkupfalse%
       
  2670 \ inj{\isacharunderscore}on{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
  2671 \ auto\isanewline
       
  2672 \isacommand{qed}\isamarkupfalse%
       
  2673 %
       
  2674 \endisatagproof
       
  2675 {\isafoldproof}%
       
  2676 %
       
  2677 \isadelimproof
       
  2678 \isanewline
       
  2679 %
       
  2680 \endisadelimproof
       
  2681 \isanewline
       
  2682 \isacommand{lemma}\isamarkupfalse%
       
  2683 \ finite{\isacharunderscore}tag{\isacharunderscore}imageI{\isacharcolon}\ \isanewline
       
  2684 \ \ {\isachardoublequoteopen}finite\ {\isacharparenleft}range\ tag{\isacharparenright}\ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}{\isacharparenleft}{\isacharparenleft}op\ {\isacharbackquote}{\isacharparenright}\ tag{\isacharparenright}\ {\isacharbackquote}\ S{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2685 %
       
  2686 \isadelimproof
       
  2687 %
       
  2688 \endisadelimproof
       
  2689 %
       
  2690 \isatagproof
       
  2691 \isacommand{apply}\isamarkupfalse%
       
  2692 \ {\isacharparenleft}rule{\isacharunderscore}tac\ B\ {\isacharequal}\ {\isachardoublequoteopen}Pow\ {\isacharparenleft}tag\ {\isacharbackquote}\ UNIV{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ finite{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  2693 \isacommand{by}\isamarkupfalse%
       
  2694 \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}image{\isacharunderscore}def\ Pow{\isacharunderscore}def{\isacharparenright}%
       
  2695 \endisatagproof
       
  2696 {\isafoldproof}%
       
  2697 %
       
  2698 \isadelimproof
       
  2699 %
       
  2700 \endisadelimproof
       
  2701 %
       
  2702 \isamarkupsubsection{A small theory for list difference%
       
  2703 }
       
  2704 \isamarkuptrue%
       
  2705 %
       
  2706 \begin{isamarkuptext}%
       
  2707 The notion of list diffrence is need to make proofs more readable.%
       
  2708 \end{isamarkuptext}%
       
  2709 \isamarkuptrue%
       
  2710 \isacommand{fun}\isamarkupfalse%
       
  2711 \ list{\isacharunderscore}diff\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list\ {\isasymRightarrow}\ {\isacharprime}a\ list{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{infix}\ {\isachardoublequoteopen}{\isacharminus}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{1}}{\isacharparenright}\isanewline
       
  2712 \isakeyword{where}\isanewline
       
  2713 \ \ {\isachardoublequoteopen}list{\isacharunderscore}diff\ {\isacharbrackleft}{\isacharbrackright}\ \ xs\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\ {\isacharbar}\isanewline
       
  2714 \ \ {\isachardoublequoteopen}list{\isacharunderscore}diff\ {\isacharparenleft}x{\isacharhash}xs{\isacharparenright}\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharequal}\ x{\isacharhash}xs{\isachardoublequoteclose}\ {\isacharbar}\isanewline
       
  2715 \ \ {\isachardoublequoteopen}list{\isacharunderscore}diff\ {\isacharparenleft}x{\isacharhash}xs{\isacharparenright}\ {\isacharparenleft}y{\isacharhash}ys{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}if\ x\ {\isacharequal}\ y\ then\ list{\isacharunderscore}diff\ xs\ ys\ else\ {\isacharparenleft}x{\isacharhash}xs{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2716 \isanewline
       
  2717 \isacommand{lemma}\isamarkupfalse%
       
  2718 \ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharat}\ y{\isacharparenright}\ {\isacharminus}\ x\ {\isacharequal}\ y{\isachardoublequoteclose}\isanewline
       
  2719 %
       
  2720 \isadelimproof
       
  2721 %
       
  2722 \endisadelimproof
       
  2723 %
       
  2724 \isatagproof
       
  2725 \isacommand{apply}\isamarkupfalse%
       
  2726 \ {\isacharparenleft}induct\ x{\isacharparenright}\isanewline
       
  2727 \isacommand{by}\isamarkupfalse%
       
  2728 \ {\isacharparenleft}case{\isacharunderscore}tac\ y{\isacharcomma}\ simp{\isacharplus}{\isacharparenright}%
       
  2729 \endisatagproof
       
  2730 {\isafoldproof}%
       
  2731 %
       
  2732 \isadelimproof
       
  2733 \isanewline
       
  2734 %
       
  2735 \endisadelimproof
       
  2736 \isanewline
       
  2737 \isacommand{lemma}\isamarkupfalse%
       
  2738 \ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isacharminus}\ x\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\isanewline
       
  2739 %
       
  2740 \isadelimproof
       
  2741 %
       
  2742 \endisadelimproof
       
  2743 %
       
  2744 \isatagproof
       
  2745 \isacommand{by}\isamarkupfalse%
       
  2746 \ {\isacharparenleft}induct\ x{\isacharcomma}\ auto{\isacharparenright}%
       
  2747 \endisatagproof
       
  2748 {\isafoldproof}%
       
  2749 %
       
  2750 \isadelimproof
       
  2751 \isanewline
       
  2752 %
       
  2753 \endisadelimproof
       
  2754 \isanewline
       
  2755 \isacommand{lemma}\isamarkupfalse%
       
  2756 \ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isacharequal}\ xa\ {\isacharat}\ y\ {\isasymLongrightarrow}\ x\ {\isacharminus}\ xa\ {\isacharequal}\ y\ {\isachardoublequoteclose}\isanewline
       
  2757 %
       
  2758 \isadelimproof
       
  2759 %
       
  2760 \endisadelimproof
       
  2761 %
       
  2762 \isatagproof
       
  2763 \isacommand{by}\isamarkupfalse%
       
  2764 \ {\isacharparenleft}induct\ x{\isacharcomma}\ auto{\isacharparenright}%
       
  2765 \endisatagproof
       
  2766 {\isafoldproof}%
       
  2767 %
       
  2768 \isadelimproof
       
  2769 \isanewline
       
  2770 %
       
  2771 \endisadelimproof
       
  2772 \isanewline
       
  2773 \isacommand{lemma}\isamarkupfalse%
       
  2774 \ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isacharminus}\ {\isacharbrackleft}{\isacharbrackright}\ {\isacharequal}\ x{\isachardoublequoteclose}\isanewline
       
  2775 %
       
  2776 \isadelimproof
       
  2777 %
       
  2778 \endisadelimproof
       
  2779 %
       
  2780 \isatagproof
       
  2781 \isacommand{by}\isamarkupfalse%
       
  2782 \ {\isacharparenleft}induct\ x{\isacharcomma}\ auto{\isacharparenright}%
       
  2783 \endisatagproof
       
  2784 {\isafoldproof}%
       
  2785 %
       
  2786 \isadelimproof
       
  2787 \isanewline
       
  2788 %
       
  2789 \endisadelimproof
       
  2790 \isanewline
       
  2791 \isacommand{lemma}\isamarkupfalse%
       
  2792 \ {\isacharbrackleft}simp{\isacharbrackright}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharminus}\ y\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}\ {\isasymLongrightarrow}\ {\isacharparenleft}x\ {\isasymle}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2793 %
       
  2794 \isadelimproof
       
  2795 %
       
  2796 \endisadelimproof
       
  2797 %
       
  2798 \isatagproof
       
  2799 \isacommand{proof}\isamarkupfalse%
       
  2800 {\isacharminus}\ \ \ \isanewline
       
  2801 \ \ \isacommand{have}\isamarkupfalse%
       
  2802 \ {\isachardoublequoteopen}{\isasymexists}xa{\isachardot}\ x\ {\isacharequal}\ xa\ {\isacharat}\ {\isacharparenleft}x\ {\isacharminus}\ y{\isacharparenright}\ {\isasymand}\ xa\ {\isasymle}\ y{\isachardoublequoteclose}\isanewline
       
  2803 \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
  2804 \ {\isacharparenleft}rule\ list{\isacharunderscore}diff{\isachardot}induct{\isacharbrackleft}of\ {\isacharunderscore}\ x\ y{\isacharbrackright}{\isacharcomma}\ simp{\isacharplus}{\isacharparenright}\isanewline
       
  2805 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  2806 \ {\isacharparenleft}clarsimp{\isacharcomma}\ rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}y\ {\isacharhash}\ xa{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ simp{\isacharplus}{\isacharparenright}\isanewline
       
  2807 \ \ \isacommand{thus}\isamarkupfalse%
       
  2808 \ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharminus}\ y\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isacharparenright}\ {\isasymLongrightarrow}\ {\isacharparenleft}x\ {\isasymle}\ y{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  2809 \ simp\isanewline
       
  2810 \isacommand{qed}\isamarkupfalse%
       
  2811 %
       
  2812 \endisatagproof
       
  2813 {\isafoldproof}%
       
  2814 %
       
  2815 \isadelimproof
       
  2816 \isanewline
       
  2817 %
       
  2818 \endisadelimproof
       
  2819 \isanewline
       
  2820 \isacommand{lemma}\isamarkupfalse%
       
  2821 \ diff{\isacharunderscore}prefix{\isacharcolon}\isanewline
       
  2822 \ \ {\isachardoublequoteopen}{\isasymlbrakk}c\ {\isasymle}\ a\ {\isacharminus}\ b{\isacharsemicolon}\ b\ {\isasymle}\ a{\isasymrbrakk}\ {\isasymLongrightarrow}\ b\ {\isacharat}\ c\ {\isasymle}\ a{\isachardoublequoteclose}\isanewline
       
  2823 %
       
  2824 \isadelimproof
       
  2825 %
       
  2826 \endisadelimproof
       
  2827 %
       
  2828 \isatagproof
       
  2829 \isacommand{by}\isamarkupfalse%
       
  2830 \ {\isacharparenleft}auto\ elim{\isacharcolon}prefixE{\isacharparenright}%
       
  2831 \endisatagproof
       
  2832 {\isafoldproof}%
       
  2833 %
       
  2834 \isadelimproof
       
  2835 \isanewline
       
  2836 %
       
  2837 \endisadelimproof
       
  2838 \isanewline
       
  2839 \isacommand{lemma}\isamarkupfalse%
       
  2840 \ diff{\isacharunderscore}diff{\isacharunderscore}appd{\isacharcolon}\ \isanewline
       
  2841 \ \ {\isachardoublequoteopen}{\isasymlbrakk}c\ {\isacharless}\ a\ {\isacharminus}\ b{\isacharsemicolon}\ b\ {\isacharless}\ a{\isasymrbrakk}\ {\isasymLongrightarrow}\ {\isacharparenleft}a\ {\isacharminus}\ b{\isacharparenright}\ {\isacharminus}\ c\ {\isacharequal}\ a\ {\isacharminus}\ {\isacharparenleft}b\ {\isacharat}\ c{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2842 %
       
  2843 \isadelimproof
       
  2844 %
       
  2845 \endisadelimproof
       
  2846 %
       
  2847 \isatagproof
       
  2848 \isacommand{apply}\isamarkupfalse%
       
  2849 \ {\isacharparenleft}clarsimp\ simp{\isacharcolon}strict{\isacharunderscore}prefix{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2850 \isacommand{by}\isamarkupfalse%
       
  2851 \ {\isacharparenleft}drule\ diff{\isacharunderscore}prefix{\isacharcomma}\ auto\ elim{\isacharcolon}prefixE{\isacharparenright}%
       
  2852 \endisatagproof
       
  2853 {\isafoldproof}%
       
  2854 %
       
  2855 \isadelimproof
       
  2856 \isanewline
       
  2857 %
       
  2858 \endisadelimproof
       
  2859 \isanewline
       
  2860 \isacommand{lemma}\isamarkupfalse%
       
  2861 \ app{\isacharunderscore}eq{\isacharunderscore}cases{\isacharbrackleft}rule{\isacharunderscore}format{\isacharbrackright}{\isacharcolon}\isanewline
       
  2862 \ \ {\isachardoublequoteopen}{\isasymforall}\ x\ {\isachardot}\ x\ {\isacharat}\ y\ {\isacharequal}\ m\ {\isacharat}\ n\ {\isasymlongrightarrow}\ {\isacharparenleft}x\ {\isasymle}\ m\ {\isasymor}\ m\ {\isasymle}\ x{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2863 %
       
  2864 \isadelimproof
       
  2865 %
       
  2866 \endisadelimproof
       
  2867 %
       
  2868 \isatagproof
       
  2869 \isacommand{apply}\isamarkupfalse%
       
  2870 \ {\isacharparenleft}induct\ y{\isacharcomma}\ simp{\isacharparenright}\isanewline
       
  2871 \isacommand{apply}\isamarkupfalse%
       
  2872 \ {\isacharparenleft}clarify{\isacharcomma}\ drule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}x\ {\isacharat}\ {\isacharbrackleft}a{\isacharbrackright}{\isachardoublequoteclose}\ \isakeyword{in}\ spec{\isacharparenright}\isanewline
       
  2873 \isacommand{by}\isamarkupfalse%
       
  2874 \ {\isacharparenleft}clarsimp{\isacharcomma}\ auto\ simp{\isacharcolon}prefix{\isacharunderscore}def{\isacharparenright}%
       
  2875 \endisatagproof
       
  2876 {\isafoldproof}%
       
  2877 %
       
  2878 \isadelimproof
       
  2879 \isanewline
       
  2880 %
       
  2881 \endisadelimproof
       
  2882 \isanewline
       
  2883 \isacommand{lemma}\isamarkupfalse%
       
  2884 \ app{\isacharunderscore}eq{\isacharunderscore}dest{\isacharcolon}\isanewline
       
  2885 \ \ {\isachardoublequoteopen}x\ {\isacharat}\ y\ {\isacharequal}\ m\ {\isacharat}\ n\ {\isasymLongrightarrow}\ \isanewline
       
  2886 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}x\ {\isasymle}\ m\ {\isasymand}\ {\isacharparenleft}m\ {\isacharminus}\ x{\isacharparenright}\ {\isacharat}\ n\ {\isacharequal}\ y{\isacharparenright}\ {\isasymor}\ {\isacharparenleft}m\ {\isasymle}\ x\ {\isasymand}\ {\isacharparenleft}x\ {\isacharminus}\ m{\isacharparenright}\ {\isacharat}\ y\ {\isacharequal}\ n{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  2887 %
       
  2888 \isadelimproof
       
  2889 %
       
  2890 \endisadelimproof
       
  2891 %
       
  2892 \isatagproof
       
  2893 \isacommand{by}\isamarkupfalse%
       
  2894 \ {\isacharparenleft}frule{\isacharunderscore}tac\ app{\isacharunderscore}eq{\isacharunderscore}cases{\isacharcomma}\ auto\ elim{\isacharcolon}prefixE{\isacharparenright}%
       
  2895 \endisatagproof
       
  2896 {\isafoldproof}%
       
  2897 %
       
  2898 \isadelimproof
       
  2899 %
       
  2900 \endisadelimproof
       
  2901 %
       
  2902 \isamarkupsubsection{Lemmas for basic cases%
       
  2903 }
       
  2904 \isamarkuptrue%
       
  2905 %
       
  2906 \begin{isamarkuptext}%
       
  2907 The the final result of this direction is in \isa{easier{\isacharunderscore}direction}, which
       
  2908   is an induction on the structure of regular expressions. There is one case 
       
  2909   for each regular expression operator. For basic operators such as \isa{NULL{\isacharcomma}\ EMPTY{\isacharcomma}\ CHAR\ c},
       
  2910   the finiteness of their language partition can be established directly with no need
       
  2911   of taggiing. This section contains several technical lemma for these base cases.
       
  2912 
       
  2913   The inductive cases involve operators \isa{ALT{\isacharcomma}\ SEQ} and \isa{STAR}. 
       
  2914   Tagging functions need to be defined individually for each of them. There will be one
       
  2915   dedicated section for each of these cases, and each section goes virtually the same way:
       
  2916   gives definition of the tagging function and prove that strings 
       
  2917   with the same tag are equivalent.%
       
  2918 \end{isamarkuptext}%
       
  2919 \isamarkuptrue%
       
  2920 \isacommand{lemma}\isamarkupfalse%
       
  2921 \ quot{\isacharunderscore}empty{\isacharunderscore}subset{\isacharcolon}\isanewline
       
  2922 \ \ {\isachardoublequoteopen}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharparenright}\ {\isasymsubseteq}\ {\isacharbraceleft}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharcomma}\ UNIV\ {\isacharminus}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  2923 %
       
  2924 \isadelimproof
       
  2925 %
       
  2926 \endisadelimproof
       
  2927 %
       
  2928 \isatagproof
       
  2929 \isacommand{proof}\isamarkupfalse%
       
  2930 \isanewline
       
  2931 \ \ \isacommand{fix}\isamarkupfalse%
       
  2932 \ x\isanewline
       
  2933 \ \ \isacommand{assume}\isamarkupfalse%
       
  2934 \ {\isachardoublequoteopen}x\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  2935 \ \ \isacommand{then}\isamarkupfalse%
       
  2936 \ \isacommand{obtain}\isamarkupfalse%
       
  2937 \ y\ \isakeyword{where}\ h{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isacharequal}\ {\isacharbraceleft}z{\isachardot}\ {\isacharparenleft}y{\isacharcomma}\ z{\isacharparenright}\ {\isasymin}\ {\isasymapprox}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  2938 \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
  2939 \ quotient{\isacharunderscore}def\ Image{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
  2940 \ blast\isanewline
       
  2941 \ \ \isacommand{show}\isamarkupfalse%
       
  2942 \ {\isachardoublequoteopen}x\ {\isasymin}\ {\isacharbraceleft}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharcomma}\ UNIV\ {\isacharminus}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  2943 \ \ \isacommand{proof}\isamarkupfalse%
       
  2944 \ {\isacharparenleft}cases\ {\isachardoublequoteopen}y\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  2945 \ \ \ \ \isacommand{case}\isamarkupfalse%
       
  2946 \ True\ \isacommand{with}\isamarkupfalse%
       
  2947 \ h\isanewline
       
  2948 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2949 \ {\isachardoublequoteopen}x\ {\isacharequal}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  2950 \ {\isacharparenleft}auto\ simp{\isacharcolon}str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2951 \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  2952 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  2953 \ simp\isanewline
       
  2954 \ \ \isacommand{next}\isamarkupfalse%
       
  2955 \isanewline
       
  2956 \ \ \ \ \isacommand{case}\isamarkupfalse%
       
  2957 \ False\ \isacommand{with}\isamarkupfalse%
       
  2958 \ h\isanewline
       
  2959 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  2960 \ {\isachardoublequoteopen}x\ {\isacharequal}\ UNIV\ {\isacharminus}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  2961 \ {\isacharparenleft}auto\ simp{\isacharcolon}str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
  2962 \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  2963 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  2964 \ simp\isanewline
       
  2965 \ \ \isacommand{qed}\isamarkupfalse%
       
  2966 \isanewline
       
  2967 \isacommand{qed}\isamarkupfalse%
       
  2968 %
       
  2969 \endisatagproof
       
  2970 {\isafoldproof}%
       
  2971 %
       
  2972 \isadelimproof
       
  2973 \isanewline
       
  2974 %
       
  2975 \endisadelimproof
       
  2976 \isanewline
       
  2977 \isacommand{lemma}\isamarkupfalse%
       
  2978 \ quot{\isacharunderscore}char{\isacharunderscore}subset{\isacharcolon}\isanewline
       
  2979 \ \ {\isachardoublequoteopen}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}{\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isacharparenright}\ {\isasymsubseteq}\ {\isacharbraceleft}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharcomma}{\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isacharcomma}\ UNIV\ {\isacharminus}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharcomma}\ {\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  2980 %
       
  2981 \isadelimproof
       
  2982 %
       
  2983 \endisadelimproof
       
  2984 %
       
  2985 \isatagproof
       
  2986 \isacommand{proof}\isamarkupfalse%
       
  2987 \ \isanewline
       
  2988 \ \ \isacommand{fix}\isamarkupfalse%
       
  2989 \ x\ \isanewline
       
  2990 \ \ \isacommand{assume}\isamarkupfalse%
       
  2991 \ {\isachardoublequoteopen}x\ {\isasymin}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  2992 \ \ \isacommand{then}\isamarkupfalse%
       
  2993 \ \isacommand{obtain}\isamarkupfalse%
       
  2994 \ y\ \isakeyword{where}\ h{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isacharequal}\ {\isacharbraceleft}z{\isachardot}\ {\isacharparenleft}y{\isacharcomma}\ z{\isacharparenright}\ {\isasymin}\ {\isasymapprox}{\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  2995 \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
  2996 \ quotient{\isacharunderscore}def\ Image{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
  2997 \ blast\isanewline
       
  2998 \ \ \isacommand{show}\isamarkupfalse%
       
  2999 \ {\isachardoublequoteopen}x\ {\isasymin}\ {\isacharbraceleft}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharcomma}{\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isacharcomma}\ UNIV\ {\isacharminus}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharcomma}\ {\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  3000 \ \ \isacommand{proof}\isamarkupfalse%
       
  3001 \ {\isacharminus}\isanewline
       
  3002 \ \ \ \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  3003 \ \isacommand{assume}\isamarkupfalse%
       
  3004 \ {\isachardoublequoteopen}y\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\ \isacommand{hence}\isamarkupfalse%
       
  3005 \ {\isachardoublequoteopen}x\ {\isacharequal}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  3006 \ h\ \isanewline
       
  3007 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3008 \ {\isacharparenleft}auto\ simp{\isacharcolon}str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3009 \ \ \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  3010 \ \isacommand{moreover}\isamarkupfalse%
       
  3011 \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  3012 \isanewline
       
  3013 \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  3014 \ {\isachardoublequoteopen}y\ {\isacharequal}\ {\isacharbrackleft}c{\isacharbrackright}{\isachardoublequoteclose}\ \isacommand{hence}\isamarkupfalse%
       
  3015 \ {\isachardoublequoteopen}x\ {\isacharequal}\ {\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  3016 \ h\ \isanewline
       
  3017 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3018 \ {\isacharparenleft}auto\ dest{\isacharbang}{\isacharcolon}spec{\isacharbrackleft}\isakeyword{where}\ x\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}{\isacharbrackright}\ simp{\isacharcolon}str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3019 \ \ \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  3020 \ \isacommand{moreover}\isamarkupfalse%
       
  3021 \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  3022 \isanewline
       
  3023 \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  3024 \ {\isachardoublequoteopen}y\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\ \isakeyword{and}\ {\isachardoublequoteopen}y\ {\isasymnoteq}\ {\isacharbrackleft}c{\isacharbrackright}{\isachardoublequoteclose}\isanewline
       
  3025 \ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
       
  3026 \ {\isachardoublequoteopen}{\isasymforall}\ z{\isachardot}\ {\isacharparenleft}y\ {\isacharat}\ z{\isacharparenright}\ {\isasymnoteq}\ {\isacharbrackleft}c{\isacharbrackright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  3027 \ {\isacharparenleft}case{\isacharunderscore}tac\ y{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  3028 \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  3029 \ \isacommand{have}\isamarkupfalse%
       
  3030 \ {\isachardoublequoteopen}{\isasymAnd}\ p{\isachardot}\ {\isacharparenleft}p\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}\ {\isasymand}\ p\ {\isasymnoteq}\ {\isacharbrackleft}c{\isacharbrackright}{\isacharparenright}\ {\isacharequal}\ {\isacharparenleft}{\isasymforall}\ q{\isachardot}\ p\ {\isacharat}\ q\ {\isasymnoteq}\ {\isacharbrackleft}c{\isacharbrackright}{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  3031 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3032 \ {\isacharparenleft}case{\isacharunderscore}tac\ p{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  3033 \ \ \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  3034 \ \isacommand{have}\isamarkupfalse%
       
  3035 \ {\isachardoublequoteopen}x\ {\isacharequal}\ UNIV\ {\isacharminus}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharcomma}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  3036 \ h\isanewline
       
  3037 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3038 \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3039 \ \ \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  3040 \ \isacommand{ultimately}\isamarkupfalse%
       
  3041 \ \isacommand{show}\isamarkupfalse%
       
  3042 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3043 \ blast\isanewline
       
  3044 \ \ \isacommand{qed}\isamarkupfalse%
       
  3045 \isanewline
       
  3046 \isacommand{qed}\isamarkupfalse%
       
  3047 %
       
  3048 \endisatagproof
       
  3049 {\isafoldproof}%
       
  3050 %
       
  3051 \isadelimproof
       
  3052 %
       
  3053 \endisadelimproof
       
  3054 %
       
  3055 \isamarkupsubsection{The case for \isa{SEQ}%
       
  3056 }
       
  3057 \isamarkuptrue%
       
  3058 \isacommand{definition}\isamarkupfalse%
       
  3059 \ \isanewline
       
  3060 \ \ {\isachardoublequoteopen}tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ x\ {\isasymequiv}\ \isanewline
       
  3061 \ \ \ \ \ \ \ {\isacharparenleft}{\isacharparenleft}{\isasymapprox}L\isactrlisub {\isadigit{1}}{\isacharparenright}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x{\isacharbraceright}{\isacharcomma}\ {\isacharbraceleft}{\isacharparenleft}{\isasymapprox}L\isactrlisub {\isadigit{2}}{\isacharparenright}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x\ {\isacharminus}\ xa{\isacharbraceright}{\isacharbar}\ xa{\isachardot}\ \ xa\ {\isasymle}\ x\ {\isasymand}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isacharbraceright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3062 \isanewline
       
  3063 \isacommand{lemma}\isamarkupfalse%
       
  3064 \ tag{\isacharunderscore}str{\isacharunderscore}seq{\isacharunderscore}range{\isacharunderscore}finite{\isacharcolon}\isanewline
       
  3065 \ \ {\isachardoublequoteopen}{\isasymlbrakk}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}{\isacharparenright}{\isacharsemicolon}\ finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isasymrbrakk}\ \isanewline
       
  3066 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}range\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3067 %
       
  3068 \isadelimproof
       
  3069 %
       
  3070 \endisadelimproof
       
  3071 %
       
  3072 \isatagproof
       
  3073 \isacommand{apply}\isamarkupfalse%
       
  3074 \ {\isacharparenleft}rule{\isacharunderscore}tac\ B\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}{\isacharparenright}\ {\isasymtimes}\ {\isacharparenleft}Pow\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ finite{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  3075 \isacommand{by}\isamarkupfalse%
       
  3076 \ {\isacharparenleft}auto\ simp{\isacharcolon}tag{\isacharunderscore}str{\isacharunderscore}SEQ{\isacharunderscore}def\ Image{\isacharunderscore}def\ quotient{\isacharunderscore}def\ split{\isacharcolon}if{\isacharunderscore}splits{\isacharparenright}%
       
  3077 \endisatagproof
       
  3078 {\isafoldproof}%
       
  3079 %
       
  3080 \isadelimproof
       
  3081 \isanewline
       
  3082 %
       
  3083 \endisadelimproof
       
  3084 \isanewline
       
  3085 \isacommand{lemma}\isamarkupfalse%
       
  3086 \ append{\isacharunderscore}seq{\isacharunderscore}elim{\isacharcolon}\isanewline
       
  3087 \ \ \isakeyword{assumes}\ {\isachardoublequoteopen}x\ {\isacharat}\ y\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\isanewline
       
  3088 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}{\isacharparenleft}{\isasymexists}\ xa\ {\isasymle}\ x{\isachardot}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isasymand}\ {\isacharparenleft}x\ {\isacharminus}\ xa{\isacharparenright}\ {\isacharat}\ y\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}\ {\isasymor}\ \isanewline
       
  3089 \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}{\isasymexists}\ ya\ {\isasymle}\ y{\isachardot}\ {\isacharparenleft}x\ {\isacharat}\ ya{\isacharparenright}\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isasymand}\ {\isacharparenleft}y\ {\isacharminus}\ ya{\isacharparenright}\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3090 %
       
  3091 \isadelimproof
       
  3092 %
       
  3093 \endisadelimproof
       
  3094 %
       
  3095 \isatagproof
       
  3096 \isacommand{proof}\isamarkupfalse%
       
  3097 {\isacharminus}\isanewline
       
  3098 \ \ \isacommand{from}\isamarkupfalse%
       
  3099 \ assms\ \isacommand{obtain}\isamarkupfalse%
       
  3100 \ s\isactrlisub {\isadigit{1}}\ s\isactrlisub {\isadigit{2}}\ \isanewline
       
  3101 \ \ \ \ \isakeyword{where}\ {\isachardoublequoteopen}x\ {\isacharat}\ y\ {\isacharequal}\ s\isactrlisub {\isadigit{1}}\ {\isacharat}\ s\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\ \isanewline
       
  3102 \ \ \ \ \isakeyword{and}\ in{\isacharunderscore}seq{\isacharcolon}\ {\isachardoublequoteopen}s\isactrlisub {\isadigit{1}}\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isasymand}\ s\isactrlisub {\isadigit{2}}\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\ \isanewline
       
  3103 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3104 \ {\isacharparenleft}auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3105 \ \ \isacommand{hence}\isamarkupfalse%
       
  3106 \ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isasymle}\ s\isactrlisub {\isadigit{1}}\ {\isasymand}\ {\isacharparenleft}s\isactrlisub {\isadigit{1}}\ {\isacharminus}\ x{\isacharparenright}\ {\isacharat}\ s\isactrlisub {\isadigit{2}}\ {\isacharequal}\ y{\isacharparenright}\ {\isasymor}\ {\isacharparenleft}s\isactrlisub {\isadigit{1}}\ {\isasymle}\ x\ {\isasymand}\ {\isacharparenleft}x\ {\isacharminus}\ s\isactrlisub {\isadigit{1}}{\isacharparenright}\ {\isacharat}\ y\ {\isacharequal}\ s\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3107 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3108 \ app{\isacharunderscore}eq{\isacharunderscore}dest\ \isacommand{by}\isamarkupfalse%
       
  3109 \ auto\isanewline
       
  3110 \ \ \isacommand{moreover}\isamarkupfalse%
       
  3111 \ \isacommand{have}\isamarkupfalse%
       
  3112 \ {\isachardoublequoteopen}{\isasymlbrakk}x\ {\isasymle}\ s\isactrlisub {\isadigit{1}}{\isacharsemicolon}\ {\isacharparenleft}s\isactrlisub {\isadigit{1}}\ {\isacharminus}\ x{\isacharparenright}\ {\isacharat}\ s\isactrlisub {\isadigit{2}}\ {\isacharequal}\ y{\isasymrbrakk}\ {\isasymLongrightarrow}\ \isanewline
       
  3113 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymexists}\ ya\ {\isasymle}\ y{\isachardot}\ {\isacharparenleft}x\ {\isacharat}\ ya{\isacharparenright}\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isasymand}\ {\isacharparenleft}y\ {\isacharminus}\ ya{\isacharparenright}\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\ \isanewline
       
  3114 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3115 \ in{\isacharunderscore}seq\ \isacommand{by}\isamarkupfalse%
       
  3116 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}s\isactrlisub {\isadigit{1}}\ {\isacharminus}\ x{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ auto\ elim{\isacharcolon}prefixE{\isacharparenright}\isanewline
       
  3117 \ \ \isacommand{moreover}\isamarkupfalse%
       
  3118 \ \isacommand{have}\isamarkupfalse%
       
  3119 \ {\isachardoublequoteopen}{\isasymlbrakk}s\isactrlisub {\isadigit{1}}\ {\isasymle}\ x{\isacharsemicolon}\ {\isacharparenleft}x\ {\isacharminus}\ s\isactrlisub {\isadigit{1}}{\isacharparenright}\ {\isacharat}\ y\ {\isacharequal}\ s\isactrlisub {\isadigit{2}}{\isasymrbrakk}\ {\isasymLongrightarrow}\ \isanewline
       
  3120 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymexists}\ xa\ {\isasymle}\ x{\isachardot}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isasymand}\ {\isacharparenleft}x\ {\isacharminus}\ xa{\isacharparenright}\ {\isacharat}\ y\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\ \isanewline
       
  3121 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3122 \ in{\isacharunderscore}seq\ \isacommand{by}\isamarkupfalse%
       
  3123 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ s\isactrlisub {\isadigit{1}}\ \isakeyword{in}\ exI{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  3124 \ \ \isacommand{ultimately}\isamarkupfalse%
       
  3125 \ \isacommand{show}\isamarkupfalse%
       
  3126 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3127 \ blast\isanewline
       
  3128 \isacommand{qed}\isamarkupfalse%
       
  3129 %
       
  3130 \endisatagproof
       
  3131 {\isafoldproof}%
       
  3132 %
       
  3133 \isadelimproof
       
  3134 \isanewline
       
  3135 %
       
  3136 \endisadelimproof
       
  3137 \isanewline
       
  3138 \isacommand{lemma}\isamarkupfalse%
       
  3139 \ tag{\isacharunderscore}str{\isacharunderscore}SEQ{\isacharunderscore}injI{\isacharcolon}\isanewline
       
  3140 \ \ {\isachardoublequoteopen}tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ m\ {\isacharequal}\ tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ n\ {\isasymLongrightarrow}\ m\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}\ n{\isachardoublequoteclose}\isanewline
       
  3141 %
       
  3142 \isadelimproof
       
  3143 %
       
  3144 \endisadelimproof
       
  3145 %
       
  3146 \isatagproof
       
  3147 \isacommand{proof}\isamarkupfalse%
       
  3148 {\isacharminus}\isanewline
       
  3149 \ \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  3150 \ \isacommand{fix}\isamarkupfalse%
       
  3151 \ x\ y\ z\isanewline
       
  3152 \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  3153 \ xz{\isacharunderscore}in{\isacharunderscore}seq{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\isanewline
       
  3154 \ \ \ \ \isakeyword{and}\ tag{\isacharunderscore}xy{\isacharcolon}\ {\isachardoublequoteopen}tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ x\ {\isacharequal}\ tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ y{\isachardoublequoteclose}\isanewline
       
  3155 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3156 {\isachardoublequoteopen}y\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\ \isanewline
       
  3157 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3158 {\isacharminus}\isanewline
       
  3159 \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3160 \ {\isachardoublequoteopen}{\isacharparenleft}{\isasymexists}\ xa\ {\isasymle}\ x{\isachardot}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isasymand}\ {\isacharparenleft}x\ {\isacharminus}\ xa{\isacharparenright}\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}\ {\isasymor}\ \isanewline
       
  3161 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}{\isasymexists}\ za\ {\isasymle}\ z{\isachardot}\ {\isacharparenleft}x\ {\isacharat}\ za{\isacharparenright}\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isasymand}\ {\isacharparenleft}z\ {\isacharminus}\ za{\isacharparenright}\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3162 \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3163 \ xz{\isacharunderscore}in{\isacharunderscore}seq\ append{\isacharunderscore}seq{\isacharunderscore}elim\ \isacommand{by}\isamarkupfalse%
       
  3164 \ simp\isanewline
       
  3165 \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  3166 \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  3167 \isanewline
       
  3168 \ \ \ \ \ \ \ \ \isacommand{fix}\isamarkupfalse%
       
  3169 \ xa\isanewline
       
  3170 \ \ \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  3171 \ h{\isadigit{1}}{\isacharcolon}\ {\isachardoublequoteopen}xa\ {\isasymle}\ x{\isachardoublequoteclose}\ \isakeyword{and}\ h{\isadigit{2}}{\isacharcolon}\ {\isachardoublequoteopen}xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isachardoublequoteclose}\ \isakeyword{and}\ h{\isadigit{3}}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharminus}\ xa{\isacharparenright}\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\isanewline
       
  3172 \ \ \ \ \ \ \ \ \isacommand{obtain}\isamarkupfalse%
       
  3173 \ ya\ \isakeyword{where}\ {\isachardoublequoteopen}ya\ {\isasymle}\ y{\isachardoublequoteclose}\ \isakeyword{and}\ {\isachardoublequoteopen}ya\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isachardoublequoteclose}\ \isakeyword{and}\ {\isachardoublequoteopen}{\isacharparenleft}y\ {\isacharminus}\ ya{\isacharparenright}\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\ \isanewline
       
  3174 \ \ \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3175 \ {\isacharminus}\isanewline
       
  3176 \ \ \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3177 \ {\isachardoublequoteopen}{\isasymexists}\ ya{\isachardot}\ \ ya\ {\isasymle}\ y\ {\isasymand}\ ya\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isasymand}\ {\isacharparenleft}x\ {\isacharminus}\ xa{\isacharparenright}\ {\isasymapprox}L\isactrlisub {\isadigit{2}}\ {\isacharparenleft}y\ {\isacharminus}\ ya{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3178 \ \ \ \ \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3179 \ {\isacharminus}\isanewline
       
  3180 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3181 \ {\isachardoublequoteopen}{\isacharbraceleft}{\isasymapprox}L\isactrlisub {\isadigit{2}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x\ {\isacharminus}\ xa{\isacharbraceright}\ {\isacharbar}xa{\isachardot}\ xa\ {\isasymle}\ x\ {\isasymand}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isacharbraceright}\ {\isacharequal}\ \isanewline
       
  3182 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharbraceleft}{\isasymapprox}L\isactrlisub {\isadigit{2}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}y\ {\isacharminus}\ xa{\isacharbraceright}\ {\isacharbar}xa{\isachardot}\ xa\ {\isasymle}\ y\ {\isasymand}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  3183 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}{\isacharquery}Left\ {\isacharequal}\ {\isacharquery}Right{\isachardoublequoteclose}{\isacharparenright}\ \isanewline
       
  3184 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3185 \ h{\isadigit{1}}\ tag{\isacharunderscore}xy\ \isacommand{by}\isamarkupfalse%
       
  3186 \ {\isacharparenleft}auto\ simp{\isacharcolon}tag{\isacharunderscore}str{\isacharunderscore}SEQ{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3187 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  3188 \ \isacommand{have}\isamarkupfalse%
       
  3189 \ {\isachardoublequoteopen}{\isasymapprox}L\isactrlisub {\isadigit{2}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x\ {\isacharminus}\ xa{\isacharbraceright}\ {\isasymin}\ {\isacharquery}Left{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  3190 \ h{\isadigit{1}}\ h{\isadigit{2}}\ \isacommand{by}\isamarkupfalse%
       
  3191 \ auto\isanewline
       
  3192 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  3193 \ \isacommand{have}\isamarkupfalse%
       
  3194 \ {\isachardoublequoteopen}{\isasymapprox}L\isactrlisub {\isadigit{2}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x\ {\isacharminus}\ xa{\isacharbraceright}\ {\isasymin}\ {\isacharquery}Right{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  3195 \ simp\isanewline
       
  3196 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  3197 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3198 \ {\isacharparenleft}auto\ simp{\isacharcolon}Image{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3199 \ \ \ \ \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3200 \isanewline
       
  3201 \ \ \ \ \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3202 \ prems\ \isacommand{show}\isamarkupfalse%
       
  3203 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3204 \ {\isacharparenleft}auto\ simp{\isacharcolon}str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3205 \ \ \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3206 \isanewline
       
  3207 \ \ \ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
       
  3208 \ {\isachardoublequoteopen}y\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  3209 \ {\isacharparenleft}erule{\isacharunderscore}tac\ prefixE{\isacharcomma}\ auto\ simp{\isacharcolon}Seq{\isacharunderscore}def{\isacharparenright}\ \ \ \ \ \ \ \ \ \ \isanewline
       
  3210 \ \ \ \ \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  3211 \ \isacommand{moreover}\isamarkupfalse%
       
  3212 \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  3213 \isanewline
       
  3214 \ \ \ \ \ \ \ \ \isacommand{fix}\isamarkupfalse%
       
  3215 \ za\isanewline
       
  3216 \ \ \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  3217 \ h{\isadigit{1}}{\isacharcolon}\ {\isachardoublequoteopen}za\ {\isasymle}\ z{\isachardoublequoteclose}\ \isakeyword{and}\ h{\isadigit{2}}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharat}\ za{\isacharparenright}\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isachardoublequoteclose}\ \isakeyword{and}\ h{\isadigit{3}}{\isacharcolon}\ {\isachardoublequoteopen}z\ {\isacharminus}\ za\ {\isasymin}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\isanewline
       
  3218 \ \ \ \ \ \ \ \ \isacommand{hence}\isamarkupfalse%
       
  3219 \ {\isachardoublequoteopen}y\ {\isacharat}\ za\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isachardoublequoteclose}\isanewline
       
  3220 \ \ \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3221 {\isacharminus}\isanewline
       
  3222 \ \ \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3223 \ {\isachardoublequoteopen}{\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x{\isacharbraceright}\ {\isacharequal}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}y{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  3224 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3225 \ h{\isadigit{1}}\ tag{\isacharunderscore}xy\ \isacommand{by}\isamarkupfalse%
       
  3226 \ {\isacharparenleft}auto\ simp{\isacharcolon}tag{\isacharunderscore}str{\isacharunderscore}SEQ{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3227 \ \ \ \ \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3228 \ h{\isadigit{2}}\ \isacommand{show}\isamarkupfalse%
       
  3229 \ {\isacharquery}thesis\ \isanewline
       
  3230 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3231 \ {\isacharparenleft}auto\ simp{\isacharcolon}Image{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}def{\isacharparenright}\ \isanewline
       
  3232 \ \ \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3233 \isanewline
       
  3234 \ \ \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3235 \ h{\isadigit{1}}\ h{\isadigit{3}}\ \isacommand{have}\isamarkupfalse%
       
  3236 \ {\isachardoublequoteopen}y\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isachardoublequoteclose}\ \isanewline
       
  3237 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3238 \ {\isacharparenleft}drule{\isacharunderscore}tac\ A\ {\isacharequal}\ L\isactrlisub {\isadigit{1}}\ \isakeyword{in}\ seq{\isacharunderscore}intro{\isacharcomma}\ auto\ elim{\isacharcolon}prefixE{\isacharparenright}\isanewline
       
  3239 \ \ \ \ \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  3240 \isanewline
       
  3241 \ \ \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  3242 \ \isacommand{show}\isamarkupfalse%
       
  3243 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3244 \ blast\isanewline
       
  3245 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3246 \isanewline
       
  3247 \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  3248 \ \isacommand{thus}\isamarkupfalse%
       
  3249 \ {\isachardoublequoteopen}tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ m\ {\isacharequal}\ tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ n\ {\isasymLongrightarrow}\ m\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}\ n{\isachardoublequoteclose}\ \isanewline
       
  3250 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3251 \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}\ str{\isacharunderscore}eq{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3252 \isacommand{qed}\isamarkupfalse%
       
  3253 %
       
  3254 \endisatagproof
       
  3255 {\isafoldproof}%
       
  3256 %
       
  3257 \isadelimproof
       
  3258 \ \isanewline
       
  3259 %
       
  3260 \endisadelimproof
       
  3261 \isanewline
       
  3262 \isacommand{lemma}\isamarkupfalse%
       
  3263 \ quot{\isacharunderscore}seq{\isacharunderscore}finiteI{\isacharcolon}\isanewline
       
  3264 \ \ \isakeyword{assumes}\ finite{\isadigit{1}}{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}{\isacharcolon}{\isacharcolon}string\ set{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3265 \ \ \isakeyword{and}\ finite{\isadigit{2}}{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3266 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3267 %
       
  3268 \isadelimproof
       
  3269 %
       
  3270 \endisadelimproof
       
  3271 %
       
  3272 \isatagproof
       
  3273 \isacommand{proof}\isamarkupfalse%
       
  3274 {\isacharparenleft}rule{\isacharunderscore}tac\ f\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharparenleft}op\ {\isacharbackquote}{\isacharparenright}\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ finite{\isacharunderscore}imageD{\isacharparenright}\isanewline
       
  3275 \ \ \isacommand{show}\isamarkupfalse%
       
  3276 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}op\ {\isacharbackquote}\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}\ {\isacharbackquote}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  3277 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3278 \ finite{\isadigit{1}}\ finite{\isadigit{2}}\isanewline
       
  3279 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3280 \ {\isacharparenleft}auto\ intro{\isacharcolon}finite{\isacharunderscore}tag{\isacharunderscore}imageI\ tag{\isacharunderscore}str{\isacharunderscore}seq{\isacharunderscore}range{\isacharunderscore}finite{\isacharparenright}\isanewline
       
  3281 \isacommand{next}\isamarkupfalse%
       
  3282 \isanewline
       
  3283 \ \ \isacommand{show}\isamarkupfalse%
       
  3284 \ \ {\isachardoublequoteopen}inj{\isacharunderscore}on\ {\isacharparenleft}op\ {\isacharbackquote}\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}SEQ\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3285 \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
  3286 \ {\isacharparenleft}rule\ tag{\isacharunderscore}image{\isacharunderscore}injI{\isacharparenright}\isanewline
       
  3287 \ \ \ \ \isacommand{apply}\isamarkupfalse%
       
  3288 \ {\isacharparenleft}rule\ tag{\isacharunderscore}str{\isacharunderscore}SEQ{\isacharunderscore}injI{\isacharparenright}\isanewline
       
  3289 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3290 \ {\isacharparenleft}auto\ intro{\isacharcolon}tag{\isacharunderscore}image{\isacharunderscore}injI\ tag{\isacharunderscore}str{\isacharunderscore}SEQ{\isacharunderscore}injI\ simp{\isacharcolon}{\isacharparenright}\isanewline
       
  3291 \isacommand{qed}\isamarkupfalse%
       
  3292 %
       
  3293 \endisatagproof
       
  3294 {\isafoldproof}%
       
  3295 %
       
  3296 \isadelimproof
       
  3297 %
       
  3298 \endisadelimproof
       
  3299 %
       
  3300 \isamarkupsubsection{The case for \isa{ALT}%
       
  3301 }
       
  3302 \isamarkuptrue%
       
  3303 \isacommand{definition}\isamarkupfalse%
       
  3304 \ \isanewline
       
  3305 \ \ {\isachardoublequoteopen}tag{\isacharunderscore}str{\isacharunderscore}ALT\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}string{\isacharparenright}\ {\isasymequiv}\ {\isacharparenleft}{\isacharparenleft}{\isasymapprox}L\isactrlisub {\isadigit{1}}{\isacharparenright}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x{\isacharbraceright}{\isacharcomma}\ {\isacharparenleft}{\isasymapprox}L\isactrlisub {\isadigit{2}}{\isacharparenright}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x{\isacharbraceright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3306 \isanewline
       
  3307 \isacommand{lemma}\isamarkupfalse%
       
  3308 \ tag{\isacharunderscore}str{\isacharunderscore}alt{\isacharunderscore}range{\isacharunderscore}finite{\isacharcolon}\isanewline
       
  3309 \ \ {\isachardoublequoteopen}{\isasymlbrakk}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}{\isacharparenright}{\isacharsemicolon}\ finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isasymrbrakk}\ \isanewline
       
  3310 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}range\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}ALT\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3311 %
       
  3312 \isadelimproof
       
  3313 %
       
  3314 \endisadelimproof
       
  3315 %
       
  3316 \isatagproof
       
  3317 \isacommand{apply}\isamarkupfalse%
       
  3318 \ {\isacharparenleft}rule{\isacharunderscore}tac\ B\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}{\isacharparenright}\ {\isasymtimes}\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ finite{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  3319 \isacommand{by}\isamarkupfalse%
       
  3320 \ {\isacharparenleft}auto\ simp{\isacharcolon}tag{\isacharunderscore}str{\isacharunderscore}ALT{\isacharunderscore}def\ Image{\isacharunderscore}def\ quotient{\isacharunderscore}def{\isacharparenright}%
       
  3321 \endisatagproof
       
  3322 {\isafoldproof}%
       
  3323 %
       
  3324 \isadelimproof
       
  3325 \isanewline
       
  3326 %
       
  3327 \endisadelimproof
       
  3328 \isanewline
       
  3329 \isacommand{lemma}\isamarkupfalse%
       
  3330 \ quot{\isacharunderscore}union{\isacharunderscore}finiteI{\isacharcolon}\isanewline
       
  3331 \ \ \isakeyword{assumes}\ finite{\isadigit{1}}{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}{\isacharcolon}{\isacharcolon}string\ set{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3332 \ \ \isakeyword{and}\ finite{\isadigit{2}}{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3333 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}\ {\isasymunion}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3334 %
       
  3335 \isadelimproof
       
  3336 %
       
  3337 \endisadelimproof
       
  3338 %
       
  3339 \isatagproof
       
  3340 \isacommand{proof}\isamarkupfalse%
       
  3341 {\isacharparenleft}rule{\isacharunderscore}tac\ f\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharparenleft}op\ {\isacharbackquote}{\isacharparenright}\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}ALT\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ finite{\isacharunderscore}imageD{\isacharparenright}\isanewline
       
  3342 \ \ \isacommand{show}\isamarkupfalse%
       
  3343 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}op\ {\isacharbackquote}\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}ALT\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}\ {\isacharbackquote}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isasymunion}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  3344 \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3345 \ finite{\isadigit{1}}\ finite{\isadigit{2}}\isanewline
       
  3346 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3347 \ {\isacharparenleft}auto\ intro{\isacharcolon}finite{\isacharunderscore}tag{\isacharunderscore}imageI\ tag{\isacharunderscore}str{\isacharunderscore}alt{\isacharunderscore}range{\isacharunderscore}finite{\isacharparenright}\isanewline
       
  3348 \isacommand{next}\isamarkupfalse%
       
  3349 \isanewline
       
  3350 \ \ \isacommand{show}\isamarkupfalse%
       
  3351 \ {\isachardoublequoteopen}inj{\isacharunderscore}on\ {\isacharparenleft}op\ {\isacharbackquote}\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}ALT\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isasymunion}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3352 \ \ \isacommand{proof}\isamarkupfalse%
       
  3353 {\isacharminus}\isanewline
       
  3354 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3355 \ {\isachardoublequoteopen}{\isasymAnd}m\ n{\isachardot}\ tag{\isacharunderscore}str{\isacharunderscore}ALT\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ m\ {\isacharequal}\ tag{\isacharunderscore}str{\isacharunderscore}ALT\ L\isactrlisub {\isadigit{1}}\ L\isactrlisub {\isadigit{2}}\ n\ \isanewline
       
  3356 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ m\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}\ {\isasymunion}\ L\isactrlisub {\isadigit{2}}{\isacharparenright}\ n{\isachardoublequoteclose}\isanewline
       
  3357 \ \ \ \ \ \ \isacommand{unfolding}\isamarkupfalse%
       
  3358 \ tag{\isacharunderscore}str{\isacharunderscore}ALT{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}def\ Image{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\ \isacommand{by}\isamarkupfalse%
       
  3359 \ auto\isanewline
       
  3360 \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  3361 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3362 \ {\isacharparenleft}auto\ intro{\isacharcolon}tag{\isacharunderscore}image{\isacharunderscore}injI{\isacharparenright}\isanewline
       
  3363 \ \ \isacommand{qed}\isamarkupfalse%
       
  3364 \isanewline
       
  3365 \isacommand{qed}\isamarkupfalse%
       
  3366 %
       
  3367 \endisatagproof
       
  3368 {\isafoldproof}%
       
  3369 %
       
  3370 \isadelimproof
       
  3371 %
       
  3372 \endisadelimproof
       
  3373 %
       
  3374 \isamarkupsubsection{The case for \isa{STAR}%
       
  3375 }
       
  3376 \isamarkuptrue%
       
  3377 %
       
  3378 \begin{isamarkuptext}%
       
  3379 This turned out to be the most tricky case.%
       
  3380 \end{isamarkuptext}%
       
  3381 \isamarkuptrue%
       
  3382 \isacommand{definition}\isamarkupfalse%
       
  3383 \ \isanewline
       
  3384 \ \ {\isachardoublequoteopen}tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}\ x\ {\isasymequiv}\ {\isacharbraceleft}{\isacharparenleft}{\isasymapprox}L\isactrlisub {\isadigit{1}}{\isacharparenright}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x\ {\isacharminus}\ xa{\isacharbraceright}\ {\isacharbar}\ xa{\isachardot}\ xa\ {\isacharless}\ x\ {\isasymand}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  3385 \isanewline
       
  3386 \isacommand{lemma}\isamarkupfalse%
       
  3387 \ finite{\isacharunderscore}set{\isacharunderscore}has{\isacharunderscore}max{\isacharcolon}\ {\isachardoublequoteopen}{\isasymlbrakk}finite\ A{\isacharsemicolon}\ A\ {\isasymnoteq}\ {\isacharbraceleft}{\isacharbraceright}{\isasymrbrakk}\ {\isasymLongrightarrow}\ \isanewline
       
  3388 \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}{\isasymexists}\ max\ {\isasymin}\ A{\isachardot}\ {\isasymforall}\ a\ {\isasymin}\ A{\isachardot}\ f\ a\ {\isacharless}{\isacharequal}\ {\isacharparenleft}f\ max\ {\isacharcolon}{\isacharcolon}\ nat{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3389 %
       
  3390 \isadelimproof
       
  3391 %
       
  3392 \endisadelimproof
       
  3393 %
       
  3394 \isatagproof
       
  3395 \isacommand{proof}\isamarkupfalse%
       
  3396 \ {\isacharparenleft}induct\ rule{\isacharcolon}finite{\isachardot}induct{\isacharparenright}\isanewline
       
  3397 \ \ \isacommand{case}\isamarkupfalse%
       
  3398 \ emptyI\ \isacommand{thus}\isamarkupfalse%
       
  3399 \ {\isacharquery}case\ \isacommand{by}\isamarkupfalse%
       
  3400 \ simp\isanewline
       
  3401 \isacommand{next}\isamarkupfalse%
       
  3402 \isanewline
       
  3403 \ \ \isacommand{case}\isamarkupfalse%
       
  3404 \ {\isacharparenleft}insertI\ A\ a{\isacharparenright}\isanewline
       
  3405 \ \ \isacommand{show}\isamarkupfalse%
       
  3406 \ {\isacharquery}case\isanewline
       
  3407 \ \ \isacommand{proof}\isamarkupfalse%
       
  3408 \ {\isacharparenleft}cases\ {\isachardoublequoteopen}A\ {\isacharequal}\ {\isacharbraceleft}{\isacharbraceright}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  3409 \ \ \ \ \isacommand{case}\isamarkupfalse%
       
  3410 \ True\ \isacommand{thus}\isamarkupfalse%
       
  3411 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3412 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ a\ \isakeyword{in}\ bexI{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  3413 \ \ \isacommand{next}\isamarkupfalse%
       
  3414 \isanewline
       
  3415 \ \ \ \ \isacommand{case}\isamarkupfalse%
       
  3416 \ False\isanewline
       
  3417 \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3418 \ prems\ \isacommand{obtain}\isamarkupfalse%
       
  3419 \ max\ \isanewline
       
  3420 \ \ \ \ \ \ \isakeyword{where}\ h{\isadigit{1}}{\isacharcolon}\ {\isachardoublequoteopen}max\ {\isasymin}\ A{\isachardoublequoteclose}\ \isanewline
       
  3421 \ \ \ \ \ \ \isakeyword{and}\ h{\isadigit{2}}{\isacharcolon}\ {\isachardoublequoteopen}{\isasymforall}a{\isasymin}A{\isachardot}\ f\ a\ {\isasymle}\ f\ max{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  3422 \ blast\isanewline
       
  3423 \ \ \ \ \isacommand{show}\isamarkupfalse%
       
  3424 \ {\isacharquery}thesis\isanewline
       
  3425 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3426 \ {\isacharparenleft}cases\ {\isachardoublequoteopen}f\ a\ {\isasymle}\ f\ max{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  3427 \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  3428 \ {\isachardoublequoteopen}f\ a\ {\isasymle}\ f\ max{\isachardoublequoteclose}\isanewline
       
  3429 \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3430 \ h{\isadigit{1}}\ h{\isadigit{2}}\ \isacommand{show}\isamarkupfalse%
       
  3431 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3432 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ max\ \isakeyword{in}\ bexI{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  3433 \ \ \ \ \isacommand{next}\isamarkupfalse%
       
  3434 \isanewline
       
  3435 \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  3436 \ {\isachardoublequoteopen}{\isasymnot}\ {\isacharparenleft}f\ a\ {\isasymle}\ f\ max{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3437 \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  3438 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  3439 \ h{\isadigit{2}}\ \isacommand{by}\isamarkupfalse%
       
  3440 \ {\isacharparenleft}rule{\isacharunderscore}tac\ x\ {\isacharequal}\ a\ \isakeyword{in}\ bexI{\isacharcomma}\ auto{\isacharparenright}\isanewline
       
  3441 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3442 \isanewline
       
  3443 \ \ \isacommand{qed}\isamarkupfalse%
       
  3444 \isanewline
       
  3445 \isacommand{qed}\isamarkupfalse%
       
  3446 %
       
  3447 \endisatagproof
       
  3448 {\isafoldproof}%
       
  3449 %
       
  3450 \isadelimproof
       
  3451 \isanewline
       
  3452 %
       
  3453 \endisadelimproof
       
  3454 \isanewline
       
  3455 \isacommand{lemma}\isamarkupfalse%
       
  3456 \ finite{\isacharunderscore}strict{\isacharunderscore}prefix{\isacharunderscore}set{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharbraceleft}xa{\isachardot}\ xa\ {\isacharless}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}string{\isacharparenright}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  3457 %
       
  3458 \isadelimproof
       
  3459 %
       
  3460 \endisadelimproof
       
  3461 %
       
  3462 \isatagproof
       
  3463 \isacommand{apply}\isamarkupfalse%
       
  3464 \ {\isacharparenleft}induct\ x\ rule{\isacharcolon}rev{\isacharunderscore}induct{\isacharcomma}\ simp{\isacharparenright}\isanewline
       
  3465 \isacommand{apply}\isamarkupfalse%
       
  3466 \ {\isacharparenleft}subgoal{\isacharunderscore}tac\ {\isachardoublequoteopen}{\isacharbraceleft}xa{\isachardot}\ xa\ {\isacharless}\ xs\ {\isacharat}\ {\isacharbrackleft}x{\isacharbrackright}{\isacharbraceright}\ {\isacharequal}\ {\isacharbraceleft}xa{\isachardot}\ xa\ {\isacharless}\ xs{\isacharbraceright}\ {\isasymunion}\ {\isacharbraceleft}xs{\isacharbraceright}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  3467 \isacommand{by}\isamarkupfalse%
       
  3468 \ {\isacharparenleft}auto\ simp{\isacharcolon}strict{\isacharunderscore}prefix{\isacharunderscore}def{\isacharparenright}%
       
  3469 \endisatagproof
       
  3470 {\isafoldproof}%
       
  3471 %
       
  3472 \isadelimproof
       
  3473 \isanewline
       
  3474 %
       
  3475 \endisadelimproof
       
  3476 \isanewline
       
  3477 \isanewline
       
  3478 \isacommand{lemma}\isamarkupfalse%
       
  3479 \ tag{\isacharunderscore}str{\isacharunderscore}star{\isacharunderscore}range{\isacharunderscore}finite{\isacharcolon}\isanewline
       
  3480 \ \ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}{\isacharparenright}\ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}range\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3481 %
       
  3482 \isadelimproof
       
  3483 %
       
  3484 \endisadelimproof
       
  3485 %
       
  3486 \isatagproof
       
  3487 \isacommand{apply}\isamarkupfalse%
       
  3488 \ {\isacharparenleft}rule{\isacharunderscore}tac\ B\ {\isacharequal}\ {\isachardoublequoteopen}Pow\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ finite{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  3489 \isacommand{by}\isamarkupfalse%
       
  3490 \ {\isacharparenleft}auto\ simp{\isacharcolon}tag{\isacharunderscore}str{\isacharunderscore}STAR{\isacharunderscore}def\ Image{\isacharunderscore}def\ \isanewline
       
  3491 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ quotient{\isacharunderscore}def\ split{\isacharcolon}if{\isacharunderscore}splits{\isacharparenright}%
       
  3492 \endisatagproof
       
  3493 {\isafoldproof}%
       
  3494 %
       
  3495 \isadelimproof
       
  3496 \isanewline
       
  3497 %
       
  3498 \endisadelimproof
       
  3499 \isanewline
       
  3500 \isacommand{lemma}\isamarkupfalse%
       
  3501 \ tag{\isacharunderscore}str{\isacharunderscore}STAR{\isacharunderscore}injI{\isacharcolon}\isanewline
       
  3502 \ \ {\isachardoublequoteopen}tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}\ m\ {\isacharequal}\ tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}\ n\ {\isasymLongrightarrow}\ m\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}{\isasymstar}{\isacharparenright}\ n{\isachardoublequoteclose}\isanewline
       
  3503 %
       
  3504 \isadelimproof
       
  3505 %
       
  3506 \endisadelimproof
       
  3507 %
       
  3508 \isatagproof
       
  3509 \isacommand{proof}\isamarkupfalse%
       
  3510 {\isacharminus}\isanewline
       
  3511 \ \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  3512 \ \isacommand{fix}\isamarkupfalse%
       
  3513 \ x\ y\ z\isanewline
       
  3514 \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  3515 \ xz{\isacharunderscore}in{\isacharunderscore}star{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isachardoublequoteclose}\isanewline
       
  3516 \ \ \ \ \isakeyword{and}\ tag{\isacharunderscore}xy{\isacharcolon}\ {\isachardoublequoteopen}tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}\ x\ {\isacharequal}\ tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}\ y{\isachardoublequoteclose}\isanewline
       
  3517 \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3518 \ {\isachardoublequoteopen}y\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isachardoublequoteclose}\isanewline
       
  3519 \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3520 {\isacharparenleft}cases\ {\isachardoublequoteopen}x\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  3521 \ \ \ \ \ \ \isacommand{case}\isamarkupfalse%
       
  3522 \ True\isanewline
       
  3523 \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3524 \ tag{\isacharunderscore}xy\ \isacommand{have}\isamarkupfalse%
       
  3525 \ {\isachardoublequoteopen}y\ {\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\ \isanewline
       
  3526 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3527 \ {\isacharparenleft}auto\ simp{\isacharcolon}tag{\isacharunderscore}str{\isacharunderscore}STAR{\isacharunderscore}def\ strict{\isacharunderscore}prefix{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3528 \ \ \ \ \ \ \isacommand{thus}\isamarkupfalse%
       
  3529 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  3530 \ xz{\isacharunderscore}in{\isacharunderscore}star\ True\ \isacommand{by}\isamarkupfalse%
       
  3531 \ simp\isanewline
       
  3532 \ \ \ \ \isacommand{next}\isamarkupfalse%
       
  3533 \isanewline
       
  3534 \ \ \ \ \ \ \isacommand{case}\isamarkupfalse%
       
  3535 \ False\isanewline
       
  3536 \ \ \ \ \ \ \isacommand{obtain}\isamarkupfalse%
       
  3537 \ x{\isacharunderscore}max\ \isanewline
       
  3538 \ \ \ \ \ \ \ \ \isakeyword{where}\ h{\isadigit{1}}{\isacharcolon}\ {\isachardoublequoteopen}x{\isacharunderscore}max\ {\isacharless}\ x{\isachardoublequoteclose}\ \isanewline
       
  3539 \ \ \ \ \ \ \ \ \isakeyword{and}\ h{\isadigit{2}}{\isacharcolon}\ {\isachardoublequoteopen}x{\isacharunderscore}max\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isachardoublequoteclose}\ \isanewline
       
  3540 \ \ \ \ \ \ \ \ \isakeyword{and}\ h{\isadigit{3}}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isachardoublequoteclose}\ \isanewline
       
  3541 \ \ \ \ \ \ \ \ \isakeyword{and}\ h{\isadigit{4}}{\isacharcolon}{\isachardoublequoteopen}{\isasymforall}\ xa\ {\isacharless}\ x{\isachardot}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}\ {\isasymand}\ {\isacharparenleft}x\ {\isacharminus}\ xa{\isacharparenright}\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}\ \isanewline
       
  3542 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isasymlongrightarrow}\ length\ xa\ {\isasymle}\ length\ x{\isacharunderscore}max{\isachardoublequoteclose}\isanewline
       
  3543 \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3544 {\isacharminus}\isanewline
       
  3545 \ \ \ \ \ \ \ \ \isacommand{let}\isamarkupfalse%
       
  3546 \ {\isacharquery}S\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharbraceleft}xa{\isachardot}\ xa\ {\isacharless}\ x\ {\isasymand}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}\ {\isasymand}\ {\isacharparenleft}x\ {\isacharminus}\ xa{\isacharparenright}\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isacharbraceright}{\isachardoublequoteclose}\isanewline
       
  3547 \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3548 \ {\isachardoublequoteopen}finite\ {\isacharquery}S{\isachardoublequoteclose}\isanewline
       
  3549 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3550 \ {\isacharparenleft}rule{\isacharunderscore}tac\ B\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharbraceleft}xa{\isachardot}\ xa\ {\isacharless}\ x{\isacharbraceright}{\isachardoublequoteclose}\ \isakeyword{in}\ finite{\isacharunderscore}subset{\isacharcomma}\ \isanewline
       
  3551 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ auto\ simp{\isacharcolon}finite{\isacharunderscore}strict{\isacharunderscore}prefix{\isacharunderscore}set{\isacharparenright}\isanewline
       
  3552 \ \ \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  3553 \ \isacommand{have}\isamarkupfalse%
       
  3554 \ {\isachardoublequoteopen}{\isacharquery}S\ {\isasymnoteq}\ {\isacharbraceleft}{\isacharbraceright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  3555 \ False\ xz{\isacharunderscore}in{\isacharunderscore}star\isanewline
       
  3556 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3557 \ {\isacharparenleft}simp{\isacharcomma}\ rule{\isacharunderscore}tac\ x\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\ \isakeyword{in}\ exI{\isacharcomma}\ auto\ simp{\isacharcolon}strict{\isacharunderscore}prefix{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3558 \ \ \ \ \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  3559 \ \isacommand{have}\isamarkupfalse%
       
  3560 \ {\isachardoublequoteopen}{\isasymexists}\ max\ {\isasymin}\ {\isacharquery}S{\isachardot}\ {\isasymforall}\ a\ {\isasymin}\ {\isacharquery}S{\isachardot}\ length\ a\ {\isasymle}\ length\ max{\isachardoublequoteclose}\ \isanewline
       
  3561 \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3562 \ finite{\isacharunderscore}set{\isacharunderscore}has{\isacharunderscore}max\ \isacommand{by}\isamarkupfalse%
       
  3563 \ blast\isanewline
       
  3564 \ \ \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3565 \ prems\ \isacommand{show}\isamarkupfalse%
       
  3566 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3567 \ blast\isanewline
       
  3568 \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3569 \isanewline
       
  3570 \ \ \ \ \ \ \isacommand{obtain}\isamarkupfalse%
       
  3571 \ ya\ \isanewline
       
  3572 \ \ \ \ \ \ \ \ \isakeyword{where}\ h{\isadigit{5}}{\isacharcolon}\ {\isachardoublequoteopen}ya\ {\isacharless}\ y{\isachardoublequoteclose}\ \isakeyword{and}\ h{\isadigit{6}}{\isacharcolon}\ {\isachardoublequoteopen}ya\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isachardoublequoteclose}\ \isakeyword{and}\ h{\isadigit{7}}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isacharparenleft}y\ {\isacharminus}\ ya{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3573 \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3574 {\isacharminus}\isanewline
       
  3575 \ \ \ \ \ \ \ \ \isacommand{from}\isamarkupfalse%
       
  3576 \ tag{\isacharunderscore}xy\ \isacommand{have}\isamarkupfalse%
       
  3577 \ {\isachardoublequoteopen}{\isacharbraceleft}{\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x\ {\isacharminus}\ xa{\isacharbraceright}\ {\isacharbar}xa{\isachardot}\ xa\ {\isacharless}\ x\ {\isasymand}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isacharbraceright}\ {\isacharequal}\ \isanewline
       
  3578 \ \ \ \ \ \ \ \ \ \ {\isacharbraceleft}{\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}y\ {\isacharminus}\ xa{\isacharbraceright}\ {\isacharbar}xa{\isachardot}\ xa\ {\isacharless}\ y\ {\isasymand}\ xa\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isacharbraceright}{\isachardoublequoteclose}\ {\isacharparenleft}\isakeyword{is}\ {\isachardoublequoteopen}{\isacharquery}left\ {\isacharequal}\ {\isacharquery}right{\isachardoublequoteclose}{\isacharparenright}\isanewline
       
  3579 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3580 \ {\isacharparenleft}auto\ simp{\isacharcolon}tag{\isacharunderscore}str{\isacharunderscore}STAR{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3581 \ \ \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  3582 \ \isacommand{have}\isamarkupfalse%
       
  3583 \ {\isachardoublequoteopen}{\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharbraceright}\ {\isasymin}\ {\isacharquery}left{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  3584 \ h{\isadigit{1}}\ h{\isadigit{2}}\ \isacommand{by}\isamarkupfalse%
       
  3585 \ auto\isanewline
       
  3586 \ \ \ \ \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  3587 \ \isacommand{have}\isamarkupfalse%
       
  3588 \ {\isachardoublequoteopen}{\isasymapprox}L\isactrlisub {\isadigit{1}}\ {\isacharbackquote}{\isacharbackquote}\ {\isacharbraceleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharbraceright}\ {\isasymin}\ {\isacharquery}right{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  3589 \ simp\isanewline
       
  3590 \ \ \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3591 \ prems\ \isacommand{show}\isamarkupfalse%
       
  3592 \ {\isacharquery}thesis\ \isacommand{apply}\isamarkupfalse%
       
  3593 \ \isanewline
       
  3594 \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}simp\ add{\isacharcolon}Image{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}def{\isacharparenright}\ \isacommand{by}\isamarkupfalse%
       
  3595 \ blast\isanewline
       
  3596 \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3597 \ \ \ \ \ \ \isanewline
       
  3598 \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3599 \ {\isachardoublequoteopen}{\isacharparenleft}y\ {\isacharminus}\ ya{\isacharparenright}\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isachardoublequoteclose}\ \isanewline
       
  3600 \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3601 {\isacharminus}\isanewline
       
  3602 \ \ \ \ \ \ \ \ \isacommand{from}\isamarkupfalse%
       
  3603 \ h{\isadigit{3}}\ h{\isadigit{1}}\ \isacommand{obtain}\isamarkupfalse%
       
  3604 \ a\ b\ \isakeyword{where}\ a{\isacharunderscore}in{\isacharcolon}\ {\isachardoublequoteopen}a\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isachardoublequoteclose}\ \isanewline
       
  3605 \ \ \ \ \ \ \ \ \ \ \isakeyword{and}\ a{\isacharunderscore}neq{\isacharcolon}\ {\isachardoublequoteopen}a\ {\isasymnoteq}\ {\isacharbrackleft}{\isacharbrackright}{\isachardoublequoteclose}\ \isakeyword{and}\ b{\isacharunderscore}in{\isacharcolon}\ {\isachardoublequoteopen}b\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isachardoublequoteclose}\ \isanewline
       
  3606 \ \ \ \ \ \ \ \ \ \ \isakeyword{and}\ ab{\isacharunderscore}max{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}\ {\isacharat}\ z\ {\isacharequal}\ a\ {\isacharat}\ b{\isachardoublequoteclose}\ \isanewline
       
  3607 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3608 \ {\isacharparenleft}drule{\isacharunderscore}tac\ star{\isacharunderscore}decom{\isacharcomma}\ auto\ simp{\isacharcolon}strict{\isacharunderscore}prefix{\isacharunderscore}def\ elim{\isacharcolon}prefixE{\isacharparenright}\isanewline
       
  3609 \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3610 \ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}\ {\isasymle}\ a\ {\isasymand}\ {\isacharparenleft}a\ {\isacharminus}\ {\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}{\isacharparenright}\ {\isacharat}\ b\ {\isacharequal}\ z{\isachardoublequoteclose}\ \isanewline
       
  3611 \ \ \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3612 \ {\isacharminus}\isanewline
       
  3613 \ \ \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3614 \ {\isachardoublequoteopen}{\isacharparenleft}{\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}\ {\isasymle}\ a\ {\isasymand}\ {\isacharparenleft}a\ {\isacharminus}\ {\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}{\isacharparenright}\ {\isacharat}\ b\ {\isacharequal}\ z{\isacharparenright}\ {\isasymor}\ \isanewline
       
  3615 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}a\ {\isacharless}\ {\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}\ {\isasymand}\ {\isacharparenleft}{\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}\ {\isacharminus}\ a{\isacharparenright}\ {\isacharat}\ z\ {\isacharequal}\ b{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  3616 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3617 \ app{\isacharunderscore}eq{\isacharunderscore}dest{\isacharbrackleft}OF\ ab{\isacharunderscore}max{\isacharbrackright}\ \isacommand{by}\isamarkupfalse%
       
  3618 \ {\isacharparenleft}auto\ simp{\isacharcolon}strict{\isacharunderscore}prefix{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3619 \ \ \ \ \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  3620 \ \isacommand{{\isacharbraceleft}}\isamarkupfalse%
       
  3621 \ \isanewline
       
  3622 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{assume}\isamarkupfalse%
       
  3623 \ np{\isacharcolon}\ {\isachardoublequoteopen}a\ {\isacharless}\ {\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{and}\ b{\isacharunderscore}eqs{\isacharcolon}\ {\isachardoublequoteopen}\ {\isacharparenleft}{\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}\ {\isacharminus}\ a{\isacharparenright}\ {\isacharat}\ z\ {\isacharequal}\ b{\isachardoublequoteclose}\isanewline
       
  3624 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3625 \ {\isachardoublequoteopen}False{\isachardoublequoteclose}\isanewline
       
  3626 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{proof}\isamarkupfalse%
       
  3627 \ {\isacharminus}\isanewline
       
  3628 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{let}\isamarkupfalse%
       
  3629 \ {\isacharquery}x{\isacharunderscore}max{\isacharprime}\ {\isacharequal}\ {\isachardoublequoteopen}x{\isacharunderscore}max\ {\isacharat}\ a{\isachardoublequoteclose}\isanewline
       
  3630 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{have}\isamarkupfalse%
       
  3631 \ {\isachardoublequoteopen}{\isacharquery}x{\isacharunderscore}max{\isacharprime}\ {\isacharless}\ x{\isachardoublequoteclose}\ \isanewline
       
  3632 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3633 \ np\ h{\isadigit{1}}\ \isacommand{by}\isamarkupfalse%
       
  3634 \ {\isacharparenleft}clarsimp\ simp{\isacharcolon}strict{\isacharunderscore}prefix{\isacharunderscore}def\ diff{\isacharunderscore}prefix{\isacharparenright}\ \isanewline
       
  3635 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  3636 \ \isacommand{have}\isamarkupfalse%
       
  3637 \ {\isachardoublequoteopen}{\isacharquery}x{\isacharunderscore}max{\isacharprime}\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isachardoublequoteclose}\ \isanewline
       
  3638 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3639 \ a{\isacharunderscore}in\ h{\isadigit{2}}\ \isacommand{by}\isamarkupfalse%
       
  3640 \ {\isacharparenleft}simp\ add{\isacharcolon}star{\isacharunderscore}intro{\isadigit{3}}{\isacharparenright}\ \isanewline
       
  3641 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  3642 \ \isacommand{have}\isamarkupfalse%
       
  3643 \ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharminus}\ {\isacharquery}x{\isacharunderscore}max{\isacharprime}{\isacharparenright}\ {\isacharat}\ z\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isasymstar}{\isachardoublequoteclose}\ \isanewline
       
  3644 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3645 \ b{\isacharunderscore}eqs\ b{\isacharunderscore}in\ np\ h{\isadigit{1}}\ \isacommand{by}\isamarkupfalse%
       
  3646 \ {\isacharparenleft}simp\ add{\isacharcolon}diff{\isacharunderscore}diff{\isacharunderscore}appd{\isacharparenright}\isanewline
       
  3647 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{moreover}\isamarkupfalse%
       
  3648 \ \isacommand{have}\isamarkupfalse%
       
  3649 \ {\isachardoublequoteopen}{\isasymnot}\ {\isacharparenleft}length\ {\isacharquery}x{\isacharunderscore}max{\isacharprime}\ {\isasymle}\ length\ x{\isacharunderscore}max{\isacharparenright}{\isachardoublequoteclose}\ \isanewline
       
  3650 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3651 \ a{\isacharunderscore}neq\ \isacommand{by}\isamarkupfalse%
       
  3652 \ simp\isanewline
       
  3653 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{ultimately}\isamarkupfalse%
       
  3654 \ \isacommand{show}\isamarkupfalse%
       
  3655 \ {\isacharquery}thesis\ \isacommand{using}\isamarkupfalse%
       
  3656 \ h{\isadigit{4}}\ \isacommand{by}\isamarkupfalse%
       
  3657 \ blast\isanewline
       
  3658 \ \ \ \ \ \ \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3659 \ \isanewline
       
  3660 \ \ \ \ \ \ \ \ \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  3661 \ \isacommand{ultimately}\isamarkupfalse%
       
  3662 \ \isacommand{show}\isamarkupfalse%
       
  3663 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3664 \ blast\isanewline
       
  3665 \ \ \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3666 \isanewline
       
  3667 \ \ \ \ \ \ \ \ \isacommand{then}\isamarkupfalse%
       
  3668 \ \isacommand{obtain}\isamarkupfalse%
       
  3669 \ za\ \isakeyword{where}\ z{\isacharunderscore}decom{\isacharcolon}\ {\isachardoublequoteopen}z\ {\isacharequal}\ za\ {\isacharat}\ b{\isachardoublequoteclose}\ \isanewline
       
  3670 \ \ \ \ \ \ \ \ \ \ \isakeyword{and}\ x{\isacharunderscore}za{\isacharcolon}\ {\isachardoublequoteopen}{\isacharparenleft}x\ {\isacharminus}\ x{\isacharunderscore}max{\isacharparenright}\ {\isacharat}\ za\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isachardoublequoteclose}\ \isanewline
       
  3671 \ \ \ \ \ \ \ \ \ \ \isacommand{using}\isamarkupfalse%
       
  3672 \ a{\isacharunderscore}in\ \isacommand{by}\isamarkupfalse%
       
  3673 \ {\isacharparenleft}auto\ elim{\isacharcolon}prefixE{\isacharparenright}\ \ \ \ \ \ \ \ \isanewline
       
  3674 \ \ \ \ \ \ \ \ \isacommand{from}\isamarkupfalse%
       
  3675 \ x{\isacharunderscore}za\ h{\isadigit{7}}\ \isacommand{have}\isamarkupfalse%
       
  3676 \ {\isachardoublequoteopen}{\isacharparenleft}y\ {\isacharminus}\ ya{\isacharparenright}\ {\isacharat}\ za\ {\isasymin}\ L\isactrlisub {\isadigit{1}}{\isachardoublequoteclose}\ \isanewline
       
  3677 \ \ \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3678 \ {\isacharparenleft}auto\ simp{\isacharcolon}str{\isacharunderscore}eq{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3679 \ \ \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3680 \ z{\isacharunderscore}decom\ b{\isacharunderscore}in\ \isacommand{show}\isamarkupfalse%
       
  3681 \ {\isacharquery}thesis\ \isacommand{by}\isamarkupfalse%
       
  3682 \ {\isacharparenleft}auto\ dest{\isacharbang}{\isacharcolon}step{\isacharbrackleft}of\ {\isachardoublequoteopen}{\isacharparenleft}y\ {\isacharminus}\ ya{\isacharparenright}\ {\isacharat}\ za{\isachardoublequoteclose}{\isacharbrackright}{\isacharparenright}\isanewline
       
  3683 \ \ \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3684 \isanewline
       
  3685 \ \ \ \ \ \ \isacommand{with}\isamarkupfalse%
       
  3686 \ h{\isadigit{5}}\ h{\isadigit{6}}\ \isacommand{show}\isamarkupfalse%
       
  3687 \ {\isacharquery}thesis\ \isanewline
       
  3688 \ \ \ \ \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3689 \ {\isacharparenleft}drule{\isacharunderscore}tac\ star{\isacharunderscore}intro{\isadigit{1}}{\isacharcomma}\ auto\ simp{\isacharcolon}strict{\isacharunderscore}prefix{\isacharunderscore}def\ elim{\isacharcolon}prefixE{\isacharparenright}\isanewline
       
  3690 \ \ \ \ \isacommand{qed}\isamarkupfalse%
       
  3691 \ \ \ \ \ \ \isanewline
       
  3692 \ \ \isacommand{{\isacharbraceright}}\isamarkupfalse%
       
  3693 \ \isacommand{thus}\isamarkupfalse%
       
  3694 \ {\isachardoublequoteopen}tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}\ m\ {\isacharequal}\ tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}\ n\ {\isasymLongrightarrow}\ m\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}{\isasymstar}{\isacharparenright}\ n{\isachardoublequoteclose}\isanewline
       
  3695 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3696 \ {\isacharparenleft}auto\ simp\ add{\isacharcolon}str{\isacharunderscore}eq{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3697 \isacommand{qed}\isamarkupfalse%
       
  3698 %
       
  3699 \endisatagproof
       
  3700 {\isafoldproof}%
       
  3701 %
       
  3702 \isadelimproof
       
  3703 \isanewline
       
  3704 %
       
  3705 \endisadelimproof
       
  3706 \isanewline
       
  3707 \isacommand{lemma}\isamarkupfalse%
       
  3708 \ quot{\isacharunderscore}star{\isacharunderscore}finiteI{\isacharcolon}\isanewline
       
  3709 \ \ \isakeyword{assumes}\ finite{\isacharcolon}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}{\isacharcolon}{\isacharcolon}string\ set{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3710 \ \ \isakeyword{shows}\ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\isactrlisub {\isadigit{1}}{\isasymstar}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3711 %
       
  3712 \isadelimproof
       
  3713 %
       
  3714 \endisadelimproof
       
  3715 %
       
  3716 \isatagproof
       
  3717 \isacommand{proof}\isamarkupfalse%
       
  3718 {\isacharparenleft}rule{\isacharunderscore}tac\ f\ {\isacharequal}\ {\isachardoublequoteopen}{\isacharparenleft}op\ {\isacharbackquote}{\isacharparenright}\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}{\isacharparenright}{\isachardoublequoteclose}\ \isakeyword{in}\ finite{\isacharunderscore}imageD{\isacharparenright}\isanewline
       
  3719 \ \ \isacommand{show}\isamarkupfalse%
       
  3720 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}op\ {\isacharbackquote}\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}{\isacharparenright}\ {\isacharbackquote}\ UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}{\isasymstar}{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{using}\isamarkupfalse%
       
  3721 \ finite\isanewline
       
  3722 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3723 \ {\isacharparenleft}auto\ intro{\isacharcolon}finite{\isacharunderscore}tag{\isacharunderscore}imageI\ tag{\isacharunderscore}str{\isacharunderscore}star{\isacharunderscore}range{\isacharunderscore}finite{\isacharparenright}\isanewline
       
  3724 \isacommand{next}\isamarkupfalse%
       
  3725 \isanewline
       
  3726 \ \ \isacommand{show}\isamarkupfalse%
       
  3727 \ {\isachardoublequoteopen}inj{\isacharunderscore}on\ {\isacharparenleft}op\ {\isacharbackquote}\ {\isacharparenleft}tag{\isacharunderscore}str{\isacharunderscore}STAR\ L\isactrlisub {\isadigit{1}}{\isacharparenright}{\isacharparenright}\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}L\isactrlisub {\isadigit{1}}{\isasymstar}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3728 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3729 \ {\isacharparenleft}auto\ intro{\isacharcolon}tag{\isacharunderscore}image{\isacharunderscore}injI\ tag{\isacharunderscore}str{\isacharunderscore}STAR{\isacharunderscore}injI{\isacharparenright}\isanewline
       
  3730 \isacommand{qed}\isamarkupfalse%
       
  3731 %
       
  3732 \endisatagproof
       
  3733 {\isafoldproof}%
       
  3734 %
       
  3735 \isadelimproof
       
  3736 %
       
  3737 \endisadelimproof
       
  3738 %
       
  3739 \isamarkupsubsection{The main lemma%
       
  3740 }
       
  3741 \isamarkuptrue%
       
  3742 \isacommand{lemma}\isamarkupfalse%
       
  3743 \ easier{\isacharunderscore}directio{\isasymnu}{\isacharcolon}\isanewline
       
  3744 \ \ {\isachardoublequoteopen}Lang\ {\isacharequal}\ L\ {\isacharparenleft}r{\isacharcolon}{\isacharcolon}rexp{\isacharparenright}\ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}Lang{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3745 %
       
  3746 \isadelimproof
       
  3747 %
       
  3748 \endisadelimproof
       
  3749 %
       
  3750 \isatagproof
       
  3751 \isacommand{proof}\isamarkupfalse%
       
  3752 \ {\isacharparenleft}induct\ arbitrary{\isacharcolon}Lang\ rule{\isacharcolon}rexp{\isachardot}induct{\isacharparenright}\isanewline
       
  3753 \ \ \isacommand{case}\isamarkupfalse%
       
  3754 \ NULL\isanewline
       
  3755 \ \ \isacommand{have}\isamarkupfalse%
       
  3756 \ {\isachardoublequoteopen}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}{\isacharbraceleft}{\isacharbraceright}{\isacharparenright}\ {\isasymsubseteq}\ {\isacharbraceleft}UNIV{\isacharbraceright}\ {\isachardoublequoteclose}\isanewline
       
  3757 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3758 \ {\isacharparenleft}auto\ simp{\isacharcolon}quotient{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}rel{\isacharunderscore}def\ str{\isacharunderscore}eq{\isacharunderscore}def{\isacharparenright}\isanewline
       
  3759 \ \ \isacommand{with}\isamarkupfalse%
       
  3760 \ prems\ \isacommand{show}\isamarkupfalse%
       
  3761 \ {\isachardoublequoteopen}{\isacharquery}case{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
       
  3762 \ {\isacharparenleft}auto\ intro{\isacharcolon}finite{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  3763 \isacommand{next}\isamarkupfalse%
       
  3764 \isanewline
       
  3765 \ \ \isacommand{case}\isamarkupfalse%
       
  3766 \ EMPTY\isanewline
       
  3767 \ \ \isacommand{have}\isamarkupfalse%
       
  3768 \ {\isachardoublequoteopen}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharparenright}\ {\isasymsubseteq}\ {\isacharbraceleft}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharcomma}\ UNIV\ {\isacharminus}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  3769 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3770 \ {\isacharparenleft}rule\ quot{\isacharunderscore}empty{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  3771 \ \ \isacommand{with}\isamarkupfalse%
       
  3772 \ prems\ \isacommand{show}\isamarkupfalse%
       
  3773 \ {\isacharquery}case\ \isacommand{by}\isamarkupfalse%
       
  3774 \ {\isacharparenleft}auto\ intro{\isacharcolon}finite{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  3775 \isacommand{next}\isamarkupfalse%
       
  3776 \isanewline
       
  3777 \ \ \isacommand{case}\isamarkupfalse%
       
  3778 \ {\isacharparenleft}CHAR\ c{\isacharparenright}\isanewline
       
  3779 \ \ \isacommand{have}\isamarkupfalse%
       
  3780 \ {\isachardoublequoteopen}UNIV\ {\isacharslash}{\isacharslash}\ {\isacharparenleft}{\isasymapprox}{\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isacharparenright}\ {\isasymsubseteq}\ {\isacharbraceleft}{\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharbraceright}{\isacharcomma}{\isacharbraceleft}{\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isacharcomma}\ UNIV\ {\isacharminus}\ {\isacharbraceleft}{\isacharbrackleft}{\isacharbrackright}{\isacharcomma}\ {\isacharbrackleft}c{\isacharbrackright}{\isacharbraceright}{\isacharbraceright}{\isachardoublequoteclose}\ \isanewline
       
  3781 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3782 \ {\isacharparenleft}rule\ quot{\isacharunderscore}char{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  3783 \ \ \isacommand{with}\isamarkupfalse%
       
  3784 \ prems\ \isacommand{show}\isamarkupfalse%
       
  3785 \ {\isacharquery}case\ \isacommand{by}\isamarkupfalse%
       
  3786 \ {\isacharparenleft}auto\ intro{\isacharcolon}finite{\isacharunderscore}subset{\isacharparenright}\isanewline
       
  3787 \isacommand{next}\isamarkupfalse%
       
  3788 \isanewline
       
  3789 \ \ \isacommand{case}\isamarkupfalse%
       
  3790 \ {\isacharparenleft}SEQ\ r\isactrlisub {\isadigit{1}}\ r\isactrlisub {\isadigit{2}}{\isacharparenright}\isanewline
       
  3791 \ \ \isacommand{have}\isamarkupfalse%
       
  3792 \ {\isachardoublequoteopen}{\isasymlbrakk}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\ r\isactrlisub {\isadigit{1}}{\isacharparenright}{\isacharparenright}{\isacharsemicolon}\ finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\ r\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}{\isasymrbrakk}\ \isanewline
       
  3793 \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\ r\isactrlisub {\isadigit{1}}\ {\isacharsemicolon}{\isacharsemicolon}\ L\ r\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3794 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3795 \ {\isacharparenleft}erule\ quot{\isacharunderscore}seq{\isacharunderscore}finiteI{\isacharcomma}\ simp{\isacharparenright}\isanewline
       
  3796 \ \ \isacommand{with}\isamarkupfalse%
       
  3797 \ prems\ \isacommand{show}\isamarkupfalse%
       
  3798 \ {\isacharquery}case\ \isacommand{by}\isamarkupfalse%
       
  3799 \ simp\isanewline
       
  3800 \isacommand{next}\isamarkupfalse%
       
  3801 \isanewline
       
  3802 \ \ \isacommand{case}\isamarkupfalse%
       
  3803 \ {\isacharparenleft}ALT\ r\isactrlisub {\isadigit{1}}\ r\isactrlisub {\isadigit{2}}{\isacharparenright}\isanewline
       
  3804 \ \ \isacommand{have}\isamarkupfalse%
       
  3805 \ {\isachardoublequoteopen}{\isasymlbrakk}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\ r\isactrlisub {\isadigit{1}}{\isacharparenright}{\isacharparenright}{\isacharsemicolon}\ finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\ r\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}{\isasymrbrakk}\ \isanewline
       
  3806 \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\ r\isactrlisub {\isadigit{1}}\ {\isasymunion}\ L\ r\isactrlisub {\isadigit{2}}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3807 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3808 \ {\isacharparenleft}erule\ quot{\isacharunderscore}union{\isacharunderscore}finiteI{\isacharcomma}\ simp{\isacharparenright}\isanewline
       
  3809 \ \ \isacommand{with}\isamarkupfalse%
       
  3810 \ prems\ \isacommand{show}\isamarkupfalse%
       
  3811 \ {\isacharquery}case\ \isacommand{by}\isamarkupfalse%
       
  3812 \ simp\ \ \isanewline
       
  3813 \isacommand{next}\isamarkupfalse%
       
  3814 \isanewline
       
  3815 \ \ \isacommand{case}\isamarkupfalse%
       
  3816 \ {\isacharparenleft}STAR\ r{\isacharparenright}\isanewline
       
  3817 \ \ \isacommand{have}\isamarkupfalse%
       
  3818 \ {\isachardoublequoteopen}finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}L\ r{\isacharparenright}{\isacharparenright}\ \isanewline
       
  3819 \ \ \ \ \ \ \ \ \ \ \ \ {\isasymLongrightarrow}\ finite\ {\isacharparenleft}UNIV\ {\isacharslash}{\isacharslash}\ {\isasymapprox}{\isacharparenleft}{\isacharparenleft}L\ r{\isacharparenright}{\isasymstar}{\isacharparenright}{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
  3820 \ \ \ \ \isacommand{by}\isamarkupfalse%
       
  3821 \ {\isacharparenleft}erule\ quot{\isacharunderscore}star{\isacharunderscore}finiteI{\isacharparenright}\isanewline
       
  3822 \ \ \isacommand{with}\isamarkupfalse%
       
  3823 \ prems\ \isacommand{show}\isamarkupfalse%
       
  3824 \ {\isacharquery}case\ \isacommand{by}\isamarkupfalse%
       
  3825 \ simp\isanewline
       
  3826 \isacommand{qed}\isamarkupfalse%
       
  3827 %
       
  3828 \endisatagproof
       
  3829 {\isafoldproof}%
       
  3830 %
       
  3831 \isadelimproof
       
  3832 \ \isanewline
       
  3833 %
       
  3834 \endisadelimproof
       
  3835 %
       
  3836 \isadelimtheory
       
  3837 \isanewline
       
  3838 %
       
  3839 \endisadelimtheory
       
  3840 %
       
  3841 \isatagtheory
       
  3842 \isacommand{end}\isamarkupfalse%
       
  3843 %
       
  3844 \endisatagtheory
       
  3845 {\isafoldtheory}%
       
  3846 %
       
  3847 \isadelimtheory
       
  3848 \isanewline
       
  3849 %
       
  3850 \endisadelimtheory
       
  3851 \isanewline
       
  3852 \end{isabellebody}%
       
  3853 %%% Local Variables:
       
  3854 %%% mode: latex
       
  3855 %%% TeX-master: "root"
       
  3856 %%% End: