corr_pr_sketch.tex
author Chengsong
Fri, 22 Mar 2019 12:53:56 +0000
changeset 9 2c02d27ec0a3
parent 8 e67c0ea1ca73
child 10 2b95bcd2ac73
permissions -rw-r--r--
augmented version of proof sketch
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}
Chengsong
parents:
diff changeset
     8
 
Chengsong
parents:
diff changeset
     9
\theoremstyle{theorem}
Chengsong
parents:
diff changeset
    10
\newtheorem{theorem}{Theorem}
Chengsong
parents:
diff changeset
    11
Chengsong
parents:
diff changeset
    12
\theoremstyle{lemma}
Chengsong
parents:
diff changeset
    13
\newtheorem{lemma}{Lemma}
Chengsong
parents:
diff changeset
    14
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
    15
\newcommand{\lemmaautorefname}{Lemma}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
    16
8
Chengsong
parents:
diff changeset
    17
\theoremstyle{definition}
Chengsong
parents:
diff changeset
    18
 \newtheorem{definition}{Definition}
Chengsong
parents:
diff changeset
    19
\begin{document}
Chengsong
parents:
diff changeset
    20
This is a sketch proof for the correctness of the algorithm ders\_simp.
Chengsong
parents:
diff changeset
    21
\section{Function Definitions}
Chengsong
parents:
diff changeset
    22
Chengsong
parents:
diff changeset
    23
\begin{definition}{Bits}
Chengsong
parents:
diff changeset
    24
\begin{verbatim}
Chengsong
parents:
diff changeset
    25
abstract class Bit
Chengsong
parents:
diff changeset
    26
case object Z extends Bit
Chengsong
parents:
diff changeset
    27
case object S extends Bit
Chengsong
parents:
diff changeset
    28
case class C(c: Char) extends Bit
Chengsong
parents:
diff changeset
    29
Chengsong
parents:
diff changeset
    30
type Bits = List[Bit]
Chengsong
parents:
diff changeset
    31
\end{verbatim}
Chengsong
parents:
diff changeset
    32
\end{definition}
Chengsong
parents:
diff changeset
    33
Chengsong
parents:
diff changeset
    34
\begin{definition}{Annotated Regular Expressions}
Chengsong
parents:
diff changeset
    35
\begin{verbatim}
Chengsong
parents:
diff changeset
    36
abstract class ARexp 
Chengsong
parents:
diff changeset
    37
case object AZERO extends ARexp
Chengsong
parents:
diff changeset
    38
case class AONE(bs: Bits) extends ARexp
Chengsong
parents:
diff changeset
    39
case class ACHAR(bs: Bits, f: Char) extends ARexp
Chengsong
parents:
diff changeset
    40
case class AALTS(bs: Bits, rs: List[ARexp]) extends ARexp 
Chengsong
parents:
diff changeset
    41
case class ASEQ(bs: Bits, r1: ARexp, r2: ARexp) extends ARexp 
Chengsong
parents:
diff changeset
    42
case class ASTAR(bs: Bits, r: ARexp) extends ARexp 
Chengsong
parents:
diff changeset
    43
\end{verbatim}
Chengsong
parents:
diff changeset
    44
\end{definition}
Chengsong
parents:
diff changeset
    45
Chengsong
parents:
diff changeset
    46
\begin{definition}{bnullable}
Chengsong
parents:
diff changeset
    47
\begin{verbatim}
Chengsong
parents:
diff changeset
    48
  def bnullable (r: ARexp) : Boolean = r match {
Chengsong
parents:
diff changeset
    49
    case AZERO => false
Chengsong
parents:
diff changeset
    50
    case AONE(_) => true
Chengsong
parents:
diff changeset
    51
    case ACHAR(_,_) => false
Chengsong
parents:
diff changeset
    52
    case AALTS(_, rs) => rs.exists(bnullable)
Chengsong
parents:
diff changeset
    53
    case ASEQ(_, r1, r2) => bnullable(r1) && bnullable(r2)
Chengsong
parents:
diff changeset
    54
    case ASTAR(_, _) => true
Chengsong
parents:
diff changeset
    55
  }
Chengsong
parents:
diff changeset
    56
\end{verbatim}
Chengsong
parents:
diff changeset
    57
\end{definition}
Chengsong
parents:
diff changeset
    58
Chengsong
parents:
diff changeset
    59
