diff --git a/blogContent/posts/programming/CS -Theory-Exam-2-Review.md b/blogContent/posts/programming/CS -Theory-Exam-2-Review.md deleted file mode 100644 index a359d11..0000000 --- a/blogContent/posts/programming/CS -Theory-Exam-2-Review.md +++ /dev/null @@ -1,97 +0,0 @@ -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 distinguishability you have to show that there exists a string where if appened to one element -makes it accepted by the language but pushes the other string out of the language. - -ex: Prove the following DFA is minimal. - -![DFA Example](media/CSTHEORY/DFAMinimalProof.png) - -$$ -X = {\epsilon, b, bb, ba} -$$ - -![DFA Example](media/CSTHEORY/Table.png) - - -### Minimize the DFA - - - -## Pumping lemma for regular languages - -## Context-free grammars, closure properties for CFLs - -## Parse trees, ambiguity - -## Chomsky Normal Form - -## Pushdown automata - -## Construction to convert CFG to a PDA - diff --git a/blogContent/posts/programming/cs-theory-exam-2-review.md b/blogContent/posts/programming/cs-theory-exam-2-review.md new file mode 100644 index 0000000..1ac7947 --- /dev/null +++ b/blogContent/posts/programming/cs-theory-exam-2-review.md @@ -0,0 +1,256 @@ +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 + diff --git a/blogContent/posts/programming/media/CSTHEORY/DFAMinification.png b/blogContent/posts/programming/media/CSTHEORY/DFAMinification.png new file mode 100644 index 0000000..3818ce5 Binary files /dev/null and b/blogContent/posts/programming/media/CSTHEORY/DFAMinification.png differ diff --git a/blogContent/posts/programming/media/CSTHEORY/MinTable2.svg b/blogContent/posts/programming/media/CSTHEORY/MinTable2.svg new file mode 100644 index 0000000..55d0613 --- /dev/null +++ b/blogContent/posts/programming/media/CSTHEORY/MinTable2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/blogContent/posts/programming/media/CSTHEORY/MinificationTable.svg b/blogContent/posts/programming/media/CSTHEORY/MinificationTable.svg new file mode 100644 index 0000000..7fc28bc --- /dev/null +++ b/blogContent/posts/programming/media/CSTHEORY/MinificationTable.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/blogContent/posts/programming/media/CSTHEORY/MinimalDFA.svg b/blogContent/posts/programming/media/CSTHEORY/MinimalDFA.svg new file mode 100644 index 0000000..9dbe1c2 --- /dev/null +++ b/blogContent/posts/programming/media/CSTHEORY/MinimalDFA.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/blogContent/posts/programming/media/CSTHEORY/PumpingLemmaExample.svg b/blogContent/posts/programming/media/CSTHEORY/PumpingLemmaExample.svg new file mode 100644 index 0000000..2b0a8f4 --- /dev/null +++ b/blogContent/posts/programming/media/CSTHEORY/PumpingLemmaExample.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/blogContent/posts/programming/media/CSTHEORY/PumpingLemmaTheory.svg b/blogContent/posts/programming/media/CSTHEORY/PumpingLemmaTheory.svg new file mode 100644 index 0000000..d74d152 --- /dev/null +++ b/blogContent/posts/programming/media/CSTHEORY/PumpingLemmaTheory.svg @@ -0,0 +1 @@ + \ No newline at end of file