ChengsongTanPhdThesis/Chapters/Finite.tex
author Chengsong
Sun, 26 Jun 2022 22:22:47 +0100
changeset 554 15d182ffbc76
parent 553 0f00d440f484
child 555 aecf1ddf3541
permissions -rwxr-xr-x
more
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
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    10
In this chapter we give a guarantee in terms of time complexity:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    11
given a regular expression $r$, for any string $s$ 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    12
our algorithm's internal data structure is finitely bounded.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    13
Note that it is not immediately obvious that $\llbracket \bderssimp{r}{s} \rrbracket$ (the internal
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    14
data structure used in our $\blexer$)
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    15
is bounded by a constant $N_r$, where $N$ only depends on the regular expression
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    16
$r$, not the string $s$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    17
When doing a time complexity analysis of any 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    18
lexer/parser based on Brzozowski derivatives, one needs to take into account that
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    19
not only the "derivative steps".
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    20
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    21
%TODO: get a grpah for internal data structure growing arbitrary large
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    22
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    23
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    24
To obtain such a proof, we need to 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    25
\begin{itemize}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    26
\item
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    27
Define an new datatype for regular expressions that makes it easy
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    28
to reason about the size of an annotated regular expression.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    29
\item
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    30
A set of equalities for this new datatype that enables one to
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    31
rewrite $\bderssimp{r_1 \cdot r_2}{s}$ and $\bderssimp{r^*}{s}$ etc.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    32
by their children regexes $r_1$, $r_2$, and $r$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    33
\item
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    34
Using those equalities to actually get those rewriting equations, which we call
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    35
"closed forms".
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    36
\item
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    37
Bound the closed forms, thereby bounding the original
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    38
$\blexersimp$'s internal data structures.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    39
\end{itemize}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    40
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    41
\section{the $\mathbf{r}$-rexp datatype and the size functions}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    42
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    43
We have a size function for bitcoded regular expressions, written
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    44
$\llbracket r\rrbracket$, which counts the number of nodes if we regard $r$ as a tree
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    45
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    46
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    47
\begin{tabular}{ccc}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    48
	$\llbracket _{bs}\ONE \rrbracket$ & $\dn$ & $1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    49
	$\llbracket \ZERO \rrbracket$ & $\dn$ & $1$ \\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    50
	$\llbracket _{bs} r_1 \cdot r_2 \rrbracket$ & $\dn$ & $\llbracket r_1 \rrbracket + \llbracket r_2 \rrbracket + 1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    51
$\llbracket _{bs}\mathbf{c} \rrbracket $ & $\dn$ & $1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    52
$\llbracket _{bs}\sum as \rrbracket $ & $\dn$ & $\map \; (\llbracket \_ \rrbracket)\; as   + 1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    53
$\llbracket _{bs} a^* \rrbracket $ & $\dn$ & $\llbracket a \rrbracket + 1$
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    54
\end{tabular}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    55
\end{center}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    56
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    57
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    58
Similarly there is a size function for plain regular expressions:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    59
\begin{center}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    60
\begin{tabular}{ccc}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    61
	$\llbracket \ONE \rrbracket_p$ & $\dn$ & $1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    62
	$\llbracket \ZERO \rrbracket_p$ & $\dn$ & $1$ \\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    63
	$\llbracket r_1 \cdot r_2 \rrbracket_p$ & $\dn$ & $\llbracket r_1 \rrbracket_p + \llbracket r_2 \rrbracket_p + 1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    64
$\llbracket \mathbf{c} \rrbracket_p $ & $\dn$ & $1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    65
$\llbracket r_1 \cdot r_2 \rrbracket_p $ & $\dn$ & $\llbracket r_1 \rrbracket_p \; + \llbracket r_2 \rrbracket_p + 1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    66
$\llbracket a^* \rrbracket_p $ & $\dn$ & $\llbracket a \rrbracket_p + 1$
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    67
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    68
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    69
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    70
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    71
The idea of obatining a bound for $\llbracket \bderssimp{a}{s} \rrbracket$
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    72
is to get an equivalent form
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    73
of something like $\llbracket \bderssimp{a}{s}\rrbracket = f(a, s)$, where $f(a, s)$ 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    74
is easier to estimate than $\llbracket \bderssimp{a}{s}\rrbracket$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    75
We notice that while it is not so clear how to obtain
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    76
a metamorphic representation of $\bderssimp{a}{s}$ (as we argued in chapter \ref{Bitcoded2},
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    77
not interleaving the application of the functions $\backslash$ and $\bsimp{\_}$ 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    78
in the order as our lexer will result in the bit-codes dispensed differently),
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    79
it is possible to get an slightly different representation of the unlifted versions:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    80
$ (\bderssimp{a}{s})_\downarrow = (\erase \; \bsimp{a \backslash s})_\downarrow$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    81
This suggest setting the bounding function $f(a, s)$ as 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    82
$\llbracket  (a \backslash s)_\downarrow \rrbracket_p$, the plain size
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    83
of the erased annotated regular expression.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    84
This requires the the regular expression accompanied by bitcodes
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    85
to have the same size as its plain counterpart after erasure:
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    86
\begin{center}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    87
	$\asize{a} \stackrel{?}{=} \llbracket \erase(a)\rrbracket_p$. 
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    88
\end{center}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    89
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    90
But there is a minor nuisance: 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    91
the erase function unavoidbly messes with the structure of the regular expression,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    92
due to the discrepancy between annotated regular expression's $\sum$ constructor
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    93
and plain regular expression's $+$ constructor having different arity.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    94
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    95
\begin{tabular}{ccc}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    96
$\erase \; _{bs}\sum [] $ & $\dn$ & $\ZERO$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    97
$\erase \; _{bs}\sum [a]$ & $\dn$ & $a$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
    98
$\erase \; _{bs}\sum a :: as$ & $\dn$ & $a + (\erase \; _{[]} \sum as)\quad \text{if $as$ length over 1}$
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
    99
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   100
\end{center}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   101
\noindent
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   102
An alternative regular expression with an empty list of children
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   103
 is turned into a $\ZERO$ during the
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   104
$\erase$ function, thereby changing the size and structure of the regex.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   105
Therefore the equality in question does not hold.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   106
These will likely be fixable if we really want to use plain $\rexp$s for dealing
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   107
with size, but we choose a more straightforward (or stupid) method by 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   108
defining a new datatype that is similar to plain $\rexp$s but can take
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   109
non-binary arguments for its alternative constructor,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   110
 which we call $\rrexp$ to denote
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   111
the difference between it and plain regular expressions. 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   112
\[			\rrexp ::=   \RZERO \mid  \RONE
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   113
			 \mid  \RCHAR{c}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   114
			 \mid  \RSEQ{r_1}{r_2}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   115
			 \mid  \RALTS{rs}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   116
			 \mid \RSTAR{r}        
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   117
\]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   118
For $\rrexp$ we throw away the bitcodes on the annotated regular expressions, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   119
but keep everything else intact.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   120
It is similar to annotated regular expressions being $\erase$-ed, but with all its structure preserved
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   121
We denote the operation of erasing the bits and turning an annotated regular expression 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   122
into an $\rrexp{}$ as $\rerase{}$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   123
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   124
\begin{tabular}{lcl}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   125
$\rerase{\ZERO}$ & $\dn$ & $\RZERO$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   126
$\rerase{_{bs}\ONE}$ & $\dn$ & $\RONE$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   127
	$\rerase{_{bs}\mathbf{c}}$ & $\dn$ & $\RCHAR{c}$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   128
$\rerase{_{bs}r_1\cdot r_2}$ & $\dn$ & $\RSEQ{\rerase{r_1}}{\rerase{r_2}}$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   129
$\rerase{_{bs}\sum as}$ & $\dn$ & $\RALTS{\map \; \rerase{\_} \; as}$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   130
$\rerase{_{bs} a ^*}$ & $\dn$ & $\rerase{a}^*$
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   131
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   132
\end{center}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   133
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   134
$\rrexp$ give the exact correspondence between an annotated regular expression
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   135
and its (r-)erased version:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   136
\begin{lemma}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   137
$\rsize{\rerase a} = \asize a$
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   138
\end{lemma}
554
Chengsong
parents: 553
diff changeset
   139
\noindent
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   140
This does not hold for plain $\rexp$s. 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   141
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   142
Similarly we could define the derivative  and simplification on 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   143
$\rrexp$, which would be identical to those we defined for plain $\rexp$s in chapter1, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   144
except that now they can operate on alternatives taking multiple arguments.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   145
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   146
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   147
\begin{tabular}{lcr}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   148
	$(\RALTS{rs})\; \backslash c$ & $\dn$ &  $\RALTS{\map\; (\_ \backslash c) \;rs}$\\
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   149
(other clauses omitted)
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   150
With the new $\rrexp$ datatype in place, one can define its size function,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   151
which precisely mirrors that of the annotated regular expressions:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   152
\end{tabular}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   153
\end{center}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   154
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   155
\begin{center}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   156
\begin{tabular}{ccc}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   157
	$\llbracket _{bs}\ONE \rrbracket_r$ & $\dn$ & $1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   158
	$\llbracket \ZERO \rrbracket_r$ & $\dn$ & $1$ \\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   159
	$\llbracket _{bs} r_1 \cdot r_2 \rrbracket_r$ & $\dn$ & $\llbracket r_1 \rrbracket_r + \llbracket r_2 \rrbracket_r + 1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   160
$\llbracket _{bs}\mathbf{c} \rrbracket_r $ & $\dn$ & $1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   161
$\llbracket _{bs}\sum as \rrbracket_r $ & $\dn$ & $\map \; (\llbracket \_ \rrbracket_r)\; as   + 1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   162
$\llbracket _{bs} a^* \rrbracket_r $ & $\dn$ & $\llbracket a \rrbracket_r + 1$
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   163
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   164
\end{center}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   165
\noindent
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   166
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   167
\subsection{Lexing Related Functions for $\rrexp$}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   168
Everything else for $\rrexp$ will be precisely the same for annotated expressions,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   169
except that they do not involve rectifying and augmenting bit-encoded tokenization information.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   170
As expected, most functions are simpler, such as the derivative:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   171
\begin{center}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   172
  \begin{tabular}{@{}lcl@{}}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   173
  $(\ZERO)\,\backslash_r c$ & $\dn$ & $\ZERO$\\  
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   174
  $(\ONE)\,\backslash_r c$ & $\dn$ &
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   175
        $\textit{if}\;c=d\; \;\textit{then}\;
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   176
         \ONE\;\textit{else}\;\ZERO$\\  
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   177
  $(\sum \;\textit{rs})\,\backslash_r c$ & $\dn$ &
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   178
  $\sum\;(\textit{map} \; (\_\backslash_r c) \; rs )$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   179
  $(r_1\cdot r_2)\,\backslash_r c$ & $\dn$ &
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   180
     $\textit{if}\;\textit{rnullable}\,r_1$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   181
					       & &$\textit{then}\;\sum\,[(r_1\,\backslash_r c)\cdot\,r_2,$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   182
					       & &$\phantom{\textit{then},\;\sum\,}((r_2\,\backslash_r c))]$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   183
  & &$\textit{else}\;\,(r_1\,\backslash_r c)\cdot r_2$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   184
  $(r^*)\,\backslash_r c$ & $\dn$ &
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   185
      $( r\,\backslash_r c)\cdot
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   186
       (_{[]}r^*))$
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   187
\end{tabular}    
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   188
\end{center}  
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   189
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   190
The simplification function is simplified without annotation causing superficial differences.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   191
Duplicate removal without  an equivalence relation:
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   192
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   193
\begin{tabular}{lcl}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   194
	$\rdistinct{[]}{rset} $ & $\dn$ & $[]$\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   195
