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