corr_pr_sketch.tex
author Chengsong
Sun, 30 Jun 2019 20:07:54 +0100
changeset 33 aa3d23002080
parent 17 3241b1e71633
child 73 569280c1f56c
permissions -rw-r--r--
hope this works
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8
Chengsong
parents:
diff changeset
     1
\documentclass{article}
Chengsong
parents:
diff changeset
     2
\usepackage[utf8]{inputenc}
Chengsong
parents:
diff changeset
     3
\usepackage[english]{babel}
Chengsong
parents:
diff changeset
     4
\usepackage{listings}
Chengsong
parents:
diff changeset
     5
 \usepackage{amsthm}
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
     6
 \usepackage{hyperref}
8
Chengsong
parents:
diff changeset
     7
 \usepackage[margin=0.5in]{geometry}
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
     8
\usepackage{pmboxdraw}
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
     9
8
Chengsong
parents:
diff changeset
    10
\theoremstyle{theorem}
Chengsong
parents:
diff changeset
    11
\newtheorem{theorem}{Theorem}
Chengsong
parents:
diff changeset
    12
Chengsong
parents:
diff changeset
    13
\theoremstyle{lemma}
Chengsong
parents:
diff changeset
    14
\newtheorem{lemma}{Lemma}
Chengsong
parents:
diff changeset
    15
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
    16
\newcommand{\lemmaautorefname}{Lemma}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
    17
8
Chengsong
parents:
diff changeset
    18
\theoremstyle{definition}
Chengsong
parents:
diff changeset
    19
 \newtheorem{definition}{Definition}
Chengsong
parents:
diff changeset
    20
\begin{document}
17
Chengsong
parents: 11
diff changeset
    21
This is an outline of the structure of the paper with a little bit of flesh in it.
Chengsong
parents: 11
diff changeset
    22
\section{The Flow of thought process}
8
Chengsong
parents:
diff changeset
    23
Chengsong
parents:
diff changeset
    24
17
Chengsong
parents: 11
diff changeset
    25
\begin{definition}{Regular Expressions and values}
8
Chengsong
parents:
diff changeset
    26
\begin{verbatim}
17
Chengsong
parents: 11
diff changeset
    27
TODO
8
Chengsong
parents:
diff changeset
    28
\end{verbatim}
Chengsong
parents:
diff changeset
    29
\end{definition}
Chengsong
parents:
diff changeset
    30
17
Chengsong
parents: 11
diff changeset
    31
Value is.a parse tree for the regular expression matching the string.
Chengsong
parents: 11
diff changeset
    32
Chengsong
parents: 11
diff changeset
    33
Chengsong
parents: 11
diff changeset
    34
Chengsong
parents: 11
diff changeset
    35
\begin{definition}{nullable}
8
Chengsong
parents:
diff changeset
    36
\begin{verbatim}
17
Chengsong
parents: 11
diff changeset
    37
TODO
Chengsong
parents: 11
diff changeset
    38
\end{verbatim}
Chengsong
parents: 11
diff changeset
    39
\end{definition}
Chengsong
parents: 11
diff changeset
    40
The idea behind nullable: whether it contains the empty string.
Chengsong
parents: 11
diff changeset
    41
Chengsong
parents: 11
diff changeset
    42
\begin{definition}{derivatives}
Chengsong
parents: 11
diff changeset
    43
TODO
Chengsong
parents: 11
diff changeset
    44
Chengsong
parents: 11
diff changeset
    45
\end{definition}
Chengsong
parents: 11
diff changeset
    46
Chengsong
parents: 11
diff changeset
    47
This definition can be used for matching algorithm.
Chengsong
parents: 11
diff changeset
    48
Chengsong
parents: 11
diff changeset
    49
\begin{definition}{matcher}
Chengsong
parents: 11
diff changeset
    50
TODO
Chengsong
parents: 11
diff changeset
    51
\end{definition}
Chengsong
parents: 11
diff changeset
    52
Chengsong
parents: 11
diff changeset
    53
\begin{definition}{POSIX values}
Chengsong
parents: 11
diff changeset
    54
TODO
Chengsong
parents: 11
diff changeset
    55
\end{definition}
Chengsong
parents: 11
diff changeset
    56
Chengsong
parents: 11
diff changeset
    57
\begin{definition}{POSIX lexer algorithm}
Chengsong
parents: 11
diff changeset
    58
TODO
Chengsong
parents: 11
diff changeset
    59
\end{definition}
Chengsong
parents: 11
diff changeset
    60
Chengsong
parents: 11
diff changeset
    61
\begin{definition}{POSIX lexer algorithm with simplification}
Chengsong
parents: 11
diff changeset
    62
TODO
Chengsong
parents: 11
diff changeset
    63
\end{definition}
Chengsong
parents: 11
diff changeset
    64
