# Theory of Computation Unit I Assignment
### 1. Give DFA’s accepting the following languages over the alphabet {0, 1}* and list down the five tubles with a state diagram. (Note : Use more than 2 states)
#### a. L = \{ω | ω has at least one 1 }
+ Kleen closure:
- Σ* = \{0,1}*
- Σ* = \{ε, 1, 01, 10, 11, ...}
- no. state = min lenght +1 = 1+1 = 2
+ State diagram:
```mermaid
stateDiagram
q0 --> q0: 0
q0 --> q1: 1
q1 --> q1: {0,1}
```
+ Five tuples:
- Q = \{q0, q1}
- S = q0
- F = q1
- Σ = \{0,1}
- P =
| | 0 | 1 |
| -------- | -------- | -------- |
| q0 | q0 | q1 |
| q1 | q1 | q1 |
#### b. L = \{ω | ω is a string of even length}
+ Kleen closure:
- Σ* = \{0,1}*
- Σ* = \{ε, 00, 01, 10, 11, 0000, 0001, ...}
- no. state = min lenght +1 = 2+1 = 3
+ State diagram:
```mermaid
stateDiagram
q0 --> q1: {0,1}
q1 --> q2: {0,1}
q2 --> q1: {0,1}
```
+ Five tuples:
- Q = \{q0, q1, q2}
- S = q0
- F = q2
- Σ = \{0,1}
- P =
| | 0 | 1 |
| -------- | -------- | -------- |
| q0 | q1 | q1 |
| q1 | q2 | q2 |
| q2 | q2 | q2 |
#### c. L = \{ω | ω is either begin or end with 01}
+ Kleen closure:
- Σ* = \{0,1}*
- Σ* = \{ε, 01, 001 ,010, 011, 0100, 0101, ...}
- no. state = min lenght +1 = 2+1 = 3
+ State diagram:
```mermaid
stateDiagram
q0 --> q0: 1
q0 --> q1: 0
q1 --> q1: 0
q1 --> q2: 1
q2 --> q0: 1
q2 --> q1: 0
```
+ Five tuples:
- Q = \{q0, q1, q2}
- S = q0
- F = q0
- Σ = \{0,1}
- P =
| | 0 | 1 |
| -------- | -------- | -------- |
| q0 | q1 | q0 |
| q1 | q1 | q2 |
| q2 | q1 | q0 |
#### d. L = \{ω | ω is divided by 3 and remainder is 1}
+ Kleen closure:
- Σ* = \{0,1}*
- Σ* = \{ε, 10, 100 ,110...}
- no. state = min lenght +1 = 2+1 = 3
+ State diagram:
```mermaid
stateDiagram
q0 --> [*]: 0
q0 --> q1: 1
q1 --> q2: {0,1}
q2 --> q2: {0,1}
```
+ Five tuples:
- Q = \{q0, q1, q2}
- S = q0
- F = q2
- Σ = \{0,1}
- P =
| | 0 | 1 |
| -------- | -------- | -------- |
| q0 | DS | q1 |
| q1 | q2 | q2 |
| q2 | q2 | q2 |
#### e. L = \{ω | ω when interpreted in reverse as a binary integer, is divisible by 5, Example of strings in the language are 0, 10011, 1001100, and 0101}
+ Kleen closure:
- Σ* = \{0,1}*
- Σ* = \{ε, 0, 101, 0101 ,1010, ...}
- no. state = min lenght +1 = 1+1 = 2
+ State diagram:
```mermaid
stateDiagram
q0 --> q0: 1
q0 --> q1: 0
q1 --> q0 : 1
q1 --> q1 :0
```
+ Five tuples:
- Q = \{q0, q1}
- S = q0
- F = q1
- Σ = \{0,1}
- P =
| | 0 | 1 |
| -------- | -------- | -------- |
| q0 | q0 | q1 |
| q1 | q1 | q0 |
f. L = \{ω | ω is beginning with a 1 that, when interpreted as a binary integer is a multiple of 5. For example, strings 101, 1010 and 1111 are in the language; 0, 100 and 111 are not}
+ Kleen closure:
- Σ* = \{0,1}*
- Σ* = \{ε, 101,1010, 1111,...}
- no. state = min lenght +1 = 3+1 = 2
+ State diagram:
```mermaid
stateDiagram
q0 --> q1: 1
q0 --> [*]: 0
q1 --> q2: 0
q1 --> q3:1
q2 --> q3: 1
q2 --> q2:0
q3 --> q3: {0,1}
```
+ Five tuples:
- Q = \{q0, q1, q2, q3}
- S = q0
- F = q3
- Σ = \{0,1}
- P =
| | 0 | 1 |
| -------- | -------- | -------- |
| q0 | DS | q1 |
| q1 | q2 | q3 |
| q2 | q2 | q3 |
| q3 | q3 | q3 |
g. L = \{ω | ω is start and end with the same symbol}
+ Kleen closure:
- Σ* = \{0,1}*
- Σ* = \{ε, 00, 11, 101, 000, 111, ...}
- no. state = min lenght +1 = 2+1 = 3
+ State diagram:
```mermaid
stateDiagram
q0 --> q1: {0,1}
q1 --> q2: {0,1}
q2 --> q2: {0,1}
```
+ Five tuples:
- Q = \{q0, q1, q2, q3}
- S = q0
- F = q3
- Σ = \{0,1}
- P =
| | 0 | 1 |
| -------- | -------- | -------- |
| q0 | q1 | q1 |
| q1 | q2 | q2 |
| q2 | q2 | q2 |
### 2. Convert the following NFA to a DFA
#### a.
- NFA
| | 0 | 1 |
| -------- | -------- | -------- |
| p | \{p,q} | \{p} |
| q | \{r} | \{r} |
| r | \{s} | DS |
| s* | \{s} | \{s} |
- DFA
| | 0 | 1 |
| -------- | -------- | -------- |
| p | \[p,q] | \[p] |
| \[p,q] | \[p,q,r] | \[p,r] |
| \[p,q,r] | \[p,q,r,s] | \[p,r] |
| \[p,r] | \[p,q,s] | \[p] |
| \*\[p,q,r,s] | \[p,q,r,s] | \[p,r,s] |
| \*\[p,r,s] | \[p,q,r,s] | \[p,r,s] |
| \*\[p,r,s] | \[p,q,s] | \[p,s] |
| \*\[p,s] | \[p,q,s] | \[p,s] |
```graphviz
digraph finite_state_machine {
rankdir=LR;
node [shape = doublecircle] "[p,q,r,s]", "[p,r,s]", "[p,s]";
node [shape = point] 0;
node [shape= circle];
0->p[label="start"]
p -> "[p,q]" [label="0"]
p -> "p" [label="1"]
"[p,q]" -> "[p,q,r]" [label="0"]
"[p,q]" -> "[p,r]" [label="1"]
"[p,q,r]" -> "[p,q,r,s]" [label="0"]
"[p,q,r]" -> "[p,r]" [label="1"]
"[p,q,r,s]" -> "[p,q,r,s]" [label="0"]
"[p,q,r,s]" -> "[p,r,s]" [label="1"]
"[p,r,s]" -> "[p,q,r,s]" [label="0"]
"[p,r,s]" -> "[p,r,s]" [label="1"]
"[p,r,s]" -> "[p,q,s]" [label="0"]
"[p,r,s]" -> "[p,s]" [label="1"]
"[p,s]" -> "[p,q,s]" [label="0"]
"[p,r,s]" -> "[p,s]" [label="1"]
}
```
#### b.
- NFA
| | 0 | 1 |
| -------- | -------- | -------- |
| p | \{q,s} | \{q} |
| q* | \{r} | \{q,r} |
| r | \{s} | \{p} |
| s* | DS | \{p} |
- DFA
| | 0 | 1 |
| -------- | -------- | -------- |
| p | \[q,s] | \[q] |
| \[q,s] | \[r] | \[p,q,r] |
| \[q] | \[r] | \[q,r] |
| \[r] | \[s] | \[p] |
| \*\[p,q,r] | \[q,r,s] | \[p,q,r] |
| \[q,r] | \[r,s] | \[p,q,r] |
| \*\[s] | DS | \[p] |
| \*\[p,s] | \[q,s] | \[p,q] |
| \*\[r,s] | \[s] | \[p] |
| \*\[p,q] | \[q,r,s] | \[q,r] |
| \*\[q,r,s] | \[r,s] | \[p,q,r] |
### 3. Minimize the DFA diagram
#### a.
```graphviz
digraph finite_state_machine {
rankdir=LR;
node [shape = doublecircle] 5, 6;
node [shape= circle]
1->2[label="a"]
1->3[label="b"]
2->1[label="a"]
2->3[label="b"]
3->4[label="a"]
3->5[label="b"]
4->6[label="b"]
4->1[label="a"]
5->4[label="b"]
5 -> 7[label="a"]
6->7[label="a"]
6->4[label="b"]
7->3[label="a"]
7->6[label="b"]
}
```
- No dead state
- Q = \{1,2,3,4,5,6,7}
- F = \{5,6}
- Q-F= \{1,2,3,4,7}
- Transition table
| | a | b |
| -------- | -------- | -------- |
| 1 | 2 | 3 |
| 2 | 1 | 3 |
| 3 | 4 | 5 |
| 4 | 1 | 6 |
| 5 | 7 | 4 |
| 6 | 7 | 4 |
| 7 | 3 | 6 |
- Calculate 1
{1,2,3,4,7}{5,6}
=> {1,2}{3,4,7}{5,6}
- calculate 2
=> {1,2}{3}{4}{7}{5,6}
- state diagram
```graphviz
digraph finite_state_machine {
rankdir=LR;
node [shape = doublecircle] "5,6";
node [shape = point] o;
node [shape = circle];
o -> "1,2" [label="start"]
"1,2" -> "1,2"[ label = "a" ];
"1,2" -> 3[ label = "b" ];
4 -> "1,2"[label="a"]
3 -> 4 [label="a"]
3-> "5,6" [label="b"]
4 -> "5,6" [label="b"]
"5,6"->7[label="a"]
"5,6"->4 [label="b"]
7->"5,6"[label="b"]
7->3[label="a"]
}
```
#### b.
```graphviz
digraph f{
rankdir=LR;
size="10,15"
node [shape = doublecircle] q5, q6;
node [shape = point] 0;
node [shape= circle];
0->q0 [label="start"]
q0->q1 [label="a"]
q0->q2 [label="b"]
q1->q2 [label="a"]
q1->q3 [label="b"]
q2->q4 [label="a"]
q2->q6 [label="b"]
q3->q4 [label="a"]
q3->q5 [label="b"]
q4->q3 [label="a"]
q4->q6 [label="b"]
q5->q5 [label="a"]
q5 -> q6 [label="b"]
q6->q5[label="a"]
q6->q6 [label="b"]
}
```
- no deadstate
- Q=\{q0,q1,q2,q3,q4,q5,q6}
- F=\{q5,q6}
- Q-F = \{q0,q1,q2,q3,q4}
- Transition table
| | a | b |
| -------- | -------- | -------- |
| q0| q1 | q2 |
| q1| q1 | q3 |
| q2| q4 | q6 |
| q3| q4 | q5 |
| q4| q3 | q6 |
| q5| q5 | q6 |
| q6| q5 | q6 |
- Calculate 1
- {q0,q1,q2,q3,q4} {q5,q6}
=> {q0,q1}{q2,q3,q4}{q5,q6}
- Calculate 2
- {q0}{q1}{q2,q3,q4}{q5,q6}
- State Diagram
```graphviz
digraph f{
rankdir=LR;
size="10,15"
node [shape = doublecircle] "q5,q6";
node [shape = point] 0;
node [shape= circle];
0->q0 [label="start"]
q0->q1 [label="a"]
q1 ->"q1,q2,q3" [label="{a,b}"]
"q1,q2,q3" ->"q1,q2,q3" [label="a"]
"q1,q2,q3" -> "q5,q6"[label="b"]
}
```
### 4.Convert ε-NFA to DFA
### a.
```graphviz
digraph f{
rankdir=LR;
size="10,15"
node [shape = doublecircle] 6;
node [shape = point] 0;
node [shape= circle];
0->1 [label="start"]
1 ->2 [label="ε"]
1 ->4 [label="ε"]
2 ->3 [label="b"]
3 ->3 [label="a"]
3 ->6 [label="ε"]
4 ->5 [label="a"]
5 ->6 [label="a"]
5 ->4 [label="b"]
5 ->3 [label="ε"]
}
```
- Epsilon Closure
- 1 ={1,2,4}
- 2={2}
- 3={3,6}
- 4={4}
- 5={5,3,6}
- 6={6}
- Transition Table
- NFA
| | a| b | epsilon|
| -------- | -------- | --------|-------- |
| 1 | DS | DS| {2,4} |
| 2 | DS | 3 |DS|
| 3 | 3 | DS | 6*|
| 4 | 5 | DS |DS|
|5|6*|4|3|
| 6* | DS | DS | DS|
- DFA
| | a | b |
| -------- | -------- | -------- |
| 2 | DS | 3 |
| 3 | 3 | DS |
| 4 | 5 | DS |
| 5 | 6 | 4 |
| \{1,2,4}| 5 | 3 |
| \{3,6} | 3 | DS |
| \{5,3,6} | \{6,3} | 4 |
### a.
```graphviz
digraph f{
rankdir=LR;
size="10,15"
node [shape = doublecircle] 4;
node [shape = point] 0;
node [shape= circle];
0->1 [label="start"]
1 ->2 [label="ε"]
1 ->5 [label="ε"]
5 ->7 [label="ε"]
5 ->6 [label="ε"]
8 ->1 [label="ε"]
7->8[label="b"]
6->8[label="a"]
2->3[label="A"]
3->4[label="b"]
}
```
- Epsilon Closure
- 1 ={1,2,5,6,7}
- 2={2}
- 5={5,6,7}
- 6={6}
- 7={7}
- 8={8,1,2,5,6,7}
- Transition Table
- NFA
| | a| b | epsilon|
| -------- | -------- | --------|-------- |
| 1 | DS | DS| {2,5} |
| 2 | 3 | DS |DS|
| 3 | DS | 4* | DS|
|5|DS|Ds|{6,7}|
| 6 | 8 | DS | DS|
|7|DS|8|Ds|
- DFA
| | a | b |
| -------- | -------- | -------- |
| 2 | 3 | DS |
| 3 | DS | 4 |
| 6 | 8 | Ds |
| 7 | Ds | 8 |
| \{1,2,5,6,7}| \{3,8} | 8 |
| \{3,8} | DS | 4 |
| \{5,6,7} | 8 | 8 |
| \{8,1,2,3,5,6,7} | \{3,8} | \{4,8}|
- State diagram
```graphviz
digraph f{
rankdir=LR;
size="10,15"
node [shape = doublecircle] 4;
node [shape = point] 0;
node [shape= circle];
0->2 [label="start"]
2->3 [label="a"]
3 ->4 [label="b"]
6->8[label="a"]
7->8[label="b"]
"1,2,3,4,5,6,7"->"3,8"[label="a"]
"1,2,3,4,5,6,7"->8[label="b"]
"3,8"->4[label="b"]
"5,6,7"->8[label="{a,b}"]
"8,1,2,3,5,6,7"->"3,8"[label="a"]
"8,1,2,3,5,6,7"->"4,8"[label="b"]
}
```