ChengsongTanPhdThesis/Chapters/Finite.tex
author Chengsong
Fri, 02 Sep 2022 11:06:26 +0100
changeset 593 83fab852d72d
parent 591 b2d0de6aee18
child 594 62f8fa03863e
permissions -rwxr-xr-x
more chap5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
     1
% Chapter Template
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
     2
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
     3
\chapter{Finiteness Bound} % Main chapter title
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
     4
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
     5
\label{Finite} 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
     6
%  In Chapter 4 \ref{Chapter4} we give the second guarantee
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
     7
%of our bitcoded algorithm, that is a finite bound on the size of any 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
     8
%regex's derivatives. 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
     9
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    10
In this chapter we give a guarantee in terms of size: 
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    11
given an annotated regular expression $a$, for any string $s$
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    12
our algorithm $\blexersimp$'s internal annotated regular expression 
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    13
size  is finitely bounded
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    14
by a constant $N_a$ that only depends on $a$:
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    15
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    16
	$\llbracket \bderssimp{a}{s} \rrbracket \leq N_a$
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    17
\end{center}
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    18
\noindent
577
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
    19
where the size of an annotated regular expression is defined
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
    20
in terms of the number of nodes in its tree structure:
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
    21
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    22
	\begin{tabular}{ccc}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    23
		$\llbracket _{bs}\ONE \rrbracket$ & $\dn$ & $1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    24
		$\llbracket \ZERO \rrbracket$ & $\dn$ & $1$ \\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    25
		$\llbracket _{bs} r_1 \cdot r_2 \rrbracket$ & $\dn$ & $\llbracket r_1 \rrbracket + \llbracket r_2 \rrbracket + 1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    26
		$\llbracket _{bs}\mathbf{c} \rrbracket $ & $\dn$ & $1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    27
		$\llbracket _{bs}\sum as \rrbracket $ & $\dn$ & $\map \; (\llbracket \_ \rrbracket)\; as   + 1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    28
		$\llbracket _{bs} a^* \rrbracket $ & $\dn$ & $\llbracket a \rrbracket + 1$.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    29
	\end{tabular}
577
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
    30
\end{center}
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    31
We believe this size formalisation 
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    32
of the algorithm is important in our context, because 
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    33
\begin{itemize}
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    34
	\item
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    35
		It is a stepping stone towards an ``absence of catastrophic-backtracking''
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    36
		guarantee. The next step would be to refine the bound $N_a$ so that it
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    37
		is polynomial on $\llbracket a\rrbracket$.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    38
	\item
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    39
		The size bound proof gives us a higher confidence that
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    40
		our simplification algorithm $\simp$ does not ``mis-behave''
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    41
		like $\simpsulz$ does.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    42
		The bound is universal, which is an advantage over work which 
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    43
		only gives empirical evidence on some test cases.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    44
\end{itemize}
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    45
\section{Formalising About Size}
577
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
    46