This simplification algorithm is rather complicated as it entangles derivative, simplification and value reconstruction. We need to split the regular expression structure of the information for lexing so that simplifcation only changes the regex but does not destroy the information for reconstructing the resulting value.\\
Chengsong
parents: 11
diff changeset
    65
Chengsong
parents: 11
diff changeset
    66
Introduce regex with auxiliary information:
Chengsong
parents: 11
diff changeset
    67
Chengsong
parents: 11
diff changeset
    68
\begin{definition}{annotated regular expression}
Chengsong
parents: 11
diff changeset
    69
TODO
Chengsong
parents: 11
diff changeset
    70
\end{definition}
Chengsong
parents: 11
diff changeset
    71
Chengsong
parents: 11
diff changeset
    72
\begin{definition}{encoding}
Chengsong
parents: 11
diff changeset
    73
TODO
Chengsong
parents: 11
diff changeset
    74
\end{definition}
Chengsong
parents: 11
diff changeset
    75
Encoding translates values into bit codes with some information loss.
Chengsong
parents: 11
diff changeset
    76
Chengsong
parents: 11
diff changeset
    77
\begin{definition}{decoding}
Chengsong
parents: 11
diff changeset
    78
TODO
Chengsong
parents: 11
diff changeset
    79
\end{definition}
Chengsong
parents: 11
diff changeset
    80
Decoding translates bitcodes back into values with the help of regex to recover the structure.\\
Chengsong
parents: 11
diff changeset
    81
Chengsong
parents: 11
diff changeset
    82
During different phases of lexing, we sometimes already know what the value would look like if we match the branch of regex with the string(e.g. a STAR with 1 more iteration, a left/right value), so we can partially encode the value at diffferent phases of the algorithm for later decoding.
Chengsong
parents: 11
diff changeset
    83
\\
Chengsong
parents: 11
diff changeset
    84
Examples of such partial encoding:
Chengsong
parents: 11
diff changeset
    85
Chengsong
parents: 11
diff changeset
    86
\begin{definition}{internalise}
Chengsong
parents: 11
diff changeset
    87
TODO
Chengsong
parents: 11
diff changeset
    88
\end{definition}
Chengsong
parents: 11
diff changeset
    89
When doing internalise on ALT:\\
Chengsong
parents: 11
diff changeset
    90
Whichever branch is chosen, we know exactly the shape of the value, and therefore can get the bit code for such a value: Left corresponds to Z and Right to S
Chengsong
parents: 11
diff changeset
    91
Chengsong
parents: 11
diff changeset
    92
\begin{definition}{bmkeps}
Chengsong
parents: 11
diff changeset
    93
TODO
Chengsong
parents: 11
diff changeset
    94
\end{definition}
Chengsong
parents: 11
diff changeset
    95
bmkeps on the STAR case:\\
Chengsong
parents: 11
diff changeset
    96
We know there could be no more iteration for a star if we want to get a POSIX value for an empty string, so the value must be Stars [], corresponding to an S in the bit code.
Chengsong
parents: 11
diff changeset
    97
Chengsong
parents: 11
diff changeset
    98
\begin{definition}{bder}
Chengsong
parents: 11
diff changeset
    99
TODO
Chengsong
parents: 11
diff changeset
   100
\end{definition}
Chengsong
parents: 11
diff changeset
   101
SEQ case with the first regex nullable:\\
Chengsong
parents: 11
diff changeset
   102
bmkeps will extract the value for how a1 mathces the empty string and encode it into a bit sequence.
Chengsong
parents: 11
diff changeset
   103
Chengsong
parents: 11
diff changeset
   104
\begin{definition}{blexer}
Chengsong
parents: 11
diff changeset
   105
\begin{verbatim}
Chengsong
parents: 11
diff changeset
   106
TODO
8
Chengsong
parents:
diff changeset
   107
\end{verbatim}
Chengsong
parents:
diff changeset
   108
\end{definition}
Chengsong
parents:
diff changeset
   109
17
Chengsong
parents: 11
diff changeset
   110
adding simplifcation.\\
Chengsong
parents: 11
diff changeset
   111
Chengsong
parents: 11
diff changeset
   112
size of simplified regex: smaller than Antimirov's pder.\\
8
Chengsong
parents:
diff changeset
   113
17
Chengsong
parents: 11
diff changeset
   114
8
Chengsong
parents:
diff changeset
   115
17
Chengsong
parents: 11
diff changeset
   116
The rest of the document is the residual from a previous doc and may be deleted.\\
8
Chengsong
parents:
diff changeset
   117
\begin{definition}{bsimp}
Chengsong
parents:
diff changeset
   118
