|
|
- This a very high level review post that I am making for myself and
- other people reviewing CS Theory. If you want to lean more about
- content in this blog post I recommend cracking open a text book-- I
- know, gross. This hastily thrown together post will cover how to solve
- typical problems relating to topics covered by my second CS Theory
- exam.
-
- # Myhill-Nerode Theorem
-
- ## Definition
-
- L is regular if and only if it has a finite index. The index is the
- maximum number of elements that are pairwise distinguishable. Two
- strings are said to be pairwise distinguishable if you can append
- something to both of the strings and it makes one string accepted by
- the language and the other string rejected. The size of an index set
- X equals the number of equivalence classes it has and the minimum
- number of states required to represent it using a DFA. Each element in
- the language is accepted by only one equivalence class.
-
- ## Problem Approach
-
- Prove that language L is regular.
-
- 1) Define a set X which is infinite in size - this doesn't have to be in the language.
-
- 2) Make a general argument that show that each element in X is pairwise distinguishable.
- Pick any two elements x, y in X and show that if you append z to them one is accepted by the language and
- the other is not in the language.
-
- ## Example
-
- Prove the following language is non-regular:
-
- $$
- L={ww^r | w \in {0,1}^*}
- $$
-
- answer:
-
- 1)
-
- $$
- X = {(01)^i | i \geq 0}
- $$
-
- Pick any 2 elements of X and show pairwise distinguishable
-
- $$
- x = (01)^i, y = (01)^j | i \neq j
- $$
-
- suppose we pick
-
- $$
- z = (10)^i\\
- xz \in L\\
- yz \notin L
- $$
-
-
- # DFA minimization algorithm
-
- Types of Problems:
-
- - Prove DFA is minimal
- - Minimize the DFA
-
- The argument for DFA minimization comes from the Myhill-Nerode
- theorem. Given a DFA, if you can form a set of strings which represent
- each state and they are all pairwise distinguishable, then the DFA is
- minimal with that many states.
-
-
- ## Prove DFA is minimal
-
- For these types of problems you construct a table and show that each
- state is pairwise distinguishable. To show pairwise distinguishably
- you have to show that there exists a string where if appended to one
- element makes it accepted by the language but pushes the other string
- out of the language.
-
- ### Example
-
- Prove the following DFA is minimal.
-
- ![DFA Example](media/CSTHEORY/DFAMinimalProof.png)
-
- Find a set of strings which represent the minimal path to each state
- in the DFA.
-
- $$
- X = \{\epsilon, b, bb, ba\}
- $$
-
- Show that each state is pairwise distinguishable.
-
- ![DFA Example](media/CSTHEORY/DFAMinimalTable.png)
-
-
- ## Minimize the DFA
-
- To use the concept of being indistinguishable to minimize a DFA, you
- can use a table to keep track which states are distinguishable from
- each other. The states which are not indistinguishable can be
- combined. To solve one of these problems you start by creating a table
- which compares each of the states in the DFA. You then go through and
- mark the states which are indistinguishable -- start with the ones
- with different accepting statuses. Then you continue marking off
- states where if you transition with a symbol on the DFA you are
- distinguishable and the other state is non-distinguishable according
- to the table.
-
- ### Example
-
- Minify the Following DFA:
-
- ![DFA Example](media/CSTHEORY/DFAMinification.png)
-
- After marking the states with different accepting criteria as being
- distinguishable you get this table:
-
- ![Half Complete Table](media/CSTHEORY/MinificationTable.svg)
-
-
- After looping through all pairs and marking them on the table if there
- exists symbol which results in one state to be distinguishable and
- one to be indistinguishable you get this table:
-
- ![Min TableTable](media/CSTHEORY/MinTable2.svg)
-
- According to the table you are able to combine {D, A, B}, {C, F}, and
- {E, G}.
-
- Minimal DFA:
-
- ![Min DFA](media/CSTHEORY/MinimalDFA.svg)
-
-
- # Pumping lemma for regular languages
-
- The pumping lemma cannot prove that a language is regular, however,
- you can use it to show that some languages are non-regular. This
- theory gets at the idea that if a regular language is long
- enough/infinite, it will have a state somewhere which is repeated on
- the path that accepts the string.
-
- The accepted strings can be divided into three parts:
-
- - Symbols leading up to the loop
- - Symbols which complete a loop and come back to start of loop
- - Symbols at the end of the string
-
- ![Min DFA](media/CSTHEORY/PumpingLemmaTheory.svg)
-
-
-
- To Show that a language L is not regular using pumping lemma:
-
- - Use a proof by contradiction
- - Assume L is regular
- - Choose a representative string S which is just barely in the language and is represented in terms of p.
- - Express S = xyz such that |xy| < p and y > 0
- - Show that you can pump y some amount of times such that it is not in the language.
- - This contradicts the pumping lemma.
- - The assumption that L is regular is wrong.
- - L must not be regular.
-
-
- ## Example
-
- Show that the following language is non-regular.
-
- $$
- {0^n1^n | n \geq 0}
- $$
-
- Proof by contradiction
-
- Assume that L is regular.
-
- Let p be the pumping length associated with L
-
- $$
- S = o^p1^p
- $$
-
- S is valid since
-
- $$
- |s| \geq p, S \in L
- $$
-
- For any valid decomposition
-
- S = xyz
-
- such that |xy| <= p and |y| > 0
-
- Consider:
-
- $$
- xy^2z
- $$
-
- By the pumping lemma this should be in the language but it is not.
- Therefore our assumption that the language is regular is false.
-
- ![Min DFA](media/CSTHEORY/PumpingLemmaExample.svg)
-
- # Context-free grammars, closure properties for CFLs
-
- The context-free grammars are a super-set of the regular languages.
- This means that CFG's can represent some non-regular languages and
- every regular language. Contest-free Languages are defined by
- Context-Free Grammars and accepted using Push-down Automata machines.
-
- Context Free Grammars are Represented using:
-
- - **Terminals** = Set of symbols in that language
- - **Variables** = Set of symbols representing categories
- - **Start Symbol** = Variable which you start with- written on top
- - **Substitution Rules** = Set of rules that recursively define the language.
-
- ## Example 1
-
- Grammar G:
-
- $$
- A \rightarrow 0A1 \\
- A \rightarrow B \\
- B \rightarrow \# \\
- $$
-
-
- This grammar describes the following language:
-
- $$
- L = \{0^k\#1^k | k \geq 0\}
- $$
-
- ## Example 2
-
- Give CFG for non-Palindromes
-
- $$
- S \rightarrow aXb | bXa | aSa | bSb | ab | ba \\
- X \rightarrow aX | bX | a | b \\
- $$
-
-
- In this example, the S rule recursively applies itself until something
- that is not a palindrome is added. Once you exit the S state, you can
- finish by appending anything to the middle of the string.
-
-
- ## Example 3
-
- Give CFG for the following language:
-
- $$
- \{a^ib^jc^kd^l | i+k = j + l\}
- $$
-
- $$
- S \rightarrow aSd | XYZ \\
- X \rightarrow aXb | \epsilon\\
- Y \rightarrow bYc | \epsilon\\
- Z \rightarrow cZd | \epsilon
- $$
-
- ## Closure
-
- CFLs are closed under union, concatenation, and Kleene star.
-
- - Union: Create a new starting variable which goes to either branch.
- -Kleene Star: We can repeatedly concat the derivations of the string. However, we also need to make sure that epsilon occurs in the string.
- - Concatenation: From start variable we force the concatenation of two variables representing each state sub CFG
-
- # Parse trees, ambiguity
-
- Parse Trees are simply graphical means to illustrate a deviation of a
- string from a grammar. The root of the tree will be the start
- variable, interior nodes are other variables. Leaf nodes are terminal
- symbols.
-
- A CFG is said to be ambiguous if there is at least one string with two
- or more distinct derivations. Leftmost and rightmost derivations are
- not ambiguous.
-
- To remove ambiguity try to force order or break CFG into cases.
-
-
- # Chomsky Normal Form
-
- Useful form for CFGs since they allow you to easily identify if a
- string is in a language.
-
- Form:
-
- $$
- A \rightarrow BC\\
- A \rightarrow a\\
- S \rightarrow \epsilon
- $$
-
- Convert CFG to CNF (Chomsky Normal Form).
-
- - Add new start variable
-
- - Remove Epsilon rules (multi-step process)
-
- - Remove unit rules
-
- - Convert to A -> BC, A -> a
-
- ## Example
-
- Convert the following CFG to a CNF
-
- $$
- S \rightarrow ASA | aB\\
- A \rightarrow B | S\\
- B \rightarrow b | \epsilon
- $$
-
- Step 1: Add new start variable.
-
- $$
- S_0 \rightarrow S\\
- S \rightarrow ASA | aB\\
- A \rightarrow B | S\\
- B \rightarrow b | \epsilon
- $$
-
- Step 2: Remove epsilon rules.
-
- $$
- S_0 \rightarrow S\\
- S \rightarrow ASA | aB | a\\
- A \rightarrow B | S | \epsilon\\
- B \rightarrow b
- $$
-
-
- $$
- S_0 \rightarrow S\\
- S \rightarrow ASA | aB | SA | AS | S | a\\
- A \rightarrow B | S\\
- B \rightarrow b
- $$
-
- Step 3: Remove unit rules
-
- (Remove A -> B)
-
- $$
- S_0 \rightarrow S\\
- S \rightarrow ASA | aB | SA | AS | a\\
- A \rightarrow b | S\\
- B \rightarrow b
- $$
-
- (Remove A -> S)
-
- $$
- S_0 \rightarrow S\\
- S \rightarrow ASA | aB | SA | AS | a\\
- A \rightarrow b | ASA | aB | SA | AS | a\\
- B \rightarrow b
- $$
-
- (Remove S0-> S)
-
- $$
- S_0 \rightarrow ASA | aB | SA | AS | a\\
- S \rightarrow ASA | aB | SA | AS | a\\
- A \rightarrow b | ASA | aB | SA | AS | a\\
- B \rightarrow b
- $$
-
- # Push-Down automata
-
- These are NFAs but they also have a stack. This allows us to solve any
- problem which can be represented with a CFG.
-
- The stack has it's own alphabet. The dollar symbol typically
- represents the empty stack.
-
- With each transition you can examine the stack, push to the stack and
- move to a new state.
-
- ## Example
-
-
- $$
- L = \{a^n\#b^n\}
- $$
-
- ![](media/CSTHEORY/PDAExample.svg)
-
-
- # Construction to convert CFG to a PDA
-
- Basic idea: use stack to hold progressive derivations of a string
- using rules of grammar.
-
-
-
- ## Example
-
- Convert the following CFG to a PDA:
-
- $$
- S \rightarrow aTb | b \\
- T \rightarrow Ta | \epsilon
- $$
-
- ![](media/CSTHEORY/PDAConstruction.svg)
|