\begin{definition}{ders\_simp}
Chengsong
parents:
diff changeset
    60
\begin{verbatim}
Chengsong
parents:
diff changeset
    61
def ders_simp(r: ARexp, s: List[Char]): ARexp = {
Chengsong
parents:
diff changeset
    62
 s match {
Chengsong
parents:
diff changeset
    63
   case Nil => r 
Chengsong
parents:
diff changeset
    64
   case c::cs => ders_simp(bsimp(bder(c, r)), cs)
Chengsong
parents:
diff changeset
    65
 }
Chengsong
parents:
diff changeset
    66
}\end{verbatim}
Chengsong
parents:
diff changeset
    67
\end{definition}
Chengsong
parents:
diff changeset
    68
Chengsong
parents:
diff changeset
    69
\begin{definition}{bder}
Chengsong
parents:
diff changeset
    70
\begin{verbatim}
Chengsong
parents:
diff changeset
    71
def bder(c: Char, r: ARexp) : ARexp = r match {
Chengsong
parents:
diff changeset
    72
 case AZERO => AZERO
Chengsong
parents:
diff changeset
    73
 case AONE(_) => AZERO
Chengsong
parents:
diff changeset
    74
 case ACHAR(bs, f) => if (c == f) AONE(bs:::List(C(c))) else AZERO
Chengsong
parents:
diff changeset
    75
 case AALTS(bs, rs) => AALTS(bs, rs.map(bder(c, _)))
Chengsong
parents:
diff changeset
    76
 case ASEQ(bs, r1, r2) => {
Chengsong
parents:
diff changeset
    77
  if (bnullable(r1)) AALT(bs, ASEQ(Nil, bder(c, r1), r2), fuse(mkepsBC(r1), bder(c, r2)))
Chengsong
parents:
diff changeset
    78
  else ASEQ(bs, bder(c, r1), r2)
Chengsong
parents:
diff changeset
    79
  }
Chengsong
parents:
diff changeset
    80
 case ASTAR(bs, r) => ASEQ(bs, fuse(List(S), bder(c, r)), ASTAR(Nil, r))
Chengsong
parents:
diff changeset
    81
}
Chengsong
parents:
diff changeset
    82
\end{verbatim}
Chengsong
parents:
diff changeset
    83
\end{definition}
Chengsong
parents:
diff changeset
    84
Chengsong
parents:
diff changeset
    85
\begin{definition}{bsimp}
Chengsong
parents:
diff changeset
    86
\begin{verbatim}
Chengsong
parents:
diff changeset
    87
  def bsimp(r: ARexp): ARexp = r match {
Chengsong
parents:
diff changeset
    88
    case ASEQ(bs1, r1, r2) => (bsimp(r1), bsimp(r2)) match {
Chengsong
parents:
diff changeset
    89
        case (AZERO, _) => AZERO
Chengsong
parents:
diff changeset
    90
        case (_, AZERO) => AZERO
Chengsong
parents:
diff changeset
    91
        case (AONE(bs2), r2s) => fuse(bs1 ++ bs2, r2s)
Chengsong
parents:
diff changeset
    92
        case (r1s, r2s) => ASEQ(bs1, r1s, r2s)
Chengsong
parents:
diff changeset
    93
    }
Chengsong
parents:
diff changeset
    94
    case AALTS(bs1, rs) => {
Chengsong
parents:
diff changeset
    95
      val rs_simp = rs.map(bsimp)
Chengsong
parents:
diff changeset
    96
      val flat_res = flats(rs_simp)
Chengsong
parents:
diff changeset
    97
      val dist_res = distinctBy(flat_res, erase)
Chengsong
parents:
diff changeset
    98
      dist_res match {
Chengsong
parents:
diff changeset
    99
        case Nil => AZERO
Chengsong
parents:
diff changeset
   100
        case s :: Nil => fuse(bs1, s)
Chengsong
parents:
diff changeset
   101
        case rs => AALTS(bs1, rs)  
Chengsong
parents:
diff changeset
   102
      }
Chengsong
parents:
diff changeset
   103
    }
Chengsong
parents:
diff changeset
   104
    //case ASTAR(bs, r) => ASTAR(bs, bsimp(r))
Chengsong
parents:
diff changeset
   105
    case r => r
Chengsong
parents:
diff changeset
   106
  }
Chengsong
parents:
diff changeset
   107
