Differences

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

Link to this comparison view

Next revision
Previous revision
lfa:2022:lab07-closure-properties [2022/11/17 19:03]
pdmatei created
lfa:2022:lab07-closure-properties [2022/11/27 00:39] (current)
alexandra.udrescu01
Line 1: Line 1:
 ====== 7. Closure properties ====== ====== 7. Closure properties ======
  
-**7.1.** Identify **different strategies** to verify that two regular expressions generate the same language. State them as algorithmic procedures.+**7.1.1.** Identify **different strategies** to verify that two regular expressions generate the same language. State them as algorithmic procedures. 
 + 
 +<​hidden>​ All strategies require building DFAs from the regexes. 
 +  - You can use an existing minimisation algorithm to find the minimal DFAs. Then, label each state from each DFA from 0 to |K|. Fix an ordering of the symbols of the alphabet. Sort the transitions by symbol. Make a textual representation of each DFA which includes the number of states and the sorted transition function. ​ If the textual representations of the two DFAs are identical then they accept the same language. 
 +  - Use the indistinguishability algorithm to check if the two initial states of the two DFAs are indistinguishable. 
 +  - Check $math[L(A_1) \subseteq L(A_2)] and $math[L(A_2) \subseteq L(A_1)]. The condition $math[L(A) \subseteq L(B)] can be restated as $math[L(A) \cap complement(L(B)) = \emptyset]. Build the complement DFA for B, and use the product construction with A. Check if the resulting DFA has any final state accessible from the initial one. 
 +</​hidden>​ 
 + 
 + 
 +**7.1.2.** Write a regex for the complement of $math[L((10 \cup 0)^*(1 \cup \epsilon))]. 
 + 
 + 
 +<​hidden>​ 
 +Build the DFA for that regex and then build the complement of that DFA. Transform it into a regex.  
 +</​hidden>​ 
 + 
 + 
 +**7.1.3.** Suppose $math[A] is a DFA. Write another DFA which accepts only those words $math[w] such that both $math[w \in L(A)] and $math[reverse(w) \in L(A)]. 
 + 
 + 
 +<​hidden>​ 
 +Build the DFA $math[A^R] which accepts $math[reverse(L(A))]. Build the product construction between $math[A] and $math[A^R].  
 +</​hidden>​
  
-**7.2.** Write a regex for the complement of $math[L((10 \cup 0)^*(1 \cup \epsilon))]. 
  
 ===== Quotients ===== ===== Quotients =====
Line 9: Line 30:
 Let $ L \subseteq \Sigma^* $ be a language and $ c \in \Sigma $ a symbol. The quotient of $ L $ and $ c $ is the language defined as $ L/c = \{ w \in \Sigma^* | wc \in L\} $. Let $ L \subseteq \Sigma^* $ be a language and $ c \in \Sigma $ a symbol. The quotient of $ L $ and $ c $ is the language defined as $ L/c = \{ w \in \Sigma^* | wc \in L\} $.
  
-**7.4.1.** Let $  L = L((aaa \cup ba)^*(ab)^* )$. What is the language $ L/a $ ?+**7.2.1.** Let $  L = L((aaa \cup ba)^*(ab)^* )$. What is the language $ L/a $ ?
  
-**7.4.2.** Let $  L = L(a^*)$. What is the language $ L/a $ ? 
  
-**7.4.3.** Prove that if $ L $ is regular language, then $ L/c$ is a regular language $ \forall c \in \Sigma$.+<​hidden>​ 
 +$math[L/L((aaa \cup ba)^*(aa ​\cup b))] 
 +</​hidden>​
  