\noindent
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    47
In our lexer $\blexersimp$,
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    48
The regular expression is repeatedly being taken derivative of
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    49
and then simplified.
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    50
\begin{figure}[H]
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    51
	\begin{tikzpicture}[scale=2,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    52
		every node/.style={minimum size=11mm},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    53
		->,>=stealth',shorten >=1pt,auto,thick
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    54
		]
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    55
		\node (r0) [rectangle, draw=black, thick, minimum size = 5mm, draw=blue] {$a$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    56
		\node (r1) [rectangle, draw=black, thick, right=of r0, minimum size = 7mm]{$a_1$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    57
		\draw[->,line width=0.2mm](r0)--(r1) node[above,midway] {$\backslash c_1$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    58
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    59
		\node (r1s) [rectangle, draw=blue, thick, right=of r1, minimum size=6mm]{$a_{1s}$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    60
		\draw[->, line width=0.2mm](r1)--(r1s) node[above, midway] {$\simp$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    61
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    62
		\node (r2) [rectangle, draw=black, thick,  right=of r1s, minimum size = 12mm]{$a_2$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    63
		\draw[->,line width=0.2mm](r1s)--(r2) node[above,midway] {$\backslash c_2$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    64
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    65
		\node (r2s) [rectangle, draw = blue, thick, right=of r2,minimum size=6mm]{$a_{2s}$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    66
		\draw[->,line width=0.2mm](r2)--(r2s) node[above,midway] {$\simp$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    67
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    68
		\node (rns) [rectangle, draw = blue, thick, right=of r2s,minimum size=6mm]{$a_{ns}$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    69
		\draw[->,line width=0.2mm, dashed](r2s)--(rns) node[above,midway] {$\backslash \ldots$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    70
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    71
		\node (v) [circle, thick, draw, right=of rns, minimum size=6mm, right=1.7cm]{$v$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    72
		\draw[->, line width=0.2mm](rns)--(v) node[above, midway] {\bmkeps} node [below, midway] {\decode};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    73
	\end{tikzpicture}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    74
	\caption{Regular expression size change during our $\blexersimp$ algorithm}\label{simpShrinks}
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    75
\end{figure}
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    76
\noindent
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    77
Each time
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    78
a derivative is taken, a regular expression might grow a bit,
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    79
but simplification always takes care that 
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    80
it stays small.
577
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
    81
This intuition is depicted by the relative size
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    82
change between the black and blue nodes:
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    83
After $\simp$ the node always shrinks.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    84
Our proof says that all the blue nodes
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    85
stay below a size bound $N_a$ determined by $a$.
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
    86
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    87
\noindent
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    88
Sulzmann and Lu's assumed something similar about their algorithm,
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    89
though in fact their algorithm's size might be better depicted by the following graph:
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    90
\begin{figure}[H]
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    91
	\begin{tikzpicture}[scale=2,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    92
		every node/.style={minimum size=11mm},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    93
		->,>=stealth',shorten >=1pt,auto,thick
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    94
		]
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    95
		\node (r0) [rectangle, draw=black, thick, minimum size = 5mm, draw=blue] {$a$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    96
		\node (r1) [rectangle, draw=black, thick, right=of r0, minimum size = 7mm]{$a_1$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    97
		\draw[->,line width=0.2mm](r0)--(r1) node[above,midway] {$\backslash c_1$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
    98
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
    99
		\node (r1s) [rectangle, draw=blue, thick, right=of r1, minimum size=7mm]{$a_{1s}$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   100
		\draw[->, line width=0.2mm](r1)--(r1s) node[above, midway] {$\simp'$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   101
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   102
		\node (r2) [rectangle, draw=black, thick,  right=of r1s, minimum size = 17mm]{$a_2$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   103
		\draw[->,line width=0.2mm](r1s)--(r2) node[above,midway] {$\backslash c_2$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   104
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   105
		\node (r2s) [rectangle, draw = blue, thick, right=of r2,minimum size=14mm]{$a_{2s}$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   106
		\draw[->,line width=0.2mm](r2)--(r2s) node[above,midway] {$\simp'$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   107
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   108
		\node (r3) [rectangle, draw = black, thick, right= of r2s, minimum size = 22mm]{$a_3$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   109
		\draw[->,line width=0.2mm](r2s)--(r3) node[above,midway] {$\backslash c_3$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   110
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   111
		\node (rns) [right = of r3, draw=blue, minimum size = 20mm]{$a_{3s}$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   112
		\draw[->,line width=0.2mm] (r3)--(rns) node [above, midway] {$\simp'$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   113
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   114
		\node (rnn) [right = of rns, minimum size = 1mm]{};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   115
		\draw[->, dashed] (rns)--(rnn) node [above, midway] {$\ldots$};
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   116
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   117
	\end{tikzpicture}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   118
	\caption{Regular expression size change during our $\blexersimp$ algorithm}\label{sulzShrinks}
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   119
\end{figure}
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   120
\noindent
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   121
That is, on certain cases their lexer 
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   122
will have an indefinite size explosion, causing the running time 
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   123
of each derivative step to grow arbitrarily large (for example 
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   124
in \ref{SulzmannLuLexerTime}).
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   125
The reason they made this mistake was that
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   126
they tested out the run time of their
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   127
lexer on particular examples such as $(a+b+ab)^*$
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   128
and generalised to all cases, which
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   129
cannot happen with our mecahnised proof.\\
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   130
We give details of the proof in the next sections.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   131
577
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
   132
\subsection{Overview of the Proof}
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
   133
Here is a bird's eye view of how the proof of finiteness works,
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
   134
which involves three steps:
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   135
\begin{figure}[H]
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   136
	\begin{tikzpicture}[scale=1,font=\bf,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   137
		node/.style={
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   138
			rectangle,rounded corners=3mm,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   139
			ultra thick,draw=black!50,minimum height=18mm, 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   140
			minimum width=20mm,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   141
		top color=white,bottom color=black!20}]
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   142
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   143
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   144
		\node (0) at (-5,0) 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   145
			[node, text width=1.8cm, text centered] 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   146
			{$\llbracket \bderssimp{a}{s} \rrbracket$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   147
		\node (A) at (0,0) 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   148
			[node,text width=1.6cm,  text centered] 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   149
			{$\llbracket \rderssimp{r}{s} \rrbracket_r$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   150
		\node (B) at (3,0) 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   151
			[node,text width=3.0cm, anchor=west, minimum width = 40mm] 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   152
			{$\llbracket \textit{ClosedForm}(r, s)\rrbracket_r$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   153
		\node (C) at (9.5,0) [node, minimum width=10mm] {$N_r$};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   154
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   155
		\draw [->,line width=0.5mm] (0) -- 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   156
			node [above,pos=0.45] {=} (A) node [below, pos = 0.45] {$(r = a \downarrow_r)$} (A); 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   157
		\draw [->,line width=0.5mm] (A) -- 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   158
			node [above,pos=0.35] {$\quad =\ldots=$} (B); 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   159
		\draw [->,line width=0.5mm] (B) -- 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   160
			node [above,pos=0.35] {$\quad \leq \ldots \leq$} (C); 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   161
	\end{tikzpicture}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   162
	%\caption{
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   163
\end{figure}
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   164
\noindent
577
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
   165
We explain the steps one by one:
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   166
\begin{itemize}
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   167
	\item
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   168
		We first introduce the operations such as 
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   169
		derivatives, simplification, size calculation, etc.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   170
		associated with $\rrexp$s, which we have given
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   171
		a very brief introduction to in chapter \ref{Bitcoded2}.
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   172
		The operations on $\rrexp$s are identical to those on
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   173
		annotated regular expressions except that they are unaware
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   174
		of bitcodes. This means that all proofs about size of $\rrexp$s will apply to
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   175
		annotated regular expressions.
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   176
	\item
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   177
		We prove that $\rderssimp{r}{s} = \textit{ClosedForm}(r, s)$,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   178
		where $\textit{ClosedForm}(r, s)$ is entirely 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   179
		written in the derivatives of their children regular 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   180
		expressions.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   181
		We call the right-hand-side the \emph{Closed Form}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   182
		of the derivative $\rderssimp{r}{s}$.
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   183
	\item
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   184
		We estimate $\llbracket \textit{ClosedForm}(r, s) \rrbracket_r$.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   185
		The key observation is that $\distinctBy$'s output is
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   186
		a list with a constant length bound.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   187
\end{itemize}
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   188
We give details of these steps in the next sections.
577
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
   189
The first step is to use 
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
   190
$\textit{rrexp}$s,
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
   191
something simpler than
f47fc4840579 thesis chap2
Chengsong
parents: 576
diff changeset
   192
annotated regular expressions. 
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   193
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   194
\section{The $\textit{Rrexp}$ Datatype and Its Lexing-Related Functions}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   195
We first recap the definition of the new datatype $\rrexp$, called
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   196
\emph{r-regular expressions},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   197
which we first defined in \ref{rrexpDef}.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   198
R-regular expressions are similar to basic regular expressions.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   199
We call them \emph{r}-regular expressions
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   200
to make a distinction  
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   201
with plain regular expressions.
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   202
\[			\rrexp ::=   \RZERO \mid  \RONE
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   203
	\mid  \RCHAR{c}  
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   204
	\mid  \RSEQ{r_1}{r_2}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   205
	\mid  \RALTS{rs}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   206
	\mid \RSTAR{r}        
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   207
\]
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   208
The size of an r-regular expression is
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   209
written $\llbracket r\rrbracket_r$, 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   210
whose definition mirrors that of an annotated regular expression. 
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   211
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   212
	\begin{tabular}{ccc}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   213
		$\llbracket _{bs}\ONE \rrbracket_r$ & $\dn$ & $1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   214
		$\llbracket \ZERO \rrbracket_r$ & $\dn$ & $1$ \\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   215
		$\llbracket _{bs} r_1 \cdot r_2 \rrbracket_r$ & $\dn$ & $\llbracket r_1 \rrbracket_r + \llbracket r_2 \rrbracket_r + 1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   216
		$\llbracket _{bs}\mathbf{c} \rrbracket_r $ & $\dn$ & $1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   217
		$\llbracket _{bs}\sum as \rrbracket_r $ & $\dn$ & $\map \; (\llbracket \_ \rrbracket_r)\; as   + 1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   218
		$\llbracket _{bs} a^* \rrbracket_r $ & $\dn$ & $\llbracket a \rrbracket_r + 1$.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   219
	\end{tabular}
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   220
\end{center}
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   221
\noindent
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   222
The $r$ in the subscript of $\llbracket \rrbracket_r$ is to 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   223
differentiate with the same operation for annotated regular expressions.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   224
Adding $r$ as subscript will be used in 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   225
other operations as well.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   226
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   227
The transformation from an annotated regular expression
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   228
to an r-regular expression is straightforward.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   229
\begin{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   230
	\begin{tabular}{lcl}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   231
		$\rerase{\ZERO}$ & $\dn$ & $\RZERO$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   232
		$\rerase{_{bs}\ONE}$ & $\dn$ & $\RONE$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   233
		$\rerase{_{bs}\mathbf{c}}$ & $\dn$ & $\RCHAR{c}$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   234
		$\rerase{_{bs}r_1\cdot r_2}$ & $\dn$ & $\RSEQ{\rerase{r_1}}{\rerase{r_2}}$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   235
		$\rerase{_{bs}\sum as}$ & $\dn$ & $\RALTS{\map \; \rerase{\_} \; as}$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   236
		$\rerase{_{bs} a ^*}$ & $\dn$ & $\rerase{a} ^*$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   237
	\end{tabular}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   238
\end{center}
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   239
\noindent
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   240
$\textit{Rerase}$ throws away the bitcodes on the annotated regular expressions, 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   241
but keeps everything else intact.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   242
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   243
Before we introduce more functions related to r-regular expressions,
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   244
we first give out the reason why we take all the trouble 
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   245
defining a new datatype in the first place.
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   246
We could calculate the size of annotated regular expressions in terms of
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   247
their un-annotated $\rrexp$ counterpart: 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   248
\begin{lemma}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   249
	$\rsize{\rerase a} = \asize a$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   250
\end{lemma}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   251
\begin{proof}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   252
	By routine structural induction on $a$.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   253
\end{proof}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   254
\noindent
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   255
\subsection{Motivation Behind a New Datatype}
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   256
The main difference between a plain regular expression
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   257
and an r-regular expression is that it can take
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   258
non-binary arguments for its alternative constructor.
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   259
This turned out to be necessary if we want our proofs to be
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   260
simple.
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   261
We initially started by using 
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   262
plain regular expressions and tried to prove
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   263
equalities like 
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   264
\begin{center}
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   265
	$\llbracket a \rrbracket = \llbracket a\downarrow \rrbracket_p$
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   266
\end{center}
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   267
and 
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   268
\[
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   269
	\llbracket a \backslash_{bsimps} s \rrbracket = 
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   270
	\llbracket a \downarrow \backslash_s s
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   271
\]
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   272
One might be able to prove that 
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   273
$\llbracket a \downarrow \rrbracket_p \leq \llbracket a \rrbracket$.
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   274
$\rrexp$ give the exact correspondence between an annotated regular expression
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   275
and its (r-)erased version:
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   276
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   277
This does not hold for plain $\rexp$s. 
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   278
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
   279
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   280
These operations are 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   281
almost identical to those of the annotated regular expressions,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   282
except that no bitcodes are attached.
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   283
Of course, the bits which encode the lexing information would grow linearly with respect 
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   284
to the input, which should be taken into account when we wish to tackle the runtime comlexity.
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   285
But at the current stage 
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   286
we can safely ignore them.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   287
Similarly there is a size function for plain regular expressions:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   288
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   289
	\begin{tabular}{ccc}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   290
		$\llbracket \ONE \rrbracket_p$ & $\dn$ & $1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   291
		$\llbracket \ZERO \rrbracket_p$ & $\dn$ & $1$ \\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   292
		$\llbracket r_1 \cdot r_2 \rrbracket_p$ & $\dn$ & $\llbracket r_1 \rrbracket_p + \llbracket r_2 \rrbracket_p + 1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   293
		$\llbracket \mathbf{c} \rrbracket_p $ & $\dn$ & $1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   294
		$\llbracket r_1 \cdot r_2 \rrbracket_p $ & $\dn$ & $\llbracket r_1 \rrbracket_p \; + \llbracket r_2 \rrbracket_p + 1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   295
		$\llbracket a^* \rrbracket_p $ & $\dn$ & $\llbracket a \rrbracket_p + 1$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   296
	\end{tabular}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   297
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   298
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   299
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   300
The idea of obatining a bound for $\llbracket \bderssimp{a}{s} \rrbracket$
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   301
is to get an equivalent form
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   302
of something like $\llbracket \bderssimp{a}{s}\rrbracket = f(a, s)$, where $f(a, s)$ 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   303
is easier to estimate than $\llbracket \bderssimp{a}{s}\rrbracket$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   304
We notice that while it is not so clear how to obtain
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   305
a metamorphic representation of $\bderssimp{a}{s}$ (as we argued in chapter \ref{Bitcoded2},
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   306
not interleaving the application of the functions $\backslash$ and $\bsimp{\_}$ 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   307
in the order as our lexer will result in the bit-codes dispensed differently),
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   308
it is possible to get an slightly different representation of the unlifted versions:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   309
$ (\bderssimp{a}{s})_\downarrow = (\erase \; \bsimp{a \backslash s})_\downarrow$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   310
This suggest setting the bounding function $f(a, s)$ as 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   311
$\llbracket  (a \backslash s)_\downarrow \rrbracket_p$, the plain size
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   312
of the erased annotated regular expression.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   313
This requires the the regular expression accompanied by bitcodes
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   314
to have the same size as its plain counterpart after erasure:
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   315
\begin{center}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   316
	$\asize{a} \stackrel{?}{=} \llbracket \erase(a)\rrbracket_p$. 
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   317
\end{center}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   318
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   319
But there is a minor nuisance: 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   320
the erase function unavoidbly messes with the structure of the regular expression,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   321
due to the discrepancy between annotated regular expression's $\sum$ constructor
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   322
and plain regular expression's $+$ constructor having different arity.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   323
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   324
	\begin{tabular}{ccc}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   325
		$\erase \; _{bs}\sum [] $ & $\dn$ & $\ZERO$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   326
		$\erase \; _{bs}\sum [a]$ & $\dn$ & $a$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   327
		$\erase \; _{bs}\sum a :: as$ & $\dn$ & $a + (\erase \; _{[]} \sum as)\quad \text{if $as$ length over 1}$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   328
	\end{tabular}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   329
\end{center}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   330
\noindent
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   331
An alternative regular expression with an empty list of children
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   332
is turned into a $\ZERO$ during the
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   333
$\erase$ function, thereby changing the size and structure of the regex.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   334
Therefore the equality in question does not hold.
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
   335
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   336
These will likely be fixable if we really want to use plain $\rexp$s for dealing
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   337
with size, but we choose a more straightforward (or stupid) method by 
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   338
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   339
Similarly we could define the derivative  and simplification on 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   340
$\rrexp$, which would be identical to those we defined for plain $\rexp$s in chapter1, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   341
except that now they can operate on alternatives taking multiple arguments.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   342
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   343
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   344
	\begin{tabular}{lcr}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   345
		$(\RALTS{rs})\; \backslash c$ & $\dn$ &  $\RALTS{\map\; (\_ \backslash c) \;rs}$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   346
		(other clauses omitted)
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   347
		With the new $\rrexp$ datatype in place, one can define its size function,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   348
		which precisely mirrors that of the annotated regular expressions:
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   349
	\end{tabular}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   350
\end{center}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   351
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   352
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   353
	\begin{tabular}{ccc}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   354
		$\llbracket _{bs}\ONE \rrbracket_r$ & $\dn$ & $1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   355
		$\llbracket \ZERO \rrbracket_r$ & $\dn$ & $1$ \\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   356
		$\llbracket _{bs} r_1 \cdot r_2 \rrbracket_r$ & $\dn$ & $\llbracket r_1 \rrbracket_r + \llbracket r_2 \rrbracket_r + 1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   357
		$\llbracket _{bs}\mathbf{c} \rrbracket_r $ & $\dn$ & $1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   358
		$\llbracket _{bs}\sum as \rrbracket_r $ & $\dn$ & $\map \; (\llbracket \_ \rrbracket_r)\; as   + 1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   359
		$\llbracket _{bs} a^* \rrbracket_r $ & $\dn$ & $\llbracket a \rrbracket_r + 1$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   360
	\end{tabular}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   361
\end{center}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   362
\noindent
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   363
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   364
\subsection{Lexing Related Functions for $\rrexp$}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   365
Everything else for $\rrexp$ will be precisely the same for annotated expressions,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   366
except that they do not involve rectifying and augmenting bit-encoded tokenization information.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   367
As expected, most functions are simpler, such as the derivative:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   368
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   369
	\begin{tabular}{@{}lcl@{}}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   370
		$(\ZERO)\,\backslash_r c$ & $\dn$ & $\ZERO$\\  
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   371
		$(\ONE)\,\backslash_r c$ & $\dn$ &
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   372
		$\textit{if}\;c=d\; \;\textit{then}\;
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   373
		\ONE\;\textit{else}\;\ZERO$\\  
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   374
		$(\sum \;\textit{rs})\,\backslash_r c$ & $\dn$ &
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   375
		$\sum\;(\textit{map} \; (\_\backslash_r c) \; rs )$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   376
		$(r_1\cdot r_2)\,\backslash_r c$ & $\dn$ &
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   377
		$\textit{if}\;\textit{rnullable}\,r_1$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   378
						 & &$\textit{then}\;\sum\,[(r_1\,\backslash_r c)\cdot\,r_2,$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   379
						 & &$\phantom{\textit{then},\;\sum\,}((r_2\,\backslash_r c))]$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   380
						 & &$\textit{else}\;\,(r_1\,\backslash_r c)\cdot r_2$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   381
		$(r^*)\,\backslash_r c$ & $\dn$ &
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   382
		$( r\,\backslash_r c)\cdot
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   383
		(_{[]}r^*))$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   384
	\end{tabular}    
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   385
\end{center}  
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   386
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   387
The simplification function is simplified without annotation causing superficial differences.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   388
Duplicate removal without  an equivalence relation:
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   389
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   390
	\begin{tabular}{lcl}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   391
		$\rdistinct{[]}{rset} $ & $\dn$ & $[]$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   392
		$\rdistinct{r :: rs}{rset}$ & $\dn$ & $\textit{if}(r \in \textit{rset}) \; \textit{then} \; \rdistinct{rs}{rset}$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   393
					    &        & $\textit{else}\; r::\rdistinct{rs}{(rset \cup \{r\})}$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   394
	\end{tabular}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   395
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   396
%TODO: definition of rsimp (maybe only the alternative clause)
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   397
\noindent
554
Chengsong
parents: 553
diff changeset
   398
The prefix $r$ in front of $\rdistinct{}{}$ is used mainly to 
Chengsong
parents: 553
diff changeset
   399
differentiate with $\textit{distinct}$, which is a built-in predicate
Chengsong
parents: 553
diff changeset
   400
in Isabelle that says all the elements of a list are unique.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   401
With $\textit{rdistinct}$ one can chain together all the other modules
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   402
of $\bsimp{\_}$ (removing the functionalities related to bit-sequences)
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   403
and get $\textit{rsimp}$ and $\rderssimp{\_}{\_}$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   404
We omit these functions, as they are routine. Please refer to the formalisation
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   405
(in file BasicIdentities.thy) for the exact definition.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   406
With $\rrexp$ the size caclulation of annotated regular expressions'
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   407
simplification and derivatives can be done by the size of their unlifted 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   408
counterpart with the unlifted version of simplification and derivatives applied.
564
Chengsong
parents: 562
diff changeset
   409
\begin{lemma}\label{sizeRelations}
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   410
	The following equalities hold:
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   411
	\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   412
		\item
554
Chengsong
parents: 553
diff changeset
   413
			$\asize{\bsimp{a}} = \rsize{\rsimp{\rerase{a}}}$
Chengsong
parents: 553
diff changeset
   414
		\item
Chengsong
parents: 553
diff changeset
   415
			$\asize{\bderssimp{r}{s}} =  \rsize{\rderssimp{\rerase{r}}{s}}$
Chengsong
parents: 553
diff changeset
   416
	\end{itemize}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   417
\end{lemma}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   418
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   419
In the following content, we will focus on $\rrexp$'s size bound.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   420
We will piece together this bound and show the same bound for annotated regular 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   421
expressions in the end.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   422
Unless stated otherwise in this chapter all $\textit{rexp}$s without
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   423
bitcodes are seen as $\rrexp$s.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   424
We also use $r_1 + r_2$ and $\RALTS{[r_1, r_2]}$ interchageably
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   425
as the former suits people's intuitive way of stating a binary alternative
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   426
regular expression.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   427
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   428
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   429
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   430
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   431
%	SECTION ?
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   432
%-----------------------------------
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   433
\subsection{Finiteness Proof Using $\rrexp$s}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   434
Now that we have defined the $\rrexp$ datatype, and proven that its size changes
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   435
w.r.t derivatives and simplifications mirrors precisely those of annotated regular expressions,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   436
we aim to bound the size of $r \backslash s$ for any $\rrexp$  $r$.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   437
Once we have a bound like: 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   438
\[
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   439
	\llbracket r \backslash_{rsimp} s \rrbracket_r \leq N_r
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   440
\]
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   441
\noindent
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   442
we could easily extend that to 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   443
\[
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   444
	\llbracket a \backslash_{bsimps} s \rrbracket \leq N_r.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   445
\]
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   446
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   447
\subsection{Roadmap to a Bound for $\textit{Rrexp}$}
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   448
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   449
The way we obtain the bound for $\rrexp$s is by two steps:
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   450
\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   451
	\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   452
		First, we rewrite $r\backslash s$ into something else that is easier
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   453
		to bound. This step is especially important for the inductive case 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   454
		$r_1 \cdot r_2$ and $r^*$, where the derivative can grow and bloat in a wild way,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   455
		but after simplification they will always be equal or smaller to a form consisting of an alternative
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   456
		list of regular expressions $f \; (g\; (\sum rs))$ with some functions applied to it, where each element will be distinct after the function application.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   457
	\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   458
		Then, for such a sum  list of regular expressions $f\; (g\; (\sum rs))$, we can control its size
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   459
		by estimation, since $\distinctBy$ and $\flts$ are well-behaved and working together would only 
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   460
		reduce the size of a regular expression, not adding to it.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   461
\end{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   462
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   463
\section{Step One: Closed Forms}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   464
We transform the function application $\rderssimp{r}{s}$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   465
into an equivalent 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   466
form $f\; (g \; (\sum rs))$.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   467
The functions $f$ and $g$ can be anything from $\flts$, $\distinctBy$ and other helper functions from $\bsimp{\_}$.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   468
This way we get a different but equivalent way of expressing : $r\backslash s = f \; (g\; (\sum rs))$, we call the
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   469
right hand side the "closed form" of $r\backslash s$.
558
Chengsong
parents: 557
diff changeset
   470
Chengsong
parents: 557
diff changeset
   471
\begin{quote}\it
Chengsong
parents: 557
diff changeset
   472
	Claim: For regular expressions $r_1 \cdot r_2$, we claim that
Chengsong
parents: 557
diff changeset
   473
	\begin{center}
Chengsong
parents: 557
diff changeset
   474
		$ \rderssimp{r_1 \cdot r_2}{s} = 
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   475
		\rsimp{(\sum (r_1 \backslash s \cdot r_2 ) \; :: \;(\map \; \rderssimp{r2}{\_} \;(\vsuf{s}{r_1})))}$
558
Chengsong
parents: 557
diff changeset
   476
	\end{center}
Chengsong
parents: 557
diff changeset
   477
\end{quote}
Chengsong
parents: 557
diff changeset
   478
\noindent
Chengsong
parents: 557
diff changeset
   479
We explain in detail how we reached those claims.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   480
\subsection{Basic Properties needed for Closed Forms}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   481
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   482
\subsubsection{$\textit{rdistinct}$'s Deduplicates Successfully}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   483
The $\textit{rdistinct}$ function, as its name suggests, will
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   484
remove duplicates in an \emph{r}$\textit{rexp}$ list, 
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   485
according to the accumulator
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   486
and leave only one of each different element in a list:
555
Chengsong
parents: 554
diff changeset
   487
\begin{lemma}\label{rdistinctDoesTheJob}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   488
	The function $\textit{rdistinct}$ satisfies the following
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   489
	properties:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   490
	\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   491
		\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   492
			If $a \in acc$ then $a \notin (\rdistinct{rs}{acc})$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   493
		\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   494
			If list $rs'$ is the result of $\rdistinct{rs}{acc}$,
555
Chengsong
parents: 554
diff changeset
   495
			then $\textit{isDistinct} \; rs'$.
Chengsong
parents: 554
diff changeset
   496
		\item
Chengsong
parents: 554
diff changeset
   497
			$\rdistinct{rs}{acc} = rs - acc$
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   498
	\end{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   499
\end{lemma}
555
Chengsong
parents: 554
diff changeset
   500
\noindent
Chengsong
parents: 554
diff changeset
   501
The predicate $\textit{isDistinct}$ is for testing
Chengsong
parents: 554
diff changeset
   502
whether a list's elements are all unique. It is defined
Chengsong
parents: 554
diff changeset
   503
recursively on the structure of a regular expression,
Chengsong
parents: 554
diff changeset
   504
and we omit the precise definition here.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   505
\begin{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   506
	The first part is by an induction on $rs$.
555
Chengsong
parents: 554
diff changeset
   507
	The second and third part can be proven by using the 
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   508
	induction rules of $\rdistinct{\_}{\_}$.
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   509
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   510
\end{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   511
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   512
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   513
$\rdistinct{\_}{\_}$ will cancel out all regular expression terms
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   514
that are in the accumulator, therefore prepending a list $rs_a$ with an arbitrary
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   515
list $rs$ whose elements are all from the accumulator, and then call $\rdistinct{\_}{\_}$
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   516
on the resulting list, the output will be as if we had called $\rdistinct{\_}{\_}$
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   517
without the prepending of $rs$:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   518
\begin{lemma}
554
Chengsong
parents: 553
diff changeset
   519
	The elements appearing in the accumulator will always be removed.
Chengsong
parents: 553
diff changeset
   520
	More precisely,
Chengsong
parents: 553
diff changeset
   521
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   522
		\item
Chengsong
parents: 553
diff changeset
   523
			If $rs \subseteq rset$, then 
Chengsong
parents: 553
diff changeset
   524
			$\rdistinct{rs@rsa }{acc} = \rdistinct{rsa }{acc}$.
Chengsong
parents: 553
diff changeset
   525
		\item
Chengsong
parents: 553
diff changeset
   526
			Furthermore, if $a \in rset$ and $\rdistinct{rs}{\{a\}} = []$,
Chengsong
parents: 553
diff changeset
   527
			then $\rdistinct{(rs @ rs')}{rset} = \rdistinct{rs'}{rset}$
Chengsong
parents: 553
diff changeset
   528
	\end{itemize}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   529
\end{lemma}
554
Chengsong
parents: 553
diff changeset
   530
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   531
\begin{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   532
	By induction on $rs$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   533
\end{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   534
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   535
On the other hand, if an element $r$ does not appear in the input list waiting to be deduplicated,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   536
then expanding the accumulator to include that element will not cause the output list to change:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   537
\begin{lemma}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   538
	The accumulator can be augmented to include elements not appearing in the input list,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   539
	and the output will not change.	
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   540
	\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   541
		\item
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   542
			If $r \notin rs$, then $\rdistinct{rs}{acc} = \rdistinct{rs}{\{r\} \cup acc}$.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   543
		\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   544
			Particularly, when $acc = \varnothing$ and $rs$ de-duplicated, we have\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   545
			\[ \rdistinct{rs}{\varnothing} = rs \]
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   546
	\end{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   547
\end{lemma}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   548
\begin{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   549
	The first half is by induction on $rs$. The second half is a corollary of the first.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   550
\end{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   551
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   552
The next property gives the condition for
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   553
when $\rdistinct{\_}{\_}$ becomes an identical mapping
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   554
for any prefix of an input list, in other words, when can 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   555
we ``push out" the arguments of $\rdistinct{\_}{\_}$:
555
Chengsong
parents: 554
diff changeset
   556
\begin{lemma}\label{distinctRdistinctAppend}
554
Chengsong
parents: 553
diff changeset
   557
	If $\textit{isDistinct} \; rs_1$, and $rs_1 \cap acc = \varnothing$,
555
Chengsong
parents: 554
diff changeset
   558
	then 
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   559
	\[\textit{rdistinct}\;  (rs_1 @ rsa)\;\, acc
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   560
	= rs_1@(\textit{rdistinct} rsa \; (acc \cup rs_1))\]
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   561
\end{lemma}
554
Chengsong
parents: 553
diff changeset
   562
\noindent
555
Chengsong
parents: 554
diff changeset
   563
In other words, it can be taken out and left untouched in the output.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   564
\begin{proof}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   565
	By an induction on $rs_1$, where $rsa$ and $acc$ are allowed to be arbitrary.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   566
\end{proof}
554
Chengsong
parents: 553
diff changeset
   567
\noindent
Chengsong
parents: 553
diff changeset
   568
$\rdistinct{}{}$ removes any element in anywhere of a list, if it
Chengsong
parents: 553
diff changeset
   569
had appeared previously:
Chengsong
parents: 553
diff changeset
   570
\begin{lemma}\label{distinctRemovesMiddle}
Chengsong
parents: 553
diff changeset
   571
	The two properties hold if $r \in rs$:
Chengsong
parents: 553
diff changeset
   572
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   573
		\item
555
Chengsong
parents: 554
diff changeset
   574
			$\rdistinct{rs}{rset} = \rdistinct{(rs @ [r])}{rset}$\\
Chengsong
parents: 554
diff changeset
   575
			and\\
554
Chengsong
parents: 553
diff changeset
   576
			$\rdistinct{(ab :: rs @ [ab])}{rset'} = \rdistinct{(ab :: rs)}{rset'}$
Chengsong
parents: 553
diff changeset
   577
		\item
555
Chengsong
parents: 554
diff changeset
   578
			$\rdistinct{ (rs @ rs') }{rset} = \rdistinct{rs @ [r] @ rs'}{rset}$\\
Chengsong
parents: 554
diff changeset
   579
			and\\
554
Chengsong
parents: 553
diff changeset
   580
			$\rdistinct{(ab :: rs @ [ab] @ rs'')}{rset'} = 
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   581
			\rdistinct{(ab :: rs @ rs'')}{rset'}$
554
Chengsong
parents: 553
diff changeset
   582
	\end{itemize}
Chengsong
parents: 553
diff changeset
   583
\end{lemma}
Chengsong
parents: 553
diff changeset
   584
\noindent
Chengsong
parents: 553
diff changeset
   585
\begin{proof}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   586
	By induction on $rs$. All other variables are allowed to be arbitrary.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   587
	The second half of the lemma requires the first half.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   588
	Note that for each half's two sub-propositions need to be proven concurrently,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   589
	so that the induction goes through.
554
Chengsong
parents: 553
diff changeset
   590
\end{proof}
Chengsong
parents: 553
diff changeset
   591
555
Chengsong
parents: 554
diff changeset
   592
\noindent
Chengsong
parents: 554
diff changeset
   593
This allows us to prove ``Idempotency" of $\rdistinct{}{}$ of some kind:
Chengsong
parents: 554
diff changeset
   594
\begin{lemma}\label{rdistinctConcatGeneral}
Chengsong
parents: 554
diff changeset
   595
	The following equalities involving multiple applications  of $\rdistinct{}{}$ hold:
Chengsong
parents: 554
diff changeset
   596
	\begin{itemize}
Chengsong
parents: 554
diff changeset
   597
		\item
Chengsong
parents: 554
diff changeset
   598
			$\rdistinct{(rs @ rs')}{\varnothing} = \rdistinct{((\rdistinct{rs}{\varnothing})@ rs')}{\varnothing}$
Chengsong
parents: 554
diff changeset
   599
		\item
Chengsong
parents: 554
diff changeset
   600
			$\rdistinct{(rs @ rs')}{\varnothing} = \rdistinct{(\rdistinct{rs}{\varnothing} @ rs')}{\varnothing}$
Chengsong
parents: 554
diff changeset
   601
		\item
Chengsong
parents: 554
diff changeset
   602
			If $rset' \subseteq rset$, then $\rdistinct{rs}{rset} = 
Chengsong
parents: 554
diff changeset
   603
			\rdistinct{(\rdistinct{rs}{rset'})}{rset}$. As a corollary
Chengsong
parents: 554
diff changeset
   604
			of this,
Chengsong
parents: 554
diff changeset
   605
		\item
Chengsong
parents: 554
diff changeset
   606
			$\rdistinct{(rs @ rs')}{rset} = \rdistinct{
Chengsong
parents: 554
diff changeset
   607
			(\rdistinct{rs}{\varnothing}) @ rs')}{rset}$. This
Chengsong
parents: 554
diff changeset
   608
			gives another corollary use later:
Chengsong
parents: 554
diff changeset
   609
		\item
Chengsong
parents: 554
diff changeset
   610
			If $a \in rset$, then $\rdistinct{(rs @ rs')}{rset} = \rdistinct{
Chengsong
parents: 554
diff changeset
   611
			(\rdistinct{(a :: rs)}{\varnothing} @ rs')}{rset} $,
Chengsong
parents: 554
diff changeset
   612
Chengsong
parents: 554
diff changeset
   613
	\end{itemize}
Chengsong
parents: 554
diff changeset
   614
\end{lemma}
Chengsong
parents: 554
diff changeset
   615
\begin{proof}
Chengsong
parents: 554
diff changeset
   616
	By \ref{rdistinctDoesTheJob} and \ref{distinctRemovesMiddle}.
Chengsong
parents: 554
diff changeset
   617
\end{proof}
Chengsong
parents: 554
diff changeset
   618
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   619
\subsubsection{The Properties of $\backslash_r$, $\backslash_{rsimp}$, $\textit{Rflts}$ and $\textit{Rsimp}_{ALTS}$} 
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   620
We give in this subsection some properties of how $\backslash_r$, $\backslash_{rsimp}$, $\textit{Rflts}$ and $\textit{Rsimp}_{ALTS} $ interact with each other and with $@$, the concatenation operator.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   621
These will be helpful in later closed form proofs, when
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   622
we want to transform the ways in which multiple functions involving
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   623
those are composed together
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   624
in interleaving derivative and  simplification steps.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   625
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   626
When the function $\textit{Rflts}$ 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   627
is applied to the concatenation of two lists, the output can be calculated by first applying the
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   628
functions on two lists separately, and then concatenating them together.
554
Chengsong
parents: 553
diff changeset
   629
\begin{lemma}\label{rfltsProps}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   630
	The function $\rflts$ has the below properties:\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   631
	\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   632
		\item
554
Chengsong
parents: 553
diff changeset
   633
			$\rflts \; (rs_1 @ rs_2) = \rflts \; rs_1 @ \rflts \; rs_2$
Chengsong
parents: 553
diff changeset
   634
		\item
Chengsong
parents: 553
diff changeset
   635
			If $r \neq \RZERO$ and $\nexists rs_1. r = \RALTS{rs}_1$, then $\rflts \; (r::rs) = r :: \rflts \; rs$
Chengsong
parents: 553
diff changeset
   636
		\item
Chengsong
parents: 553
diff changeset
   637
			$\rflts \; (rs @ [\RZERO]) = \rflts \; rs$
Chengsong
parents: 553
diff changeset
   638
		\item
Chengsong
parents: 553
diff changeset
   639
			$\rflts \; (rs' @ [\RALTS{rs}]) = \rflts \; rs'@rs$
Chengsong
parents: 553
diff changeset
   640
		\item
Chengsong
parents: 553
diff changeset
   641
			$\rflts \; (rs @ [\RONE]) = \rflts \; rs @ [\RONE]$
Chengsong
parents: 553
diff changeset
   642
		\item
Chengsong
parents: 553
diff changeset
   643
			If $r \neq \RZERO$ and $\nexists rs'. r = \RALTS{rs'}$ then $\rflts \; (rs @ [r])
Chengsong
parents: 553
diff changeset
   644
			= (\rflts \; rs) @ [r]$
555
Chengsong
parents: 554
diff changeset
   645
		\item
Chengsong
parents: 554
diff changeset
   646
			If $r = \RALTS{rs}$ and $r \in rs'$ then for all $r_1 \in rs. 
Chengsong
parents: 554
diff changeset
   647
			r_1 \in \rflts \; rs'$.
Chengsong
parents: 554
diff changeset
   648
		\item
Chengsong
parents: 554
diff changeset
   649
			$\rflts \; (rs_a @ \RZERO :: rs_b) = \rflts \; (rs_a @ rs_b)$
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   650
	\end{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   651
\end{lemma}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   652
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   653
\begin{proof}
555
Chengsong
parents: 554
diff changeset
   654
	By induction on $rs_1$ in the first sub-lemma, and induction on $r$ in the second part,
Chengsong
parents: 554
diff changeset
   655
	and induction on $rs$, $rs'$, $rs$, $rs'$, $rs_a$ in the third, fourth, fifth, sixth and 
Chengsong
parents: 554
diff changeset
   656
	last sub-lemma.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   657
\end{proof}
555
Chengsong
parents: 554
diff changeset
   658
554
Chengsong
parents: 553
diff changeset
   659
\subsubsection{The $RL$ Function: Language Interpretation of $\textit{Rrexp}$s}
Chengsong
parents: 553
diff changeset
   660
Much like the definition of $L$ on plain regular expressions, one could also 
Chengsong
parents: 553
diff changeset
   661
define the language interpretation of $\rrexp$s.
Chengsong
parents: 553
diff changeset
   662
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   663
	\begin{tabular}{lcl}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   664
		$RL \; (\ZERO)$ & $\dn$ & $\phi$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   665
		$RL \; (\ONE)$ & $\dn$ & $\{[]\}$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   666
		$RL \; (c)$ & $\dn$ & $\{[c]\}$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   667
		$RL \; \sum rs$ & $\dn$ & $ \bigcup_{r \in rs} (RL \; r)$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   668
		$RL \; (r_1 \cdot r_2)$ & $\dn$ & $ RL \; (r_1) @ RL \; (r_2)$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   669
		$RL \; (r^*)$ & $\dn$ & $ (RL(r))^*$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   670
	\end{tabular}
554
Chengsong
parents: 553
diff changeset
   671
\end{center}
Chengsong
parents: 553
diff changeset
   672
\noindent
Chengsong
parents: 553
diff changeset
   673
The main use of $RL$ is to establish some connections between $\rsimp{}$ 
Chengsong
parents: 553
diff changeset
   674
and $\rnullable{}$:
Chengsong
parents: 553
diff changeset
   675
\begin{lemma}
Chengsong
parents: 553
diff changeset
   676
	The following properties hold:
Chengsong
parents: 553
diff changeset
   677
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   678
		\item
Chengsong
parents: 553
diff changeset
   679
			If $\rnullable{r}$, then $\rsimp{r} \neq \RZERO$.
Chengsong
parents: 553
diff changeset
   680
		\item
Chengsong
parents: 553
diff changeset
   681
			$\rnullable{r \backslash s} \quad $ if and only if $\quad \rnullable{\rderssimp{r}{s}}$.
Chengsong
parents: 553
diff changeset
   682
	\end{itemize}
Chengsong
parents: 553
diff changeset
   683
\end{lemma}
Chengsong
parents: 553
diff changeset
   684
\begin{proof}
Chengsong
parents: 553
diff changeset
   685
	The first part is by induction on $r$. 
Chengsong
parents: 553
diff changeset
   686
	The second part is true because property 
Chengsong
parents: 553
diff changeset
   687
	\[ RL \; r = RL \; (\rsimp{r})\] holds.
Chengsong
parents: 553
diff changeset
   688
\end{proof}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   689
554
Chengsong
parents: 553
diff changeset
   690
\subsubsection{$\rsimp{}$ is Non-Increasing}
Chengsong
parents: 553
diff changeset
   691
In this subsection, we prove that the function $\rsimp{}$ does not 
Chengsong
parents: 553
diff changeset
   692
make the $\llbracket \rrbracket_r$ size increase.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   693
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   694
554
Chengsong
parents: 553
diff changeset
   695
\begin{lemma}\label{rsimpSize}
Chengsong
parents: 553
diff changeset
   696
	$\llbracket \rsimp{r} \rrbracket_r \leq \llbracket r \rrbracket_r$
Chengsong
parents: 553
diff changeset
   697
\end{lemma}
Chengsong
parents: 553
diff changeset
   698
\subsubsection{Simplified $\textit{Rrexp}$s are Good}
Chengsong
parents: 553
diff changeset
   699
We formalise the notion of ``good" regular expressions,
Chengsong
parents: 553
diff changeset
   700
which means regular expressions that
Chengsong
parents: 553
diff changeset
   701
are not fully simplified. For alternative regular expressions that means they
Chengsong
parents: 553
diff changeset
   702
do not contain any nested alternatives like 
Chengsong
parents: 553
diff changeset
   703
\[ r_1 + (r_2 + r_3) \], un-removed $\RZERO$s like \[\RZERO + r\]
Chengsong
parents: 553
diff changeset
   704
or duplicate elements in a children regular expression list like \[ \sum [r, r, \ldots]\]:
Chengsong
parents: 553
diff changeset
   705
\begin{center}
Chengsong
parents: 553
diff changeset
   706
	\begin{tabular}{@{}lcl@{}}
Chengsong
parents: 553
diff changeset
   707
		$\good\; \RZERO$ & $\dn$ & $\textit{false}$\\
Chengsong
parents: 553
diff changeset
   708
		$\good\; \RONE$ & $\dn$ & $\textit{true}$\\
Chengsong
parents: 553
diff changeset
   709
		$\good\; \RCHAR{c}$ & $\dn$ & $\btrue$\\
Chengsong
parents: 553
diff changeset
   710
		$\good\; \RALTS{[]}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   711
		$\good\; \RALTS{[r]}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   712
		$\good\; \RALTS{r_1 :: r_2 :: rs}$ & $\dn$ & 
Chengsong
parents: 553
diff changeset
   713
		$\textit{isDistinct} \; (r_1 :: r_2 :: rs) \;$\\
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   714
						   & & $\textit{and}\; (\forall r' \in (r_1 :: r_2 :: rs).\; \good \; r'\; \,  \textit{and}\; \, \textit{nonAlt}\; r')$\\
554
Chengsong
parents: 553
diff changeset
   715
		$\good \; \RSEQ{\RZERO}{r}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   716
		$\good \; \RSEQ{\RONE}{r}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   717
		$\good \; \RSEQ{r}{\RZERO}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   718
		$\good \; \RSEQ{r_1}{r_2}$ & $\dn$ & $\good \; r_1 \;\, \textit{and} \;\, \good \; r_2$\\
Chengsong
parents: 553
diff changeset
   719
		$\good \; \RSTAR{r}$ & $\dn$ & $\btrue$\\
Chengsong
parents: 553
diff changeset
   720
	\end{tabular}
Chengsong
parents: 553
diff changeset
   721
\end{center}
Chengsong
parents: 553
diff changeset
   722
\noindent
Chengsong
parents: 553
diff changeset
   723
The predicate $\textit{nonAlt}$ evaluates to true when the regular expression is not an
Chengsong
parents: 553
diff changeset
   724
alternative, and false otherwise.
Chengsong
parents: 553
diff changeset
   725
The $\good$ property is preserved under $\rsimp_{ALTS}$, provided that
Chengsong
parents: 553
diff changeset
   726
its non-empty argument list of expressions are all good themsleves, and $\textit{nonAlt}$, 
Chengsong
parents: 553
diff changeset
   727
and unique:
Chengsong
parents: 553
diff changeset
   728
\begin{lemma}\label{rsimpaltsGood}
Chengsong
parents: 553
diff changeset
   729
	If $rs \neq []$ and forall $r \in rs. \textit{nonAlt} \; r$ and $\textit{isDistinct} \; rs$,
Chengsong
parents: 553
diff changeset
   730
	then $\good \; (\rsimpalts \; rs)$ if and only if forall $r \in rs. \; \good \; r$.
Chengsong
parents: 553
diff changeset
   731
\end{lemma}
Chengsong
parents: 553
diff changeset
   732
\noindent
Chengsong
parents: 553
diff changeset
   733
We also note that
Chengsong
parents: 553
diff changeset
   734
if a regular expression $r$ is good, then $\rflts$ on the singleton
Chengsong
parents: 553
diff changeset
   735
list $[r]$ will not break goodness:
Chengsong
parents: 553
diff changeset
   736
\begin{lemma}\label{flts2}
Chengsong
parents: 553
diff changeset
   737
	If $\good \; r$, then forall $r' \in \rflts \; [r]. \; \good \; r'$ and $\textit{nonAlt} \; r'$.
Chengsong
parents: 553
diff changeset
   738
\end{lemma}
Chengsong
parents: 553
diff changeset
   739
\begin{proof}
Chengsong
parents: 553
diff changeset
   740
	By an induction on $r$.
Chengsong
parents: 553
diff changeset
   741
\end{proof}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   742
\noindent
554
Chengsong
parents: 553
diff changeset
   743
The other observation we make about $\rsimp{r}$ is that it never
Chengsong
parents: 553
diff changeset
   744
comes with nested alternatives, which we describe as the $\nonnested$
Chengsong
parents: 553
diff changeset
   745
property:
Chengsong
parents: 553
diff changeset
   746
\begin{center}
Chengsong
parents: 553
diff changeset
   747
	\begin{tabular}{lcl}
Chengsong
parents: 553
diff changeset
   748
		$\nonnested \; \, \sum []$ & $\dn$ & $\btrue$\\
Chengsong
parents: 553
diff changeset
   749
		$\nonnested \; \, \sum ((\sum rs_1) :: rs_2)$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   750
		$\nonnested \; \, \sum (r :: rs)$ & $\dn$ & $\nonnested (\sum rs)$\\
Chengsong
parents: 553
diff changeset
   751
		$\nonnested \; \, r $ & $\dn$ & $\btrue$
Chengsong
parents: 553
diff changeset
   752
	\end{tabular}
Chengsong
parents: 553
diff changeset
   753
\end{center}
Chengsong
parents: 553
diff changeset
   754
\noindent
Chengsong
parents: 553
diff changeset
   755
The $\rflts$ function
Chengsong
parents: 553
diff changeset
   756
always opens up nested alternatives,
Chengsong
parents: 553
diff changeset
   757
which enables $\rsimp$ to be non-nested:
Chengsong
parents: 553
diff changeset
   758
Chengsong
parents: 553
diff changeset
   759
\begin{lemma}\label{nonnestedRsimp}
Chengsong
parents: 553
diff changeset
   760
	$\nonnested \; (\rsimp{r})$
Chengsong
parents: 553
diff changeset
   761
\end{lemma}
Chengsong
parents: 553
diff changeset
   762
\begin{proof}
Chengsong
parents: 553
diff changeset
   763
	By an induction on $r$.
Chengsong
parents: 553
diff changeset
   764
\end{proof}
Chengsong
parents: 553
diff changeset
   765
\noindent
Chengsong
parents: 553
diff changeset
   766
With this we could prove that a regular expressions
Chengsong
parents: 553
diff changeset
   767
after simplification and flattening and de-duplication,
Chengsong
parents: 553
diff changeset
   768
will not contain any alternative regular expression directly:
Chengsong
parents: 553
diff changeset
   769
\begin{lemma}\label{nonaltFltsRd}
Chengsong
parents: 553
diff changeset
   770
	If $x \in \rdistinct{\rflts\; (\map \; \rsimp{} \; rs)}{\varnothing}$ 
Chengsong
parents: 553
diff changeset
   771
	then $\textit{nonAlt} \; x$.
Chengsong
parents: 553
diff changeset
   772
\end{lemma}
Chengsong
parents: 553
diff changeset
   773
\begin{proof}
Chengsong
parents: 553
diff changeset
   774
	By \ref{nonnestedRsimp}.
Chengsong
parents: 553
diff changeset
   775
\end{proof}
Chengsong
parents: 553
diff changeset
   776
\noindent
Chengsong
parents: 553
diff changeset
   777
The other thing we know is that once $\rsimp{}$ had finished
Chengsong
parents: 553
diff changeset
   778
processing an alternative regular expression, it will not
Chengsong
parents: 553
diff changeset
   779
contain any $\RZERO$s, this is because all the recursive 
Chengsong
parents: 553
diff changeset
   780
calls to the simplification on the children regular expressions
Chengsong
parents: 553
diff changeset
   781
make the children good, and $\rflts$ will not take out
Chengsong
parents: 553
diff changeset
   782
any $\RZERO$s out of a good regular expression list,
Chengsong
parents: 553
diff changeset
   783
and $\rdistinct{}$ will not mess with the result.
Chengsong
parents: 553
diff changeset
   784
\begin{lemma}\label{flts3Obv}
Chengsong
parents: 553
diff changeset
   785
	The following are true:
Chengsong
parents: 553
diff changeset
   786
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   787
		\item
Chengsong
parents: 553
diff changeset
   788
			If for all $r \in rs. \, \good \; r $ or $r = \RZERO$,
Chengsong
parents: 553
diff changeset
   789
			then for all $r \in \rflts\; rs. \, \good \; r$.
Chengsong
parents: 553
diff changeset
   790
		\item
Chengsong
parents: 553
diff changeset
   791
			If $x \in \rdistinct{\rflts\; (\map \; rsimp{}\; rs)}{\varnothing}$
Chengsong
parents: 553
diff changeset
   792
			and for all $y$ such that $\llbracket y \rrbracket_r$ less than
Chengsong
parents: 553
diff changeset
   793
			$\llbracket rs \rrbracket_r + 1$, either
Chengsong
parents: 553
diff changeset
   794
			$\good \; (\rsimp{y})$ or $\rsimp{y} = \RZERO$,
Chengsong
parents: 553
diff changeset
   795
			then $\good \; x$.
Chengsong
parents: 553
diff changeset
   796
	\end{itemize}
Chengsong
parents: 553
diff changeset
   797
\end{lemma}
Chengsong
parents: 553
diff changeset
   798
\begin{proof}
Chengsong
parents: 553
diff changeset
   799
	The first part is by induction on $rs$, where the induction
Chengsong
parents: 553
diff changeset
   800
	rule is the inductive cases for $\rflts$.
Chengsong
parents: 553
diff changeset
   801
	The second part is a corollary from the first part.
Chengsong
parents: 553
diff changeset
   802
\end{proof}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   803
554
Chengsong
parents: 553
diff changeset
   804
And this leads to good structural property of $\rsimp{}$,
Chengsong
parents: 553
diff changeset
   805
that after simplification, a regular expression is
Chengsong
parents: 553
diff changeset
   806
either good or $\RZERO$:
Chengsong
parents: 553
diff changeset
   807
\begin{lemma}\label{good1}
Chengsong
parents: 553
diff changeset
   808
	For any r-regular expression $r$, $\good \; \rsimp{r}$ or $\rsimp{r} = \RZERO$.
Chengsong
parents: 553
diff changeset
   809
\end{lemma}
Chengsong
parents: 553
diff changeset
   810
\begin{proof}
Chengsong
parents: 553
diff changeset
   811
	By an induction on $r$. The inductive measure is the size $\llbracket \rrbracket_r$.
Chengsong
parents: 553
diff changeset
   812
	Lemma \ref{rsimpSize} says that 
Chengsong
parents: 553
diff changeset
   813
	$\llbracket \rsimp{r}\rrbracket_r$ is smaller than or equal to
Chengsong
parents: 553
diff changeset
   814
	$\llbracket r \rrbracket_r$.
Chengsong
parents: 553
diff changeset
   815
	Therefore, in the $r_1 \cdot r_2$ and $\sum rs$ case,
Chengsong
parents: 553
diff changeset
   816
	Inductive hypothesis applies to the children regular expressions
Chengsong
parents: 553
diff changeset
   817
	$r_1$, $r_2$, etc. The lemma \ref{flts3Obv}'s precondition is satisfied
Chengsong
parents: 553
diff changeset
   818
	by that as well.
Chengsong
parents: 553
diff changeset
   819
	The lemmas \ref{nonnestedRsimp} and  \ref{nonaltFltsRd} are used
Chengsong
parents: 553
diff changeset
   820
	to ensure that goodness is preserved at the topmost level.
Chengsong
parents: 553
diff changeset
   821
\end{proof}
Chengsong
parents: 553
diff changeset
   822
We shall prove that any good regular expression is 
Chengsong
parents: 553
diff changeset
   823
a fixed-point for $\rsimp{}$.
Chengsong
parents: 553
diff changeset
   824
First we prove an auxiliary lemma:
Chengsong
parents: 553
diff changeset
   825
\begin{lemma}\label{goodaltsNonalt}
Chengsong
parents: 553
diff changeset
   826
	If $\good \; \sum rs$, then $\rflts\; rs = rs$.
Chengsong
parents: 553
diff changeset
   827
\end{lemma}
Chengsong
parents: 553
diff changeset
   828
\begin{proof}
Chengsong
parents: 553
diff changeset
   829
	By an induction on $\sum rs$. The inductive rules are the cases
Chengsong
parents: 553
diff changeset
   830
	for $\good$.
Chengsong
parents: 553
diff changeset
   831
\end{proof}
Chengsong
parents: 553
diff changeset
   832
\noindent
Chengsong
parents: 553
diff changeset
   833
Now we are ready to prove that good regular expressions are invariant
Chengsong
parents: 553
diff changeset
   834
of $\rsimp{}$ application:
Chengsong
parents: 553
diff changeset
   835
\begin{lemma}\label{test}
Chengsong
parents: 553
diff changeset
   836
	If $\good \;r$ then $\rsimp{r} = r$.
Chengsong
parents: 553
diff changeset
   837
\end{lemma}
Chengsong
parents: 553
diff changeset
   838
\begin{proof}
Chengsong
parents: 553
diff changeset
   839
	By an induction on the inductive cases of $\good$.
Chengsong
parents: 553
diff changeset
   840
	The lemma \ref{goodaltsNonalt} is used in the alternative
Chengsong
parents: 553
diff changeset
   841
	case where 2 or more elements are present in the list.
Chengsong
parents: 553
diff changeset
   842
\end{proof}
555
Chengsong
parents: 554
diff changeset
   843
\noindent
Chengsong
parents: 554
diff changeset
   844
Given below is a property involving $\rflts$, $\rdistinct{}{}$, $\rsimp{}$ and $\rsimp_{ALTS}$,
Chengsong
parents: 554
diff changeset
   845
which requires $\ref{good1}$ to go through smoothly.
Chengsong
parents: 554
diff changeset
   846
It says that an application of $\rsimp_{ALTS}$ can be "absorbed",
Chengsong
parents: 554
diff changeset
   847
if it its output is concatenated with a list and then applied to $\rflts$.
Chengsong
parents: 554
diff changeset
   848
\begin{lemma}\label{flattenRsimpalts}
Chengsong
parents: 554
diff changeset
   849
	$\rflts \; ( (\rsimp_{ALTS} \; 
Chengsong
parents: 554
diff changeset
   850
	(\rdistinct{(\rflts \; (\map \; \rsimp{}\; rs))}{\varnothing})) :: 
Chengsong
parents: 554
diff changeset
   851
	\map \; \rsimp{} \; rs' ) = 
Chengsong
parents: 554
diff changeset
   852
	\rflts \; ( (\rdistinct{(\rflts \; (\map \; \rsimp{}\; rs))}{\varnothing}) @ (
Chengsong
parents: 554
diff changeset
   853
	\map \; \rsimp{rs'}))$
554
Chengsong
parents: 553
diff changeset
   854
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   855
555
Chengsong
parents: 554
diff changeset
   856
\end{lemma}
Chengsong
parents: 554
diff changeset
   857
\begin{proof}
Chengsong
parents: 554
diff changeset
   858
	By \ref{good1}.
Chengsong
parents: 554
diff changeset
   859
\end{proof}
Chengsong
parents: 554
diff changeset
   860
\noindent
Chengsong
parents: 554
diff changeset
   861
Chengsong
parents: 554
diff changeset
   862
Chengsong
parents: 554
diff changeset
   863
Chengsong
parents: 554
diff changeset
   864
Chengsong
parents: 554
diff changeset
   865
Chengsong
parents: 554
diff changeset
   866
We are also 
554
Chengsong
parents: 553
diff changeset
   867
\subsubsection{$\rsimp$ is Idempotent}
Chengsong
parents: 553
diff changeset
   868
The idempotency of $\rsimp$ is very useful in 
Chengsong
parents: 553
diff changeset
   869
manipulating regular expression terms into desired
Chengsong
parents: 553
diff changeset
   870
forms so that key steps allowing further rewriting to closed forms
Chengsong
parents: 553
diff changeset
   871
are possible.
Chengsong
parents: 553
diff changeset
   872
\begin{lemma}\label{rsimpIdem}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   873
	$\rsimp{r} = \rsimp{\rsimp{r}}$
554
Chengsong
parents: 553
diff changeset
   874
\end{lemma}
Chengsong
parents: 553
diff changeset
   875
Chengsong
parents: 553
diff changeset
   876
\begin{proof}
Chengsong
parents: 553
diff changeset
   877
	By \ref{test} and \ref{good1}.
Chengsong
parents: 553
diff changeset
   878
\end{proof}
Chengsong
parents: 553
diff changeset
   879
\noindent
Chengsong
parents: 553
diff changeset
   880
This property means we do not have to repeatedly
Chengsong
parents: 553
diff changeset
   881
apply simplification in each step, which justifies
Chengsong
parents: 553
diff changeset
   882
our definition of $\blexersimp$.
Chengsong
parents: 553
diff changeset
   883
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   884
554
Chengsong
parents: 553
diff changeset
   885
On the other hand, we could repeat the same $\rsimp{}$ applications
Chengsong
parents: 553
diff changeset
   886
on regular expressions as many times as we want, if we have at least
Chengsong
parents: 553
diff changeset
   887
one simplification applied to it, and apply it wherever we would like to:
Chengsong
parents: 553
diff changeset
   888
\begin{corollary}\label{headOneMoreSimp}
555
Chengsong
parents: 554
diff changeset
   889
	The following properties hold, directly from \ref{rsimpIdem}:
Chengsong
parents: 554
diff changeset
   890
Chengsong
parents: 554
diff changeset
   891
	\begin{itemize}
Chengsong
parents: 554
diff changeset
   892
		\item
Chengsong
parents: 554
diff changeset
   893
			$\map \; \rsimp{(r :: rs)} = \map \; \rsimp{} \; (\rsimp{r} :: rs)$
Chengsong
parents: 554
diff changeset
   894
		\item
Chengsong
parents: 554
diff changeset
   895
			$\rsimp{(\RALTS{rs})} = \rsimp{(\RALTS{\map \; \rsimp{} \; rs})}$
Chengsong
parents: 554
diff changeset
   896
	\end{itemize}
554
Chengsong
parents: 553
diff changeset
   897
\end{corollary}
Chengsong
parents: 553
diff changeset
   898
\noindent
Chengsong
parents: 553
diff changeset
   899
This will be useful in later closed form proof's rewriting steps.
Chengsong
parents: 553
diff changeset
   900
Similarly, we point out the following useful facts below:
Chengsong
parents: 553
diff changeset
   901
\begin{lemma}
Chengsong
parents: 553
diff changeset
   902
	The following equalities hold if $r = \rsimp{r'}$ for some $r'$:
Chengsong
parents: 553
diff changeset
   903
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   904
		\item
Chengsong
parents: 553
diff changeset
   905
			If $r  = \sum rs$ then $\rsimpalts \; rs = \sum rs$.
Chengsong
parents: 553
diff changeset
   906
		\item
Chengsong
parents: 553
diff changeset
   907
			If $r = \sum rs$ then $\rdistinct{rs}{\varnothing} = rs$.
Chengsong
parents: 553
diff changeset
   908
		\item
Chengsong
parents: 553
diff changeset
   909
			$\rsimpalts \; (\rdistinct{\rflts \; [r]}{\varnothing}) = r$.
Chengsong
parents: 553
diff changeset
   910
	\end{itemize}
Chengsong
parents: 553
diff changeset
   911
\end{lemma}
Chengsong
parents: 553
diff changeset
   912
\begin{proof}
Chengsong
parents: 553
diff changeset
   913
	By application of \ref{rsimpIdem} and \ref{good1}.
Chengsong
parents: 553
diff changeset
   914
\end{proof}
Chengsong
parents: 553
diff changeset
   915
Chengsong
parents: 553
diff changeset
   916
\noindent
Chengsong
parents: 553
diff changeset
   917
With the idempotency of $\rsimp{}$ and its corollaries, 
Chengsong
parents: 553
diff changeset
   918
we can start proving some key equalities leading to the 
Chengsong
parents: 553
diff changeset
   919
closed forms.
Chengsong
parents: 553
diff changeset
   920
Now presented are a few equivalent terms under $\rsimp{}$.
Chengsong
parents: 553
diff changeset
   921
We use $r_1 \sequal r_2 $ here to denote $\rsimp{r_1} = \rsimp{r_2}$.
Chengsong
parents: 553
diff changeset
   922
\begin{lemma}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   923
	\begin{itemize}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   924
		The following equivalence hold:
554
Chengsong
parents: 553
diff changeset
   925
	\item
Chengsong
parents: 553
diff changeset
   926
		$\rsimpalts \; (\RZERO :: rs) \sequal \rsimpalts\; rs$
Chengsong
parents: 553
diff changeset
   927
	\item
Chengsong
parents: 553
diff changeset
   928
		$\rsimpalts \; rs \sequal \rsimpalts (\map \; \rsimp{} \; rs)$
Chengsong
parents: 553
diff changeset
   929
	\item
Chengsong
parents: 553
diff changeset
   930
		$\RALTS{\RALTS{rs}} \sequal \RALTS{rs}$
555
Chengsong
parents: 554
diff changeset
   931
	\item
Chengsong
parents: 554
diff changeset
   932
		$\sum ((\sum rs_a) :: rs_b) \sequal \sum rs_a @ rs_b$
Chengsong
parents: 554
diff changeset
   933
	\item
Chengsong
parents: 554
diff changeset
   934
		$\RALTS{rs} = \RALTS{\map \; \rsimp{} \; rs}$
554
Chengsong
parents: 553
diff changeset
   935
\end{itemize}
Chengsong
parents: 553
diff changeset
   936
\end{lemma}
555
Chengsong
parents: 554
diff changeset
   937
\begin{proof}
Chengsong
parents: 554
diff changeset
   938
	By induction on the lists involved.
Chengsong
parents: 554
diff changeset
   939
\end{proof}
Chengsong
parents: 554
diff changeset
   940
\noindent
Chengsong
parents: 554
diff changeset
   941
Similarly,
Chengsong
parents: 554
diff changeset
   942
we introduce the equality for $\sum$ when certain child regular expressions
Chengsong
parents: 554
diff changeset
   943
are $\sum$ themselves:
Chengsong
parents: 554
diff changeset
   944
\begin{lemma}\label{simpFlatten3}
Chengsong
parents: 554
diff changeset
   945
	One can flatten the inside $\sum$ of a $\sum$ if it is being 
Chengsong
parents: 554
diff changeset
   946
	simplified. Concretely,
Chengsong
parents: 554
diff changeset
   947
	\begin{itemize}
Chengsong
parents: 554
diff changeset
   948
		\item
Chengsong
parents: 554
diff changeset
   949
			If for all $r \in rs, rs', rs''$, we have $\good \; r $
Chengsong
parents: 554
diff changeset
   950
			or $r = \RZERO$, then $\sum (rs' @ rs @ rs'') \sequal 
Chengsong
parents: 554
diff changeset
   951
			\sum (rs' @ [\sum rs] @ rs'')$ holds. As a corollary,
Chengsong
parents: 554
diff changeset
   952
		\item
Chengsong
parents: 554
diff changeset
   953
			$\sum (rs' @ [\sum rs] @ rs'') \sequal \sum (rs' @ rs @ rs'')$
Chengsong
parents: 554
diff changeset
   954
	\end{itemize}
Chengsong
parents: 554
diff changeset
   955
\end{lemma}
Chengsong
parents: 554
diff changeset
   956
\begin{proof}
Chengsong
parents: 554
diff changeset
   957
	By rewriting steps involving the use of \ref{test} and \ref{rdistinctConcatGeneral}.
Chengsong
parents: 554
diff changeset
   958
	The second sub-lemma is a corollary of the previous.
Chengsong
parents: 554
diff changeset
   959
\end{proof}
Chengsong
parents: 554
diff changeset
   960
%Rewriting steps not put in--too long and complicated-------------------------------
Chengsong
parents: 554
diff changeset
   961
\begin{comment}
Chengsong
parents: 554
diff changeset
   962
	\begin{center}
Chengsong
parents: 554
diff changeset
   963
		$\rsimp{\sum (rs' @ rs @ rs'')}  \stackrel{def of bsimp}{=}$  \\
Chengsong
parents: 554
diff changeset
   964
		$\rsimpalts \; (\rdistinct{\rflts \; ((\map \; \rsimp{}\; rs') @ (\map \; \rsimp{} \; rs ) @ (\map \; \rsimp{} \; rs''))}{\varnothing})$ \\
Chengsong
parents: 554
diff changeset
   965
		$\stackrel{by \ref{test}}{=} 
Chengsong
parents: 554
diff changeset
   966
		\rsimpalts \; (\rdistinct{(\rflts \; rs' @ \rflts \; rs @ \rflts \; rs'')}{
Chengsong
parents: 554
diff changeset
   967
		\varnothing})$\\
Chengsong
parents: 554
diff changeset
   968
		$\stackrel{by \ref{rdistinctConcatGeneral}}{=}
Chengsong
parents: 554
diff changeset
   969
		\rsimpalts \; (\rdistinct{\rflts \; rs'}{\varnothing} @ \rdistinct{(
Chengsong
parents: 554
diff changeset
   970
		\rflts\; rs @ \rflts \; rs'')}{\rflts \; rs'})$\\
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
   971
555
Chengsong
parents: 554
diff changeset
   972
	\end{center}
Chengsong
parents: 554
diff changeset
   973
\end{comment}
Chengsong
parents: 554
diff changeset
   974
%Rewriting steps not put in--too long and complicated-------------------------------
554
Chengsong
parents: 553
diff changeset
   975
\noindent
Chengsong
parents: 553
diff changeset
   976
We need more equalities like the above to enable a closed form,
Chengsong
parents: 553
diff changeset
   977
but to proceed we need to introduce two rewrite relations,
Chengsong
parents: 553
diff changeset
   978
to make things smoother.
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
   979
\subsubsection{The rewrite relation $\hrewrite$ , $\scfrewrites$ , $\frewrite$ and $\grewrite$}
554
Chengsong
parents: 553
diff changeset
   980
Insired by the success we had in the correctness proof 
Chengsong
parents: 553
diff changeset
   981
in \ref{Bitcoded2}, where we invented
555
Chengsong
parents: 554
diff changeset
   982
a term rewriting system to capture the similarity between terms,
Chengsong
parents: 554
diff changeset
   983
we follow suit here defining simplification
Chengsong
parents: 554
diff changeset
   984
steps as rewriting steps. This allows capturing 
Chengsong
parents: 554
diff changeset
   985
similarities between terms that would be otherwise
Chengsong
parents: 554
diff changeset
   986
hard to express.
Chengsong
parents: 554
diff changeset
   987
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
   988
We use $\hrewrite$ for one-step atomic rewrite of 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
   989
regular expression simplification, 
555
Chengsong
parents: 554
diff changeset
   990
$\frewrite$ for rewrite of list of regular expressions that 
Chengsong
parents: 554
diff changeset
   991
include all operations carried out in $\rflts$, and $\grewrite$ for
Chengsong
parents: 554
diff changeset
   992
rewriting a list of regular expressions possible in both $\rflts$ and $\rdistinct{}{}$.
Chengsong
parents: 554
diff changeset
   993
Their reflexive transitive closures are used to denote zero or many steps,
Chengsong
parents: 554
diff changeset
   994
as was the case in the previous chapter.
554
Chengsong
parents: 553
diff changeset
   995
The presentation will be more concise than that in \ref{Bitcoded2}.
Chengsong
parents: 553
diff changeset
   996
To differentiate between the rewriting steps for annotated regular expressions
Chengsong
parents: 553
diff changeset
   997
and $\rrexp$s, we add characters $h$ and $g$ below the squig arrow symbol
Chengsong
parents: 553
diff changeset
   998
to mean atomic simplification transitions 
Chengsong
parents: 553
diff changeset
   999
of $\rrexp$s and $\rrexp$ lists, respectively.
Chengsong
parents: 553
diff changeset
  1000
555
Chengsong
parents: 554
diff changeset
  1001
Chengsong
parents: 554
diff changeset
  1002
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1003
List of one-step rewrite rules for $\rrexp$ ($\hrewrite$):
555
Chengsong
parents: 554
diff changeset
  1004
Chengsong
parents: 554
diff changeset
  1005
554
Chengsong
parents: 553
diff changeset
  1006
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1007
	\begin{mathpar}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1008
		\inferrule[RSEQ0L]{}{\RZERO \cdot r_2 \hrewrite \RZERO\\}
555
Chengsong
parents: 554
diff changeset
  1009
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1010
		\inferrule[RSEQ0R]{}{r_1 \cdot \RZERO \hrewrite \RZERO\\}
555
Chengsong
parents: 554
diff changeset
  1011
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1012
		\inferrule[RSEQ1]{}{(\RONE \cdot r) \hrewrite  r\\}\\	
555
Chengsong
parents: 554
diff changeset
  1013
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1014
		\inferrule[RSEQL]{ r_1 \hrewrite r_2}{r_1 \cdot r_3 \hrewrite r_2 \cdot r_3\\}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1015
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1016
		\inferrule[RSEQR]{ r_3 \hrewrite r_4}{r_1 \cdot r_3 \hrewrite r_1 \cdot r_4\\}\\
555
Chengsong
parents: 554
diff changeset
  1017
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1018
		\inferrule[RALTSChild]{r \hrewrite r'}{\sum (rs_1 @ [r] @ rs_2) \hrewrite \sum (rs_1 @ [r'] @ rs_2)\\}
555
Chengsong
parents: 554
diff changeset
  1019
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1020
		\inferrule[RALTS0]{}{\sum (rs_a @ [\RZERO] @ rs_b) \hrewrite \sum (rs_a @ rs_b)}
555
Chengsong
parents: 554
diff changeset
  1021
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1022
		\inferrule[RALTSNested]{}{\sum (rs_a @ [\sum rs_1] @ rs_b) \hrewrite \sum (rs_a @ rs_1 @ rs_b)}
555
Chengsong
parents: 554
diff changeset
  1023
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1024
		\inferrule[RALTSNil]{}{ \sum [] \hrewrite \RZERO\\}
555
Chengsong
parents: 554
diff changeset
  1025
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1026
		\inferrule[RALTSSingle]{}{ \sum [r] \hrewrite  r\\}	
555
Chengsong
parents: 554
diff changeset
  1027
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1028
		\inferrule[RALTSDelete]{\\ r_1 = r_2}{\sum rs_a @ [r_1] @ rs_b @ [r_2] @ rsc \hrewrite \sum rs_a @ [r_1] @ rs_b @ rs_c}
555
Chengsong
parents: 554
diff changeset
  1029
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1030
	\end{mathpar}
555
Chengsong
parents: 554
diff changeset
  1031
\end{center}
554
Chengsong
parents: 553
diff changeset
  1032
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1033
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1034
List of rewrite rules for a list of regular expressions,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1035
where each element can rewrite in many steps to the other (scf stands for
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1036
li\emph{s}t \emph{c}losed \emph{f}orm). This relation is similar to the 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1037
$\stackrel{s*}{\rightsquigarrow}$ for annotated regular expressions.
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1038
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1039
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1040
	\begin{mathpar}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1041
		\inferrule{}{[] \scfrewrites [] }
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1042
		\inferrule{r \hrewrites r' \\ rs \scfrewrites rs'}{r :: rs \scfrewrites r' :: rs'}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1043
	\end{mathpar}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1044
\end{center}
555
Chengsong
parents: 554
diff changeset
  1045
%frewrite
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1046
List of one-step rewrite rules for flattening 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1047
a list of  regular expressions($\frewrite$):
555
Chengsong
parents: 554
diff changeset
  1048
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1049
	\begin{mathpar}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1050
		\inferrule{}{\RZERO :: rs \frewrite rs \\}
555
Chengsong
parents: 554
diff changeset
  1051
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1052
		\inferrule{}{(\sum rs) :: rs_a \frewrite rs @ rs_a \\}
555
Chengsong
parents: 554
diff changeset
  1053
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1054
		\inferrule{rs_1 \frewrite rs_2}{r :: rs_1 \frewrite r :: rs_2}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1055
	\end{mathpar}
555
Chengsong
parents: 554
diff changeset
  1056
\end{center}
Chengsong
parents: 554
diff changeset
  1057
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1058
Lists of one-step rewrite rules for flattening and de-duplicating
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1059
a list of regular expressions ($\grewrite$):
555
Chengsong
parents: 554
diff changeset
  1060
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1061
	\begin{mathpar}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1062
		\inferrule{}{\RZERO :: rs \grewrite rs \\}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1063
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1064
		\inferrule{}{(\sum rs) :: rs_a \grewrite rs @ rs_a \\}
555
Chengsong
parents: 554
diff changeset
  1065
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1066
		\inferrule{rs_1 \grewrite rs_2}{r :: rs_1 \grewrite r :: rs_2}
555
Chengsong
parents: 554
diff changeset
  1067
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1068
		\inferrule[dB]{}{rs_a @ [a] @ rs_b @[a] @ rs_c \grewrite rs_a @ [a] @ rsb @ rsc}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1069
	\end{mathpar}
555
Chengsong
parents: 554
diff changeset
  1070
\end{center}
Chengsong
parents: 554
diff changeset
  1071
Chengsong
parents: 554
diff changeset
  1072
\noindent
Chengsong
parents: 554
diff changeset
  1073
The reason why we take the trouble of defining 
Chengsong
parents: 554
diff changeset
  1074
two separate list rewriting definitions $\frewrite$ and $\grewrite$
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1075
is to separate the two stages of simplification: flattening and de-duplicating.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1076
Sometimes $\grewrites$ is slightly too powerful
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1077
so we would rather use $\frewrites$ which makes certain rewriting steps 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1078
more straightforward to prove.
556
Chengsong
parents: 555
diff changeset
  1079
For example, when proving the closed-form for the alternative regular expression,
Chengsong
parents: 555
diff changeset
  1080
one of the rewriting steps would be:
Chengsong
parents: 555
diff changeset
  1081
\begin{lemma}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1082
	$\sum (\rDistinct \;\; (\map \; (\_ \backslash x) \; (\rflts \; rs)) \;\; \varnothing) \sequal
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1083
	\sum (\rDistinct \;\;  (\rflts \; (\map \; (\_ \backslash x) \; rs)) \;\; \varnothing)
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1084
	$
556
Chengsong
parents: 555
diff changeset
  1085
\end{lemma}
Chengsong
parents: 555
diff changeset
  1086
\noindent
Chengsong
parents: 555
diff changeset
  1087
Proving this is by first showing 
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1088
\begin{lemma}\label{earlyLaterDerFrewrites}
556
Chengsong
parents: 555
diff changeset
  1089
	$\map \; (\_ \backslash x) \;  (\rflts \; rs) \frewrites
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1090
	\rflts \; (\map \; (\_ \backslash x) \; rs)$
556
Chengsong
parents: 555
diff changeset
  1091
\end{lemma}
Chengsong
parents: 555
diff changeset
  1092
\noindent
Chengsong
parents: 555
diff changeset
  1093
and then using lemma
Chengsong
parents: 555
diff changeset
  1094
\begin{lemma}\label{frewritesSimpeq}
Chengsong
parents: 555
diff changeset
  1095
	If $rs_1 \frewrites rs_2 $, then $\sum (\rDistinct \; rs_1 \; \varnothing) \sequal 
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1096
	\sum (\rDistinct \;  rs_2 \;  \varnothing)$.
556
Chengsong
parents: 555
diff changeset
  1097
\end{lemma}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1098
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1099
is a piece of cake.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1100
But this trick will not work for $\grewrites$.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1101
For example, a rewriting step in proving
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1102
closed forms is:
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1103
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1104
	$\rsimp{(\rsimpalts \; (\map \; (\_ \backslash x) \; (\rdistinct{(\rflts \; (\map \; (\rsimp{} \; \circ \; (\lambda r. \rderssimp{r}{xs}))))}{\varnothing})))}$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1105
	$=$ \\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1106
	$\rsimp{(\rsimpalts \; (\rdistinct{(\map \; (\_ \backslash x) \; (\rflts \; (\map \; (\rsimp{} \; \circ \; (\lambda r. \rderssimp{r}{xs})))) ) }{\varnothing}))} $
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1107
	\noindent
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1108
\end{center}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1109
For this one would hope to have a rewriting relation between the two lists involved,
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1110
similar to \ref{earlyLaterDerFrewrites}. However, it turns out that 
556
Chengsong
parents: 555
diff changeset
  1111
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1112
	$\map \; (\_ \backslash x) \; (\rDistinct \; rs \; rset) \grewrites \rDistinct \; (\map \;
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1113
	(\_ \backslash x) \; rs) \; ( rset \backslash x)$
556
Chengsong
parents: 555
diff changeset
  1114
\end{center}
Chengsong
parents: 555
diff changeset
  1115
\noindent
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1116
does $\mathbf{not}$ hold in general.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1117
For this rewriting step we will introduce some slightly more cumbersome
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1118
proof technique in later sections.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1119
The point is that $\frewrite$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1120
allows us to prove equivalence in a straightforward two-step method that is 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1121
not possible for $\grewrite$, thereby reducing the complexity of the entire proof.
555
Chengsong
parents: 554
diff changeset
  1122
556
Chengsong
parents: 555
diff changeset
  1123
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1124
\subsubsection{Terms That Can Be Rewritten Using $\hrewrites$, $\grewrites$, and $\frewrites$}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1125
We present in the below lemma a few pairs of terms that are rewritable via 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1126
$\grewrites$:
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1127
\begin{lemma}\label{gstarRdistinctGeneral}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1128
	\begin{itemize}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1129
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1130
			$rs_1 @ rs \grewrites rs_1 @ (\rDistinct \; rs \; rs_1)$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1131
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1132
			$rs \grewrites \rDistinct \; rs \; \varnothing$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1133
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1134
			$rs_a @ (\rDistinct \; rs \; rs_a) \grewrites rs_a @ (\rDistinct \; 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1135
			rs \; (\{\RZERO\} \cup rs_a))$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1136
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1137
			$rs \;\; @ \;\; \rDistinct \; rs_a \; rset \grewrites rs @  \rDistinct \; rs_a \;
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1138
			(rest \cup rs)$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1139
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1140
	\end{itemize}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1141
\end{lemma}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1142
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1143
If a pair of terms $rs_1, rs_2$ are rewritable via $\grewrites$ to each other,
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1144
then they are equivalent under $\rsimp{}$:
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1145
\begin{lemma}\label{grewritesSimpalts}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1146
	If $rs_1 \grewrites rs_2$, then
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1147
	we have the following equivalence hold:
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1148
	\begin{itemize}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1149
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1150
			$\sum rs_1 \sequal \sum rs_2$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1151
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1152
			$\rsimpalts \; rs_1 \sequal \rsimpalts \; rs_2$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1153
	\end{itemize}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1154
\end{lemma}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1155
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1156
Here are a few connecting lemmas showing that
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1157
if a list of regular expressions can be rewritten using $\grewrites$ or $\frewrites $ or
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1158
$\scfrewrites$,
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1159
then an alternative constructor taking the list can also be rewritten using $\hrewrites$:
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1160
\begin{lemma}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1161
	\begin{itemize}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1162
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1163
			If $rs \grewrites rs'$ then $\sum rs \hrewrites \sum rs'$.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1164
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1165
			If $rs \grewrites rs'$ then $\sum rs \hrewrites \rsimpalts \; rs'$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1166
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1167
			If $rs_1 \scfrewrites rs_2$ then $\sum (rs @ rs_1) \hrewrites \sum (rs @ rs_2)$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1168
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1169
			If $rs_1 \scfrewrites rs_2$ then $\sum rs_1 \hrewrites \sum rs_2$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1170
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1171
	\end{itemize}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1172
\end{lemma}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1173
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1174
Here comes the meat of the proof, 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1175
which says that once two lists are rewritable to each other,
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1176
then they are equivalent under $\rsimp{}$:
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1177
\begin{lemma}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1178
	If $r_1 \hrewrites r_2$ then $r_1 \sequal r_2$.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1179
\end{lemma}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1180
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1181
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1182
And similar to \ref{Bitcoded2} one can preserve rewritability after taking derivative
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1183
of two regular expressions on both sides:
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1184
\begin{lemma}\label{interleave}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1185
	If $r \hrewrites r' $ then $\rder{c}{r} \hrewrites \rder{c}{r'}$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1186
\end{lemma}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1187
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1188
This allows proving more $\mathbf{rsimp}$-equivalent terms, involving $\backslash_r$ now.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1189
\begin{lemma}\label{insideSimpRemoval}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1190
	$\rsimp{\rder{c}{\rsimp{r}}} = \rsimp{\rder{c}{r}}  $
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1191
\end{lemma}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1192
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1193
\begin{proof}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1194
	By \ref{interleave} and \ref{rsimpIdem}.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1195
\end{proof}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1196
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1197
And this unlocks more equivalent terms:
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1198
\begin{lemma}\label{Simpders}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1199
	As corollaries of \ref{insideSimpRemoval}, we have
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1200
	\begin{itemize}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1201
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1202
			If $s \neq []$ then $\rderssimp{r}{s} = \rsimp{(\rders \; r \; s)}$.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1203
		\item
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1204
			$\rsimpalts \; (\map \; (\_ \backslash_r x) \;
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1205
			(\rdistinct{rs}{\varnothing})) \sequal
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1206
			\rsimpalts \; (\rDistinct \; 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1207
			(\map \; (\_ \backslash_r x) rs) \;\varnothing  )$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1208
	\end{itemize}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1209
\end{lemma}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1210
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1211
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1212
Finally,
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1213
together with 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1214
\begin{lemma}\label{rderRsimpAltsCommute}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1215
	$\rder{x}{(\rsimpalts \; rs)} = \rsimpalts \; (\map \; (\rder{x}{\_}) \; rs)$
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1216
\end{lemma}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1217
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1218
this leads to the first closed form--
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1219
\begin{lemma}\label{altsClosedForm}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1220
	\begin{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1221
		$\rderssimp{(\sum rs)}{s} \sequal
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1222
		\sum \; (\map \; (\rderssimp{\_}{s}) \; rs)$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1223
	\end{center}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1224
\end{lemma}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1225
556
Chengsong
parents: 555
diff changeset
  1226
\noindent
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1227
\begin{proof}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1228
	By a reverse induction on the string $s$.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1229
	One rewriting step, as we mentioned earlier,
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1230
	involves
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1231
	\begin{center}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1232
		$\rsimpalts \; (\map \; (\_ \backslash x) \; 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1233
		(\rdistinct{(\rflts \; (\map \; (\rsimp{} \; \circ \; 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1234
		(\lambda r. \rderssimp{r}{xs}))))}{\varnothing}))
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1235
		\sequal
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1236
		\rsimpalts \; (\rdistinct{(\map \; (\_ \backslash x) \; 
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1237
			(\rflts \; (\map \; (\rsimp{} \; \circ \; 
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1238
		(\lambda r. \rderssimp{r}{xs})))) ) }{\varnothing}) $.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1239
	\end{center}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1240
	This can be proven by a combination of 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1241
	\ref{grewritesSimpalts}, \ref{gstarRdistinctGeneral}, \ref{rderRsimpAltsCommute}, and
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1242
	\ref{insideSimpRemoval}.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1243
\end{proof}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1244
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1245
This closed form has a variant which can be more convenient in later proofs:
559
Chengsong
parents: 558
diff changeset
  1246
\begin{corollary}{altsClosedForm1}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1247
	If $s \neq []$ then 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1248
	$\rderssimp \; (\sum \; rs) \; s = 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1249
	\rsimp{(\sum \; (\map \; \rderssimp{\_}{s} \; rs))}$.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1250
\end{corollary}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1251
\noindent
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1252
The harder closed forms are the sequence and star ones.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1253
Before we go on to obtain them, some preliminary definitions
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1254
are needed to make proof statements concise.
556
Chengsong
parents: 555
diff changeset
  1255
558
Chengsong
parents: 557
diff changeset
  1256
\section{"Closed Forms" of Sequence Regular Expressions}
Chengsong
parents: 557
diff changeset
  1257
The problem of obataining a closed-form for sequence regular expression 
Chengsong
parents: 557
diff changeset
  1258
is constructing $(r_1 \cdot r_2) \backslash_r s$
Chengsong
parents: 557
diff changeset
  1259
if we are only allowed to use a combination of $r_1 \backslash s''$ 
Chengsong
parents: 557
diff changeset
  1260
and  $r_2 \backslash s''$ , where $s''$ is from $s$.
Chengsong
parents: 557
diff changeset
  1261
First let's look at a series of derivatives steps on a sequence 
Chengsong
parents: 557
diff changeset
  1262
regular expression, assuming that each time the first
Chengsong
parents: 557
diff changeset
  1263
component of the sequence is always nullable):
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1264
\begin{center}
558
Chengsong
parents: 557
diff changeset
  1265
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1266
	$r_1 \cdot r_2 \quad \longrightarrow_{\backslash c}  \quad   r_1  \backslash c \cdot r_2 + r_2 \backslash c \quad \longrightarrow_{\backslash c'} \quad (r_1 \backslash cc' \cdot r_2 + r_2 \backslash c') + r_2 \backslash cc' \longrightarrow_{\backslash c''} \quad$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1267
	$((r_1 \backslash cc'c'' \cdot r_2 + r_2 \backslash c'') + r_2 \backslash c'c'') + r_2 \backslash cc'c''   \longrightarrow_{\backslash c''} \quad
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1268
	\ldots$
558
Chengsong
parents: 557
diff changeset
  1269
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1270
\end{center}
558
Chengsong
parents: 557
diff changeset
  1271
Roughly speaking $r_1 \cdot r_2 \backslash s$ can be expresssed as 
Chengsong
parents: 557
diff changeset
  1272
a giant alternative taking a list of terms 
Chengsong
parents: 557
diff changeset
  1273
$[r_1 \backslash_r s \cdot r_2, r_2 \backslash_r s'', r_2 \backslash_r s_1'', \ldots]$,
Chengsong
parents: 557
diff changeset
  1274
where the head of the list is always the term
Chengsong
parents: 557
diff changeset
  1275
representing a match involving only $r_1$, and the tail of the list consisting of
Chengsong
parents: 557
diff changeset
  1276
terms of the shape $r_2 \backslash_r s''$, $s''$ being a suffix of $s$.
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1277
This intuition is also echoed by IndianPaper, where they gave
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1278
a pencil-and-paper derivation of $(r_1 \cdot r_2)\backslash s$:
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1279
\begin{center}
558
Chengsong
parents: 557
diff changeset
  1280
	\begin{tabular}{c}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1281
		$(r_1 \cdot r_2) \backslash_r (c_1 :: c_2 :: \ldots c_n) \myequiv$\\ 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1282
		\rule{0pt}{3ex} $((r_1 \backslash_r c_1) \cdot r_2 + (\delta\; (\rnullable \; r_1) \; r_2 \backslash_r c_1)) \backslash_r (c_2 :: \ldots c_n) 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1283
		\myequiv$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1284
		\rule{0pt}{3ex} $((r_1 \backslash_r c_1c_2 \cdot r_2 + (\delta \; (\rnullable \; r_1) \; r_2 \backslash_r c_1c_2))
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1285
		+ (\delta \ (\rnullable \; r_1 \backslash_r c)\; r_2 \backslash_r c_2)) \backslash_r (c_3 \ldots c_n)
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1286
		$
558
Chengsong
parents: 557
diff changeset
  1287
	\end{tabular}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1288
\end{center}
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1289
\noindent
558
Chengsong
parents: 557
diff changeset
  1290
The equality in above should be interpretated
Chengsong
parents: 557
diff changeset
  1291
as language equivalence. 
Chengsong
parents: 557
diff changeset
  1292
The $\delta$ function works similarly to that of
Chengsong
parents: 557
diff changeset
  1293
a Kronecker delta function:
Chengsong
parents: 557
diff changeset
  1294
\[ \delta \; b\; r\]
Chengsong
parents: 557
diff changeset
  1295
will produce $r$
Chengsong
parents: 557
diff changeset
  1296
if $b$ evaluates to true, 
Chengsong
parents: 557
diff changeset
  1297
and $\RZERO$ otherwise.
Chengsong
parents: 557
diff changeset
  1298
Note that their formulation  
Chengsong
parents: 557
diff changeset
  1299
\[
Chengsong
parents: 557
diff changeset
  1300
	((r_1 \backslash_r \, c_1c_2 \cdot r_2 + (\delta \; (\rnullable) \; r_1, r_2 \backslash_r c_1c_2)
Chengsong
parents: 557
diff changeset
  1301
	+ (\delta \; (\rnullable \; r_1 \backslash_r c)\; r_2 \backslash_r c_2)
Chengsong
parents: 557
diff changeset
  1302
\]
Chengsong
parents: 557
diff changeset
  1303
does not faithfully
Chengsong
parents: 557
diff changeset
  1304
represent what the intermediate derivatives would actually look like
Chengsong
parents: 557
diff changeset
  1305
when one or more intermediate results $r_1 \backslash s' \cdot r_2$ are not 
Chengsong
parents: 557
diff changeset
  1306
nullable in the head of the sequence.
Chengsong
parents: 557
diff changeset
  1307
For example, when $r_1$ and $r_1 \backslash_r c_1$ are not nullable,
Chengsong
parents: 557
diff changeset
  1308
the regular expression would not look like 
Chengsong
parents: 557
diff changeset
  1309
\[
Chengsong
parents: 557
diff changeset
  1310
	(r_1 \backslash_r c_1c_2 + \RZERO ) + \RZERO,
Chengsong
parents: 557
diff changeset
  1311
\]
Chengsong
parents: 557
diff changeset
  1312
but actually $r_1 \backslash_r c_1c_2$, the redundant $\RZERO$s will not be created in the
Chengsong
parents: 557
diff changeset
  1313
first place.
Chengsong
parents: 557
diff changeset
  1314
In a closed-form one would want to take into account this 
Chengsong
parents: 557
diff changeset
  1315
and generate the list of
Chengsong
parents: 557
diff changeset
  1316
regular expressions $r_2 \backslash_r s''$ with
Chengsong
parents: 557
diff changeset
  1317
string pairs $(s', s'')$ where $s'@s'' = s$ and
Chengsong
parents: 557
diff changeset
  1318
$r_1 \backslash s'$ nullable.
Chengsong
parents: 557
diff changeset
  1319
We denote the list consisting of such 
Chengsong
parents: 557
diff changeset
  1320
strings $s''$ as $\vsuf{s}{r_1}$.
Chengsong
parents: 557
diff changeset
  1321
Chengsong
parents: 557
diff changeset
  1322
The function $\vsuf{\_}{\_}$ is defined recursively on the structure of the string:
Chengsong
parents: 557
diff changeset
  1323
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1324
	\begin{tabular}{lcl}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1325
		$\vsuf{[]}{\_} $ & $=$ &  $[]$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1326
		$\vsuf{c::cs}{r_1}$ & $ =$ & $ \textit{if} (\rnullable{r_1}) \textit{then} \; (\vsuf{cs}{(\rder{c}{r_1})}) @ [c :: cs]$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1327
				    && $\textit{else} \; (\vsuf{cs}{(\rder{c}{r_1}) })  $
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1328
	\end{tabular}
558
Chengsong
parents: 557
diff changeset
  1329
\end{center}
Chengsong
parents: 557
diff changeset
  1330
\noindent
Chengsong
parents: 557
diff changeset
  1331
The list is sorted in the order $r_2\backslash s''$ 
Chengsong
parents: 557
diff changeset
  1332
appears in $(r_1\cdot r_2)\backslash s$.
Chengsong
parents: 557
diff changeset
  1333
In essence, $\vsuf{\_}{\_}$ is doing a 
Chengsong
parents: 557
diff changeset
  1334
"virtual derivative" of $r_1 \cdot r_2$, but instead of producing 
Chengsong
parents: 557
diff changeset
  1335
the entire result $(r_1 \cdot r_2) \backslash s$, 
Chengsong
parents: 557
diff changeset
  1336
it only stores all the strings $s''$ such that $r_2 \backslash s''$
Chengsong
parents: 557
diff changeset
  1337
are occurring terms in $(r_1\cdot r_2)\backslash s$.
Chengsong
parents: 557
diff changeset
  1338
Chengsong
parents: 557
diff changeset
  1339
To make the closed form representation 
Chengsong
parents: 557
diff changeset
  1340
more straightforward,
Chengsong
parents: 557
diff changeset
  1341
the flattetning function $\sflat{\_}$ is used to enable the transformation from 
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1342
a left-associative nested sequence of alternatives into 
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1343
a flattened list:
558
Chengsong
parents: 557
diff changeset
  1344
\[
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1345
	\sum [r_1, r_2, r_3, \ldots] \stackrel{\sflat{\_}}{\rightarrow} 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1346
	(\ldots ((r_1 + r_2) + r_3) + \ldots)
558
Chengsong
parents: 557
diff changeset
  1347
\]
Chengsong
parents: 557
diff changeset
  1348
\noindent
Chengsong
parents: 557
diff changeset
  1349
The definitions $\sflat{\_}$, $\sflataux{\_}$ are given below.
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1350
\begin{center}  
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1351
	\begin{tabular}{ccc}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1352
		$\sflataux{\AALTS{ }{r :: rs}}$ & $=$ & $\sflataux{r} @ rs$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1353
		$\sflataux{\AALTS{ }{[]}}$ & $ = $ & $ []$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1354
		$\sflataux r$ & $=$ & $ [r]$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1355
	\end{tabular}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1356
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1357
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1358
\begin{center} 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1359
	\begin{tabular}{ccc}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1360
		$\sflat{(\sum r :: rs)}$ & $=$ & $\sum (\sflataux{r} @ rs)$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1361
		$\sflat{\sum []}$ & $ = $ & $ \sum []$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1362
		$\sflat r$ & $=$ & $ r$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1363
	\end{tabular}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1364
\end{center}
558
Chengsong
parents: 557
diff changeset
  1365
\noindent
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
  1366
$\sflataux{\_}$ breaks up nested alternative regular expressions 
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1367
of the $(\ldots((r_1 + r_2) + r_3) + \ldots )$(left-associated) shape
558
Chengsong
parents: 557
diff changeset
  1368
into a "balanced" list: $\AALTS{\_}{[r_1,\, r_2 ,\, r_3, \ldots]}$.
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1369
It will return the singleton list $[r]$ otherwise.
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1370
$\sflat{\_}$ works the same  as $\sflataux{\_}$, except that it keeps
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1371
the output type a regular expression, not a list.
558
Chengsong
parents: 557
diff changeset
  1372
$\sflataux{\_}$  and $\sflat{\_}$ are only recursive on the  
Chengsong
parents: 557
diff changeset
  1373
first element of the list.
Chengsong
parents: 557
diff changeset
  1374
Chengsong
parents: 557
diff changeset
  1375
With $\sflataux{}$ a preliminary to the closed form can be stated,
Chengsong
parents: 557
diff changeset
  1376
where the derivative of $r_1 \cdot r_2 \backslash s$ can be
Chengsong
parents: 557
diff changeset
  1377
flattened into a list whose head and tail meet the description
Chengsong
parents: 557
diff changeset
  1378
we gave earlier.
Chengsong
parents: 557
diff changeset
  1379
\begin{lemma}\label{seqSfau0}
Chengsong
parents: 557
diff changeset
  1380
	$\sflataux{\rders{(r_1 \cdot r_2) \backslash s }} = (r_1 \backslash_r s) \cdot r_2 
Chengsong
parents: 557
diff changeset
  1381
	:: (\map \; (r_2 \backslash_r \_) \; (\textit{Suffix} \; s \; r1))$ 
Chengsong
parents: 557
diff changeset
  1382
\end{lemma}
Chengsong
parents: 557
diff changeset
  1383
\begin{proof}
Chengsong
parents: 557
diff changeset
  1384
	By an induction on the string $s$, where the inductive cases 
Chengsong
parents: 557
diff changeset
  1385
	are split as $[]$ and $xs @ [x]$.
Chengsong
parents: 557
diff changeset
  1386
	Note the key identify holds:
Chengsong
parents: 557
diff changeset
  1387
	\[
Chengsong
parents: 557
diff changeset
  1388
		\map \; (r_2 \backslash_r \_) \; (\vsuf{[x]}{(r_1 \backslash_r xs)}) \;\; @ \;\;
Chengsong
parents: 557
diff changeset
  1389
		\map \; (\_ \backslash_r x) \; (\map \; (r_2 \backslash \_) \; (\vsuf{xs}{r_1}))
Chengsong
parents: 557
diff changeset
  1390
	\]
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1391
	=
558
Chengsong
parents: 557
diff changeset
  1392
	\[
Chengsong
parents: 557
diff changeset
  1393
		\map \; (r_2 \backslash_r \_) \; (\vsuf{xs @ [x]}{r_1})
Chengsong
parents: 557
diff changeset
  1394
	\]
Chengsong
parents: 557
diff changeset
  1395
	This enables the inductive case to go through.
Chengsong
parents: 557
diff changeset
  1396
\end{proof}
Chengsong
parents: 557
diff changeset
  1397
\noindent 
Chengsong
parents: 557
diff changeset
  1398
Note that this lemma does $\mathbf{not}$ depend on any
Chengsong
parents: 557
diff changeset
  1399
specific definitions we used,
Chengsong
parents: 557
diff changeset
  1400
allowing people investigating derivatives to get an alternative
Chengsong
parents: 557
diff changeset
  1401
view of what $r_1 \cdot r_2$ is.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1402
558
Chengsong
parents: 557
diff changeset
  1403
Now we are able to use this for the intuition that 
Chengsong
parents: 557
diff changeset
  1404
the different ways in which regular expressions are 
Chengsong
parents: 557
diff changeset
  1405
nested do not matter under $\rsimp{}$:
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1406
\begin{center}
558
Chengsong
parents: 557
diff changeset
  1407
	$\rsimp{r} \stackrel{?}{\sequal} \rsimp{r'}$ if $r = \sum [r_1, r_2, r_3, \ldots]$ 
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1408
	and $r' =(\ldots ((r_1 + r_2) + r_3) + \ldots)$
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1409
\end{center}
558
Chengsong
parents: 557
diff changeset
  1410
Simply wrap with $\sum$ constructor and add 
Chengsong
parents: 557
diff changeset
  1411
simplifications to both sides of \ref{seqSfau0}
Chengsong
parents: 557
diff changeset
  1412
and one gets
Chengsong
parents: 557
diff changeset
  1413
\begin{corollary}\label{seqClosedFormGeneral}
Chengsong
parents: 557
diff changeset
  1414
	$\rsimp{\sflat{(r_1 \cdot r_2) \backslash s} }
Chengsong
parents: 557
diff changeset
  1415
	=\rsimp{(\sum (  (r_1 \backslash s) \cdot r_2 :: 
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1416
	\map\; (r_2 \backslash \_) \; (\vsuf{s}{r_1})))}$
558
Chengsong
parents: 557
diff changeset
  1417
\end{corollary}
Chengsong
parents: 557
diff changeset
  1418
Together with the idempotency property of $\rsimp{}$ (lemma \ref{rsimpIdem}),
Chengsong
parents: 557
diff changeset
  1419
it is possible to convert the above lemma to obtain a "closed form"
Chengsong
parents: 557
diff changeset
  1420
for  derivatives nested with simplification:
Chengsong
parents: 557
diff changeset
  1421
\begin{lemma}\label{seqClosedForm}
Chengsong
parents: 557
diff changeset
  1422
	$\rderssimp{(r_1 \cdot r_2)}{s} = \rsimp{(\sum ((r_1 \backslash s) \cdot r_2 ) 
Chengsong
parents: 557
diff changeset
  1423
	:: (\map \; (r_2 \backslash \_) (\vsuf{s}{r_1})))}$
Chengsong
parents: 557
diff changeset
  1424
\end{lemma}
Chengsong
parents: 557
diff changeset
  1425
\begin{proof}
Chengsong
parents: 557
diff changeset
  1426
	By a case analysis of string $s$.
Chengsong
parents: 557
diff changeset
  1427
	When $s$ is empty list, the rewrite is straightforward.
Chengsong
parents: 557
diff changeset
  1428
	When $s$ is a list, one could use the corollary \ref{seqSfau0},
Chengsong
parents: 557
diff changeset
  1429
	and lemma \ref{Simpders} to rewrite the left-hand-side.
Chengsong
parents: 557
diff changeset
  1430
\end{proof}
Chengsong
parents: 557
diff changeset
  1431
As a corollary for this closed form, one can estimate the size 
Chengsong
parents: 557
diff changeset
  1432
of the sequence derivative $r_1 \cdot r_2 \backslash_r s$ using 
Chengsong
parents: 557
diff changeset
  1433
an easier-to-handle expression:
Chengsong
parents: 557
diff changeset
  1434
\begin{corollary}\label{seqEstimate1}
Chengsong
parents: 557
diff changeset
  1435
	\begin{center}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1436
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1437
		$\llbracket \rderssimp{(r_1 \cdot r_2)}{s} \rrbracket_r = \llbracket \rsimp{(\sum ((r_1 \backslash s) \cdot r_2 ) 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1438
		:: (\map \; (r_2 \backslash \_) (\vsuf{s}{r_1})))} \rrbracket_r$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1439
558
Chengsong
parents: 557
diff changeset
  1440
	\end{center}
Chengsong
parents: 557
diff changeset
  1441
\end{corollary}
Chengsong
parents: 557
diff changeset
  1442
\noindent
Chengsong
parents: 557
diff changeset
  1443
\subsection{Closed Forms for Star Regular Expressions}
564
Chengsong
parents: 562
diff changeset
  1444
We have shown how to control the size of the sequence regular expression $r_1\cdot r_2$ using
Chengsong
parents: 562
diff changeset
  1445
the "closed form" of $(r_1 \cdot r_2) \backslash s$ and then 
Chengsong
parents: 562
diff changeset
  1446
the property of the $\distinct$ function.
Chengsong
parents: 562
diff changeset
  1447
Now we try to get a bound on $r^* \backslash s$ as well.
Chengsong
parents: 562
diff changeset
  1448
Again, we first look at how a star's derivatives evolve, if they grow maximally: 
Chengsong
parents: 562
diff changeset
  1449
\begin{center}
Chengsong
parents: 562
diff changeset
  1450
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1451
	$r^* \quad \longrightarrow_{\backslash c}  \quad   (r\backslash c)  \cdot  r^* \quad \longrightarrow_{\backslash c'}  \quad
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1452
	r \backslash cc'  \cdot r^* + r \backslash c' \cdot r^*  \quad \longrightarrow_{\backslash c''} \quad 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1453
	(r_1 \backslash cc'c'' \cdot r^* + r \backslash c'') + (r \backslash c'c'' \cdot r^* + r \backslash c'' \cdot r^*)   \quad \longrightarrow_{\backslash c'''}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1454
	\quad \ldots$
564
Chengsong
parents: 562
diff changeset
  1455
Chengsong
parents: 562
diff changeset
  1456
\end{center}
Chengsong
parents: 562
diff changeset
  1457
When we have a string $s = c :: c' :: c'' \ldots$  such that $r \backslash c$, $r \backslash cc'$, $r \backslash c'$, 
Chengsong
parents: 562
diff changeset
  1458
$r \backslash cc'c''$, $r \backslash c'c''$, $r\backslash c''$ etc. are all nullable,
Chengsong
parents: 562
diff changeset
  1459
the number of terms in $r^* \backslash s$ will grow exponentially, causing the size
Chengsong
parents: 562
diff changeset
  1460
of the derivatives $r^* \backslash s$ to grow exponentially, even if we do not 
Chengsong
parents: 562
diff changeset
  1461
count the possible size explosions of $r \backslash c$ themselves.
Chengsong
parents: 562
diff changeset
  1462
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
  1463
Thanks to $\rflts$ and $\rDistinct$, we are able to open up regular expressions like
564
Chengsong
parents: 562
diff changeset
  1464
$(r_1 \backslash cc'c'' \cdot r^* + r \backslash c'') + 
Chengsong
parents: 562
diff changeset
  1465
(r \backslash c'c'' \cdot r^* + r \backslash c'' \cdot r^*) $ 
Chengsong
parents: 562
diff changeset
  1466
into $\RALTS{[r_1 \backslash cc'c'' \cdot r^*, r \backslash c'', 
Chengsong
parents: 562
diff changeset
  1467
r \backslash c'c'' \cdot r^*, r \backslash c'' \cdot r^*]}$
Chengsong
parents: 562
diff changeset
  1468
and then de-duplicate terms of the form $r\backslash s' \cdot r^*$ ($s'$ being a substring of $s$).
Chengsong
parents: 562
diff changeset
  1469
This allows us to use a similar technique as $r_1 \cdot r_2$ case,
Chengsong
parents: 562
diff changeset
  1470
where the crux is to get an equivalent form of 
Chengsong
parents: 562
diff changeset
  1471
$\rderssimp{r^*}{s}$ with shape $\rsimp{\sum rs}$.
Chengsong
parents: 562
diff changeset
  1472
This requires generating 
558
Chengsong
parents: 557
diff changeset
  1473
all possible sub-strings $s'$ of $s$
Chengsong
parents: 557
diff changeset
  1474
such that $r\backslash s' \cdot r^*$ will appear 
Chengsong
parents: 557
diff changeset
  1475
as a term in $(r^*) \backslash s$.
Chengsong
parents: 557
diff changeset
  1476
The first function we define is a single-step
Chengsong
parents: 557
diff changeset
  1477
updating function $\starupdate$, which takes three arguments as input:
Chengsong
parents: 557
diff changeset
  1478
the new character $c$ to take derivative with, 
Chengsong
parents: 557
diff changeset
  1479
the regular expression
Chengsong
parents: 557
diff changeset
  1480
$r$ directly under the star $r^*$, and the
Chengsong
parents: 557
diff changeset
  1481
list of strings $sSet$ for the derivative $r^* \backslash s$ 
Chengsong
parents: 557
diff changeset
  1482
up til this point  
Chengsong
parents: 557
diff changeset
  1483
such that $(r^*) \backslash s = \sum_{s' \in sSet} (r\backslash s') \cdot r^*$ 
Chengsong
parents: 557
diff changeset
  1484
(the equality is not exact, more on this later).
Chengsong
parents: 557
diff changeset
  1485
\begin{center}
Chengsong
parents: 557
diff changeset
  1486
	\begin{tabular}{lcl}
Chengsong
parents: 557
diff changeset
  1487
		$\starupdate \; c \; r \; [] $ & $\dn$ & $[]$\\
Chengsong
parents: 557
diff changeset
  1488
		$\starupdate \; c \; r \; (s :: Ss)$ & $\dn$ & \\
Chengsong
parents: 557
diff changeset
  1489
						     & & $\textit{if} \; 
Chengsong
parents: 557
diff changeset
  1490
						     (\rnullable \; (\rders \; r \; s))$ \\
Chengsong
parents: 557
diff changeset
  1491
						     & & $\textit{then} \;\; (s @ [c]) :: [c] :: (
Chengsong
parents: 557
diff changeset
  1492
						     \starupdate \; c \; r \; Ss)$ \\
Chengsong
parents: 557
diff changeset
  1493
						     & & $\textit{else} \;\; (s @ [c]) :: (
Chengsong
parents: 557
diff changeset
  1494
						     \starupdate \; c \; r \; Ss)$
Chengsong
parents: 557
diff changeset
  1495
	\end{tabular}
Chengsong
parents: 557
diff changeset
  1496
\end{center}
Chengsong
parents: 557
diff changeset
  1497
\noindent
Chengsong
parents: 557
diff changeset
  1498
As a generalisation from characters to strings,
Chengsong
parents: 557
diff changeset
  1499
$\starupdates$ takes a string instead of a character
Chengsong
parents: 557
diff changeset
  1500
as the first input argument, and is otherwise the same
Chengsong
parents: 557
diff changeset
  1501
as $\starupdate$.
Chengsong
parents: 557
diff changeset
  1502
\begin{center}
Chengsong
parents: 557
diff changeset
  1503
	\begin{tabular}{lcl}
Chengsong
parents: 557
diff changeset
  1504
		$\starupdates \; [] \; r \; Ss$ & $=$ & $Ss$\\
Chengsong
parents: 557
diff changeset
  1505
		$\starupdates \; (c :: cs) \; r \; Ss$ &  $=$ &  $\starupdates \; cs \; r \; (
Chengsong
parents: 557
diff changeset
  1506
		\starupdate \; c \; r \; Ss)$
Chengsong
parents: 557
diff changeset
  1507
	\end{tabular}
Chengsong
parents: 557
diff changeset
  1508
\end{center}
Chengsong
parents: 557
diff changeset
  1509
\noindent
Chengsong
parents: 557
diff changeset
  1510
For the star regular expression,
Chengsong
parents: 557
diff changeset
  1511
its derivatives can be seen as  a nested gigantic
Chengsong
parents: 557
diff changeset
  1512
alternative similar to that of sequence regular expression's derivatives, 
Chengsong
parents: 557
diff changeset
  1513
and therefore need
Chengsong
parents: 557
diff changeset
  1514
to be ``straightened out" as well.
Chengsong
parents: 557
diff changeset
  1515
The function for this would be $\hflat{}$ and $\hflataux{}$.
Chengsong
parents: 557
diff changeset
  1516
\begin{center}
Chengsong
parents: 557
diff changeset
  1517
	\begin{tabular}{lcl}
Chengsong
parents: 557
diff changeset
  1518
		$\hflataux{r_1 + r_2}$ & $\dn$ & $\hflataux{r_1} @ \hflataux{r_2}$\\
Chengsong
parents: 557
diff changeset
  1519
		$\hflataux{r}$ & $\dn$ & $[r]$
Chengsong
parents: 557
diff changeset
  1520
	\end{tabular}
Chengsong
parents: 557
diff changeset
  1521
\end{center}
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1522
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1523
\begin{center}
558
Chengsong
parents: 557
diff changeset
  1524
	\begin{tabular}{lcl}
Chengsong
parents: 557
diff changeset
  1525
		$\hflat{r_1 + r_2}$ & $\dn$ & $\sum (\hflataux {r_1} @ \hflataux {r_2}) $\\
Chengsong
parents: 557
diff changeset
  1526
		$\hflat{r}$ & $\dn$ & $r$
Chengsong
parents: 557
diff changeset
  1527
	\end{tabular}
Chengsong
parents: 557
diff changeset
  1528
\end{center}
Chengsong
parents: 557
diff changeset
  1529
\noindent
Chengsong
parents: 557
diff changeset
  1530
%MAYBE TODO: introduce createdByStar
564
Chengsong
parents: 562
diff changeset
  1531
Again these definitions are tailor-made for dealing with alternatives that have
Chengsong
parents: 562
diff changeset
  1532
originated from a star's derivatives, so we do not attempt to open up all possible 
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
  1533
regular expressions of the form $\RALTS{rs}$, where $\textit{rs}$ might not contain precisely 2
564
Chengsong
parents: 562
diff changeset
  1534
elements.
Chengsong
parents: 562
diff changeset
  1535
We give a predicate for such "star-created" regular expressions:
Chengsong
parents: 562
diff changeset
  1536
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1537
	\begin{tabular}{lcr}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1538
	 &    &       $\createdByStar{(\RSEQ{ra}{\RSTAR{rb}}) }$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1539
		$\createdByStar{r_1} \land \createdByStar{r_2} $ & $ \Longrightarrow$ & $\createdByStar{(r_1 + r_2)}$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1540
	\end{tabular}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1541
\end{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1542
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1543
These definitions allows us the flexibility to talk about 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1544
regular expressions in their most convenient format,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1545
for example, flattened out $\RALTS{[r_1, r_2, \ldots, r_n]} $
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1546
instead of binary-nested: $((r_1 + r_2) + (r_3 + r_4)) + \ldots$.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1547
These definitions help express that certain classes of syntatically 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1548
distinct regular expressions are actually the same under simplification.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1549
This is not entirely true for annotated regular expressions: 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1550
%TODO: bsimp bders \neq bderssimp
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1551
\begin{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1552
	$(1+ (c\cdot \ASEQ{bs}{c^*}{c} ))$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1553
\end{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1554
For bit-codes, the order in which simplification is applied
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1555
might cause a difference in the location they are placed.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1556
If we want something like
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1557
\begin{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1558
	$\bderssimp{r}{s} \myequiv \bsimp{\bders{r}{s}}$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1559
\end{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1560
Some "canonicalization" procedure is required,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1561
which either pushes all the common bitcodes to nodes
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1562
as senior as possible:
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1563
\begin{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1564
	$_{bs}(_{bs_1 @ bs'}r_1 + _{bs_1 @ bs''}r_2) \rightarrow _{bs @ bs_1}(_{bs'}r_1 + _{bs''}r_2) $
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1565
\end{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1566
or does the reverse. However bitcodes are not of interest if we are talking about
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1567
the $\llbracket r \rrbracket$ size of a regex.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1568
Therefore for the ease and simplicity of producing a
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1569
proof for a size bound, we are happy to restrict ourselves to 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1570
unannotated regular expressions, and obtain such equalities as
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1571
\begin{lemma}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1572
	$\rsimp{r_1 + r_2} = \rsimp{\RALTS{\hflataux{r_1} @ \hflataux{r_2}}}$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1573
\end{lemma}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1574
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1575
\begin{proof}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1576
	By using the rewriting relation $\rightsquigarrow$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1577
\end{proof}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1578
%TODO: rsimp sflat
564
Chengsong
parents: 562
diff changeset
  1579
And from this we obtain a proof that a star's derivative will be the same
Chengsong
parents: 562
diff changeset
  1580
as if it had all its nested alternatives created during deriving being flattened out:
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1581
For example,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1582
\begin{lemma}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1583
	$\createdByStar{r} \implies \rsimp{r} = \rsimp{\RALTS{\hflataux{r}}}$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1584
\end{lemma}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1585
\begin{proof}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1586
	By structural induction on $r$, where the induction rules are these of $\createdByStar{_}$.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1587
\end{proof}
564
Chengsong
parents: 562
diff changeset
  1588
% The simplification of a flattened out regular expression, provided it comes
Chengsong
parents: 562
diff changeset
  1589
%from the derivative of a star, is the same as the one nested.
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1590
564
Chengsong
parents: 562
diff changeset
  1591
Chengsong
parents: 562
diff changeset
  1592
558
Chengsong
parents: 557
diff changeset
  1593
We first introduce an inductive property
Chengsong
parents: 557
diff changeset
  1594
for $\starupdate$ and $\hflataux{\_}$, 
Chengsong
parents: 557
diff changeset
  1595
it says if we do derivatives of $r^*$
Chengsong
parents: 557
diff changeset
  1596
with a string that starts with $c$,
Chengsong
parents: 557
diff changeset
  1597
then flatten it out,
Chengsong
parents: 557
diff changeset
  1598
we obtain a list
Chengsong
parents: 557
diff changeset
  1599
of the shape $\sum_{s' \in sSet} (r\backslash_r s') \cdot r^*$,
Chengsong
parents: 557
diff changeset
  1600
where $sSet = \starupdates \; s \; r \; [[c]]$.
Chengsong
parents: 557
diff changeset
  1601
\begin{lemma}\label{starHfauInduct}
Chengsong
parents: 557
diff changeset
  1602
	$\hflataux{(\rders{( (\rder{c}{r_0})\cdot(r_0^*))}{s})} = 
Chengsong
parents: 557
diff changeset
  1603
	\map \; (\lambda s_1. (r_0 \backslash_r s_1) \cdot (r_0^*)) \; 
Chengsong
parents: 557
diff changeset
  1604
	(\starupdates \; s \; r_0 \; [[c]])$
Chengsong
parents: 557
diff changeset
  1605
\end{lemma}
Chengsong
parents: 557
diff changeset
  1606
\begin{proof}
Chengsong
parents: 557
diff changeset
  1607
	By an induction on $s$, the inductive cases
Chengsong
parents: 557
diff changeset
  1608
	being $[]$ and $s@[c]$.
Chengsong
parents: 557
diff changeset
  1609
\end{proof}
Chengsong
parents: 557
diff changeset
  1610
\noindent
Chengsong
parents: 557
diff changeset
  1611
Here is a corollary that states the lemma in
Chengsong
parents: 557
diff changeset
  1612
a more intuitive way:
Chengsong
parents: 557
diff changeset
  1613
\begin{corollary}
Chengsong
parents: 557
diff changeset
  1614
	$\hflataux{r^* \backslash_r (c::xs)} = \map \; (\lambda s. (r \backslash_r s) \cdot
Chengsong
parents: 557
diff changeset
  1615
	(r^*))\; (\starupdates \; c\; r\; [[c]])$
Chengsong
parents: 557
diff changeset
  1616
\end{corollary}
Chengsong
parents: 557
diff changeset
  1617
\noindent
Chengsong
parents: 557
diff changeset
  1618
Note that this is also agnostic of the simplification
Chengsong
parents: 557
diff changeset
  1619
function we defined, and is therefore of more general interest.
Chengsong
parents: 557
diff changeset
  1620
Chengsong
parents: 557
diff changeset
  1621
Now adding the $\rsimp{}$ bit for closed forms,
Chengsong
parents: 557
diff changeset
  1622
we have
Chengsong
parents: 557
diff changeset
  1623
\begin{lemma}
Chengsong
parents: 557
diff changeset
  1624
	$a :: rs \grewrites \hflataux{a} @ rs$
Chengsong
parents: 557
diff changeset
  1625
\end{lemma}
Chengsong
parents: 557
diff changeset
  1626
\noindent
Chengsong
parents: 557
diff changeset
  1627
giving us
Chengsong
parents: 557
diff changeset
  1628
\begin{lemma}\label{cbsHfauRsimpeq1}
Chengsong
parents: 557
diff changeset
  1629
	$\rsimp{a+b} = \rsimp{(\sum \hflataux{a} @ \hflataux{b})}$.
Chengsong
parents: 557
diff changeset
  1630
\end{lemma}
Chengsong
parents: 557
diff changeset
  1631
\noindent
Chengsong
parents: 557
diff changeset
  1632
This yields
Chengsong
parents: 557
diff changeset
  1633
\begin{lemma}\label{hfauRsimpeq2}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1634
	$\rsimp{r} = \rsimp{(\sum \hflataux{r})}$
558
Chengsong
parents: 557
diff changeset
  1635
\end{lemma}
Chengsong
parents: 557
diff changeset
  1636
\noindent
Chengsong
parents: 557
diff changeset
  1637
Together with the rewriting relation
Chengsong
parents: 557
diff changeset
  1638
\begin{lemma}\label{starClosedForm6Hrewrites}
Chengsong
parents: 557
diff changeset
  1639
	$\map \; (\lambda s. (\rsimp{r \backslash_r s}) \cdot (r^*)) \; Ss
Chengsong
parents: 557
diff changeset
  1640
	\scfrewrites
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1641
	\map \; (\lambda s. (\rsimp{r \backslash_r s}) \cdot (r^*)) \; Ss$
558
Chengsong
parents: 557
diff changeset
  1642
\end{lemma}
Chengsong
parents: 557
diff changeset
  1643
\noindent
Chengsong
parents: 557
diff changeset
  1644
We obtain the closed form for star regular expression:
Chengsong
parents: 557
diff changeset
  1645
\begin{lemma}\label{starClosedForm}
Chengsong
parents: 557
diff changeset
  1646
	$\rderssimp{r^*}{c::s} = 
Chengsong
parents: 557
diff changeset
  1647
	\rsimp{
Chengsong
parents: 557
diff changeset
  1648
		(\sum (\map \; (\lambda s. (\rderssimp{r}{s})\cdot r^*) \; 
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1649
		(\starupdates \; s\; r \; [[c]])
558
Chengsong
parents: 557
diff changeset
  1650
		)
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1651
		)
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1652
	}
558
Chengsong
parents: 557
diff changeset
  1653
	$
Chengsong
parents: 557
diff changeset
  1654
\end{lemma}
Chengsong
parents: 557
diff changeset
  1655
\begin{proof}
Chengsong
parents: 557
diff changeset
  1656
	By an induction on $s$.
Chengsong
parents: 557
diff changeset
  1657
	The lemmas \ref{rsimpIdem}, \ref{starHfauInduct}, and \ref{hfauRsimpeq2}
Chengsong
parents: 557
diff changeset
  1658
	are used.	
Chengsong
parents: 557
diff changeset
  1659
\end{proof}
Chengsong
parents: 557
diff changeset
  1660
\section{Estimating the Closed Forms' sizes}
Chengsong
parents: 557
diff changeset
  1661
We now summarize the closed forms below:
Chengsong
parents: 557
diff changeset
  1662
\begin{itemize}
Chengsong
parents: 557
diff changeset
  1663
	\item
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1664
		$\rderssimp{(\sum rs)}{s} \sequal
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1665
		\sum \; (\map \; (\rderssimp{\_}{s}) \; rs)$
558
Chengsong
parents: 557
diff changeset
  1666
	\item
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1667
		$\rderssimp{(r_1 \cdot r_2)}{s} \sequal \sum ((r_1 \backslash s) \cdot r_2 ) 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1668
		:: (\map \; (r_2 \backslash \_) (\vsuf{s}{r_1}))$
558
Chengsong
parents: 557
diff changeset
  1669
	\item
Chengsong
parents: 557
diff changeset
  1670
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1671
		$\rderssimp{r^*}{c::s} = 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1672
		\rsimp{
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1673
			(\sum (\map \; (\lambda s. (\rderssimp{r}{s})\cdot r^*) \; 
558
Chengsong
parents: 557
diff changeset
  1674
			(\starupdates \; s\; r \; [[c]])
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1675
			)
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1676
			)
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1677
		}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1678
		$
558
Chengsong
parents: 557
diff changeset
  1679
\end{itemize}	
Chengsong
parents: 557
diff changeset
  1680
\noindent	
Chengsong
parents: 557
diff changeset
  1681
The closed forms on the left-hand-side
Chengsong
parents: 557
diff changeset
  1682
are all of the same shape: $\rsimp{ (\sum rs)} $.
Chengsong
parents: 557
diff changeset
  1683
Such regular expression will be bounded by the size of $\sum rs'$, 
Chengsong
parents: 557
diff changeset
  1684
where every element in $rs'$ is distinct, and each element 
Chengsong
parents: 557
diff changeset
  1685
can be described by some inductive sub-structures 
Chengsong
parents: 557
diff changeset
  1686
(for example when $r = r_1 \cdot r_2$ then $rs'$ 
Chengsong
parents: 557
diff changeset
  1687
will be solely comprised of $r_1 \backslash s'$ 
Chengsong
parents: 557
diff changeset
  1688
and $r_2 \backslash s''$, $s'$ and $s''$ being 
Chengsong
parents: 557
diff changeset
  1689
sub-strings of $s$).
Chengsong
parents: 557
diff changeset
  1690
which will each have a size uppder bound 
Chengsong
parents: 557
diff changeset
  1691
according to inductive hypothesis, which controls $r \backslash s$.
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1692
558
Chengsong
parents: 557
diff changeset
  1693
We elaborate the above reasoning by a series of lemmas
Chengsong
parents: 557
diff changeset
  1694
below, where straightforward proofs are omitted.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1695
\begin{lemma}
558
Chengsong
parents: 557
diff changeset
  1696
	If $\forall r \in rs. \rsize{r} $ is less than or equal to $N$,
Chengsong
parents: 557
diff changeset
  1697
	and $\textit{length} \; rs$ is less than or equal to $l$,
Chengsong
parents: 557
diff changeset
  1698
	then $\rsize{\sum rs}$ is less than or equal to $l*N + 1$.
Chengsong
parents: 557
diff changeset
  1699
\end{lemma}
Chengsong
parents: 557
diff changeset
  1700
\noindent
Chengsong
parents: 557
diff changeset
  1701
If we define all regular expressions with size no
Chengsong
parents: 557
diff changeset
  1702
more than $N$ as $\sizeNregex \; N$:
Chengsong
parents: 557
diff changeset
  1703
\[
Chengsong
parents: 557
diff changeset
  1704
	\sizeNregex \; N \dn  \{r \mid \rsize{r} \leq N \}
Chengsong
parents: 557
diff changeset
  1705
\]
Chengsong
parents: 557
diff changeset
  1706
Then such set is finite:
Chengsong
parents: 557
diff changeset
  1707
\begin{lemma}\label{finiteSizeN}
Chengsong
parents: 557
diff changeset
  1708
	$\textit{isFinite}\; (\sizeNregex \; N)$
Chengsong
parents: 557
diff changeset
  1709
\end{lemma}
Chengsong
parents: 557
diff changeset
  1710
\begin{proof}
Chengsong
parents: 557
diff changeset
  1711
	By overestimating the set $\sizeNregex \; N + 1$
Chengsong
parents: 557
diff changeset
  1712
	using union of sets like
Chengsong
parents: 557
diff changeset
  1713
	$\{r_1 \cdot r_2 \mid r_1 \in A
Chengsong
parents: 557
diff changeset
  1714
		\text{and}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1715
	r_2 \in A\}
558
Chengsong
parents: 557
diff changeset
  1716
	$ where $A = \sizeNregex \; N$.
Chengsong
parents: 557
diff changeset
  1717
\end{proof}
Chengsong
parents: 557
diff changeset
  1718
\noindent
Chengsong
parents: 557
diff changeset
  1719
From this we get a corollary that
Chengsong
parents: 557
diff changeset
  1720
if forall $r \in rs$, $\rsize{r} \leq N$, then the output of 
Chengsong
parents: 557
diff changeset
  1721
$\rdistinct{rs}{\varnothing}$ is a list of regular
Chengsong
parents: 557
diff changeset
  1722
expressions of finite size depending on $N$ only. 
561
486fb297ac7c more done
Chengsong
parents: 559
diff changeset
  1723
\begin{corollary}\label{finiteSizeNCorollary}
558
Chengsong
parents: 557
diff changeset
  1724
	Assumes that for all $r \in rs. \rsize{r} \leq N$,
Chengsong
parents: 557
diff changeset
  1725
	and the cardinality of $\sizeNregex \; N$ is $c_N$
Chengsong
parents: 557
diff changeset
  1726
	then$\rsize{\rdistinct{rs}{\varnothing}} \leq c*N$.
Chengsong
parents: 557
diff changeset
  1727
\end{corollary}
Chengsong
parents: 557
diff changeset
  1728
\noindent
Chengsong
parents: 557
diff changeset
  1729
We have proven that the output of $\rdistinct{rs'}{\varnothing}$
Chengsong
parents: 557
diff changeset
  1730
is bounded by a constant $c_N$ depending only on $N$,
Chengsong
parents: 557
diff changeset
  1731
provided that each of $rs'$'s element
Chengsong
parents: 557
diff changeset
  1732
is bounded by $N$.
Chengsong
parents: 557
diff changeset
  1733
We want to apply it to our setting $\rsize{\rsimp{\sum rs}}$.
Chengsong
parents: 557
diff changeset
  1734
Chengsong
parents: 557
diff changeset
  1735
We show how $\rdistinct$ and $\rflts$
Chengsong
parents: 557
diff changeset
  1736
in the simplification function together is at least as 
Chengsong
parents: 557
diff changeset
  1737
good as $\rdistinct{}{}$ alone.
Chengsong
parents: 557
diff changeset
  1738
\begin{lemma}\label{interactionFltsDB}
Chengsong
parents: 557
diff changeset
  1739
	$\llbracket \rdistinct{(\rflts \; \textit{rs})}{\varnothing} \rrbracket_r 
Chengsong
parents: 557
diff changeset
  1740
	\leq 
Chengsong
parents: 557
diff changeset
  1741
	\llbracket \rdistinct{rs}{\varnothing}  \rrbracket_r  $.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1742
\end{lemma}
558
Chengsong
parents: 557
diff changeset
  1743
\noindent
Chengsong
parents: 557
diff changeset
  1744
The intuition is that if we remove duplicates from the $\textit{LHS}$, at least the same amount of 
Chengsong
parents: 557
diff changeset
  1745
duplicates will be removed from the list $\textit{rs}$ in the $\textit{RHS}$. 
Chengsong
parents: 557
diff changeset
  1746
Chengsong
parents: 557
diff changeset
  1747
Now this $\rsimp{\sum rs}$ can be estimated using $\rdistinct{rs}{\varnothing}$:
Chengsong
parents: 557
diff changeset
  1748
\begin{lemma}\label{altsSimpControl}
Chengsong
parents: 557
diff changeset
  1749
	$\rsize{\rsimp{\sum rs}} \leq \rsize{\rdistinct{rs}{\varnothing}}+ 1$
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1750
\end{lemma}
558
Chengsong
parents: 557
diff changeset
  1751
\begin{proof}
Chengsong
parents: 557
diff changeset
  1752
	By using \ref{interactionFltsDB}.
Chengsong
parents: 557
diff changeset
  1753
\end{proof}
Chengsong
parents: 557
diff changeset
  1754
\noindent
Chengsong
parents: 557
diff changeset
  1755
which says that the size of regular expression
Chengsong
parents: 557
diff changeset
  1756
is always smaller if we apply the full simplification
Chengsong
parents: 557
diff changeset
  1757
rather than just one component ($\rdistinct{}{}$).
Chengsong
parents: 557
diff changeset
  1758
Chengsong
parents: 557
diff changeset
  1759
Chengsong
parents: 557
diff changeset
  1760
Now we are ready to control the sizes of
Chengsong
parents: 557
diff changeset
  1761
$r_1 \cdot r_2 \backslash s$, $r^* \backslash s$.
Chengsong
parents: 557
diff changeset
  1762
\begin{theorem}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1763
	For any regex $r$, $\exists N_r. \forall s. \; \rsize{\rderssimp{r}{s}} \leq N_r$
558
Chengsong
parents: 557
diff changeset
  1764
\end{theorem}
Chengsong
parents: 557
diff changeset
  1765
\noindent
Chengsong
parents: 557
diff changeset
  1766
\begin{proof}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1767
	We prove this by induction on $r$. The base cases for $\RZERO$,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1768
	$\RONE $ and $\RCHAR{c}$ are straightforward. 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1769
	In the sequence $r_1 \cdot r_2$ case,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1770
	the inductive hypotheses state 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1771
	$\exists N_1. \forall s. \; \llbracket \rderssimp{r}{s} \rrbracket \leq N_1$ and
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1772
	$\exists N_2. \forall s. \; \llbracket \rderssimp{r_2}{s} \rrbracket \leq N_2$. 
562
Chengsong
parents: 561
diff changeset
  1773
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1774
	When the string $s$ is not empty, we can reason as follows
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1775
	%
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1776
	\begin{center}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1777
		\begin{tabular}{lcll}
558
Chengsong
parents: 557
diff changeset
  1778
& & $ \llbracket   \rderssimp{r_1\cdot r_2 }{s} \rrbracket_r $\\
561
486fb297ac7c more done
Chengsong
parents: 559
diff changeset
  1779
& $ = $ & $\llbracket \rsimp{(\sum(r_1 \backslash_{rsimp} s \cdot r_2 \; \;  :: \; \; 
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1780
		\map \; (r_2\backslash_{rsimp} \_)\; (\vsuf{s}{r})))} \rrbracket_r $ & (1) \\			
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1781
										     & $\leq$ & $\llbracket \rdistinct{(r_1 \backslash_{rsimp} s \cdot r_2 \; \;  :: \; \; 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1782
	\map \; (r_2\backslash_{rsimp} \_)\; (\vsuf{s}{r}))}{\varnothing} \rrbracket_r  + 1$ & (2) \\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1783
											     & $\leq$ & $2 + N_1 + \rsize{r_2} + (N_2 * (card\;(\sizeNregex \; N_2)))$ & (3)\\
558
Chengsong
parents: 557
diff changeset
  1784
\end{tabular}
Chengsong
parents: 557
diff changeset
  1785
\end{center}
561
486fb297ac7c more done
Chengsong
parents: 559
diff changeset
  1786
\noindent
486fb297ac7c more done
Chengsong
parents: 559
diff changeset
  1787
(1) is by the corollary \ref{seqEstimate1}.
486fb297ac7c more done
Chengsong
parents: 559
diff changeset
  1788
(2) is by \ref{altsSimpControl}.
486fb297ac7c more done
Chengsong
parents: 559
diff changeset
  1789
(3) is by \ref{finiteSizeNCorollary}.
562
Chengsong
parents: 561
diff changeset
  1790
Chengsong
parents: 561
diff changeset
  1791
Chengsong
parents: 561
diff changeset
  1792
Combining the cases when $s = []$ and $s \neq []$, we get (4):
Chengsong
parents: 561
diff changeset
  1793
\begin{center}
Chengsong
parents: 561
diff changeset
  1794
	\begin{tabular}{lcll}
Chengsong
parents: 561
diff changeset
  1795
		$\rsize{(r_1 \cdot r_2) \backslash_r s}$ & $\leq$ & 
Chengsong
parents: 561
diff changeset
  1796
		$max \; (2 + N_1 + 
Chengsong
parents: 561
diff changeset
  1797
		\llbracket r_2 \rrbracket_r + 
Chengsong
parents: 561
diff changeset
  1798
		N_2 * (card\; (\sizeNregex \; N_2))) \; \rsize{r_1\cdot r_2}$ & (4)
Chengsong
parents: 561
diff changeset
  1799
	\end{tabular}
Chengsong
parents: 561
diff changeset
  1800
\end{center}
558
Chengsong
parents: 557
diff changeset
  1801
562
Chengsong
parents: 561
diff changeset
  1802
We reason similarly for  $\STAR$.
Chengsong
parents: 561
diff changeset
  1803
The inductive hypothesis is
Chengsong
parents: 561
diff changeset
  1804
$\exists N. \forall s. \; \llbracket \rderssimp{r}{s} \rrbracket \leq N$.
564
Chengsong
parents: 562
diff changeset
  1805
Let $n_r = \llbracket r^* \rrbracket_r$.
562
Chengsong
parents: 561
diff changeset
  1806
When $s = c :: cs$ is not empty,
Chengsong
parents: 561
diff changeset
  1807
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1808
	\begin{tabular}{lcll}
562
Chengsong
parents: 561
diff changeset
  1809
& & $ \llbracket   \rderssimp{r^* }{c::cs} \rrbracket_r $\\
Chengsong
parents: 561
diff changeset
  1810
& $ = $ & $\llbracket \rsimp{(\sum (\map \; (\lambda s. (r \backslash_{rsimp} s) \cdot r^*) \; (\starupdates\; 
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1811
	cs \; r \; [[c]] )) )} \rrbracket_r $ & (5) \\			
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1812
					      & $\leq$ & $\llbracket 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1813
					      \rdistinct{
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1814
						      (\map \; 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1815
						      (\lambda s. (r \backslash_{rsimp} s) \cdot r^*) \; 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1816
						      (\starupdates\; cs \; r \; [[c]] )
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1817
					      )}
562
Chengsong
parents: 561
diff changeset
  1818
	{\varnothing} \rrbracket_r  + 1$ & (6) \\
Chengsong
parents: 561
diff changeset
  1819
					 & $\leq$ & $1 + (\textit{card} (\sizeNregex \; (N + n_r)))
Chengsong
parents: 561
diff changeset
  1820
	* (1 + (N + n_r)) $ & (7)\\
Chengsong
parents: 561
diff changeset
  1821
\end{tabular}
Chengsong
parents: 561
diff changeset
  1822
\end{center}
Chengsong
parents: 561
diff changeset
  1823
\noindent
Chengsong
parents: 561
diff changeset
  1824
(5) is by the lemma  \ref{starClosedForm}.
Chengsong
parents: 561
diff changeset
  1825
(6) is by \ref{altsSimpControl}.
Chengsong
parents: 561
diff changeset
  1826
(7) is by \ref{finiteSizeNCorollary}.
Chengsong
parents: 561
diff changeset
  1827
Combining with the case when $s = []$, one gets
Chengsong
parents: 561
diff changeset
  1828
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1829
	\begin{tabular}{lcll}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1830
		$\rsize{r^* \backslash_r s}$ & $\leq$ & $max \; n_r \; 1 + (\textit{card} (\sizeNregex \; (N + n_r)))
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1831
		* (1 + (N + n_r)) $ & (8)\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1832
	\end{tabular}
562
Chengsong
parents: 561
diff changeset
  1833
\end{center}
Chengsong
parents: 561
diff changeset
  1834
\noindent
Chengsong
parents: 561
diff changeset
  1835
Chengsong
parents: 561
diff changeset
  1836
The alternative case is slightly less involved.
Chengsong
parents: 561
diff changeset
  1837
The inductive hypothesis 
Chengsong
parents: 561
diff changeset
  1838
is equivalent to $\exists N. \forall r \in (\map \; (\_ \backslash_r s) \; rs). \rsize{r} \leq N$.
Chengsong
parents: 561
diff changeset
  1839
In the case when $s = c::cs$, we have 
Chengsong
parents: 561
diff changeset
  1840
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1841
	\begin{tabular}{lcll}
562
Chengsong
parents: 561
diff changeset
  1842
& & $ \llbracket   \rderssimp{\sum rs }{c::cs} \rrbracket_r $\\
Chengsong
parents: 561
diff changeset
  1843
& $ = $ & $\llbracket \rsimp{(\sum (\map \; (\_ \backslash_{rsimp} s)  \; rs) )} \rrbracket_r $ & (9) \\			
Chengsong
parents: 561
diff changeset
  1844
& $\leq$ & $\llbracket (\sum (\map \; (\_ \backslash_{rsimp} s)  \; rs) ) \rrbracket_r $  & (10) \\
Chengsong
parents: 561
diff changeset
  1845
& $\leq$ & $1 + N * (length \; rs) $ & (11)\\
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1846
	\end{tabular}
562
Chengsong
parents: 561
diff changeset
  1847
\end{center}
Chengsong
parents: 561
diff changeset
  1848
\noindent
Chengsong
parents: 561
diff changeset
  1849
(9) is by \ref{altsClosedForm}, (10) by \ref{rsimpSize} and (11) by inductive hypothesis.
Chengsong
parents: 561
diff changeset
  1850
Chengsong
parents: 561
diff changeset
  1851
Combining with the case when $s = []$, one gets
Chengsong
parents: 561
diff changeset
  1852
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1853
	\begin{tabular}{lcll}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1854
		$\rsize{\sum rs \backslash_r s}$ & $\leq$ & $max \; \rsize{\sum rs} \; 1+N*(length \; rs)$ 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1855
						 & (12)\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1856
	\end{tabular}
562
Chengsong
parents: 561
diff changeset
  1857
\end{center}
Chengsong
parents: 561
diff changeset
  1858
(4), (8), and (12) are all the inductive cases proven.
558
Chengsong
parents: 557
diff changeset
  1859
\end{proof}
Chengsong
parents: 557
diff changeset
  1860
564
Chengsong
parents: 562
diff changeset
  1861
Chengsong
parents: 562
diff changeset
  1862
\begin{corollary}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1863
	For any regex $a$, $\exists N_r. \forall s. \; \rsize{\bderssimp{a}{s}} \leq N_r$
564
Chengsong
parents: 562
diff changeset
  1864
\end{corollary}
Chengsong
parents: 562
diff changeset
  1865
\begin{proof}
Chengsong
parents: 562
diff changeset
  1866
	By \ref{sizeRelations}.
Chengsong
parents: 562
diff changeset
  1867
\end{proof}
558
Chengsong
parents: 557
diff changeset
  1868
\noindent
Chengsong
parents: 557
diff changeset
  1869
Chengsong
parents: 557
diff changeset
  1870
%-----------------------------------
Chengsong
parents: 557
diff changeset
  1871
%	SECTION 2
Chengsong
parents: 557
diff changeset
  1872
%-----------------------------------
Chengsong
parents: 557
diff changeset
  1873
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1874
557
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1875
%----------------------------------------------------------------------------------------
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1876
%	SECTION 3
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1877
%----------------------------------------------------------------------------------------
812e5d112f49 more changes
Chengsong
parents: 556
diff changeset
  1878
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1879
554
Chengsong
parents: 553
diff changeset
  1880
\subsection{A Closed Form for the Sequence Regular Expression}
Chengsong
parents: 553
diff changeset
  1881
\noindent
Chengsong
parents: 553
diff changeset
  1882
Chengsong
parents: 553
diff changeset
  1883
Before we get to the proof that says the intermediate result of our lexer will
Chengsong
parents: 553
diff changeset
  1884
remain finitely bounded, which is an important efficiency/liveness guarantee,
Chengsong
parents: 553
diff changeset
  1885
we shall first develop a few preparatory properties and definitions to 
Chengsong
parents: 553
diff changeset
  1886
make the process of proving that a breeze.
Chengsong
parents: 553
diff changeset
  1887
Chengsong
parents: 553
diff changeset
  1888
We define rewriting relations for $\rrexp$s, which allows us to do the 
Chengsong
parents: 553
diff changeset
  1889
same trick as we did for the correctness proof,
Chengsong
parents: 553
diff changeset
  1890
but this time we will have stronger equalities established.
Chengsong
parents: 553
diff changeset
  1891
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1892
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1893
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1894
What guarantee does this bound give us?
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1895
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1896
Whatever the regex is, it will not grow indefinitely.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1897
Take our previous example $(a + aa)^*$ as an example:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1898
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1899
	\begin{tabular}{@{}c@{\hspace{0mm}}c@{\hspace{0mm}}c@{}}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1900
		\begin{tikzpicture}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1901
			\begin{axis}[
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1902
				xlabel={number of $a$'s},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1903
				x label style={at={(1.05,-0.05)}},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1904
				ylabel={regex size},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1905
				enlargelimits=false,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1906
				xtick={0,5,...,30},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1907
				xmax=33,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1908
				ymax= 40,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1909
				ytick={0,10,...,40},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1910
				scaled ticks=false,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1911
				axis lines=left,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1912
				width=5cm,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1913
				height=4cm, 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1914
				legend entries={$(a + aa)^*$},  
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1915
				legend pos=north west,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1916
				legend cell align=left]
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1917
				\addplot[red,mark=*, mark options={fill=white}] table {a_aa_star.data};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1918
			\end{axis}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1919
		\end{tikzpicture}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1920
	\end{tabular}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1921
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1922
We are able to limit the size of the regex $(a + aa)^*$'s derivatives
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1923
with our simplification
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1924
rules very effectively.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1925
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1926
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1927
In our proof for the inductive case $r_1 \cdot r_2$, the dominant term in the bound
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1928
is $l_{N_2} * N_2$, where $N_2$ is the bound we have for $\llbracket \bderssimp{r_2}{s} \rrbracket$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1929
Given that $l_{N_2}$ is roughly the size $4^{N_2}$, the size bound $\llbracket \bderssimp{r_1 \cdot r_2}{s} \rrbracket$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1930
inflates the size bound of $\llbracket \bderssimp{r_2}{s} \rrbracket$ with the function
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1931
$f(x) = x * 2^x$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1932
This means the bound we have will surge up at least
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1933
tower-exponentially with a linear increase of the depth.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1934
For a regex of depth $n$, the bound
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1935
would be approximately $4^n$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1936
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1937
Test data in the graphs from randomly generated regular expressions
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1938
shows that the giant bounds are far from being hit.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1939
%a few sample regular experessions' derivatives
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1940
%size change
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
  1941
%TODO: giving regex1_size_change.data showing a few regular expressions' size changes 
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1942
%w;r;t the input characters number, where the size is usually cubic in terms of original size
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1943
%a*, aa*, aaa*, .....
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
  1944
%randomly generated regular expressions
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1945
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1946
	\begin{tabular}{@{}c@{\hspace{0mm}}c@{\hspace{0mm}}c@{}}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1947
		\begin{tikzpicture}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1948
			\begin{axis}[
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1949
				xlabel={number of $a$'s},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1950
				x label style={at={(1.05,-0.05)}},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1951
				ylabel={regex size},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1952
				enlargelimits=false,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1953
				xtick={0,5,...,30},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1954
				xmax=33,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1955
				ymax=1000,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1956
				ytick={0,100,...,1000},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1957
				scaled ticks=false,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1958
				axis lines=left,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1959
				width=5cm,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1960
				height=4cm, 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1961
				legend entries={regex1},  
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1962
				legend pos=north west,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1963
				legend cell align=left]
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1964
				\addplot[red,mark=*, mark options={fill=white}] table {regex1_size_change.data};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1965
			\end{axis}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1966
		\end{tikzpicture}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1967
  &
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1968
  \begin{tikzpicture}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1969
	  \begin{axis}[
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1970
		  xlabel={$n$},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1971
		  x label style={at={(1.05,-0.05)}},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1972
		  %ylabel={time in secs},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1973
		  enlargelimits=false,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1974
		  xtick={0,5,...,30},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1975
		  xmax=33,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1976
		  ymax=1000,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1977
		  ytick={0,100,...,1000},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1978
		  scaled ticks=false,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1979
		  axis lines=left,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1980
		  width=5cm,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1981
		  height=4cm, 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1982
		  legend entries={regex2},  
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1983
		  legend pos=north west,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1984
		  legend cell align=left]
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1985
		  \addplot[blue,mark=*, mark options={fill=white}] table {regex2_size_change.data};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1986
	  \end{axis}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1987
  \end{tikzpicture}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1988
  &
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1989
  \begin{tikzpicture}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1990
	  \begin{axis}[
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1991
		  xlabel={$n$},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1992
		  x label style={at={(1.05,-0.05)}},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1993
		  %ylabel={time in secs},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1994
		  enlargelimits=false,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1995
		  xtick={0,5,...,30},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1996
		  xmax=33,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1997
		  ymax=1000,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1998
		  ytick={0,100,...,1000},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  1999
		  scaled ticks=false,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2000
		  axis lines=left,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2001
		  width=5cm,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2002
		  height=4cm, 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2003
		  legend entries={regex3},  
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2004
		  legend pos=north west,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2005
		  legend cell align=left]
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2006
		  \addplot[cyan,mark=*, mark options={fill=white}] table {regex3_size_change.data};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2007
	  \end{axis}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2008
  \end{tikzpicture}\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2009
  \multicolumn{3}{c}{Graphs: size change of 3 randomly generated regular expressions $w.r.t.$ input string length.}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2010
	\end{tabular}    
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2011
\end{center}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2012
\noindent
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2013
Most of the regex's sizes seem to stay within a polynomial bound $w.r.t$ the 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2014
original size.
591
b2d0de6aee18 more polishing integrated comments chap2
Chengsong
parents: 590
diff changeset
  2015
We will discuss improvements to this bound in the next chapter.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2016
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2017
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2018
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2019
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2020
%	SECTION ??
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2021
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2022
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2023
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2024
%	SECTION syntactic equivalence under simp
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2025
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2026
\section{Syntactic Equivalence Under $\simp$}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2027
We prove that minor differences can be annhilated
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2028
by $\simp$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2029
For example,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2030
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2031
	$\simp \;(\simpALTs\; (\map \;(\_\backslash \; x)\; (\distinct \; \mathit{rs}\; \phi))) = 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2032
	\simp \;(\simpALTs \;(\distinct \;(\map \;(\_ \backslash\; x) \; \mathit{rs}) \; \phi))$
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2033
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2034
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2035
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2036
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2037
%	SECTION ALTS CLOSED FORM
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2038
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2039
\section{A Closed Form for \textit{ALTS}}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2040
Now we prove that  $rsimp (rders\_simp (RALTS rs) s) = rsimp (RALTS (map (\lambda r. rders\_simp r s) rs))$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2041
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2042
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2043
There are a few key steps, one of these steps is
556
Chengsong
parents: 555
diff changeset
  2044
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2045
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2046
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2047
One might want to prove this by something a simple statement like: 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2048
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2049
For this to hold we want the $\textit{distinct}$ function to pick up
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2050
the elements before and after derivatives correctly:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2051
$r \in rset \equiv (rder x r) \in (rder x rset)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2052
which essentially requires that the function $\backslash$ is an injective mapping.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2053
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2054
Unfortunately the function $\backslash c$ is not an injective mapping.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2055
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2056
\subsection{function $\backslash c$ is not injective (1-to-1)}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2057
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2058
	The derivative $w.r.t$ character $c$ is not one-to-one.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2059
	Formally,
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2060
	$\exists r_1 \;r_2. r_1 \neq r_2 \mathit{and} r_1 \backslash c = r_2 \backslash c$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2061
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2062
This property is trivially true for the
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2063
character regex example:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2064
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2065
	$r_1 = e; \; r_2 = d;\; r_1 \backslash c = \ZERO = r_2 \backslash c$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2066
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2067
But apart from the cases where the derivative
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2068
output is $\ZERO$, are there non-trivial results
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2069
of derivatives which contain strings?
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2070
The answer is yes.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2071
For example,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2072
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2073
	Let $r_1 = a^*b\;\quad r_2 = (a\cdot a^*)\cdot b + b$.\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2074
	where $a$ is not nullable.\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2075
	$r_1 \backslash c = ((a \backslash c)\cdot a^*)\cdot c + b \backslash c$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2076
	$r_2 \backslash c = ((a \backslash c)\cdot a^*)\cdot c + b \backslash c$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2077
\end{center}
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
  2078
We start with two syntactically different regular expressions,
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2079
and end up with the same derivative result.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2080
This is not surprising as we have such 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2081
equality as below in the style of Arden's lemma:\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2082
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2083
	$L(A^*B) = L(A\cdot A^* \cdot B + B)$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2084
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2085
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2086
There are two problems with this finiteness result, though.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2087
\begin{itemize}
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2088
	\item
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2089
		First, It is not yet a direct formalisation of our lexer's complexity,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2090
		as a complexity proof would require looking into 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2091
		the time it takes to execute {\bf all} the operations
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2092
		involved in the lexer (simp, collect, decode), not just the derivative.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2093
	\item
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2094
		Second, the bound is not yet tight, and we seek to improve $N_a$ so that
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2095
		it is polynomial on $\llbracket a \rrbracket$.
590
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2096
\end{itemize}
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2097
Still, we believe this contribution is fruitful,
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2098
because
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2099
\begin{itemize}
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2100
	\item
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2101
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2102
		The size proof can serve as a cornerstone for a complexity
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2103
		formalisation.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2104
		Derivatives are the most important phases of our lexer algorithm.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2105
		Size properties about derivatives covers the majority of the algorithm
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2106
		and is therefore a good indication of complexity of the entire program.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2107
	\item
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2108
		The bound is already a strong indication that catastrophic
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2109
		backtracking is much less likely to occur in our $\blexersimp$
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2110
		algorithm.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2111
		We refine $\blexersimp$ with $\blexerStrong$ in the next chapter
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2112
		so that the bound becomes polynomial.
988e92a70704 more chap5 and chap6 bsimp_idem
Chengsong
parents: 577
diff changeset
  2113
\end{itemize}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2114
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2115
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2116
%	SECTION 4
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2117
%----------------------------------------------------------------------------------------
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2118
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2119
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2120
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2121
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2122
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2123
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2124
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2125
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2126
One might wonder the actual bound rather than the loose bound we gave
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2127
for the convenience of an easier proof.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2128
How much can the regex $r^* \backslash s$ grow? 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2129
As  earlier graphs have shown,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2130
%TODO: reference that graph where size grows quickly
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2131
they can grow at a maximum speed
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2132
exponential $w.r.t$ the number of characters, 
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2133
but will eventually level off when the string $s$ is long enough.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2134
If they grow to a size exponential $w.r.t$ the original regex, our algorithm
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2135
would still be slow.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2136
And unfortunately, we have concrete examples
576
3e1b699696b6 thesis chap5
Chengsong
parents: 564
diff changeset
  2137
where such regular expressions grew exponentially large before levelling off:
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2138
$(a ^ * + (aa) ^ * + (aaa) ^ * + \ldots + 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2139
(\underbrace{a \ldots a}_{\text{n a's}})^*$ will already have a maximum
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2140
size that is  exponential on the number $n$ 
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2141
under our current simplification rules:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2142
%TODO: graph of a regex whose size increases exponentially.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2143
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2144
	\begin{tikzpicture}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2145
		\begin{axis}[
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2146
			height=0.5\textwidth,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2147
			width=\textwidth,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2148
			xlabel=number of a's,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2149
			xtick={0,...,9},
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2150
			ylabel=maximum size,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2151
			ymode=log,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2152
			log basis y={2}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2153
			]
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2154
			\addplot[mark=*,blue] table {re-chengsong.data};
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2155
		\end{axis}
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2156
	\end{tikzpicture}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2157
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2158
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2159
For convenience we use $(\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*)^*$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2160
to express $(a ^ * + (aa) ^ * + (aaa) ^ * + \ldots + 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2161
(\underbrace{a \ldots a}_{\text{n a's}})^*$ in the below discussion.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2162
The exponential size is triggered by that the regex
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2163
$\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2164
inside the $(\ldots) ^*$ having exponentially many
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2165
different derivatives, despite those difference being minor.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2166
$(\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*)^*\backslash \underbrace{a \ldots a}_{\text{m a's}}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2167
will therefore contain the following terms (after flattening out all nested 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2168
alternatives):
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2169
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2170
	$(\oplus_{i = 1]{n}  (\underbrace{a \ldots a}_{\text{((i - (m' \% i))\%i) a's}})\cdot  (\underbrace{a \ldots a}_{\text{i a's}})^* })\cdot (\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*)$\\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2171
	$(1 \leq m' \leq m )$
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2172
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2173
These terms are distinct for $m' \leq L.C.M.(1, \ldots, n)$ (will be explained in appendix).
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2174
With each new input character taking the derivative against the intermediate result, more and more such distinct
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2175
terms will accumulate, 
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2176
until the length reaches $L.C.M.(1, \ldots, n)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2177
$\textit{distinctBy}$ will not be able to de-duplicate any two of these terms 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2178
$(\oplus_{i = 1}^{n}  (\underbrace{a \ldots a}_{\text{((i - (m' \% i))\%i) a's}})\cdot  (\underbrace{a \ldots a}_{\text{i a's}})^* )\cdot (\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*)^*$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2179
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2180
$(\oplus_{i = 1}^{n}  (\underbrace{a \ldots a}_{\text{((i - (m'' \% i))\%i) a's}})\cdot  (\underbrace{a \ldots a}_{\text{i a's}})^* )\cdot (\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*)^*$\\
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2181
where $m' \neq m''$ \\
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2182
as they are slightly different.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2183
This means that with our current simplification methods,
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2184
we will not be able to control the derivative so that
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2185
$\llbracket \bderssimp{r}{s} \rrbracket$ stays polynomial %\leq O((\llbracket r\rrbacket)^c)$
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2186
as there are already exponentially many terms.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2187
These terms are similar in the sense that the head of those terms
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2188
are all consisted of sub-terms of the form: 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2189
$(\underbrace{a \ldots a}_{\text{j a's}})\cdot  (\underbrace{a \ldots a}_{\text{i a's}})^* $.
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2190
For  $\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*$, there will be at most
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2191
$n * (n + 1) / 2$ such terms. 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2192
For example, $(a^* + (aa)^* + (aaa)^*) ^*$'s derivatives
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2193
can be described by 6 terms:
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2194
$a^*$, $a\cdot (aa)^*$, $ (aa)^*$, 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2195
$aa \cdot (aaa)^*$, $a \cdot (aaa)^*$, and $(aaa)^*$.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2196
The total number of different "head terms",  $n * (n + 1) / 2$,
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2197
is proportional to the number of characters in the regex 
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2198
$(\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*)^*$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2199
This suggests a slightly different notion of size, which we call the 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2200
alphabetic width:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2201
%TODO:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2202
(TODO: Alphabetic width def.)
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2203
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2204
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2205
Antimirov\parencite{Antimirov95} has proven that 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2206
$\textit{PDER}_{UNIV}(r) \leq \textit{awidth}(r)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2207
where $\textit{PDER}_{UNIV}(r)$ is a set of all possible subterms
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2208
created by doing derivatives of $r$ against all possible strings.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2209
If we can make sure that at any moment in our lexing algorithm our 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2210
intermediate result hold at most one copy of each of the 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2211
subterms then we can get the same bound as Antimirov's.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2212
This leads to the algorithm in the next chapter.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2213
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2214
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2215
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2216
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2217
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2218
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2219
%	SECTION 1
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2220
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2221
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2222
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2223
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2224
%	SUBSECTION 1
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2225
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2226
\subsection{Syntactic Equivalence Under $\simp$}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2227
We prove that minor differences can be annhilated
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2228
by $\simp$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2229
For example,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2230
\begin{center}
593
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2231
	$\simp \;(\simpALTs\; (\map \;(\_\backslash \; x)\; (\distinct \; \mathit{rs}\; \phi))) = 
83fab852d72d more chap5
Chengsong
parents: 591
diff changeset
  2232
	\simp \;(\simpALTs \;(\distinct \;(\map \;(\_ \backslash\; x) \; \mathit{rs}) \; \phi))$
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2233
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  2234