\end{verbatim}
Chengsong
parents:
diff changeset
   108
\end{definition}
Chengsong
parents:
diff changeset
   109
Chengsong
parents:
diff changeset
   110
\begin{definition}{sub-parts of bsimp}
Chengsong
parents:
diff changeset
   111
\begin{itemize}
Chengsong
parents:
diff changeset
   112
\item{flats}\\
Chengsong
parents:
diff changeset
   113
flattens the list.
Chengsong
parents:
diff changeset
   114
\item{dB}\\
Chengsong
parents:
diff changeset
   115
means distinctBy
Chengsong
parents:
diff changeset
   116
\item{Co}\\
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   117
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
   118
\begin{verbatim}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   119
def Co(bs1, rs): ARexp = {
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   120
      rs match {
8
Chengsong
parents:
diff changeset
   121
        case Nil => AZERO
Chengsong
parents:
diff changeset
   122
        case s :: Nil => fuse(bs1, s)
Chengsong
parents:
diff changeset
   123
        case rs => AALTS(bs1, rs)  
Chengsong
parents:
diff changeset
   124
      }
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   125
\end{verbatim}
8
Chengsong
parents:
diff changeset
   126
\end{itemize}
Chengsong
parents:
diff changeset
   127
\end{definition}
Chengsong
parents:
diff changeset
   128
Chengsong
parents:
diff changeset
   129
\begin{definition}{fuse}
Chengsong
parents:
diff changeset
   130
\begin{verbatim}
Chengsong
parents:
diff changeset
   131
  def fuse(bs: Bits, r: ARexp) : ARexp = r match {
Chengsong
parents:
diff changeset
   132
    case AZERO => AZERO
Chengsong
parents:
diff changeset
   133
    case AONE(cs) => AONE(bs ++ cs)
Chengsong
parents:
diff changeset
   134
    case ACHAR(cs, f) => ACHAR(bs ++ cs, f)
Chengsong
parents:
diff changeset
   135
    case AALTS(cs, rs) => AALTS(bs ++ cs, rs)
Chengsong
parents:
diff changeset
   136
    case ASEQ(cs, r1, r2) => ASEQ(bs ++ cs, r1, r2)
Chengsong
parents:
diff changeset
   137
    case ASTAR(cs, r) => ASTAR(bs ++ cs, 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
Chengsong
parents:
diff changeset
   143
\begin{definition}{mkepsBC}
Chengsong
parents:
diff changeset
   144
\begin{verbatim}
Chengsong
parents:
diff changeset
   145
  def mkepsBC(r: ARexp) : Bits = r match {
Chengsong
parents:
diff changeset
   146
    case AONE(bs) => bs
Chengsong
parents:
diff changeset
   147
    case AALTS(bs, rs) => {
Chengsong
parents:
diff changeset
   148
      val n = rs.indexWhere(bnullable)
Chengsong
parents:
diff changeset
   149
      bs ++ mkepsBC(rs(n))
Chengsong
parents:
diff changeset
   150
    }
Chengsong
parents:
diff changeset
   151
    case ASEQ(bs, r1, r2) => bs ++ mkepsBC(r1) ++ mkepsBC(r2)
Chengsong
parents:
diff changeset
   152
    case ASTAR(bs, r) => bs ++ List(Z)
Chengsong
parents:
diff changeset
   153
  }
Chengsong
parents:
diff changeset
   154
\end{verbatim}
Chengsong
parents:
diff changeset
   155
\end{definition}
Chengsong
parents:
diff changeset
   156
Chengsong
parents:
diff changeset
   157
\begin{definition}{mkepsBC equicalence}
Chengsong
parents:
diff changeset
   158
\\
Chengsong
parents:
diff changeset
   159
Given 2 nullable annotated regular expressions r1, r2, if mkepsBC(r1) == mkepsBC(r2)
Chengsong
parents:
diff changeset
   160
then r1 and r2 are mkepsBC equivalent, denoted as r1 $\sim_{m\epsilon}$ r2
Chengsong
parents:
diff changeset
   161
\end{definition}
Chengsong
parents:
diff changeset
   162
Chengsong
parents:
diff changeset
   163
\begin{definition}{shorthand notation for ders}
Chengsong
parents:
diff changeset
   164
\\For the sake of reducing verbosity, we sometimes use the shorthand notation
Chengsong
parents:
diff changeset
   165
$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
   166
\\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
   167
\\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
   168
Chengsong
parents:
diff changeset
   169
\end{definition}
Chengsong
parents:
diff changeset
   170
Chengsong
parents:
diff changeset
   171
Chengsong
parents:
diff changeset
   172
Chengsong
parents:
diff changeset
   173
\begin{definition}{distinctBy operation expressed in a different way--how it transforms the list}\\
Chengsong
parents:
diff changeset
   174
Given two lists rs1 and rs2, we define the operation $--$:\\
Chengsong
parents:
diff changeset
   175
$rs1 -- rs2 := [r \in rs1 |  r \notin rs2]$
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   176
Note that the order each term appears in $rs_1 -- rs_2$ is preserved as in the original list.
8
Chengsong
parents:
diff changeset
   177
\end{definition}
Chengsong
parents:
diff changeset
   178
Chengsong
parents:
diff changeset
   179
Chengsong
parents:
diff changeset
   180
\section{Main Result}
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   181
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   182
\begin{lemma}{simplification function does not simplify an already simplified regex}\label{lma1}\\
8
Chengsong
parents:
diff changeset
   183
bsimp(r) == bsimp(bsimp(r)) holds for any annotated regular expression r.
Chengsong
parents:
diff changeset
   184
\end{lemma}
Chengsong
parents:
diff changeset
   185
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   186
\begin{lemma}{simp and mkeps}\label{lma2}\\
8
Chengsong
parents:
diff changeset
   187
When r is nullable, we have that
Chengsong
parents:
diff changeset
   188
mkeps(bsimp(r)) == mkeps(r)
Chengsong
parents:
diff changeset
   189
\end{lemma}
Chengsong
parents:
diff changeset
   190
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   191
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   192
%\begin{theorem}See~\cref{lma1}.\end{theorem}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   193
%\begin{lemma}\label{lma1}\lipsum[2]\end{lemma}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   194
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   195
\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
   196
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
   197
\end{lemma}
Chengsong
parents:
diff changeset
   198
\begin{proof}
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   199
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
   200
Details: $ds(ALTS(bs, r1, r2)) = d Co( bs, dB(flats(sr1, sr2)) )$
8
Chengsong
parents:
diff changeset
   201
\end{proof}
Chengsong
parents:
diff changeset
   202
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   203
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   204
\begin{lemma}{mkepsBC invariant manipulation of bits and notation}\label{lma7}\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   205
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
   206
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
   207
\end{lemma}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   208
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   209
\begin{lemma}{mkepsBC equivalence w.r.t syntactically different regular expressions(2 ALTS)}\label{lma4}\\
8
Chengsong
parents:
diff changeset
   210
$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
   211
\end{lemma}
Chengsong
parents:
diff changeset
   212
\begin{proof}
Chengsong
parents:
diff changeset
   213
We are just fusing bits inside here, there is no other structural change.
Chengsong
parents:
diff changeset
   214
\end{proof}
Chengsong
parents:
diff changeset
   215
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   216
\begin{lemma}{What does dB do to two already simplified ALTS}\label{lma5}\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   217
$d Co(ALTS(bs, dB(bs1>>rs1 ++ bs2>>rs2))) = d Co(ALTS(bs, bs1>>rs1 ++ ((bs2>>rs2)--rs1)        )) $ 
8
Chengsong
parents:
diff changeset
   218
\end{lemma}
Chengsong
parents:
diff changeset
   219
\begin{proof}
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   220
We prove that $ dB(bs1>>rs1 ++ bs2>>rs2) = bs1>>rs1 ++ ((bs2>>rs2)--rs1)$.
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   221
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   222
8
Chengsong
parents:
diff changeset
   223
\end{proof}
Chengsong
parents:
diff changeset
   224
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   225
\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
   226
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
   227
$Co(bs, (bs1>>rs1) ++ (bs2>>rs2)--rs1) = ALTS(bs, bs1>>rs1 ++ (bs2>>rs2)--rs1)$
8
Chengsong
parents:
diff changeset
   228
\end{lemma}
Chengsong
parents:
diff changeset
   229
\begin{proof}
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   230
 $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
   231
 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
   232
 $bs1>>rs1 ++ (bs2>>rs2)--rs1$.
8
Chengsong
parents:
diff changeset
   233
\end{proof}
Chengsong
parents:
diff changeset
   234
Chengsong
parents:
diff changeset
   235
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   236
\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
   237
$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
   238
\end{lemma}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   239
\begin{proof}
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   240
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
   241
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
   242
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
   243
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
   244
\end{proof}
8
Chengsong
parents:
diff changeset
   245
Chengsong
parents:
diff changeset
   246
Chengsong
parents:
diff changeset
   247
Chengsong
parents:
diff changeset
   248
\begin{theorem}{Correctness Result}
Chengsong
parents:
diff changeset
   249
Chengsong
parents:
diff changeset
   250
\begin{itemize}
Chengsong
parents:
diff changeset
   251
Chengsong
parents:
diff changeset
   252
\item{}
Chengsong
parents:
diff changeset
   253
When s is a string in the language L(ar), \\
Chengsong
parents:
diff changeset
   254
ders\_simp(ar, s)  $\sim_{m\epsilon}$ ders(ar, s), \\
Chengsong
parents:
diff changeset
   255
\item{}
Chengsong
parents:
diff changeset
   256
when s is not a string of the language L(ar)
Chengsong
parents:
diff changeset
   257
ders\_simp(ar, s) is not nullable
Chengsong
parents:
diff changeset
   258
\end{itemize}
Chengsong
parents:
diff changeset
   259
\end{theorem}
Chengsong
parents:
diff changeset
   260
Chengsong
parents:
diff changeset
   261
\begin{proof}{Split into 2 parts.}
Chengsong
parents:
diff changeset
   262
\begin{itemize}
Chengsong
parents:
diff changeset
   263
\item
Chengsong
parents:
diff changeset
   264
9
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   265
8
Chengsong
parents:
diff changeset
   266
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
   267
\\
Chengsong
parents:
diff changeset
   268
We first open up the ders\_simp function into nested alternating sequences of ders and simp.
Chengsong
parents:
diff changeset
   269
Assume that s = $c_1...c_n$($n \geq 1$ ) where each of the $c_i$ are characters. 
Chengsong
parents:
diff changeset
   270
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
   271
$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
   272
 Using \autoref{lma1} we have that $s...sd....dr = sd...dr$. 
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   273
By \autoref{lma2}, we have $RHS \sim_{m\epsilon} d...dr$.\\
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   274
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
   275
 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
   276
2c02d27ec0a3 augmented version of proof sketch
Chengsong
parents: 8
diff changeset
   277
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
   278
Chengsong
parents:
diff changeset
   279
we use an induction proof. Base cases are omitted. Here are the 3 inductive cases.
Chengsong
parents:
diff changeset
   280
\begin{itemize}
Chengsong
parents:
diff changeset
   281
Chengsong
parents:
diff changeset
   282
\item{$r_1+r_2$}
Chengsong
parents:
diff changeset
   283
$r_1+r_2$\\
Chengsong
parents:
diff changeset
   284
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
   285
 the last equivalence being established by \autoref{lma3}.
8
Chengsong
parents:
diff changeset
   286
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
   287
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
   288
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
   289
$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
   290
 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
   291
 %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
   292
 This completes the proof.
Chengsong
parents:
diff changeset
   293
\item{$r*$}\\
Chengsong
parents:
diff changeset
   294
s(r*) = s(r).
Chengsong
parents:
diff changeset
   295
\item{$r1.r2$}\\
Chengsong
parents:
diff changeset
   296
using previous.
Chengsong
parents:
diff changeset
   297
Chengsong
parents:
diff changeset
   298
\end{itemize}
Chengsong
parents:
diff changeset
   299
\item
Chengsong
parents:
diff changeset
   300
Proof of second part of the theorem: use a similar structure of argument as in the first part.
Chengsong
parents:
diff changeset
   301
\end{itemize}
Chengsong
parents:
diff changeset
   302
\end{proof}
Chengsong
parents:
diff changeset
   303
Chengsong
parents:
diff changeset
   304
\end{document}
Chengsong
parents:
diff changeset
   305
Chengsong
parents:
diff changeset
   306
%The second part might still need some more development.
Chengsong
parents:
diff changeset
   307
%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
   308
%By first part of proof, we have ders(ar, s1) $\sim_{m\epsilon}$ ders\_simp(ar, s1)
Chengsong
parents:
diff changeset
   309
%.....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
   310
%So this path stuck here.