\begin{verbatim}
Chengsong
parents:
diff changeset
   119
  def bsimp(r: ARexp): ARexp = r match {
Chengsong
parents:
diff changeset
   120
    case ASEQ(bs1, r1, r2) => (bsimp(r1), bsimp(r2)) match {
Chengsong
parents:
diff changeset
   121
        case (AZERO, _) => AZERO
Chengsong
parents:
diff changeset
   122
        case (_, AZERO) => AZERO
Chengsong
parents:
diff changeset
   123
        case (AONE(bs2), r2s) => fuse(bs1 ++ bs2, r2s)
Chengsong
parents:
diff changeset
   124
        case (r1s, r2s) => ASEQ(bs1, r1s, r2s)
Chengsong
parents:
diff changeset
   125
    }
Chengsong
parents:
diff changeset
   126
    case AALTS(bs1, rs) => {
Chengsong
parents:
diff changeset
   127
      val rs_simp = rs.map(bsimp)
Chengsong
parents:
diff changeset
   128
      val flat_res = flats(rs_simp)
Chengsong
parents:
diff changeset
   129
      val dist_res = distinctBy(flat_res, erase)
Chengsong
parents:
diff changeset
   130
      dist_res match {
Chengsong
parents:
diff changeset
   131
        case Nil => AZERO
Chengsong
parents:
diff changeset
   132
        case s :: Nil => fuse(bs1, s)
Chengsong
parents:
diff changeset
   133
        case rs => AALTS(bs1, rs)  
Chengsong
parents:
diff changeset
   134
      }
Chengsong
parents:
diff changeset
   135
    }
Chengsong
parents:
diff changeset
   136
    //case ASTAR(bs, r) => ASTAR(bs, bsimp(r))
Chengsong
parents:
diff changeset
   137
    case r => r
Chengsong
parents:
diff changeset
   138
  }
Chengsong
parents:
diff changeset
   139
\end{verbatim}
Chengsong
parents:
diff changeset
   140
\end{definition}
Chengsong
parents:
diff changeset
   141
Chengsong
parents:
diff changeset
   142
\begin{definition}{sub-parts of bsimp}
Chengsong
parents:
diff changeset
   143
\begin{itemize}
Chengsong
parents:
diff changeset
   144
\item{flats}\\
Chengsong
parents:
diff changeset
   145
flattens the list.
Chengsong
parents:
diff changeset
   146
\item{dB}\\
Chengsong
parents:
diff changeset
   147
means distinctBy
Chengsong
parents:
diff changeset
   148
