|
|
- This a very high level review post that I am making for myself and other people taking CS Theory.
- If you want to lean about the theory behind the content in this blog post I recommed looking else where.
- This 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 thar are pairwise distibguishable.
- 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 non-accepting.
- The size of an index set X equals the number of equivalence classes it has. 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 necesarrily need 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 simply 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 this 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:
-
- - 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 superset of the regular languages. This means that CFG's can represent
- some non-regular languages and every regular language is also a CFL. Contest-free Languages are defined by Context-Free Grammars and accepted using
- Pushdown 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 states in that recursive state until something that is not a palindrome is found.
- 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
- $$
-
- # Parse trees, ambiguity
-
- # Chomsky Normal Form
-
- # Pushdown automata
-
- # Construction to convert CFG to a PDA
-
|