Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lfa:2022:lab03-dfa-regexp [2022/10/23 16:57]
mihai.udubasa fix paranthesis count for 3.2.5
lfa:2022:lab03-dfa-regexp [2022/10/28 22:42] (current)
alexandra.udrescu01
Line 70: Line 70:
 A* = {ε} (epsilon is always part of Kleene star) A* = {ε} (epsilon is always part of Kleene star)
  
-B*= {ε} (epsilon is always part of Kleene star) U {1^n} U {(1^(2n)} U {1^(3n)} U ... +B*= {ε} (epsilon is always part of Kleene star) U {1^n $} U {1^{2n} $} U {1^{3n} $} U ... 
-So basically B = L( (1^n)* )+So basically B = L( ($1^n$)* )
  
 </​hidden>​ </​hidden>​
Line 78: Line 78:
 **3.1.4** **3.1.4**
  
-$math[A = \{ 0^n 1^n 2^m \mid m \geq n  \geq 1 \}]+$math[A = \{ 0^n 1^n 0^m \mid m \geq n  \geq 1 \}]
 \\ \\
 $ B = \{ 0^n \mid n \geq 1 \} $ $ B = \{ 0^n \mid n \geq 1 \} $
Line 87: Line 87:
  
  
-$math[AB = \{ 0^n 1^n 2^m 0^k \mid m \geq n  \geq 1, k \geq 1 \}]+$math[AB = \{ 0^n 1^n 0^{m+k\mid m \geq n  \geq 1, k \geq 1 \}]. Deci $math[AB = A].
  
-Note that the n in the definition of language A **is different** from the n in in the definition of B, they are **independent** when used in defining ​diffrent ​sets/​languages. However, when n is used several times in the definition of one language, such as the 2 times it appears in langauge ​A, it is **the same** value.+Note that the n in the definition of language A **is different** from the n in in the definition of B, they are **independent** when used in defining ​different ​sets/​languages. However, when n is used several times in the definition of one language, such as the 2 times it appears in language ​A, it is **the same** value.
  
-$math[BA = \{ 0^{(n+k)} 1^n 2^m \mid m \geq n  \geq 1, k \geq 1 \}]+$math[BA = \{ 0^{(n+k)} 1^n 0^m \mid m \geq n  \geq 1, k \geq 1 \}]. Equivalently:​ $math[BA = \{0^x 1^y 0^z \mid x \geq y\geq 1 \text{ and } z \geq y \geq 1 \}]
  
 </​hidden>​ </​hidden>​
Line 117: Line 117:
  
 </​hidden>​ </​hidden>​
 +
  
 **3.2.2.** Write a regular expression for $ L = \{ \omega \text{ in } \text{{0,​1}} ^* \text{ | EVERY sequence of two or more consecutive zeros appears before ANY sequence of two or more consecutive ones} \} $ **3.2.2.** Write a regular expression for $ L = \{ \omega \text{ in } \text{{0,​1}} ^* \text{ | EVERY sequence of two or more consecutive zeros appears before ANY sequence of two or more consecutive ones} \} $
 +
  
 <​hidden>​ <​hidden>​
Line 131: Line 133:
  
 </​hidden>​ </​hidden>​
 +
  
 **3.2.3.** Write a DFA for $ L(( 10 \cup 0) ^* ( 1 \cup \epsilon )) $ **3.2.3.** Write a DFA for $ L(( 10 \cup 0) ^* ( 1 \cup \epsilon )) $
 +
  
 <​hidden>​ <​hidden>​
 {{:​lfa:​2022:​lfa2022_lab_3.2.3.png?​300|}} {{:​lfa:​2022:​lfa2022_lab_3.2.3.png?​300|}}
 </​hidden>​ </​hidden>​
 +
  
 **3.2.4.** Write a regular expression which generates the accepted language of A. Then try to find the most simple and easy to understand way to write it. **3.2.4.** Write a regular expression which generates the accepted language of A. Then try to find the most simple and easy to understand way to write it.
  
 {{:​lfa:​graf1.png?​400|}} {{:​lfa:​graf1.png?​400|}}
 +
  
 <​hidden>​ <​hidden>​
Line 147: Line 153:
 Let's see what words are accepted: Let's see what words are accepted:
   * ab*ab (when we don't loop on state 1)   * ab*ab (when we don't loop on state 1)
-  * ab*(<a way to leave state 2 and return back to it>)*ab => ab*(aab*)ab+  * ab*(<a way to leave state 2 and return back to it>)*ab => ab*(aab*)*ab
   * anything that repeats the previous expression several times   * anything that repeats the previous expression several times
   * ε (the initial state is also a final state)   * ε (the initial state is also a final state)
   * from the previous 2 observations => we can use Kleene star   * from the previous 2 observations => we can use Kleene star
  So, the regex is:  So, the regex is:
-> ( ab*(aab*)ab )*+> ( ab*(aab*)*ab )*
  
 <​note>​ <​note>​
Line 163: Line 169:
  
 </​hidden>​ </​hidden>​
 +
  
 **3.2.5.** Describe as precisely as possible the language generated by $math[((0(1 \cup 0)(1 \cup 0)) \cup 100)1((0(1 \cup 0)(1 \cup 0)) \cup 100)1(((0(1 \cup 0)(1 \cup 0)) \cup 100)0)*] ​ **3.2.5.** Describe as precisely as possible the language generated by $math[((0(1 \cup 0)(1 \cup 0)) \cup 100)1((0(1 \cup 0)(1 \cup 0)) \cup 100)1(((0(1 \cup 0)(1 \cup 0)) \cup 100)0)*] ​
  
 (hint: BCD) (hint: BCD)
 +
  
 <​hidden>​ <​hidden>​
Line 195: Line 203:
 So, this ugly regex encodes BCD numbers that start with exactly 2 odd digits which are followed by 0 or more even digits. So, this ugly regex encodes BCD numbers that start with exactly 2 odd digits which are followed by 0 or more even digits.
 </​hidden>​ </​hidden>​
 +
  
 ===== 3.3 Regex Equivalence ===== ===== 3.3 Regex Equivalence =====
Line 205: Line 214:
 \\ \\
 $ E2 = (a|\epsilon)(b|\epsilon) $ $ E2 = (a|\epsilon)(b|\epsilon) $
 +
  
 <​hidden><​note important>​ <​hidden><​note important>​
Line 211: Line 221:
 Another approach is to compute the language of each expression (since they are finite) and check if they are equivalent. Another approach is to compute the language of each expression (since they are finite) and check if they are equivalent.
 </​note></​hidden>​ </​note></​hidden>​
 +
  
 ** 3.3.2 ** ** 3.3.2 **
Line 217: Line 228:
 \\ \\
 $ E2 = ab(b|c|d|e)|acd|ace $ $ E2 = ab(b|c|d|e)|acd|ace $
 +
  
 <​hidden><​note important>​ <​hidden><​note important>​
Line 222: Line 234:
 Language is L = {abb, abc, abd, abe, acd, ace}, therefore they are equivalent. Language is L = {abb, abc, abd, abe, acd, ace}, therefore they are equivalent.
 </​note></​hidden>​ </​note></​hidden>​
 +
  
 ** 3.3.3 ** ** 3.3.3 **
  
-$ E1 = (a|b)*aa*| {ε} $+$ E1 = (a\mid b)^*aa^\mid \epsilon ​$
 \\ \\
-$ E2 = (a|ba)*(b|ba)* $+$ E2 = (a\mid ba)^*(b\mid ba)^* $ 
 + 
 <​hidden><​note important>​ <​hidden><​note important>​
 Both E1 and E2 have an infinite language, so comparing them is not an option. Both E1 and E2 have an infinite language, so comparing them is not an option.
Line 235: Line 250:
 Fun fact: E1 was proposed by a student as a solution for 3.2.2 last year, while E2 is the actual solution. Fun fact: E1 was proposed by a student as a solution for 3.2.2 last year, while E2 is the actual solution.
 </​note></​hidden>​ </​note></​hidden>​
 +
 +
 ** 3.3.4 ** ** 3.3.4 **
-$ E1 = ((ab*a)+b)* $+ 
 +$ E1 = ((ab^*a)^+b)^* $
 \\ \\
-$ E2 = (a(b|aa)*ab)* $+$ E2 = (a(b\mid aa)^*ab)^* $ 
  
 <​hidden><​note important>​ <​hidden><​note important>​
Line 249: Line 268:
 Plot twist: They are the same.  Plot twist: They are the same. 
  
-The purpose of this exercise is to understand how to approach regex equivalence,​ not how to solve this given comparison per se.+The purpose of this exercise is to understand how to approach regex equivalence,​ not how to solve this given comparison per  
 +se.
 </​note></​hidden>​ </​note></​hidden>​
 +
  
 ==== Conclusion ==== ==== Conclusion ====