\item{Co}\\
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   149
The last matching clause of the function bsimp, with a slight modification to suit later reasoning.
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   150
\begin{verbatim}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   151
def Co(bs1, rs): ARexp = {
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   152
      rs match {
8
Chengsong
parents:
diff changeset
   153
        case Nil => AZERO
Chengsong
parents:
diff changeset
   154
        case s :: Nil => fuse(bs1, s)
Chengsong
parents:
diff changeset
   155
        case rs => AALTS(bs1, rs)  
Chengsong
parents:
diff changeset
   156
      }
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   157
\end{verbatim}
8
Chengsong
parents:
diff changeset
   158
\end{itemize}
Chengsong
parents:
diff changeset
   159
\end{definition}
Chengsong
parents:
diff changeset
   160
Chengsong
parents:
diff changeset
   161
\begin{definition}{fuse}
Chengsong
parents:
diff changeset
   162
\begin{verbatim}
Chengsong
parents:
diff changeset
   163
  def fuse(bs: Bits, r: ARexp) : ARexp = r match {
Chengsong
parents:
diff changeset
   164
    case AZERO => AZERO
Chengsong
parents:
diff changeset
   165
    case AONE(cs) => AONE(bs ++ cs)
Chengsong
parents:
diff changeset
   166
    case ACHAR(cs, f) => ACHAR(bs ++ cs, f)
Chengsong
parents:
diff changeset
   167
    case AALTS(cs, rs) => AALTS(bs ++ cs, rs)
Chengsong
parents:
diff changeset
   168
    case ASEQ(cs, r1, r2) => ASEQ(bs ++ cs, r1, r2)
Chengsong
parents:
diff changeset
   169
    case ASTAR(cs, r) => ASTAR(bs ++ cs, r)
Chengsong
parents:
diff changeset
   170
  }
Chengsong
parents:
diff changeset
   171
\end{verbatim}
Chengsong
parents:
diff changeset
   172
\end{definition}
Chengsong
parents:
diff changeset
   173
Chengsong
parents:
diff changeset
   174
Chengsong
parents:
diff changeset
   175
\begin{definition}{mkepsBC}
Chengsong
parents:
diff changeset
   176
\begin{verbatim}
Chengsong
parents:
diff changeset
   177
  def mkepsBC(r: ARexp) : Bits = r match {
Chengsong
parents:
diff changeset
   178
    case AONE(bs) => bs
Chengsong
parents:
diff changeset
   179
    case AALTS(bs, rs) => {
Chengsong
parents:
diff changeset
   180
      val n = rs.indexWhere(bnullable)
Chengsong
parents:
diff changeset
   181
      bs ++ mkepsBC(rs(n))
Chengsong
parents:
diff changeset
   182
    }
Chengsong
parents:
diff changeset
   183
    case ASEQ(bs, r1, r2) => bs ++ mkepsBC(r1) ++ mkepsBC(r2)
Chengsong
parents:
diff changeset
   184
    case ASTAR(bs, r) => bs ++ List(Z)
Chengsong
parents:
diff changeset
   185
  }
Chengsong
parents:
diff changeset
   186
\end{verbatim}
Chengsong
parents:
diff changeset
   187
\end{definition}
Chengsong
parents:
diff changeset
   188
Chengsong
parents:
diff changeset
   189
\begin{definition}{mkepsBC equicalence}
Chengsong
parents:
diff changeset
   190
\\
Chengsong
parents:
diff changeset
   191
Given 2 nullable annotated regular expressions r1, r2, if mkepsBC(r1) == mkepsBC(r2)
Chengsong
parents:
diff changeset
   192
then r1 and r2 are mkepsBC equivalent, denoted as r1 $\sim_{m\epsilon}$ r2
Chengsong
parents:
diff changeset
   193
\end{definition}
Chengsong
parents:
diff changeset
   194
Chengsong
parents:
diff changeset
   195
\begin{definition}{shorthand notation for ders}
Chengsong
parents:
diff changeset
   196
\\For the sake of reducing verbosity, we sometimes use the shorthand notation
Chengsong
parents:
diff changeset
   197
$d_{c}(r)$ for the function application bder(c, r) and $s(r)$(s here stands for simplification) for the function application bsimp(r) .
Chengsong
parents:
diff changeset
   198
\\We omit the subscript when it is clear from context what that character is and write $d(r)$ instead of $d_{c}(r)$. 
Chengsong
parents:
diff changeset
   199
\\And we omit the parentheses when no confusion can be caused. For example ders\_simp(c, r) can be written as $s(d_{c}(r))$ or even $s d r$ as we know the derivative operation is w.r.t the character c. Here the s and d are more like operators that take an annotated regular expression as an input and return an annotated regular expression as an output
Chengsong
parents:
diff changeset
   200
Chengsong
parents:
diff changeset
   201
\end{definition}
Chengsong
parents:
diff changeset
   202
Chengsong
parents:
diff changeset
   203
Chengsong
parents:
diff changeset
   204
Chengsong
parents:
diff changeset
   205
\begin{definition}{distinctBy operation expressed in a different way--how it transforms the list}\\
Chengsong
parents:
diff changeset
   206
Given two lists rs1 and rs2, we define the operation $--$:\\
Chengsong
parents:
diff changeset
   207
$rs1 -- rs2 := [r \in rs1 |  r \notin rs2]$
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   208
Note that the order each term appears in $rs_1 -- rs_2$ is preserved as in the original list.
8
Chengsong
parents:
diff changeset
   209
\end{definition}
Chengsong
parents:
diff changeset
   210
Chengsong
parents:
diff changeset
   211
Chengsong
parents:
diff changeset
   212
\section{Main Result}
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   213
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   214
\begin{lemma}{simplification function does not simplify an already simplified regex}\label{lma1}\\
8
Chengsong
parents:
diff changeset
   215
bsimp(r) == bsimp(bsimp(r)) holds for any annotated regular expression r.
Chengsong
parents:
diff changeset
   216
\end{lemma}
Chengsong
parents:
diff changeset
   217
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   218
\begin{lemma}{simp and mkeps}\label{lma2}\\
8
Chengsong
parents:
diff changeset
   219
When r is nullable, we have that
Chengsong
parents:
diff changeset
   220
mkeps(bsimp(r)) == mkeps(r)
Chengsong
parents:
diff changeset
   221
\end{lemma}
Chengsong
parents:
diff changeset
   222
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   223
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   224
%\begin{theorem}See~\cref{lma1}.\end{theorem}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   225
%\begin{lemma}\label{lma1}\lipsum[2]\end{lemma}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   226
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   227
\begin{lemma}{mkeps equivalence  w.r.t some syntactically different regular expressions(1 ALTS)}\label{lma3}\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   228
When one of the 2 regular expressions $s(r_1)$ and $s(r_2)$ is of the form ALTS(bs1, rs1), we have that $ds(ALTS(bs, r1, r2)) \sim_{m\epsilon} d(ALTS(bs, sr_1, sr_2))$
8
Chengsong
parents:
diff changeset
   229
\end{lemma}
Chengsong
parents:
diff changeset
   230
\begin{proof}
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   231
By opening up one of the alts and show no additional changes are made.\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   232
Details: $ds(ALTS(bs, r1, r2)) = d Co( bs, dB(flats(sr1, sr2)) )$
8
Chengsong
parents:
diff changeset
   233
\end{proof}
Chengsong
parents:
diff changeset
   234
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   235
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   236
\begin{lemma}{mkepsBC invariant manipulation of bits and notation}\label{lma7}\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   237
ALTS(bs, ALTS(bs1, rs1), ALTS(bs2, rs2)) $\sim_{m\epsilon}$ ALTS(bs, rs1.map(fuse(bs1, \_)) ++ rs2.map(fuse(bs2, \_)) ). \\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   238
We also use $bs2>>rs2 $ as a shorthand notation for rs2.map(fuse(bs2,\_)).
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   239
\end{lemma}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   240
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   241
\begin{lemma}{mkepsBC equivalence w.r.t syntactically different regular expressions(2 ALTS)}\label{lma4}\\
8
Chengsong
parents:
diff changeset
   242
$sr_1 = ALTS(bs1, rs1)$ and $sr_2 = ALTS(bs2, rs2)$ we have  $  d(sr_1 +sr_2 ) \sim_{m\epsilon} d(ALTS(bs, bs1>>rs1 ++ bs2>>rs2))$ 
Chengsong
parents:
diff changeset
   243
\end{lemma}
Chengsong
parents:
diff changeset
   244
\begin{proof}
Chengsong
parents:
diff changeset
   245
We are just fusing bits inside here, there is no other structural change.
Chengsong
parents:
diff changeset
   246
\end{proof}
Chengsong
parents:
diff changeset
   247
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   248
\begin{lemma}{What does dB do to two already simplified ALTS}\label{lma5}\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   249
$d Co(ALTS(bs, dB(bs1>>rs1 ++ bs2>>rs2))) = d Co(ALTS(bs, bs1>>rs1 ++ ((bs2>>rs2)--rs1)        )) $ 
8
Chengsong
parents:
diff changeset
   250
\end{lemma}
Chengsong
parents:
diff changeset
   251
\begin{proof}
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   252
We prove that $ dB(bs1>>rs1 ++ bs2>>rs2) = bs1>>rs1 ++ ((bs2>>rs2)--rs1)$.
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   253
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   254
8
Chengsong
parents:
diff changeset
   255
\end{proof}
Chengsong
parents:
diff changeset
   256
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   257
\begin{lemma}{after opening two previously simplified alts up into terms, length must exceed 2}\label{lma6}\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   258
If sr1, sr2 are of the form ALTS(bs1, rs1), ALTS(bs2, rs2) respectively, then we have that 
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   259
$Co(bs, (bs1>>rs1) ++ (bs2>>rs2)--rs1) = ALTS(bs, bs1>>rs1 ++ (bs2>>rs2)--rs1)$
8
Chengsong
parents:
diff changeset
   260
\end{lemma}
Chengsong
parents:
diff changeset
   261
\begin{proof}
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   262
 $Co(bs, rs) \sim_{m\epsilon} ALTS(bs, rs)$ if $rs$ is a list of length greater than or equal to 2.
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   263
 As suggested by the title of this lemma, ALTS(bs1, rs1) is a result of simplification, which means that rs1 must be composed of at least 2 distinct regular terms. This alone says that $bs1>>rs1 ++ (bs2>>rs2)--rs1$ is a list of length greater than or equal to 2, as the second operand of the concatenation operator $(bs2>>rs2) -- rs1$ can only contribute a non-negative value to the overall length of the list 
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   264
 $bs1>>rs1 ++ (bs2>>rs2)--rs1$.
8
Chengsong
parents:
diff changeset
   265
\end{proof}
Chengsong
parents:
diff changeset
   266
Chengsong
parents:
diff changeset
   267
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   268
\begin{lemma}{mkepsBC equivalence w.r.t syntactically different regular expressions(2 ALTS+ some deletion after derivatives)}\label{lma8}\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   269
$d ALTS(bs, bs1>>rs1 ++ bs2>>rs2) \sim_{m\epsilon} d ALTS(bs, bs1>>rs1 ++ ((bs2>>rs2)--rs1)        ) $ 
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   270
\end{lemma}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   271
\begin{proof}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   272
Let's call $bs1>>rs1$ $rs1'$ and  $bs2>>rs2$ $rs2'$. Then we need to prove $d ALTS(bs, rs1' ++rs2') \sim_{m\epsilon} d ALTS(bs, rs1'++(rs2' -- rs1') )   $.\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   273
We might as well omit the prime in each rs for simplicty of notation and prove $d ALTS(bs, rs1++rs2) \sim_{m\epsilon} d ALTS(bs, rs1++(rs2 -- rs1) )   $.\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   274
We know that the result of derivative is nullable, so there must exist an r in rs1++rs2 s.t. r is nullable.\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   275
If $r \in rs1$, then equivalence holds. If $r \in rs2 \wedge  r \notin rs1$, equivalence holds as well. This completes the proof.
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   276
\end{proof}
8
Chengsong
parents:
diff changeset
   277
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   278
\begin{lemma}{nullability relation between a regex and its simplified version}\label{lma9}\\
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   279
$r\ nullable \iff sr\ nullable $ 
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   280
\end{lemma}
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   281
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   282
\begin{lemma}{concatenation + simp invariance of mkepsBC}\label{lma10}\\
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   283
$mkepsBC r1 \cdot sr2 = mkepsBC r1 \cdot r2$ if both r1 and r2 are nullable.
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   284
\end{lemma}
8
Chengsong
parents:
diff changeset
   285