$\rdistinct{r :: rs}{rset}$ & $\dn$ & $\textit{if}(r \in \textit{rset}) \; \textit{then} \; \rdistinct{rs}{rset}$\\
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   196
           			    &        & $\textit{else}\; r::\rdistinct{rs}{(rset \cup \{r\})}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   197
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   198
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   199
%TODO: definition of rsimp (maybe only the alternative clause)
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   200
\noindent
554
Chengsong
parents: 553
diff changeset
   201
The prefix $r$ in front of $\rdistinct{}{}$ is used mainly to 
Chengsong
parents: 553
diff changeset
   202
differentiate with $\textit{distinct}$, which is a built-in predicate
Chengsong
parents: 553
diff changeset
   203
in Isabelle that says all the elements of a list are unique.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   204
With $\textit{rdistinct}$ one can chain together all the other modules
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   205
of $\bsimp{\_}$ (removing the functionalities related to bit-sequences)
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   206
and get $\textit{rsimp}$ and $\rderssimp{\_}{\_}$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   207
We omit these functions, as they are routine. Please refer to the formalisation
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   208
(in file BasicIdentities.thy) for the exact definition.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   209
With $\rrexp$ the size caclulation of annotated regular expressions'
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   210
simplification and derivatives can be done by the size of their unlifted 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   211
counterpart with the unlifted version of simplification and derivatives applied.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   212
\begin{lemma}
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   213
	The following equalities hold:
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   214
	\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   215
		\item
554
Chengsong
parents: 553
diff changeset
   216
			$\asize{\bsimp{a}} = \rsize{\rsimp{\rerase{a}}}$
Chengsong
parents: 553
diff changeset
   217
		\item
Chengsong
parents: 553
diff changeset
   218
			$\asize{\bderssimp{r}{s}} =  \rsize{\rderssimp{\rerase{r}}{s}}$
Chengsong
parents: 553
diff changeset
   219
	\end{itemize}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   220
\end{lemma}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   221
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   222
In the following content, we will focus on $\rrexp$'s size bound.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   223
We will piece together this bound and show the same bound for annotated regular 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   224
expressions in the end.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   225
Unless stated otherwise in this chapter all $\textit{rexp}$s without
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   226
 bitcodes are seen as $\rrexp$s.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   227
 We also use $r_1 + r_2$ and $\RALTS{[r_1, r_2]}$ interchageably
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   228
 as the former suits people's intuitive way of stating a binary alternative
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   229
 regular expression.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   230
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   231
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   232
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   233
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   234
%	SECTION ?
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   235
%-----------------------------------
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   236
 \subsection{Finiteness Proof Using $\rrexp$s}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   237
 Now that we have defined the $\rrexp$ datatype, and proven that its size changes
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   238
 w.r.t derivatives and simplifications mirrors precisely those of annotated regular expressions,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   239
 we aim to bound the size of $r \backslash s$ for any $\rrexp$  $r$.
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   240
 Once we have a bound like: 
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   241
 \[
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   242
	 \llbracket r \backslash_{rsimp} s \rrbracket_r \leq N_r
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   243
 \]
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   244
 \noindent
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   245
 we could easily extend that to 
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   246
 \[
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   247
	 \llbracket a \backslash_{bsimps} s \rrbracket \leq N_r.
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   248
 \]
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   249
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   250
 \subsection{Roadmap to a Bound for $\textit{Rrexp}$}
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   251
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   252
The way we obtain the bound for $\rrexp$s is by two steps:
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   253
\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   254
	\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   255
		First, we rewrite $r\backslash s$ into something else that is easier
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   256
		to bound. This step is especially important for the inductive case 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   257
		$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
   258
		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
   259
		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
   260
	\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   261
		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
   262
		by estimation, since $\distinctBy$ and $\flts$ are well-behaved and working together would only 
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   263
		reduce the size of a regular expression, not adding to it.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   264