-**7.5.** Let $ L \subseteq \Sigma^* $ be a language and $ c \in \Sigma $ a symbol. Then $ c / L = \{ w \in \Sigma^* | cw \in L \} $. Prove that if $ L $ is a regular language, then $ a / L $ is a regular language,$ \forall a \in \Sigma$.+ 
 +**7.2.2.** Let $  L = L(a^*)$. What is the language $ L/a $ ? 
 + 
 + 
 +<​hidden>​ 
 +$math[L/a = L(a^*)] 
 +</​hidden>​ 
 + 
 + 
 +**7.2.3.** Prove that if $ L $ is a regular language, then $ L/c$ is a regular language $ \forall c \in \Sigma$. 
 + 
 + 
 +<​hidden>​ 
 +Let $math[A] be a DFA which accepts $math[L]. We build a new DFA $math[A/c] which accepts $math[L/c]. This new DFA has the same number of states, initial state, same transitions and same alphabet. The set of final states is different though: $math[F/c = \{q' \in K | \exists q \in F. \delta(q',​c) = q\}]. In other words, the final states of $math[A/c] are those states which are $math[c-]predecessors of some final state of $math[A]. Note that some $math[q'​] may be equal to $math[q], and it may also be the case that no such predecessors exist.  
 +</​hidden>​ 
 + 
 + 
 +**7.2.4.** Let $ L \subseteq \Sigma^* $ be a language and $ c \in \Sigma $ a symbol. Then $ c / L = \{ w \in \Sigma^* | cw \in L \} $. Prove that if $ L $ is a regular language, then $ a / L $ is a regular language,$ \forall a \in \Sigma$. 
 + 
 + 
 +<​hidden>​ 
 +The easiest way is to rely on other closure properties: $math[c/L = reverse(reverse(L)/​c)] 
 +</​hidden>​
  
 ===== Suffixes and prefixes ===== ===== Suffixes and prefixes =====
  
-**7.6.** Prove that $ \text{suffix}(L) = \{ w \in \Sigma^* | \exists x \in \Sigma^*, \: \text{such that} \: xw \in L \} $ is a closure property.+**7.3.1.** Prove that $ \text{suffix}(L) = \{ w \in \Sigma^* | \exists x \in \Sigma^*, \: \text{such that} \: xw \in L \} $ is a closure property. 
 + 
 + 
 +<​hidden>​ 
 +Suppose $math[A] is the accepting DFA of L. We build a new NFA from A by adding $math[\epsilon-]transitions from the initial state to all other states of A (obs: if the initial state of A had transitions that entered it, then, in the new NFA, create another initial state that has an $math[\epsilon-]transition to the former initial state). Thus, we can nondeterministically //skip// any prefix $math[x] of any accepted word from $math[L]. This new DFA accepts $math[\text{suffix(L)}] 
 +</​hidden>​ 
  
 ===== Other transformations ===== ===== Other transformations =====
Line 26: Line 76:
 //​Example//:​ If $ L = \{ aab, bab, aa \} $, then $ min(L) = \{ bab, aa \} $. //​Example//:​ If $ L = \{ aab, bab, aa \} $, then $ min(L) = \{ bab, aa \} $.
  
-**7.7.1.** What is the language ​$ min(L(a^*)) $ ?+**7.4.1.** Describe ​$math[min(L)] without mathematical notation.
  
-**7.7.2.** What is the language $ min(L(a^*b)) $ ? 
  
-**7.7.3.** Prove that $ min $ has the closure property with respect to the regular languages.+<​hidden>​ 
 +$math[min(L)] is the set of words from $math[L] that have no proper ($math[\neq \epsilon]) prefix in $math[L]. 
 +</​hidden>​ 
 + 
 + 
 +**7.4.2.** What is the language $ min(L(a^*)) $ ? 
 + 
 +<​hidden>​ 
 +$math[min(L(a^*)) = \{\epsilon\}] 
 +</​hidden>​ 
 + 
 + 
 +**7.4.3.** What is the language $ min(L(a^*b)) $ ? 
 + 
 +<​hidden>​ 
 +No word from $math[L(a^*b)] has a prefix in this same language, hence the answer is $math[L(a^*b)]. 
 +</​hidden>​ 
 + 
 + 
 +**7.4.4.** Prove that $ min $ has the closure property with respect to the regular languages. 
 + 
 + 
 +<​hidden>​ 
 +Let $math[A] be the accepting DFA of L. If a word $math[w=xy \in L] has a proper prefix $math[x] in $math[L], then $math[(q_0,​xy) \vdash^* (q_1,x) \vdash^* (q_2,​\epsilon)] where $math[q_1,​q_2] are final states. We need to //​break-off//​ those paths leading from one final state (such as $math[q_1]) to another. 
 + 
 +We construct a new DFA which accepts $math[min(L)]. We build a new sink state. We change all outgoing transitions of all final states such that they now //go// to the sink state. In this way, once a final state was visited once, no other final state can be visited while accepting any word $math[w]. This means $math[w] has no accepting proper prefix.  
 +</​hidden>​ 
 + 
 + 
 + 
 +** 7.4.5.** Let $math[L] be a regular language and $math[R = \{xy \mid yx \in L\}]. Both $math[x] and $math[y] can be empty strings. Show that $math[R] is regular. 
 + 
 + 
 +<​hidden>​ 
 +The language $math[R] contains all those words formed by taking any suffix $math[x] of a word from $math[L] an appending its respective prefix $math[y] to it. 
 +We start from the accepting DFA $math[A] of $math[L]. We create a new initial state and a new final one. All states of A are no longer initial or final in our construction. We create $math[n] copies of $math[A], denoted as $math[A_q], one for each state $math[q\in K] of $math[A]. 
 + 
 +We add $math[\epsilon-]transitions from our new initial state, to the corresponding state $math[q] from each copy $math[A_q]. If a final state from copy $math[A_q] is now reached, then a suffix of some word accepted by $math[A] was accepted by our construction. We now need to continue by accepting the prefix part. We create another $math[n] copies of $math[A], denoted as $math[B_q]. We connect the final state of each suffix DFA $math[A_q] to the initial state of its corresponding prefix DFA $math[B_q]. We also take state $math[q] from copy $math[B_q] and add an epsilon-transition to our final state.  
 + 
 +Now, any accepted word of our construction starts from the initial state, skips to some state $math[q] of the suffix DFA $math[A_q], and consumes a suffix of some word accepted by $math[A]. Next, it moves on the initial state of $math[B_q], consumes the skipped prefix of the same word, and then accepts. 
 + 
 + 
 +{{ :​lfa:​2022:​screenshot_2022-11-18_at_14.15.39.png?​600 |}} 
 +</​hidden>​ 
  
  
 ===== Extras =====  ===== Extras ===== 
  
-**7.8.1.** (Solved during lecture) Define the reversal of a language $ L $ as $ rev(L) = \{ w \in \Sigma^* | rev(w) \in L \}$, where $ rev(c_1c_2 \dots c_n) = c_nc_{n - 1} \dots c_1$ , with $ c_i \in \Sigma, 1 \leq i \leq n $. Show that reversal is a closure property.+**7.5.1.** (Solved during lecture) Define the reversal of a language $ L $ as $ rev(L) = \{ w \in \Sigma^* | rev(w) \in L \}$, where $ rev(c_1c_2 \dots c_n) = c_nc_{n - 1} \dots c_1$ , with $ c_i \in \Sigma, 1 \leq i \leq n $. Show that reversal is a closure property. 
 + 
 +**7.5.2.** Invent a language transformation or an operation between languages. See if you can show that it is a closure property.