Chengsong
parents:
diff changeset
   286
Chengsong
parents:
diff changeset
   287
\begin{theorem}{Correctness Result}
Chengsong
parents:
diff changeset
   288
Chengsong
parents:
diff changeset
   289
\begin{itemize}
Chengsong
parents:
diff changeset
   290
Chengsong
parents:
diff changeset
   291
\item{}
Chengsong
parents:
diff changeset
   292
When s is a string in the language L(ar), \\
Chengsong
parents:
diff changeset
   293
ders\_simp(ar, s)  $\sim_{m\epsilon}$ ders(ar, s), \\
Chengsong
parents:
diff changeset
   294
\item{}
Chengsong
parents:
diff changeset
   295
when s is not a string of the language L(ar)
Chengsong
parents:
diff changeset
   296
ders\_simp(ar, s) is not nullable
Chengsong
parents:
diff changeset
   297
\end{itemize}
Chengsong
parents:
diff changeset
   298
\end{theorem}
Chengsong
parents:
diff changeset
   299
Chengsong
parents:
diff changeset
   300
\begin{proof}{Split into 2 parts.}
Chengsong
parents:
diff changeset
   301
\begin{itemize}
Chengsong
parents:
diff changeset
   302
\item
Chengsong
parents:
diff changeset
   303
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   304
8
Chengsong
parents:
diff changeset
   305