\end{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   265
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   266
\section{Step One: Closed Forms}
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   267
		We transform the function application $\rderssimp{r}{s}$
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   268
		into an equivalent form $f\; (g \; (\sum rs))$.
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   269
		The functions $f$ and $g$ can be anything from $\flts$, $\distinctBy$ and other helper functions from $\bsimp{\_}$.
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   270
		This way we get a different but equivalent way of expressing : $r\backslash s = f \; (g\; (\sum rs))$, we call the
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   271
		right hand side the "closed form" of $r\backslash s$.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   272
\subsection{Basic Properties needed for Closed Forms}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   273
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   274
\subsubsection{$\textit{rdistinct}$'s Deduplicates Successfully}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   275
The $\textit{rdistinct}$ function, as its name suggests, will
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   276
remove duplicates in an \emph{r}$\textit{rexp}$ list, 
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   277
according to the accumulator
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   278
and leave only one of each different element in a list:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   279
\begin{lemma}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   280
	The function $\textit{rdistinct}$ satisfies the following
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   281
	properties:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   282
	\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   283
		\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   284
			If $a \in acc$ then $a \notin (\rdistinct{rs}{acc})$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   285
		\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   286
			If list $rs'$ is the result of $\rdistinct{rs}{acc}$,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   287
			All the elements in $rs'$ are unique.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   288
	\end{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   289
\end{lemma}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   290
\begin{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   291
	The first part is by an induction on $rs$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   292
	The second part can be proven by using the 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   293
	induction rules of $\rdistinct{\_}{\_}$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   294
	
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   295
\end{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   296
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   297
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   298
$\rdistinct{\_}{\_}$ will cancel out all regular expression terms
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   299
that are in the accumulator, therefore prepending a list $rs_a$ with an arbitrary
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   300
list $rs$ whose elements are all from the accumulator, and then call $\rdistinct{\_}{\_}$
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   301
on the resulting list, the output will be as if we had called $\rdistinct{\_}{\_}$
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   302
without the prepending of $rs$:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   303
\begin{lemma}
554
Chengsong
parents: 553
diff changeset
   304
	The elements appearing in the accumulator will always be removed.
Chengsong
parents: 553
diff changeset
   305
	More precisely,
Chengsong
parents: 553
diff changeset
   306
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   307
		\item
Chengsong
parents: 553
diff changeset
   308
			If $rs \subseteq rset$, then 
Chengsong
parents: 553
diff changeset
   309
			$\rdistinct{rs@rsa }{acc} = \rdistinct{rsa }{acc}$.
Chengsong
parents: 553
diff changeset
   310
		\item
Chengsong
parents: 553
diff changeset
   311
			Furthermore, if $a \in rset$ and $\rdistinct{rs}{\{a\}} = []$,
Chengsong
parents: 553
diff changeset
   312
			then $\rdistinct{(rs @ rs')}{rset} = \rdistinct{rs'}{rset}$
Chengsong
parents: 553
diff changeset
   313
	\end{itemize}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   314
\end{lemma}
554
Chengsong
parents: 553
diff changeset
   315
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   316
\begin{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   317
	By induction on $rs$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   318
\end{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   319
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   320
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
   321
then expanding the accumulator to include that element will not cause the output list to change:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   322
\begin{lemma}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   323
	The accumulator can be augmented to include elements not appearing in the input list,
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   324
	and the output will not change.	
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   325
	\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   326
		\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   327
		If $r \notin rs$, then $\rdistinct{rs}{acc} = \rdistinct{rs}{\{r\} \cup acc}$.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   328
		\item
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   329
			Particularly, when $acc = \varnothing$ and $rs$ de-duplicated, we have\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   330
			\[ \rdistinct{rs}{\varnothing} = rs \]
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   331
	\end{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   332
\end{lemma}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   333
\begin{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   334
	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
   335
\end{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   336
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   337
The next property gives the condition for
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   338
when $\rdistinct{\_}{\_}$ becomes an identical mapping
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   339
for any prefix of an input list, in other words, when can 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   340
we ``push out" the arguments of $\rdistinct{\_}{\_}$:
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   341
\begin{lemma}
554
Chengsong
parents: 553
diff changeset
   342
	If $\textit{isDistinct} \; rs_1$, and $rs_1 \cap acc = \varnothing$,
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   343
	then it can be taken out and left untouched in the output:
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   344
	\[\textit{rdistinct}\;  (rs_1 @ rsa)\;\, acc
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   345
	= rs_1@(\textit{rdistinct} rsa \; (acc \cup rs_1))\]
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   346
\end{lemma}
554
Chengsong
parents: 553
diff changeset
   347
\noindent
Chengsong
parents: 553
diff changeset
   348
The predicate $\textit{isDistinct}$ is for testing
Chengsong
parents: 553
diff changeset
   349
whether a list's elements are all unique. It is defined
Chengsong
parents: 553
diff changeset
   350
recursively on the structure of a regular expression,
Chengsong
parents: 553
diff changeset
   351
and we omit the precise definition here.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   352
\begin{proof}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   353
By an induction on $rs_1$, where $rsa$ and $acc$ are allowed to be arbitrary.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   354
\end{proof}
554
Chengsong
parents: 553
diff changeset
   355
\noindent
Chengsong
parents: 553
diff changeset
   356
$\rdistinct{}{}$ removes any element in anywhere of a list, if it
Chengsong
parents: 553
diff changeset
   357
had appeared previously:
Chengsong
parents: 553
diff changeset
   358
\begin{lemma}\label{distinctRemovesMiddle}
Chengsong
parents: 553
diff changeset
   359
	The two properties hold if $r \in rs$:
Chengsong
parents: 553
diff changeset
   360
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   361
		\item
Chengsong
parents: 553
diff changeset
   362
			$\rdistinct{rs}{rset} = \rdistinct{(rs @ [r])}{rset}$
Chengsong
parents: 553
diff changeset
   363
			and 
Chengsong
parents: 553
diff changeset
   364
			$\rdistinct{(ab :: rs @ [ab])}{rset'} = \rdistinct{(ab :: rs)}{rset'}$
Chengsong
parents: 553
diff changeset
   365
		\item
Chengsong
parents: 553
diff changeset
   366
			$\rdistinct{ (rs @ rs') }{rset} = \rdistinct{rs @ [r] @ rs'}{rset}$
Chengsong
parents: 553
diff changeset
   367
			and
Chengsong
parents: 553
diff changeset
   368
			$\rdistinct{(ab :: rs @ [ab] @ rs'')}{rset'} = 
Chengsong
parents: 553
diff changeset
   369
			 \rdistinct{(ab :: rs @ rs'')}{rset'}$
Chengsong
parents: 553
diff changeset
   370
	\end{itemize}
Chengsong
parents: 553
diff changeset
   371
\end{lemma}
Chengsong
parents: 553
diff changeset
   372
\noindent
Chengsong
parents: 553
diff changeset
   373
\begin{proof}
Chengsong
parents: 553
diff changeset
   374
By induction on $rs$. All other variables are allowed to be arbitrary.
Chengsong
parents: 553
diff changeset
   375
The second half of the lemma requires the first half.
Chengsong
parents: 553
diff changeset
   376
Note that for each half's two sub-propositions need to be proven concurrently,
Chengsong
parents: 553
diff changeset
   377
so that the induction goes through.
Chengsong
parents: 553
diff changeset
   378
\end{proof}
Chengsong
parents: 553
diff changeset
   379
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   380
\subsubsection{The Properties of $\backslash_r$, $\backslash_{rsimp}$, $\textit{Rflts}$ and $\textit{Rsimp}_{ALTS}$} 
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   381
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
   382
These will be helpful in later closed form proofs, when
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   383
we want to transform the ways in which multiple functions involving
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   384
those are composed together
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   385
in interleaving derivative and  simplification steps.
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   386
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   387
When the function $\textit{Rflts}$ 
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   388
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
   389
functions on two lists separately, and then concatenating them together.
554
Chengsong
parents: 553
diff changeset
   390
\begin{lemma}\label{rfltsProps}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   391
	The function $\rflts$ has the below properties:\\
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   392
	\begin{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   393
		\item
554
Chengsong
parents: 553
diff changeset
   394
			$\rflts \; (rs_1 @ rs_2) = \rflts \; rs_1 @ \rflts \; rs_2$
Chengsong
parents: 553
diff changeset
   395
		\item
Chengsong
parents: 553
diff changeset
   396
			If $r \neq \RZERO$ and $\nexists rs_1. r = \RALTS{rs}_1$, then $\rflts \; (r::rs) = r :: \rflts \; rs$
Chengsong
parents: 553
diff changeset
   397
		\item
Chengsong
parents: 553
diff changeset
   398
			$\rflts \; (rs @ [\RZERO]) = \rflts \; rs$
Chengsong
parents: 553
diff changeset
   399
		\item
Chengsong
parents: 553
diff changeset
   400
			$\rflts \; (rs' @ [\RALTS{rs}]) = \rflts \; rs'@rs$
Chengsong
parents: 553
diff changeset
   401
		\item
Chengsong
parents: 553
diff changeset
   402
			$\rflts \; (rs @ [\RONE]) = \rflts \; rs @ [\RONE]$
Chengsong
parents: 553
diff changeset
   403
		\item
Chengsong
parents: 553
diff changeset
   404
			If $r \neq \RZERO$ and $\nexists rs'. r = \RALTS{rs'}$ then $\rflts \; (rs @ [r])
Chengsong
parents: 553
diff changeset
   405
			= (\rflts \; rs) @ [r]$
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   406
	\end{itemize}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   407
\end{lemma}
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   408
\noindent
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   409
\begin{proof}
554
Chengsong
parents: 553
diff changeset
   410
	By induction on $rs_1$ in the first part, and induction on $r$ in the second part,
Chengsong
parents: 553
diff changeset
   411
	and induction on $rs$, $rs'$ in the third and fourth sub-lemma.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   412
\end{proof}
554
Chengsong
parents: 553
diff changeset
   413
\subsubsection{The $RL$ Function: Language Interpretation of $\textit{Rrexp}$s}
Chengsong
parents: 553
diff changeset
   414
Much like the definition of $L$ on plain regular expressions, one could also 
Chengsong
parents: 553
diff changeset
   415
define the language interpretation of $\rrexp$s.
Chengsong
parents: 553
diff changeset
   416
\begin{center}
Chengsong
parents: 553
diff changeset
   417
\begin{tabular}{lcl}
Chengsong
parents: 553
diff changeset
   418
$RL \; (\ZERO)$ & $\dn$ & $\phi$\\
Chengsong
parents: 553
diff changeset
   419
$RL \; (\ONE)$ & $\dn$ & $\{[]\}$\\
Chengsong
parents: 553
diff changeset
   420
$RL \; (c)$ & $\dn$ & $\{[c]\}$\\
Chengsong
parents: 553
diff changeset
   421
$RL \; \sum rs$ & $\dn$ & $ \bigcup_{r \in rs} (RL \; r)$\\
Chengsong
parents: 553
diff changeset
   422
$RL \; (r_1 \cdot r_2)$ & $\dn$ & $ RL \; (r_1) @ RL \; (r_2)$\\
Chengsong
parents: 553
diff changeset
   423
$RL \; (r^*)$ & $\dn$ & $ (RL(r))^*$
Chengsong
parents: 553
diff changeset
   424
\end{tabular}
Chengsong
parents: 553
diff changeset
   425
\end{center}
Chengsong
parents: 553
diff changeset
   426
\noindent
Chengsong
parents: 553
diff changeset
   427
The main use of $RL$ is to establish some connections between $\rsimp{}$ 
Chengsong
parents: 553
diff changeset
   428
and $\rnullable{}$:
Chengsong
parents: 553
diff changeset
   429
\begin{lemma}
Chengsong
parents: 553
diff changeset
   430
	The following properties hold:
Chengsong
parents: 553
diff changeset
   431
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   432
		\item
Chengsong
parents: 553
diff changeset
   433
			If $\rnullable{r}$, then $\rsimp{r} \neq \RZERO$.
Chengsong
parents: 553
diff changeset
   434
		\item
Chengsong
parents: 553
diff changeset
   435
			$\rnullable{r \backslash s} \quad $ if and only if $\quad \rnullable{\rderssimp{r}{s}}$.
Chengsong
parents: 553
diff changeset
   436
	\end{itemize}
Chengsong
parents: 553
diff changeset
   437
\end{lemma}
Chengsong
parents: 553
diff changeset
   438
\begin{proof}
Chengsong
parents: 553
diff changeset
   439
	The first part is by induction on $r$. 
Chengsong
parents: 553
diff changeset
   440
	The second part is true because property 
Chengsong
parents: 553
diff changeset
   441
	\[ RL \; r = RL \; (\rsimp{r})\] holds.
Chengsong
parents: 553
diff changeset
   442
\end{proof}
Chengsong
parents: 553
diff changeset
   443
	
Chengsong
parents: 553
diff changeset
   444
\subsubsection{$\rsimp{}$ is Non-Increasing}
Chengsong
parents: 553
diff changeset
   445
In this subsection, we prove that the function $\rsimp{}$ does not 
Chengsong
parents: 553
diff changeset
   446
make the $\llbracket \rrbracket_r$ size increase.
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   447
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   448
554
Chengsong
parents: 553
diff changeset
   449
\begin{lemma}\label{rsimpSize}
Chengsong
parents: 553
diff changeset
   450
	$\llbracket \rsimp{r} \rrbracket_r \leq \llbracket r \rrbracket_r$
Chengsong
parents: 553
diff changeset
   451
\end{lemma}
Chengsong
parents: 553
diff changeset
   452
\subsubsection{Simplified $\textit{Rrexp}$s are Good}
Chengsong
parents: 553
diff changeset
   453
We formalise the notion of ``good" regular expressions,
Chengsong
parents: 553
diff changeset
   454
which means regular expressions that
Chengsong
parents: 553
diff changeset
   455
are not fully simplified. For alternative regular expressions that means they
Chengsong
parents: 553
diff changeset
   456
do not contain any nested alternatives like 
Chengsong
parents: 553
diff changeset
   457
\[ r_1 + (r_2 + r_3) \], un-removed $\RZERO$s like \[\RZERO + r\]
Chengsong
parents: 553
diff changeset
   458
or duplicate elements in a children regular expression list like \[ \sum [r, r, \ldots]\]:
Chengsong
parents: 553
diff changeset
   459
\begin{center}
Chengsong
parents: 553
diff changeset
   460
	\begin{tabular}{@{}lcl@{}}
Chengsong
parents: 553
diff changeset
   461
		$\good\; \RZERO$ & $\dn$ & $\textit{false}$\\
Chengsong
parents: 553
diff changeset
   462
		$\good\; \RONE$ & $\dn$ & $\textit{true}$\\
Chengsong
parents: 553
diff changeset
   463
		$\good\; \RCHAR{c}$ & $\dn$ & $\btrue$\\
Chengsong
parents: 553
diff changeset
   464
		$\good\; \RALTS{[]}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   465
		$\good\; \RALTS{[r]}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   466
		$\good\; \RALTS{r_1 :: r_2 :: rs}$ & $\dn$ & 
Chengsong
parents: 553
diff changeset
   467
		$\textit{isDistinct} \; (r_1 :: r_2 :: rs) \;$\\
Chengsong
parents: 553
diff changeset
   468
		& & $\textit{and}\; (\forall r' \in (r_1 :: r_2 :: rs).\; \good \; r'\; \,  \textit{and}\; \, \textit{nonAlt}\; r')$\\
Chengsong
parents: 553
diff changeset
   469
		$\good \; \RSEQ{\RZERO}{r}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   470
		$\good \; \RSEQ{\RONE}{r}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   471
		$\good \; \RSEQ{r}{\RZERO}$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   472
		$\good \; \RSEQ{r_1}{r_2}$ & $\dn$ & $\good \; r_1 \;\, \textit{and} \;\, \good \; r_2$\\
Chengsong
parents: 553
diff changeset
   473
		$\good \; \RSTAR{r}$ & $\dn$ & $\btrue$\\
Chengsong
parents: 553
diff changeset
   474
	\end{tabular}
Chengsong
parents: 553
diff changeset
   475
\end{center}
Chengsong
parents: 553
diff changeset
   476
\noindent
Chengsong
parents: 553
diff changeset
   477
The predicate $\textit{nonAlt}$ evaluates to true when the regular expression is not an
Chengsong
parents: 553
diff changeset
   478
alternative, and false otherwise.
Chengsong
parents: 553
diff changeset
   479
The $\good$ property is preserved under $\rsimp_{ALTS}$, provided that
Chengsong
parents: 553
diff changeset
   480
its non-empty argument list of expressions are all good themsleves, and $\textit{nonAlt}$, 
Chengsong
parents: 553
diff changeset
   481
and unique:
Chengsong
parents: 553
diff changeset
   482
\begin{lemma}\label{rsimpaltsGood}
Chengsong
parents: 553
diff changeset
   483
	If $rs \neq []$ and forall $r \in rs. \textit{nonAlt} \; r$ and $\textit{isDistinct} \; rs$,
Chengsong
parents: 553
diff changeset
   484
	then $\good \; (\rsimpalts \; rs)$ if and only if forall $r \in rs. \; \good \; r$.
Chengsong
parents: 553
diff changeset
   485
\end{lemma}
Chengsong
parents: 553
diff changeset
   486
\noindent
Chengsong
parents: 553
diff changeset
   487
We also note that
Chengsong
parents: 553
diff changeset
   488
if a regular expression $r$ is good, then $\rflts$ on the singleton
Chengsong
parents: 553
diff changeset
   489
list $[r]$ will not break goodness:
Chengsong
parents: 553
diff changeset
   490
\begin{lemma}\label{flts2}
Chengsong
parents: 553
diff changeset
   491
	If $\good \; r$, then forall $r' \in \rflts \; [r]. \; \good \; r'$ and $\textit{nonAlt} \; r'$.
Chengsong
parents: 553
diff changeset
   492
\end{lemma}
Chengsong
parents: 553
diff changeset
   493
\begin{proof}
Chengsong
parents: 553
diff changeset
   494
	By an induction on $r$.
Chengsong
parents: 553
diff changeset
   495
\end{proof}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   496
\noindent
554
Chengsong
parents: 553
diff changeset
   497
The other observation we make about $\rsimp{r}$ is that it never
Chengsong
parents: 553
diff changeset
   498
comes with nested alternatives, which we describe as the $\nonnested$
Chengsong
parents: 553
diff changeset
   499
property:
Chengsong
parents: 553
diff changeset
   500
\begin{center}
Chengsong
parents: 553
diff changeset
   501
	\begin{tabular}{lcl}
Chengsong
parents: 553
diff changeset
   502
		$\nonnested \; \, \sum []$ & $\dn$ & $\btrue$\\
Chengsong
parents: 553
diff changeset
   503
		$\nonnested \; \, \sum ((\sum rs_1) :: rs_2)$ & $\dn$ & $\bfalse$\\
Chengsong
parents: 553
diff changeset
   504
		$\nonnested \; \, \sum (r :: rs)$ & $\dn$ & $\nonnested (\sum rs)$\\
Chengsong
parents: 553
diff changeset
   505
		$\nonnested \; \, r $ & $\dn$ & $\btrue$
Chengsong
parents: 553
diff changeset
   506
	\end{tabular}
Chengsong
parents: 553
diff changeset
   507
\end{center}
Chengsong
parents: 553
diff changeset
   508
\noindent
Chengsong
parents: 553
diff changeset
   509
The $\rflts$ function
Chengsong
parents: 553
diff changeset
   510
always opens up nested alternatives,
Chengsong
parents: 553
diff changeset
   511
which enables $\rsimp$ to be non-nested:
Chengsong
parents: 553
diff changeset
   512
Chengsong
parents: 553
diff changeset
   513
\begin{lemma}\label{nonnestedRsimp}
Chengsong
parents: 553
diff changeset
   514
	$\nonnested \; (\rsimp{r})$
Chengsong
parents: 553
diff changeset
   515
\end{lemma}
Chengsong
parents: 553
diff changeset
   516
\begin{proof}
Chengsong
parents: 553
diff changeset
   517
	By an induction on $r$.
Chengsong
parents: 553
diff changeset
   518
\end{proof}
Chengsong
parents: 553
diff changeset
   519
\noindent
Chengsong
parents: 553
diff changeset
   520
With this we could prove that a regular expressions
Chengsong
parents: 553
diff changeset
   521
after simplification and flattening and de-duplication,
Chengsong
parents: 553
diff changeset
   522
will not contain any alternative regular expression directly:
Chengsong
parents: 553
diff changeset
   523
\begin{lemma}\label{nonaltFltsRd}
Chengsong
parents: 553
diff changeset
   524
	If $x \in \rdistinct{\rflts\; (\map \; \rsimp{} \; rs)}{\varnothing}$ 
Chengsong
parents: 553
diff changeset
   525
	then $\textit{nonAlt} \; x$.
Chengsong
parents: 553
diff changeset
   526
\end{lemma}
Chengsong
parents: 553
diff changeset
   527
\begin{proof}
Chengsong
parents: 553
diff changeset
   528
	By \ref{nonnestedRsimp}.
Chengsong
parents: 553
diff changeset
   529
\end{proof}
Chengsong
parents: 553
diff changeset
   530
\noindent
Chengsong
parents: 553
diff changeset
   531
The other thing we know is that once $\rsimp{}$ had finished
Chengsong
parents: 553
diff changeset
   532
processing an alternative regular expression, it will not
Chengsong
parents: 553
diff changeset
   533
contain any $\RZERO$s, this is because all the recursive 
Chengsong
parents: 553
diff changeset
   534
calls to the simplification on the children regular expressions
Chengsong
parents: 553
diff changeset
   535
make the children good, and $\rflts$ will not take out
Chengsong
parents: 553
diff changeset
   536
any $\RZERO$s out of a good regular expression list,
Chengsong
parents: 553
diff changeset
   537
and $\rdistinct{}$ will not mess with the result.
Chengsong
parents: 553
diff changeset
   538
\begin{lemma}\label{flts3Obv}
Chengsong
parents: 553
diff changeset
   539
	The following are true:
Chengsong
parents: 553
diff changeset
   540
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   541
		\item
Chengsong
parents: 553
diff changeset
   542
			If for all $r \in rs. \, \good \; r $ or $r = \RZERO$,
Chengsong
parents: 553
diff changeset
   543
			then for all $r \in \rflts\; rs. \, \good \; r$.
Chengsong
parents: 553
diff changeset
   544
		\item
Chengsong
parents: 553
diff changeset
   545
			If $x \in \rdistinct{\rflts\; (\map \; rsimp{}\; rs)}{\varnothing}$
Chengsong
parents: 553
diff changeset
   546
			and for all $y$ such that $\llbracket y \rrbracket_r$ less than
Chengsong
parents: 553
diff changeset
   547
			$\llbracket rs \rrbracket_r + 1$, either
Chengsong
parents: 553
diff changeset
   548
			$\good \; (\rsimp{y})$ or $\rsimp{y} = \RZERO$,
Chengsong
parents: 553
diff changeset
   549
			then $\good \; x$.
Chengsong
parents: 553
diff changeset
   550
	\end{itemize}
Chengsong
parents: 553
diff changeset
   551
\end{lemma}
Chengsong
parents: 553
diff changeset
   552
\begin{proof}
Chengsong
parents: 553
diff changeset
   553
	The first part is by induction on $rs$, where the induction
Chengsong
parents: 553
diff changeset
   554
	rule is the inductive cases for $\rflts$.
Chengsong
parents: 553
diff changeset
   555
	The second part is a corollary from the first part.
Chengsong
parents: 553
diff changeset
   556
\end{proof}
543
b2bea5968b89 thesis_thys
Chengsong
parents: 532
diff changeset
   557
554
Chengsong
parents: 553
diff changeset
   558
And this leads to good structural property of $\rsimp{}$,
Chengsong
parents: 553
diff changeset
   559
that after simplification, a regular expression is
Chengsong
parents: 553
diff changeset
   560
either good or $\RZERO$:
Chengsong
parents: 553
diff changeset
   561
\begin{lemma}\label{good1}
Chengsong
parents: 553
diff changeset
   562
	For any r-regular expression $r$, $\good \; \rsimp{r}$ or $\rsimp{r} = \RZERO$.
Chengsong
parents: 553
diff changeset
   563
\end{lemma}
Chengsong
parents: 553
diff changeset
   564
\begin{proof}
Chengsong
parents: 553
diff changeset
   565
	By an induction on $r$. The inductive measure is the size $\llbracket \rrbracket_r$.
Chengsong
parents: 553
diff changeset
   566
	Lemma \ref{rsimpSize} says that 
Chengsong
parents: 553
diff changeset
   567
	$\llbracket \rsimp{r}\rrbracket_r$ is smaller than or equal to
Chengsong
parents: 553
diff changeset
   568
	$\llbracket r \rrbracket_r$.
Chengsong
parents: 553
diff changeset
   569
	Therefore, in the $r_1 \cdot r_2$ and $\sum rs$ case,
Chengsong
parents: 553
diff changeset
   570
	Inductive hypothesis applies to the children regular expressions
Chengsong
parents: 553
diff changeset
   571
	$r_1$, $r_2$, etc. The lemma \ref{flts3Obv}'s precondition is satisfied
Chengsong
parents: 553
diff changeset
   572
	by that as well.
Chengsong
parents: 553
diff changeset
   573
	The lemmas \ref{nonnestedRsimp} and  \ref{nonaltFltsRd} are used
Chengsong
parents: 553
diff changeset
   574
	to ensure that goodness is preserved at the topmost level.
Chengsong
parents: 553
diff changeset
   575
\end{proof}
Chengsong
parents: 553
diff changeset
   576
We shall prove that any good regular expression is 
Chengsong
parents: 553
diff changeset
   577
a fixed-point for $\rsimp{}$.
Chengsong
parents: 553
diff changeset
   578
First we prove an auxiliary lemma:
Chengsong
parents: 553
diff changeset
   579
\begin{lemma}\label{goodaltsNonalt}
Chengsong
parents: 553
diff changeset
   580
	If $\good \; \sum rs$, then $\rflts\; rs = rs$.
Chengsong
parents: 553
diff changeset
   581
\end{lemma}
Chengsong
parents: 553
diff changeset
   582
\begin{proof}
Chengsong
parents: 553
diff changeset
   583
	By an induction on $\sum rs$. The inductive rules are the cases
Chengsong
parents: 553
diff changeset
   584
	for $\good$.
Chengsong
parents: 553
diff changeset
   585
\end{proof}
Chengsong
parents: 553
diff changeset
   586
\noindent
Chengsong
parents: 553
diff changeset
   587
Now we are ready to prove that good regular expressions are invariant
Chengsong
parents: 553
diff changeset
   588
of $\rsimp{}$ application:
Chengsong
parents: 553
diff changeset
   589
\begin{lemma}\label{test}
Chengsong
parents: 553
diff changeset
   590
	If $\good \;r$ then $\rsimp{r} = r$.
Chengsong
parents: 553
diff changeset
   591
\end{lemma}
Chengsong
parents: 553
diff changeset
   592
\begin{proof}
Chengsong
parents: 553
diff changeset
   593
	By an induction on the inductive cases of $\good$.
Chengsong
parents: 553
diff changeset
   594
	The lemma \ref{goodaltsNonalt} is used in the alternative
Chengsong
parents: 553
diff changeset
   595
	case where 2 or more elements are present in the list.
Chengsong
parents: 553
diff changeset
   596
\end{proof}
Chengsong
parents: 553
diff changeset
   597
Chengsong
parents: 553
diff changeset
   598
\subsubsection{$\rsimp$ is Idempotent}
Chengsong
parents: 553
diff changeset
   599
The idempotency of $\rsimp$ is very useful in 
Chengsong
parents: 553
diff changeset
   600
manipulating regular expression terms into desired
Chengsong
parents: 553
diff changeset
   601
forms so that key steps allowing further rewriting to closed forms
Chengsong
parents: 553
diff changeset
   602
are possible.
Chengsong
parents: 553
diff changeset
   603
\begin{lemma}\label{rsimpIdem}
Chengsong
parents: 553
diff changeset
   604
$\rsimp{r} = \rsimp{\rsimp{r}}$
Chengsong
parents: 553
diff changeset
   605
\end{lemma}
Chengsong
parents: 553
diff changeset
   606
Chengsong
parents: 553
diff changeset
   607
\begin{proof}
Chengsong
parents: 553
diff changeset
   608
	By \ref{test} and \ref{good1}.
Chengsong
parents: 553
diff changeset
   609
\end{proof}
Chengsong
parents: 553
diff changeset
   610
\noindent
Chengsong
parents: 553
diff changeset
   611
This property means we do not have to repeatedly
Chengsong
parents: 553
diff changeset
   612
apply simplification in each step, which justifies
Chengsong
parents: 553
diff changeset
   613
our definition of $\blexersimp$.
Chengsong
parents: 553
diff changeset
   614
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   615
554
Chengsong
parents: 553
diff changeset
   616
On the other hand, we could repeat the same $\rsimp{}$ applications
Chengsong
parents: 553
diff changeset
   617
on regular expressions as many times as we want, if we have at least
Chengsong
parents: 553
diff changeset
   618
one simplification applied to it, and apply it wherever we would like to:
Chengsong
parents: 553
diff changeset
   619
\begin{corollary}\label{headOneMoreSimp}
Chengsong
parents: 553
diff changeset
   620
	$\map \; \rsimp{(r :: rs)} = \map \; \rsimp{} \; (\rsimp{r} :: rs)$
Chengsong
parents: 553
diff changeset
   621
\end{corollary}
Chengsong
parents: 553
diff changeset
   622
\noindent
Chengsong
parents: 553
diff changeset
   623
This will be useful in later closed form proof's rewriting steps.
Chengsong
parents: 553
diff changeset
   624
Similarly, we point out the following useful facts below:
Chengsong
parents: 553
diff changeset
   625
\begin{lemma}
Chengsong
parents: 553
diff changeset
   626
	The following equalities hold if $r = \rsimp{r'}$ for some $r'$:
Chengsong
parents: 553
diff changeset
   627
	\begin{itemize}
Chengsong
parents: 553
diff changeset
   628
		\item
Chengsong
parents: 553
diff changeset
   629
			If $r  = \sum rs$ then $\rsimpalts \; rs = \sum rs$.
Chengsong
parents: 553
diff changeset
   630
		\item
Chengsong
parents: 553
diff changeset
   631
			If $r = \sum rs$ then $\rdistinct{rs}{\varnothing} = rs$.
Chengsong
parents: 553
diff changeset
   632
		\item
Chengsong
parents: 553
diff changeset
   633
			$\rsimpalts \; (\rdistinct{\rflts \; [r]}{\varnothing}) = r$.
Chengsong
parents: 553
diff changeset
   634
	\end{itemize}
Chengsong
parents: 553
diff changeset
   635
\end{lemma}
Chengsong
parents: 553
diff changeset
   636
\begin{proof}
Chengsong
parents: 553
diff changeset
   637
	By application of \ref{rsimpIdem} and \ref{good1}.
Chengsong
parents: 553
diff changeset
   638
\end{proof}
Chengsong
parents: 553
diff changeset
   639
Chengsong
parents: 553
diff changeset
   640
\noindent
Chengsong
parents: 553
diff changeset
   641
With the idempotency of $\rsimp{}$ and its corollaries, 
Chengsong
parents: 553
diff changeset
   642
we can start proving some key equalities leading to the 
Chengsong
parents: 553
diff changeset
   643
closed forms.
Chengsong
parents: 553
diff changeset
   644
Now presented are a few equivalent terms under $\rsimp{}$.
Chengsong
parents: 553
diff changeset
   645
We use $r_1 \sequal r_2 $ here to denote $\rsimp{r_1} = \rsimp{r_2}$.
Chengsong
parents: 553
diff changeset
   646
\begin{lemma}
Chengsong
parents: 553
diff changeset
   647
\begin{itemize}
Chengsong
parents: 553
diff changeset
   648
	\item
Chengsong
parents: 553
diff changeset
   649
		$\rsimpalts \; (\RZERO :: rs) \sequal \rsimpalts\; rs$
Chengsong
parents: 553
diff changeset
   650
	\item
Chengsong
parents: 553
diff changeset
   651
		$\rsimpalts \; rs \sequal \rsimpalts (\map \; \rsimp{} \; rs)$
Chengsong
parents: 553
diff changeset
   652
	\item
Chengsong
parents: 553
diff changeset
   653
		$\RALTS{\RALTS{rs}} \sequal \RALTS{rs}$
Chengsong
parents: 553
diff changeset
   654
\end{itemize}
Chengsong
parents: 553
diff changeset
   655
\end{lemma}
Chengsong
parents: 553
diff changeset
   656
\noindent
Chengsong
parents: 553
diff changeset
   657
We need more equalities like the above to enable a closed form,
Chengsong
parents: 553
diff changeset
   658
but to proceed we need to introduce two rewrite relations,
Chengsong
parents: 553
diff changeset
   659
to make things smoother.
Chengsong
parents: 553
diff changeset
   660
\subsubsection{The rewrite relation $\hrewrite$ and $\grewrite$}
Chengsong
parents: 553
diff changeset
   661
Insired by the success we had in the correctness proof 
Chengsong
parents: 553
diff changeset
   662
in \ref{Bitcoded2}, where we invented
Chengsong
parents: 553
diff changeset
   663
a term rewriting system to capture the similarity between terms
Chengsong
parents: 553
diff changeset
   664
and prove equivalence, we follow suit here defining simplification
Chengsong
parents: 553
diff changeset
   665
steps as rewriting steps.
Chengsong
parents: 553
diff changeset
   666
The presentation will be more concise than that in \ref{Bitcoded2}.
Chengsong
parents: 553
diff changeset
   667
To differentiate between the rewriting steps for annotated regular expressions
Chengsong
parents: 553
diff changeset
   668
and $\rrexp$s, we add characters $h$ and $g$ below the squig arrow symbol
Chengsong
parents: 553
diff changeset
   669
to mean atomic simplification transitions 
Chengsong
parents: 553
diff changeset
   670
of $\rrexp$s and $\rrexp$ lists, respectively.
Chengsong
parents: 553
diff changeset
   671
Chengsong
parents: 553
diff changeset
   672
\begin{center}
Chengsong
parents: 553
diff changeset
   673
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   674
List of 1-step rewrite rules for regular expressions simplification without bitcodes:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   675
\begin{figure}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   676
\caption{the "h-rewrite" rules}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   677
\[
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   678
r_1 \cdot \ZERO \rightarrow_h \ZERO \]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   679
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   680
\[
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   681
\ZERO \cdot r_2 \rightarrow \ZERO 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   682
\]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   683
\end{figure}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   684
And we define an "grewrite" relation that works on lists:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   685
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   686
\begin{tabular}{lcl}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   687
$ \ZERO :: rs$ & $\rightarrow_g$ & $rs$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   688
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   689
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   690
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   691
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   692
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   693
With these relations we prove
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   694
\begin{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   695
$rs \rightarrow rs'  \implies \RALTS{rs} \rightarrow \RALTS{rs'}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   696
\end{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   697
which enables us to prove "closed forms" equalities such as
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   698
\begin{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   699
$\sflat{(r_1 \cdot r_2) \backslash s} = \RALTS{ (r_1 \backslash s) \cdot r_2 :: (\map (r_2 \backslash \_) (\suffix \; s \; r_1 ))}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   700
\end{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   701
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   702
But the most involved part of the above lemma is proving the following:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   703
\begin{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   704
$\bsimp{\RALTS{rs @ \RALTS{rs_1} @ rs'}} = \bsimp{\RALTS{rs @rs_1 @ rs'}} $ 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   705
\end{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   706
which is needed in proving things like 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   707
\begin{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   708
$r \rightarrow_f r'  \implies \rsimp{r} \rightarrow \rsimp{r'}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   709
\end{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   710
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   711
Fortunately this is provable by induction on the list $rs$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   712
554
Chengsong
parents: 553
diff changeset
   713
\subsection{A Closed Form for the Sequence Regular Expression}
Chengsong
parents: 553
diff changeset
   714
\begin{quote}\it
Chengsong
parents: 553
diff changeset
   715
	Claim: For regular expressions $r_1 \cdot r_2$, we claim that
Chengsong
parents: 553
diff changeset
   716
	\begin{center}
Chengsong
parents: 553
diff changeset
   717
		$ \rderssimp{r_1 \cdot r_2}{s} = 
Chengsong
parents: 553
diff changeset
   718
	\rsimp{(\sum (r_1 \backslash s \cdot r_2 ) \; :: \;(\map \; \rderssimp{r2}{\_} \;(\vsuf{s}{r_1})))}$
Chengsong
parents: 553
diff changeset
   719
	\end{center}
Chengsong
parents: 553
diff changeset
   720
\end{quote}
Chengsong
parents: 553
diff changeset
   721
\noindent
Chengsong
parents: 553
diff changeset
   722
Chengsong
parents: 553
diff changeset
   723
Before we get to the proof that says the intermediate result of our lexer will
Chengsong
parents: 553
diff changeset
   724
remain finitely bounded, which is an important efficiency/liveness guarantee,
Chengsong
parents: 553
diff changeset
   725
we shall first develop a few preparatory properties and definitions to 
Chengsong
parents: 553
diff changeset
   726
make the process of proving that a breeze.
Chengsong
parents: 553
diff changeset
   727
Chengsong
parents: 553
diff changeset
   728
We define rewriting relations for $\rrexp$s, which allows us to do the 
Chengsong
parents: 553
diff changeset
   729
same trick as we did for the correctness proof,
Chengsong
parents: 553
diff changeset
   730
but this time we will have stronger equalities established.
Chengsong
parents: 553
diff changeset
   731
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   732
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   733
\section{Estimating the Closed Forms' sizes}
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   734
553
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   735
		The closed form $f\; (g\; (\sum rs)) $ is controlled
0f00d440f484 more changes
Chengsong
parents: 543
diff changeset
   736
		by the size of $rs'$, where every element in $rs'$ is distinct, and each element can be described by som e inductive sub-structures (for example when $r = r_1 \cdot r_2$ then $rs'$ will be solely comprised of $r_1 \backslash s'$ and $r_2 \backslash s''$, $s'$ and $s''$ being sub-strings of $s$), which will have a numeric uppder bound according to inductive hypothesis, which controls $r \backslash s$.
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   737
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   738
%	SECTION 2
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   739
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   740
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   741
\begin{theorem}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   742
For any regex $r$, $\exists N_r. \forall s. \; \llbracket{\bderssimp{r}{s}}\rrbracket \leq N_r$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   743
\end{theorem}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   744
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   745
\noindent
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   746
\begin{proof}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   747
We prove this by induction on $r$. The base cases for $\AZERO$,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   748
$\AONE \textit{bs}$ and $\ACHAR \textit{bs} c$ are straightforward. The interesting case is
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   749
for sequences of the form $\ASEQ{bs}{r_1}{r_2}$. In this case our induction
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   750
hypotheses state $\exists N_1. \forall s. \; \llbracket \bderssimp{r}{s} \rrbracket \leq N_1$ and
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   751
$\exists N_2. \forall s. \; \llbracket \bderssimp{r_2}{s} \rrbracket \leq N_2$. We can reason as follows
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   752
%
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   753
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   754
\begin{tabular}{lcll}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   755
& & $ \llbracket   \bderssimp{\ASEQ{bs}{r_1}{r_2} }{s} \rrbracket$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   756
& $ = $ & $\llbracket bsimp\,(\textit{ALTs}\;bs\;(\ASEQ{nil}{\bderssimp{ r_1}{s}}{ r_2} ::
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   757
    [\bderssimp{ r_2}{s'} \;|\; s' \in \textit{Suffix}( r_1, s)]))\rrbracket $ & (1) \\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   758
& $\leq$ &
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   759
    $\llbracket\textit{\distinctWith}\,((\ASEQ{nil}{\bderssimp{r_1}{s}}{r_2}$) ::
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   760
    [$\bderssimp{ r_2}{s'} \;|\; s' \in \textit{Suffix}( r_1, s)])\,\approx\;{}\rrbracket + 1 $ & (2) \\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   761
& $\leq$ & $\llbracket\ASEQ{bs}{\bderssimp{ r_1}{s}}{r_2}\rrbracket +
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   762
             \llbracket\textit{distinctWith}\,[\bderssimp{r_2}{s'} \;|\; s' \in \textit{Suffix}( r_1, s)]\,\approx\;{}\rrbracket + 1 $ & (3) \\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   763
& $\leq$ & $N_1 + \llbracket r_2\rrbracket + 2 +
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   764
      \llbracket \distinctWith\,[ \bderssimp{r_2}{s'} \;|\; s' \in \textit{Suffix}( r_1, s)] \,\approx\;\rrbracket$ & (4)\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   765
& $\leq$ & $N_1 + \llbracket r_2\rrbracket + 2 + l_{N_{2}} * N_{2}$ & (5)
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   766
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   767
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   768
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   769
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   770
\noindent
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   771
where in (1) the $\textit{Suffix}( r_1, s)$ are the all the suffixes of $s$ where $\bderssimp{ r_1}{s'}$ is nullable ($s'$ being a suffix of $s$).
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   772
The reason why we could write the derivatives of a sequence this way is described in section 2.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   773
The term (2) is used to control (1). 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   774
That is because one can obtain an overall
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   775
smaller regex list
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   776
by flattening it and removing $\ZERO$s first before applying $\distinctWith$ on it.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   777
Section 3 is dedicated to its proof.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   778
In (3) we know that  $\llbracket \ASEQ{bs}{(\bderssimp{ r_1}{s}}{r_2}\rrbracket$ is 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   779
bounded by $N_1 + \llbracket{}r_2\rrbracket + 1$. In (5) we know the list comprehension contains only regular expressions of size smaller
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   780
than $N_2$. The list length after  $\distinctWith$ is bounded by a number, which we call $l_{N_2}$. It stands
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   781
for the number of distinct regular expressions smaller than $N_2$ (there can only be finitely many of them).
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   782
We reason similarly for  $\STAR$.\medskip
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   783
\end{proof}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   784
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   785
What guarantee does this bound give us?
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   786
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   787
Whatever the regex is, it will not grow indefinitely.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   788
Take our previous example $(a + aa)^*$ as an example:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   789
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   790
\begin{tabular}{@{}c@{\hspace{0mm}}c@{\hspace{0mm}}c@{}}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   791
\begin{tikzpicture}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   792
\begin{axis}[
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   793
    xlabel={number of $a$'s},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   794
    x label style={at={(1.05,-0.05)}},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   795
    ylabel={regex size},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   796
    enlargelimits=false,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   797
    xtick={0,5,...,30},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   798
    xmax=33,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   799
    ymax= 40,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   800
    ytick={0,10,...,40},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   801
    scaled ticks=false,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   802
    axis lines=left,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   803
    width=5cm,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   804
    height=4cm, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   805
    legend entries={$(a + aa)^*$},  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   806
    legend pos=north west,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   807
    legend cell align=left]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   808
\addplot[red,mark=*, mark options={fill=white}] table {a_aa_star.data};
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   809
\end{axis}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   810
\end{tikzpicture}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   811
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   812
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   813
We are able to limit the size of the regex $(a + aa)^*$'s derivatives
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   814
 with our simplification
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   815
rules very effectively.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   816
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   817
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   818
In our proof for the inductive case $r_1 \cdot r_2$, the dominant term in the bound
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   819
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
   820
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
   821
inflates the size bound of $\llbracket \bderssimp{r_2}{s} \rrbracket$ with the function
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   822
$f(x) = x * 2^x$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   823
This means the bound we have will surge up at least
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   824
tower-exponentially with a linear increase of the depth.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   825
For a regex of depth $n$, the bound
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   826
would be approximately $4^n$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   827
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   828
Test data in the graphs from randomly generated regular expressions
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   829
shows that the giant bounds are far from being hit.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   830
%a few sample regular experessions' derivatives
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   831
%size change
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   832
%TODO: giving regex1_size_change.data showing a few regexes' size changes 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   833
%w;r;t the input characters number, where the size is usually cubic in terms of original size
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   834
%a*, aa*, aaa*, .....
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   835
%randomly generated regexes
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   836
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   837
\begin{tabular}{@{}c@{\hspace{0mm}}c@{\hspace{0mm}}c@{}}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   838
\begin{tikzpicture}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   839
\begin{axis}[
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   840
    xlabel={number of $a$'s},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   841
    x label style={at={(1.05,-0.05)}},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   842
    ylabel={regex size},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   843
    enlargelimits=false,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   844
    xtick={0,5,...,30},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   845
    xmax=33,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   846
    ymax=1000,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   847
    ytick={0,100,...,1000},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   848
    scaled ticks=false,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   849
    axis lines=left,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   850
    width=5cm,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   851
    height=4cm, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   852
    legend entries={regex1},  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   853
    legend pos=north west,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   854
    legend cell align=left]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   855
\addplot[red,mark=*, mark options={fill=white}] table {regex1_size_change.data};
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   856
\end{axis}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   857
\end{tikzpicture}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   858
  &
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   859
\begin{tikzpicture}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   860
\begin{axis}[
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   861
    xlabel={$n$},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   862
    x label style={at={(1.05,-0.05)}},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   863
    %ylabel={time in secs},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   864
    enlargelimits=false,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   865
    xtick={0,5,...,30},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   866
    xmax=33,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   867
    ymax=1000,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   868
    ytick={0,100,...,1000},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   869
    scaled ticks=false,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   870
    axis lines=left,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   871
    width=5cm,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   872
    height=4cm, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   873
    legend entries={regex2},  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   874
    legend pos=north west,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   875
    legend cell align=left]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   876
\addplot[blue,mark=*, mark options={fill=white}] table {regex2_size_change.data};
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   877
\end{axis}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   878
\end{tikzpicture}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   879
  &
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   880
\begin{tikzpicture}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   881
\begin{axis}[
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   882
    xlabel={$n$},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   883
    x label style={at={(1.05,-0.05)}},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   884
    %ylabel={time in secs},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   885
    enlargelimits=false,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   886
    xtick={0,5,...,30},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   887
    xmax=33,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   888
    ymax=1000,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   889
    ytick={0,100,...,1000},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   890
    scaled ticks=false,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   891
    axis lines=left,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   892
    width=5cm,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   893
    height=4cm, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   894
    legend entries={regex3},  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   895
    legend pos=north west,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   896
    legend cell align=left]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   897
\addplot[cyan,mark=*, mark options={fill=white}] table {regex3_size_change.data};
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   898
\end{axis}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   899
\end{tikzpicture}\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   900
\multicolumn{3}{c}{Graphs: size change of 3 randomly generated regexes $w.r.t.$ input string length.}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   901
\end{tabular}    
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   902
\end{center}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   903
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   904
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   905
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   906
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   907
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   908
\noindent
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   909
Most of the regex's sizes seem to stay within a polynomial bound $w.r.t$ the 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   910
original size.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   911
This suggests a link towrads "partial derivatives"
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   912
 introduced by Antimirov \cite{Antimirov95}.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   913
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   914
 \section{Antimirov's partial derivatives}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   915
 The idea behind Antimirov's partial derivatives
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   916
is to do derivatives in a similar way as suggested by Brzozowski, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   917
but maintain a set of regular expressions instead of a single one:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   918
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   919
%TODO: antimirov proposition 3.1, needs completion
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   920
 \begin{center}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   921
 \begin{tabular}{ccc}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   922
 $\partial_x(a+b)$ & $=$ & $\partial_x(a) \cup \partial_x(b)$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   923
$\partial_x(\ONE)$ & $=$ & $\phi$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   924
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   925
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   926
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   927
Rather than joining the calculated derivatives $\partial_x a$ and $\partial_x b$ together
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   928
using the alternatives constructor, Antimirov cleverly chose to put them into
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   929
a set instead.  This breaks the terms in a derivative regular expression up, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   930
allowing us to understand what are the "atomic" components of it.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   931
For example, To compute what regular expression $x^*(xx + y)^*$'s 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   932
derivative against $x$ is made of, one can do a partial derivative
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   933
of it and get two singleton sets $\{x^* \cdot (xx + y)^*\}$ and $\{x \cdot (xx + y) ^* \}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   934
from $\partial_x(x^*) \cdot (xx + y) ^*$ and $\partial_x((xx + y)^*)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   935
To get all the "atomic" components of a regular expression's possible derivatives,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   936
there is a procedure Antimirov called $\textit{lf}$, short for "linear forms", that takes
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   937
whatever character is available at the head of the string inside the language of a
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   938
regular expression, and gives back the character and the derivative regular expression
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   939
as a pair (which he called "monomial"):
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   940
 \begin{center}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   941
 \begin{tabular}{ccc}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   942
 $\lf(\ONE)$ & $=$ & $\phi$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   943
$\lf(c)$ & $=$ & $\{(c, \ONE) \}$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   944
 $\lf(a+b)$ & $=$ & $\lf(a) \cup \lf(b)$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   945
 $\lf(r^*)$ & $=$ & $\lf(r) \bigodot \lf(r^*)$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   946
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   947
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   948
%TODO: completion
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   949
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   950
There is a slight difference in the last three clauses compared
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   951
with $\partial$: instead of a dot operator $ \textit{rset} \cdot r$ that attaches the regular 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   952
expression $r$ with every element inside $\textit{rset}$ to create a set of 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   953
sequence derivatives, it uses the "circle dot" operator $\bigodot$ which operates 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   954
on a set of monomials (which Antimirov called "linear form") and a regular 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   955
expression, and returns a linear form:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   956
 \begin{center}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   957
 \begin{tabular}{ccc}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   958
 $l \bigodot (\ZERO)$ & $=$ & $\phi$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   959
 $l \bigodot (\ONE)$ & $=$ & $l$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   960
 $\phi \bigodot t$ & $=$ & $\phi$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   961
 $\{ (x, \ZERO) \} \bigodot t$ & $=$ & $\{(x,\ZERO) \}$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   962
 $\{ (x, \ONE) \} \bigodot t$ & $=$ & $\{(x,t) \}$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   963
  $\{ (x, p) \} \bigodot t$ & $=$ & $\{(x,p\cdot t) \}$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   964
 $\lf(a+b)$ & $=$ & $\lf(a) \cup \lf(b)$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   965
 $\lf(r^*)$ & $=$ & $\lf(r) \cdot \lf(r^*)$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   966
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   967
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   968
%TODO: completion
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   969
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   970
 Some degree of simplification is applied when doing $\bigodot$, for example,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   971
 $l \bigodot (\ZERO) = \phi$ corresponds to $r \cdot \ZERO \rightsquigarrow \ZERO$,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   972
 and  $l \bigodot (\ONE) = l$ to $l \cdot \ONE \rightsquigarrow l$, and
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   973
  $\{ (x, \ZERO) \} \bigodot t = \{(x,\ZERO) \}$ to $\ZERO \cdot x \rightsquigarrow \ZERO$,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   974
  and so on.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   975
  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   976
  With the function $\lf$ one can compute all possible partial derivatives $\partial_{UNIV}(r)$ of a regex $r$ with 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   977
  an iterative procedure:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   978
   \begin{center}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   979
 \begin{tabular}{llll}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   980
$\textit{while}$ & $(\Delta_i \neq \phi)$  &                &          \\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   981
 		       &  $\Delta_{i+1}$           &        $ =$ & $\lf(\Delta_i) - \PD_i$ \\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   982
		       &  $\PD_{i+1}$              &         $ =$ & $\Delta_{i+1} \cup \PD_i$ \\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   983
$\partial_{UNIV}(r)$ & $=$ & $\PD$ &		     
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   984
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   985
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   986
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   987
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   988
 $(r_1 + r_2) \cdot r_3 \longrightarrow (r_1 \cdot r_3) + (r_2 \cdot r_3)$,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   989
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   990
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   991
However, if we introduce them in our
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   992
setting we would lose the POSIX property of our calculated values. 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   993
A simple example for this would be the regex $(a + a\cdot b)\cdot(b\cdot c + c)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   994
If we split this regex up into $a\cdot(b\cdot c + c) + a\cdot b \cdot (b\cdot c + c)$, the lexer 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   995
would give back $\Left(\Seq(\Char(a), \Left(\Char(b \cdot c))))$ instead of
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   996
what we want: $\Seq(\Right(ab), \Right(c))$. Unless we can store the structural information
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   997
in all the places where a transformation of the form $(r_1 + r_2)\cdot r \rightarrow r_1 \cdot r + r_2 \cdot r$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   998
occurs, and apply them in the right order once we get 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
   999
a result of the "aggressively simplified" regex, it would be impossible to still get a $\POSIX$ value.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1000
This is unlike the simplification we had before, where the rewriting rules 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1001
such  as $\ONE \cdot r \rightsquigarrow r$, under which our lexer will give the same value.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1002
We will discuss better
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1003
bounds in the last section of this chapter.\\[-6.5mm]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1004
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1005
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1006
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1007
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1008
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1009
%	SECTION ??
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1010
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1011
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1012
\section{"Closed Forms" of regular expressions' derivatives w.r.t strings}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1013
To embark on getting the "closed forms" of regexes, we first
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1014
define a few auxiliary definitions to make expressing them smoothly.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1015
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1016
 \begin{center}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1017
 \begin{tabular}{ccc}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1018
 $\sflataux{\AALTS{ }{r :: rs}}$ & $=$ & $\sflataux{r} @ rs$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1019
$\sflataux{\AALTS{ }{[]}}$ & $ = $ & $ []$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1020
$\sflataux r$ & $=$ & $ [r]$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1021
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1022
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1023
The intuition behind $\sflataux{\_}$ is to break up nested regexes 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1024
of the $(\ldots((r_1 + r_2) + r_3) + \ldots )$(left-associated) shape
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1025
into a more "balanced" list: $\AALTS{\_}{[r_1,\, r_2 ,\, r_3, \ldots]}$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1026
It will return the singleton list $[r]$ otherwise.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1027
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1028
$\sflat{\_}$ works the same  as $\sflataux{\_}$, except that it keeps
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1029
the output type a regular expression, not a list:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1030
 \begin{center} 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1031
 \begin{tabular}{ccc}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1032
 $\sflat{\AALTS{ }{r :: rs}}$ & $=$ & $\sflataux{r} @ rs$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1033
$\sflat{\AALTS{ }{[]}}$ & $ = $ & $ \AALTS{ }{[]}$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1034
$\sflat r$ & $=$ & $ [r]$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1035
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1036
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1037
$\sflataux{\_}$  and $\sflat{\_}$ is only recursive in terms of the
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1038
 first element of the list of children of
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1039
an alternative regex ($\AALTS{ }{rs}$), and is purposefully built for  dealing with the regular expression
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1040
$r_1 \cdot r_2 \backslash s$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1041
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1042
With $\sflat{\_}$ and $\sflataux{\_}$ we make 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1043
precise what  "closed forms" we have for the sequence derivatives and their simplifications,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1044
in other words, how can we construct $(r_1 \cdot r_2) \backslash s$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1045
and $\bderssimp{(r_1\cdot r_2)}{s}$,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1046
if we are only allowed to use a combination of $r_1 \backslash s'$ ($\bderssimp{r_1}{s'}$)
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1047
and  $r_2 \backslash s'$ ($\bderssimp{r_2}{s'}$), where $s'$  ranges over 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1048
the substring of $s$?
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1049
First let's look at a series of derivatives steps on a sequence 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1050
regular expression,  (assuming) that each time the first
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1051
component of the sequence is always nullable):
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1052
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1053
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1054
$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$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1055
$((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
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1056
 \ldots$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1057
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1058
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1059
%TODO: cite indian paper
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1060
Indianpaper have  come up with a slightly more formal way of putting the above process:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1061
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1062
$r_1 \cdot r_2 \backslash (c_1 :: c_2 ::\ldots c_n) \myequiv r_1 \backslash (c_1 :: c_2:: \ldots c_n) +
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1063
\delta(\nullable(r_1 \backslash (c_1 :: c_2 \ldots c_{n-1}) ), r_2 \backslash (c_n)) + \ldots
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1064
+ \delta (\nullable(r_1), r_2\backslash (c_1 :: c_2 ::\ldots c_n))$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1065
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1066
where  $\delta(b, r)$ will produce $r$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1067
if $b$ evaluates to true, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1068
and $\ZERO$ otherwise.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1069
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1070
 But the $\myequiv$ sign in the above equation means language equivalence instead of syntactical
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1071
 equivalence. To make this intuition useful 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1072
 for a formal proof, we need something
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1073
stronger than language equivalence.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1074
With the help of $\sflat{\_}$ we can state the equation in Indianpaper
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1075
more rigorously:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1076
\begin{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1077
$\sflat{(r_1 \cdot r_2) \backslash s} = \RALTS{ (r_1 \backslash s) \cdot r_2 :: (\map (r_2 \backslash \_) (\vsuf{s}{r_1}))}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1078
\end{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1079
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1080
The function $\vsuf{\_}{\_}$ is defined recursively on the structure of the string:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1081
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1082
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1083
\begin{tabular}{lcl}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1084
$\vsuf{[]}{\_} $ & $=$ &  $[]$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1085
$\vsuf{c::cs}{r_1}$ & $ =$ & $ \textit{if} (\rnullable{r_1}) \textit{then} \; (\vsuf{cs}{(\rder{c}{r_1})}) @ [c :: cs]$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1086
                                     && $\textit{else} \; (\vsuf{cs}{(\rder{c}{r_1}) })  $
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1087
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1088
\end{center}                   
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1089
It takes into account which prefixes $s'$ of $s$ would make $r \backslash s'$ nullable,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1090
and keep a list of suffixes $s''$ such that $s' @ s'' = s$. The list is sorted in
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1091
the order $r_2\backslash s''$ appears in $(r_1\cdot r_2)\backslash s$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1092
In essence, $\vsuf{\_}{\_}$ is doing a "virtual derivative" of $r_1 \cdot r_2$, but instead of producing 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1093
the entire result of  $(r_1 \cdot r_2) \backslash s$, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1094
it only stores all the $s''$ such that $r_2 \backslash s''$  are occurring terms in $(r_1\cdot r_2)\backslash s$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1095
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1096
With this we can also add simplifications to both sides and get
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1097
\begin{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1098
$\rsimp{\sflat{(r_1 \cdot r_2) \backslash s} }= \rsimp{\AALTS{[[]}{ (r_1 \backslash s) \cdot r_2 :: (\map (r_2 \backslash \_) (\vsuf{s}{r_1}))}}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1099
\end{lemma}
554
Chengsong
parents: 553
diff changeset
  1100
Together with the idempotency property of $\rsimp{}$\ref{rsimpIdem},
532
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1101
%TODO: state the idempotency property of rsimp
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1102
it is possible to convert the above lemma to obtain a "closed form"
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1103
for  derivatives nested with simplification:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1104
\begin{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1105
$\rderssimp{(r_1 \cdot r_2)}{s} = \rsimp{\AALTS{[[]}{ (r_1 \backslash s) \cdot r_2 :: (\map (r_2 \backslash \_) (\vsuf{s}{r_1}))}}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1106
\end{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1107
And now the reason we have (1) in section 1 is clear:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1108
$\rsize{\rsimp{\RALTS{ (r_1 \backslash s) \cdot r_2 :: (\map \;(r_2 \backslash \_) \; (\vsuf{s}{r_1}))}}}$, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1109
is equal to $\rsize{\rsimp{\RALTS{ ((r_1 \backslash s) \cdot r_2 :: (\map \; (r_2 \backslash \_) \; (\textit{Suffix}(r1, s))))}}}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1110
    as $\vsuf{s}{r_1}$ is one way of expressing the list $\textit{Suffix}( r_1, s)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1111
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1112
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1113
%	SECTION 3
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1114
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1115
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1116
\section{interaction between $\distinctWith$ and $\flts$}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1117
Note that it is not immediately obvious that 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1118
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1119
$\llbracket \distinctWith (\flts \textit{rs}) = \phi \rrbracket   \leq \llbracket \distinctWith \textit{rs} = \phi \rrbracket  $.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1120
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1121
The intuition is that if we remove duplicates from the $\textit{LHS}$, at least the same amount of 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1122
duplicates will be removed from the list $\textit{rs}$ in the $\textit{RHS}$. 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1123
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1124
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1125
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1126
%	SECTION syntactic equivalence under simp
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1127
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1128
\section{Syntactic Equivalence Under $\simp$}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1129
We prove that minor differences can be annhilated
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1130
by $\simp$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1131
For example,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1132
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1133
$\simp \;(\simpALTs\; (\map \;(\_\backslash \; x)\; (\distinct \; \mathit{rs}\; \phi))) = 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1134
 \simp \;(\simpALTs \;(\distinct \;(\map \;(\_ \backslash\; x) \; \mathit{rs}) \; \phi))$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1135
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1136
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1137
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1138
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1139
%	SECTION ALTS CLOSED FORM
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1140
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1141
\section{A Closed Form for \textit{ALTS}}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1142
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
  1143
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1144
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1145
There are a few key steps, one of these steps is
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1146
\[
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1147
rsimp (rsimp\_ALTs (map (rder x) (rdistinct (rflts (map (rsimp \circ (\lambda r. rders\_simp r xs)) rs)) {})))
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1148
= rsimp (rsimp\_ALTs (rdistinct (map (rder x) (rflts (map (rsimp \circ (\lambda r. rders\_simp r xs)) rs))) {}))
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1149
\]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1150
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1151
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1152
One might want to prove this by something a simple statement like: 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1153
$map (rder x) (rdistinct rs rset) = rdistinct (map (rder x) rs) (rder x) ` rset)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1154
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1155
For this to hold we want the $\textit{distinct}$ function to pick up
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1156
the elements before and after derivatives correctly:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1157
$r \in rset \equiv (rder x r) \in (rder x rset)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1158
which essentially requires that the function $\backslash$ is an injective mapping.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1159
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1160
Unfortunately the function $\backslash c$ is not an injective mapping.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1161
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1162
\subsection{function $\backslash c$ is not injective (1-to-1)}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1163
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1164
The derivative $w.r.t$ character $c$ is not one-to-one.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1165
Formally,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1166
	$\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
  1167
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1168
This property is trivially true for the
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1169
character regex example:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1170
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1171
	$r_1 = e; \; r_2 = d;\; r_1 \backslash c = \ZERO = r_2 \backslash c$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1172
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1173
But apart from the cases where the derivative
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1174
output is $\ZERO$, are there non-trivial results
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1175
of derivatives which contain strings?
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1176
The answer is yes.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1177
For example,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1178
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1179
	Let $r_1 = a^*b\;\quad r_2 = (a\cdot a^*)\cdot b + b$.\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1180
	where $a$ is not nullable.\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1181
	$r_1 \backslash c = ((a \backslash c)\cdot a^*)\cdot c + b \backslash c$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1182
	$r_2 \backslash c = ((a \backslash c)\cdot a^*)\cdot c + b \backslash c$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1183
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1184
We start with two syntactically different regexes,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1185
and end up with the same derivative result.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1186
This is not surprising as we have such 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1187
equality as below in the style of Arden's lemma:\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1188
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1189
	$L(A^*B) = L(A\cdot A^* \cdot B + B)$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1190
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1191
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1192
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1193
%	SECTION 4
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1194
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1195
\section{A Bound for the Star Regular Expression}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1196
We have shown how to control the size of the sequence regular expression $r_1\cdot r_2$ using
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1197
the "closed form" of $(r_1 \cdot r_2) \backslash s$ and then 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1198
the property of the $\distinct$ function.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1199
Now we try to get a bound on $r^* \backslash s$ as well.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1200
Again, we first look at how a star's derivatives evolve, if they grow maximally: 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1201
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1202
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1203
$r^* \quad \longrightarrow_{\backslash c}  \quad   (r\backslash c)  \cdot  r^* \quad \longrightarrow_{\backslash c'}  \quad
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1204
r \backslash cc'  \cdot r^* + r \backslash c' \cdot r^*  \quad \longrightarrow_{\backslash c''} \quad 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1205
(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'''}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1206
\quad \ldots$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1207
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1208
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1209
When we have a string $s = c :: c' :: c'' \ldots$  such that $r \backslash c$, $r \backslash cc'$, $r \backslash c'$, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1210
$r \backslash cc'c''$, $r \backslash c'c''$, $r\backslash c''$ etc. are all nullable,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1211
the number of terms in $r^* \backslash s$ will grow exponentially, causing the size
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1212
of the derivatives $r^* \backslash s$ to grow exponentially, even if we do not 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1213
count the possible size explosions of $r \backslash c$ themselves.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1214
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1215
Thanks to $\flts$ and $\distinctWith$, we are able to open up regexes like
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1216
$(r_1 \backslash cc'c'' \cdot r^* + r \backslash c'') + (r \backslash c'c'' \cdot r^* + r \backslash c'' \cdot r^*) $ 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1217
into $\RALTS{[r_1 \backslash cc'c'' \cdot r^*, r \backslash c'', r \backslash c'c'' \cdot r^*, r \backslash c'' \cdot r^*]}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1218
and then de-duplicate terms of the form $r\backslash s' \cdot r^*$ ($s'$ being a substring of $s$).
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1219
For this we define $\hflataux{\_}$ and $\hflat{\_}$, similar to $\sflataux{\_}$ and $\sflat{\_}$:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1220
%TODO: definitions of  and \hflataux \hflat
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1221
 \begin{center}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1222
 \begin{tabular}{ccc}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1223
 $\hflataux{r_1 + r_2}$ & $=$ & $\hflataux{r_1} @ \hflataux{r_2}$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1224
$\hflataux r$ & $=$ & $ [r]$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1225
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1226
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1227
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1228
 \begin{center}  
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1229
 \begin{tabular}{ccc}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1230
 $\hflat{r_1 + r_2}$ & $=$ & $\RALTS{\hflataux{r_1} @ \hflataux{r_2}}$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1231
$\hflat r$ & $=$ & $ r$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1232
\end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1233
\end{center}s
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1234
Again these definitions are tailor-made for dealing with alternatives that have
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1235
originated from a star's derivatives, so we don't attempt to open up all possible 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1236
regexes of the form $\RALTS{rs}$, where $\textit{rs}$ might not contain precisely 2
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1237
elements.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1238
We give a predicate for such "star-created" regular expressions:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1239
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1240
\begin{tabular}{lcr}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1241
         &    &       $\createdByStar{(\RSEQ{ra}{\RSTAR{rb}}) }$\\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1242
 $\createdByStar{r_1} \land \createdByStar{r_2} $ & $ \Longrightarrow$ & $\createdByStar{(r_1 + r_2)}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1243
 \end{tabular}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1244
 \end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1245
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1246
 These definitions allows us the flexibility to talk about 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1247
 regular expressions in their most convenient format,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1248
 for example, flattened out $\RALTS{[r_1, r_2, \ldots, r_n]} $
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1249
 instead of binary-nested: $((r_1 + r_2) + (r_3 + r_4)) + \ldots$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1250
 These definitions help express that certain classes of syntatically 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1251
 distinct regular expressions are actually the same under simplification.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1252
 This is not entirely true for annotated regular expressions: 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1253
 %TODO: bsimp bders \neq bderssimp
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1254
 \begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1255
 $(1+ (c\cdot \ASEQ{bs}{c^*}{c} ))$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1256
 \end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1257
 For bit-codes, the order in which simplification is applied
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1258
 might cause a difference in the location they are placed.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1259
 If we want something like
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1260
 \begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1261
 $\bderssimp{r}{s} \myequiv \bsimp{\bders{r}{s}}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1262
 \end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1263
 Some "canonicalization" procedure is required,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1264
 which either pushes all the common bitcodes to nodes
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1265
  as senior as possible:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1266
  \begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1267
  $_{bs}(_{bs_1 @ bs'}r_1 + _{bs_1 @ bs''}r_2) \rightarrow _{bs @ bs_1}(_{bs'}r_1 + _{bs''}r_2) $
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1268
  \end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1269
 or does the reverse. However bitcodes are not of interest if we are talking about
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1270
 the $\llbracket r \rrbracket$ size of a regex.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1271
 Therefore for the ease and simplicity of producing a
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1272
 proof for a size bound, we are happy to restrict ourselves to 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1273
 unannotated regular expressions, and obtain such equalities as
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1274
 \begin{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1275
 $\rsimp{r_1 + r_2} = \rsimp{\RALTS{\hflataux{r_1} @ \hflataux{r_2}}}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1276
 \end{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1277
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1278
 \begin{proof}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1279
 By using the rewriting relation $\rightsquigarrow$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1280
 \end{proof}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1281
 %TODO: rsimp sflat
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1282
And from this we obtain a proof that a star's derivative will be the same
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1283
as if it had all its nested alternatives created during deriving being flattened out:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1284
 For example,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1285
 \begin{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1286
 $\createdByStar{r} \implies \rsimp{r} = \rsimp{\RALTS{\hflataux{r}}}$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1287
 \end{lemma}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1288
 \begin{proof}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1289
 By structural induction on $r$, where the induction rules are these of $\createdByStar{_}$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1290
 \end{proof}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1291
% The simplification of a flattened out regular expression, provided it comes
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1292
%from the derivative of a star, is the same as the one nested.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1293
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1294
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1295
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1296
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1297
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1298
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1299
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1300
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1301
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1302
One might wonder the actual bound rather than the loose bound we gave
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1303
for the convenience of an easier proof.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1304
How much can the regex $r^* \backslash s$ grow? 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1305
As  earlier graphs have shown,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1306
%TODO: reference that graph where size grows quickly
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1307
 they can grow at a maximum speed
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1308
  exponential $w.r.t$ the number of characters, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1309
but will eventually level off when the string $s$ is long enough.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1310
If they grow to a size exponential $w.r.t$ the original regex, our algorithm
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1311
would still be slow.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1312
And unfortunately, we have concrete examples
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1313
where such regexes grew exponentially large before levelling off:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1314
$(a ^ * + (aa) ^ * + (aaa) ^ * + \ldots + 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1315
(\underbrace{a \ldots a}_{\text{n a's}})^*$ will already have a maximum
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1316
 size that is  exponential on the number $n$ 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1317
under our current simplification rules:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1318
%TODO: graph of a regex whose size increases exponentially.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1319
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1320
\begin{tikzpicture}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1321
    \begin{axis}[
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1322
        height=0.5\textwidth,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1323
        width=\textwidth,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1324
        xlabel=number of a's,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1325
        xtick={0,...,9},
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1326
        ylabel=maximum size,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1327
        ymode=log,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1328
       log basis y={2}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1329
]
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1330
        \addplot[mark=*,blue] table {re-chengsong.data};
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1331
    \end{axis}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1332
\end{tikzpicture}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1333
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1334
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1335
For convenience we use $(\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*)^*$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1336
to express $(a ^ * + (aa) ^ * + (aaa) ^ * + \ldots + 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1337
(\underbrace{a \ldots a}_{\text{n a's}})^*$ in the below discussion.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1338
The exponential size is triggered by that the regex
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1339
$\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1340
inside the $(\ldots) ^*$ having exponentially many
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1341
different derivatives, despite those difference being minor.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1342
$(\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
  1343
will therefore contain the following terms (after flattening out all nested 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1344
alternatives):
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1345
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1346
$(\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
  1347
$(1 \leq m' \leq m )$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1348
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1349
These terms are distinct for $m' \leq L.C.M.(1, \ldots, n)$ (will be explained in appendix).
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1350
 With each new input character taking the derivative against the intermediate result, more and more such distinct
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1351
 terms will accumulate, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1352
until the length reaches $L.C.M.(1, \ldots, n)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1353
$\textit{distinctBy}$ will not be able to de-duplicate any two of these terms 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1354
$(\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
  1355
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1356
$(\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
  1357
 where $m' \neq m''$ \\
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1358
 as they are slightly different.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1359
 This means that with our current simplification methods,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1360
 we will not be able to control the derivative so that
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1361
 $\llbracket \bderssimp{r}{s} \rrbracket$ stays polynomial %\leq O((\llbracket r\rrbacket)^c)$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1362
 as there are already exponentially many terms.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1363
 These terms are similar in the sense that the head of those terms
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1364
 are all consisted of sub-terms of the form: 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1365
 $(\underbrace{a \ldots a}_{\text{j a's}})\cdot  (\underbrace{a \ldots a}_{\text{i a's}})^* $.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1366
 For  $\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*$, there will be at most
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1367
 $n * (n + 1) / 2$ such terms. 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1368
 For example, $(a^* + (aa)^* + (aaa)^*) ^*$'s derivatives
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1369
 can be described by 6 terms:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1370
 $a^*$, $a\cdot (aa)^*$, $ (aa)^*$, 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1371
 $aa \cdot (aaa)^*$, $a \cdot (aaa)^*$, and $(aaa)^*$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1372
The total number of different "head terms",  $n * (n + 1) / 2$,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1373
 is proportional to the number of characters in the regex 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1374
$(\oplus_{i=1}^{n} (\underbrace{a \ldots a}_{\text{i a's}})^*)^*$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1375
This suggests a slightly different notion of size, which we call the 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1376
alphabetic width:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1377
%TODO:
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1378
(TODO: Alphabetic width def.)
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1379
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1380
 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1381
Antimirov\parencite{Antimirov95} has proven that 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1382
$\textit{PDER}_{UNIV}(r) \leq \textit{awidth}(r)$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1383
where $\textit{PDER}_{UNIV}(r)$ is a set of all possible subterms
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1384
created by doing derivatives of $r$ against all possible strings.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1385
If we can make sure that at any moment in our lexing algorithm our 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1386
intermediate result hold at most one copy of each of the 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1387
subterms then we can get the same bound as Antimirov's.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1388
This leads to the algorithm in the next chapter.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1389
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1390
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1391
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1392
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1393
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1394
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1395
%	SECTION 1
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1396
%----------------------------------------------------------------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1397
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1398
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1399
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1400
%	SUBSECTION 1
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1401
%-----------------------------------
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1402
\subsection{Syntactic Equivalence Under $\simp$}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1403
We prove that minor differences can be annhilated
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1404
by $\simp$.
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1405
For example,
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1406
\begin{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1407
$\simp \;(\simpALTs\; (\map \;(\_\backslash \; x)\; (\distinct \; \mathit{rs}\; \phi))) = 
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1408
 \simp \;(\simpALTs \;(\distinct \;(\map \;(\_ \backslash\; x) \; \mathit{rs}) \; \phi))$
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1409
\end{center}
cc54ce075db5 restructured
Chengsong
parents:
diff changeset
  1410