280 likes | 378 Vues
Explore the inherent limitations of computer programs and regular expressions. Learn concepts, operations, and their implications on program development and language recognition.
                
                E N D
CSci 4011 INHERENT LIMITATIONS OF COMPUTER PROGRAMS
q1 1 0 0,1 1 M q0 q2 0 0 1 q3 M = (Q, Σ, , q0, F) where Q = {q0, q1, q2, q3} Σ = {0,1}  : Q Σ→ Q transition function* q0 Q is start state F = {q1, q2} Q accept states *
THE REGULAR OPERATIONS Negation: A = { w | w  A } Union: A  B = { w | w  A or w  B } Intersection: A  B = { w | w  A and w  B } Reverse: AR = { w1 …wk | wk …w1 A } Concatenation: A  B = { vw | v  A and w  B } Star: A* = { w1 …wk | k ≥ 0 and each wi A }
REGULAR EXPRESSIONS • is a regular expression representing {} ε is a regular expression representing {ε}  is a regular expression representing  If R1 and R2 are regular expressions representing L1 and L2 then: (R1R2) represents L1L2 (R1  R2) represents L1 L2 (R1)* represents L1*
REGULAR EXPRESSIONS (+ ∪- ∪ε) {0…9}* (. ∪ε) {0…9}+ * NICK STINKS * CSCI {1...4}{0...9}{0...9}{0…9} * NICK RULES *
PRECEDENCE *  EXAMPLE R1R2*  R3 = (R1 (R2*)) ∪R3
{ w | w has exactly a single 1 } 0*10* { w ||w|≥ 3 and its 3rd symbol is 0 } ΣΣ0Σ* { w | every odd position of w is a 1 } (1Σ)*(1∪ε)
EQUIVALENCE L can be represented by a regexp  L is a regular language
EQUIVALENCE Given regular expression R, we show there exists NFA N such that R represents L(N) L can be represented by a regexp  L is a regular language Induction on the length of R:
Given regular expression R, we show there exists NFA N such that R represents L(N) Induction on the length of R:  L can be represented by a regexp  L is a regular language Base Cases (R has length 1): R =  R = ε R = 
Inductive Step: Assume R has length k > 1 and that any regular expression of length < k represents a language that can be recognized by an NFA Three possibilities for R: R = R1 R2 R = R1R2 R = (R1)*
L can be represented by a regexp  L is a regular language
Transform (1(0  1))* to an NFA ε 1 1,0 ε
CONVERT TO NFAs a*(b∪ε)a* (1)*∪1(1)* (lol∪zomg)*
0 0 01*0 1 Proof idea: Transform an NFA for L into a regular expression by removing states and re-labeling the arrows with regular expressions L can be represented by a regexp  L is a regular language 
a∪b a q2 GENERALIZED NFAs a*b qs qa G accepts w if it finds q0q1…qk, w1…wk: wi∈R(qi,qi+1) w = w1w2…wk q0=qs, qk=qa R(qs,q2) = a*b R(qa,q) = Ø R(q,qs) = Ø
ε ε ε ε ε NFA TO GNFA NFA Add unique and distinct start and accept states
ε ε ε ε ε GNFA TO REGEXP NFA While machine has more than 2 states: Pick an internal state, rip it out and re-label the arrows with regular expressions to account for the missing state
a a,b (a*b)(ab)* ε b ε a*b q1 q2 q3 q0 R(q0,q3) = (a*b)(ab)*
b bb a q1 q2 a ε b ε b a ε q3
b bb a q1 q2 a  ba a ε b ε b a ε
b = R(q1,q1) bb  (a  ba)b*a bb a q1 q2 a  ba ε ε b  (a  ba)b* b
Convert the NFA to a regular expression a, b (a  b)b*b(bb*b)* b q1 q2 (a  b)b*b ε b (a  b)b*b(bb*b)*a bb*b a b ε q3 ε
((a  b)b*b(bb*b)*a)*  ((a  b)b*b(bb*b)*a)*(a  b)b*b(bb*b)*
Formally: Add qstart and qaccept to create G Run CONVERT(G): If #states = 2 return the expression on the arrow going from qstart to qaccept If #states > 2
Formally: Add qstart and qaccept to create G Run CONVERT(G): If #states > 2 select qripQ different from qstart and qaccept define Q = Q – {qrip} define Ras: R(qi,qj) = R(qi,qrip)R(qrip,qrip)*R(qrip,qj)  R(qi,qj) return CONVERT(G)
NFA DFA DEF Regular Language Regular Expression