When we have an annotated regular expression ar and a string s that matches ar, by the correctness of the algorithm ders, we have that ders(ar, s) is nullable, and that mkepsBC will extract the desired bits for decoding the correct value v for the matching, and v is a POSIX value. Now we prove that mkepsBC(ders\_simp(ar, s)) yields the same bitsequence.
Chengsong
parents:
diff changeset
   306
\\
Chengsong
parents:
diff changeset
   307
We first open up the ders\_simp function into nested alternating sequences of ders and simp.
Chengsong
parents:
diff changeset
   308
Assume that s = $c_1...c_n$($n \geq 1$ ) where each of the $c_i$ are characters. 
Chengsong
parents:
diff changeset
   309
Then $ders\_simp(ar, s)$ = $s(d_{c_n}(...s(d_{c_1}(r))...))$ = $sdsd......sdr$. If we can prove that
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   310
$sdr \sim_{m\epsilon} dsr$ holds for any regular expression and any character, then we are done. This is because then we can push ders operation inside and move simp operation outside and have that $sdsd...sdr \sim_{m\epsilon} ssddsdsd...sdr \sim_{m\epsilon} ... \sim_{m\epsilon} s....sd....dr$.
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   311
 Using \autoref{lma1} we have that $s...sd....dr = sd...dr$. 
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   312
By \autoref{lma2}, we have $RHS \sim_{m\epsilon} d...dr$.\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   313
Notice that we don't actually need \autoref{lma1} here. That is because by \autoref{lma2}, we can have that $s...sd....dr \sim_{m\epsilon} sd...dr$. The equality above can be replaced by mkepsBC
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   314
 equivalence without affecting the validity of the whole proof since all we want is mkepsBC equivalence, not equality.
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   315
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   316
Now we proceed to prove that $sdr \sim_{m\epsilon} dsr$. This can be reduced to proving $dr \sim_{m\epsilon} dsr$ as we know that $dr \sim_{m\epsilon} sdr$ by \autoref{lma2}.\\
8
Chengsong
parents:
diff changeset
   317
Chengsong
parents:
diff changeset
   318
we use an induction proof. Base cases are omitted. Here are the 3 inductive cases.
Chengsong
parents:
diff changeset
   319
\begin{itemize}
Chengsong
parents:
diff changeset
   320
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   321
\item{$r_1+r_2$}\\
8
Chengsong
parents:
diff changeset
   322
The most difficult case is when $sr1$ and $sr2$ are both ALTS, so that they will be opened up in the flats function and some terms in sr2 might be deleted. Or otherwise we can use the argument that $d(r_1+r_2) = dr_1 + dr_2  \sim_{m\epsilon} dsr_1 + dsr_2 \sim_{m\epsilon} ds(r_1+r_2)$,
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   323
 the last equivalence being established by \autoref{lma3}.
8
Chengsong
parents:
diff changeset
   324
