Myhill.thy
author zhang
Fri, 04 Feb 2011 13:02:00 +0000
changeset 64 b69d4e04e64a
parent 62 d94209ad2880
child 68 dceb84acdee8
permissions -rw-r--r--
Added something to Myhill.thy, trying to explain the relationship between finite automata and language partition.

theory Myhill
  imports Myhill_2
begin

section {* Direction @{text "regular language \<Rightarrow>finite partition"} *}

text {*

The intuition behind our treatment is still automata. Taking the automaton in 
Fig.\ref{fig_origin_auto} as an example, like any automaton, it
represents the vehicle used to recognize a certain regular language.
For any given string, the process starts from the left most and proceed 
character by character to the right, driving the state transtion of automaton 
starting from the initial state (the one marked by an short arrow). There could
be three outcomes:
  \begin{enumerate}
   \item The process finally reaches the end of the string and the automaton is at an accepting
        state, in which case the string is considered a member of the language.
         For the automaton in Fig.\ref{fig_origin_auto}, @{text "a, ab, abb, abc, abbcc, b, baa"}
         are such kind of strings.
   \item The process finally reaches the end of the string but the automaton is at an non-accepting
         state, in which case, the string is considered a non-member of the language. For the automaton 
         in Fig.\ref{fig_origin_auto}, @{text "ad, abbd, adbd, bdabbccd"}
         are such kind of strings. \label{case_end_reject}
   \item \label{case_stuck}
     The process get stuck at the middle of the string, in which case, the string is considered
           a non-member of the lauguage.  For the automaton in Fig.\ref{fig_origin_auto}, 
           @{text "c, acb, bbacd, aaccd"} 
           are such kind of strings.
  \end{enumerate}
To avoid the situation \ref{case_stuck} above, we can augment a normal automaton with a ``absorbing state'',
as the state $X_3$ in Fig.\ref{fig_extended_auto}. In an auguments automaton, the process of strings never
get stuck: whenever a string is recognized as not belonging to the language, the augmented automaton
is transfered into the ``absorbing state'' and kept there until the process reaches the end of the string, 
in which case, the string is rejected by situation \ref{case_end_reject} above.

Given a language @{text "Lang"} and a string @{text "x"}, the equivalent class @{text "\<approx>Lang `` {x}"}
corresponds to the state reached by processing @{text "x"} with the augmented automaton. 

\begin{figure}[h!]
\centering
\subfigure[Original automaton]{\label{fig_origin_auto}
\begin{minipage}{0.4\textwidth}
\scalebox{0.8}{
\begin{tikzpicture}[ultra thick,>=latex]
  \node[draw,circle,initial] (start) {$X_0$};
  \node[draw,circle,accepting] at ($(start) + (3.5cm,2cm)$) (ac1) {$X_1$};
  \node[draw,circle,accepting] at ($(start) + (3.5cm,-2cm)$) (ac2) {$X_2$};

  \path[->] (start) edge [bend left] node [midway, above] {$a$} (ac1);
  \path[->] (start) edge [bend right] node [midway, below] {$b$} (ac2);
  \path[->] (ac1) edge [loop above] node [midway, above] {$b$} (ac1);
  \path[->] (ac2) edge [loop below] node [midway, below] {$a$} (ac2);
  \path[->] (ac1) edge [bend right] node [midway, left] {$c$} (ac2);
  \path[->] (ac2) edge [bend right] node [midway, right] {$c$} (ac1);
  \path[->] (ac1) edge node [midway, sloped, above] {$d$} (start);
  \path[->] (ac2) edge node [midway, sloped, above] {$d$} (start);
\end{tikzpicture}}
\end{minipage}
}
\subfigure[Extended automaton]{\label{fig_extended_auto}
\begin{minipage}{0.5\textwidth}
\scalebox{0.8}{
\begin{tikzpicture}[ultra thick,>=latex]
  \node[draw,circle,initial] (start) {$X_0$};
  \node[draw,circle,accepting] at ($(start) + (3.5cm,2cm)$) (ac1) {$X_1$};
  \node[draw,circle,accepting] at ($(start) + (3.5cm,-2cm)$) (ac2) {$X_2$};
  \node[draw,circle] at ($(start) + (6.5cm,0cm)$) (ab) {$X_3$};

  \path[->] (start) edge [bend left] node [midway, above] {$a$} (ac1);
  \path[->] (start) edge [bend right] node [midway, below] {$b$} (ac2);
  \path[->] (ac1) edge [loop above] node [midway, above] {$b$} (ac1);
  \path[->] (ac2) edge [loop below] node [midway, below] {$a$} (ac2);
  \path[->] (ac1) edge [bend right] node [midway, left] {$c$} (ac2);
  \path[->] (ac2) edge [bend right] node [midway, right] {$c$} (ac1);
  \path[->] (ac1) edge node [midway, sloped, above] {$d$} (start);
  \path[->] (ac2) edge node [midway, sloped, above] {$d$} (start);

  \path [draw, rounded corners,->,dashed] (start) -- ($(start) + (0cm, 3.7cm)$)
         -- ($(ab) + (0cm, 3.7cm)$)  node[midway,above,sloped]{$\Sigma - \{a, b\}$} -- (ab);
  \path[->,dashed] (ac1) edge node [midway, above, sloped] {$\Sigma - \{b,c,d\}$} (ab);
  \path[->,dashed] (ac2) edge node [midway, below, sloped] {$\Sigma - \{a,c,d\}$} (ab);
  \path[->,dashed] (ab) edge [loop right] node [midway, right] {$\Sigma$} (ab);
\end{tikzpicture}}
\end{minipage}
}
\caption{The relationship between automata and finite partition}\label{fig_auto_part_rel}
\end{figure}

  *}

end