When $s(r_1), s(r_2)$ are both ALTS, we have to be more careful for the last equivalence step, namelly, $dsr_1 + dsr_2 \sim_{m\epsilon} ds(r_1+r_2)$. \\
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   325
We have that $LHS = dsr_1 + dsr_2 = d(sr_1 +sr_2)$. Since $sr_1 = ALTS(bs1, rs1)$ and $sr_2 = ALTS(bs2, rs2)$ we have  $  d(sr_1 +sr_2 ) \sim_{m\epsilon} d(ALTS(bs, bs1>>rs1 ++ bs2>>rs2))$ by \autoref{lma4}.
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   326
On the other hand, $RHS = ds(ALTS(bs, r1, r2)) = d Co(bs, dB(flats(s(r1), s(r2)) ) ) = d Co(bs, dB(bs1>>rs1 ++ bs2>>rs2))$ by definition of bsimp and flats.\\  
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   327
$d Co(bs, dB(bs1>>rs1 ++ bs2>>rs2)) = d Co(bs, (bs1>>rs1 ++ ((bs2>>rs2)--rs1))) $ by \autoref{lma5}.\\ $d Co(bs, (bs1>>rs1 ++ ((bs2>>rs2)--rs1)        )) = d(ALTS(bs, bs1>>rs1 ++ (bs2>>rs2)--rs1))$ by \autoref{lma6}. \\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   328
 Using \autoref{lma8}, we have  $d(ALTS(bs, bs1>>rs1 ++ (bs2>>rs2)--rs1)) \sim_{m\epsilon} d(ALTS(bs, bs1>>rs1 ++ bs2>>rs2)) \sim_{m\epsilon}  RHS$.\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   329
 %only the last part we don't have an equality here. We use mkeps equivalence instead because these two regexes are indeed different syntactically. However, they have even more in common than just mkeps equal. We might later augment this proof so that this equivalence relation is changed to something like regular expression equivalence.
8
Chengsong
parents:
diff changeset
   330
 This completes the proof.
Chengsong
parents:
diff changeset
   331
\item{$r*$}\\
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   332
$s(r*) = r*$. Our goal is trivially achieved.
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   333
\item{$r1 \cdot r2$}\\
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   334
When r1 is nullable, $ds r1r2 = dsr1 \cdot sr2 + dsr2  \sim_{m\epsilon}  dr1 \cdot sr2 + dr2 = dr1 \cdot r2 + dr2 $. The last step uses \autoref{lma10}. 
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   335
When r1 is not nullable, $ds r1r2 = dsr1 \cdot sr2  \sim_{m\epsilon}  dr1 \cdot sr2  \sim_{m\epsilon}  dr1 \cdot r2 $
8
Chengsong
parents:
diff changeset
   336
Chengsong
parents:
diff changeset
   337
\end{itemize}
Chengsong
parents:
diff changeset
   338
\item
Chengsong
parents:
diff changeset
   339
Proof of second part of the theorem: use a similar structure of argument as in the first part.
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   340
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   341
\item
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   342
This proof has a major flaw: it assumes all dr is nullable along the path of deriving r by s. But it could be the case that $s\in L(r)$ but $ \exists s' \in Pref(s) \ s.t.\ ders(s', r)$ is not nullable (or equivalently, $s'\notin L(r)$). One remedy for this is to replace the mkepsBC equivalence relation into some other transitive relation that entails mkepsBC equivalence.
8
Chengsong
parents:
diff changeset
   343
\end{itemize}
Chengsong
parents:
diff changeset
   344
\end{proof}
Chengsong
parents:
diff changeset
   345
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   346
\begin{theorem}{
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   347
This is a very strong claim that has yet to be more carefully examined and proved. However, experiments suggest a very good hope for this.}\\
11
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   348
Define pushbits as the following:\\  
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   349
\begin{verbatim}
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   350
def pushbits(r: ARexp): ARexp = r match {
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   351
    case AALTS(bs, rs) => AALTS(Nil, rs.map(r=>fuse(bs, pushbits(r))))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   352
    case ASEQ(bs, r1, r2) => ASEQ(bs, pushbits(r1), pushbits(r2))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   353
    case r => r
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   354
  }
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   355
  \end{verbatim}
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   356
Then we have \mbox{\boldmath$pushbits(ders\_simp(ar, s) ) == simp(ders(ar,s)) \ or\ ders\_simp(ar, s) == simp(ders(ar, s))$}.\\
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   357
Unfortunately this does not hold. A counterexample is\\
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   358
\begin{verbatim}
11
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   359
baa
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   360
original regex
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   361
STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   362
 └-ALT
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   363
    └-STA List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   364
    |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   365
    └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   366
       └-b List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   367
       └-a List(S)
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   368
regex after ders simp
11
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   369
ALT List(S, S, Z, C(b))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   370
 └-SEQ
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   371
 |  └-STA List(S, Z, S, C(a), S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   372
 |  |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   373
 |  └-STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   374
 |     └-ALT
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   375
 |        └-STA List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   376
 |        |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   377
 |        └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   378
 |           └-b List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   379
 |           └-a List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   380
 └-SEQ List(S, Z, S, C(a), Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   381
    └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   382
    |  └-STA List(Z, S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   383
    |  |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   384
    |  └-ONE List(S, S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   385
    └-STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   386
       └-ALT
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   387
          └-STA List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   388
          |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   389
          └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   390
             └-b List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   391
             └-a List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   392
regex after ders
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   393
ALT
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   394
 └-SEQ
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   395
 |  └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   396
 |  |  └-SEQ List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   397
 |  |  |  └-ZERO
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   398
 |  |  |  └-STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   399
 |  |  |     └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   400
 |  |  └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   401
 |  |     └-ZERO
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   402
 |  |     └-ZERO
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   403
 |  └-STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   404
 |     └-ALT
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   405
 |        └-STA List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   406
 |        |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   407
 |        └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   408
 |           └-b List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   409
 |           └-a List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   410
 └-ALT List(S, S, Z, C(b))
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   411
    └-SEQ
11
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   412
    |  └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   413
    |  |  └-ALT List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   414
    |  |  |  └-SEQ
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   415
    |  |  |  |  └-ZERO
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   416
    |  |  |  |  └-STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   417
    |  |  |  |     └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   418
    |  |  |  └-SEQ List(S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   419
    |  |  |     └-ONE List(S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   420
    |  |  |     └-STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   421
    |  |  |        └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   422
    |  |  └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   423
    |  |     └-ZERO
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   424
    |  |     └-ZERO
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   425
    |  └-STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   426
    |     └-ALT
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   427
    |        └-STA List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   428
    |        |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   429
    |        └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   430
    |           └-b List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   431
    |           └-a List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   432
    └-SEQ List(S, Z, S, C(a), Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   433
       └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   434
       |  └-SEQ List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   435
       |  |  └-ONE List(S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   436
       |  |  └-STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   437
       |  |     └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   438
       |  └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   439
       |     └-ZERO
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   440
       |     └-ONE List(S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   441
       └-STA
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   442
          └-ALT
11
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   443
             └-STA List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   444
             |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   445
             └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   446
                └-b List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   447
                └-a List(S)
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   448
regex after ders and then a single simp
11
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   449
ALT
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   450
 └-SEQ List(S, S, Z, C(b))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   451
 |  └-STA List(S, Z, S, C(a), S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   452
 |  |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   453
 |  └-STA
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   454
 |     └-ALT
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   455
 |        └-STA List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   456
 |        |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   457
 |        └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   458
 |           └-b List(Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   459
 |           └-a List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   460
 └-SEQ List(S, S, Z, C(b), S, Z, S, C(a), Z)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   461
    └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   462
    |  └-STA List(Z, S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   463
    |  |  └-a
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   464
    |  └-ONE List(S, S, C(a))
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   465
    └-STA
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   466
       └-ALT
11
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   467
          └-STA List(Z)
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   468
          |  └-a
11
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   469
          └-ALT List(S)
9c1ca6d6e190 The C(Char) construct is incompatible with the code and retrieve in Fahad's thesis.
Chengsong
parents: 10
diff changeset
   470
             └-b List(Z)
10
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   471
             └-a List(S)
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   472
\end{verbatim}
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   473
\end{theorem}
2b95bcd2ac73 exp and proof
Chengsong
parents: 9
diff changeset
   474
8
Chengsong
parents:
diff changeset
   475
\end{document}
Chengsong
parents:
diff changeset
   476
Chengsong
parents:
diff changeset
   477
%The second part might still need some more development.
Chengsong
parents:
diff changeset
   478
%When s is not in the set L(ar), we have that s = s1@s2 s.t. s1 $\in$ L(ar), and any longer string that is a prefix of s does not belong to L(ar).\\
Chengsong
parents:
diff changeset
   479
%By first part of proof, we have ders(ar, s1) $\sim_{m\epsilon}$ ders\_simp(ar, s1)
Chengsong
parents:
diff changeset
   480
%.....somehow show that by correctness, der(c, ders\_simp(ar, s1)) must be not nullable. But this will need that L(ders(ar, s1)) == L(ders\_simp(ar, s1)). By part 1 of proof we only have that for any string s1c s.t. s1c $\in$ L(ar) (which is equivalent to s $\in$ L(ders(ar, s1))), s is also in L(ders\_simp(ar, s1)). That is an inclusion, not an equality. c not in L(ders(ar, s1)) does not imply c not in L(ders\_simp(ar, s1))
Chengsong
parents:
diff changeset
   481
%So this path stuck here.