From 6432d55bd4e5ef5b7c3935f5bdcf318a4c71771d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Hannes?= Date: Thu, 25 Aug 2016 21:31:45 +0200 Subject: [PATCH] 25/8 --- samenvatting.tex | 82 +++++++++++++- voorbeelden.tex | 286 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 355 insertions(+), 13 deletions(-) diff --git a/samenvatting.tex b/samenvatting.tex index da9f710..482d083 100644 --- a/samenvatting.tex +++ b/samenvatting.tex @@ -256,6 +256,20 @@ \subsection{Verzamelingenleer} \\ $\forall X \subseteq L: \bigwedge_X \in L \en \bigvee_X \in L$ \end{definitie} +\begin{definitie}{Injectie} + \label{def:inj} + Een injectie is een afbeelding $f$ die elk element van een verzameling $A$ afbeeldt op een element van een verzameling $B$. Niet op alle elementen van $B$ moet een element van $A$ afgebeeld worden. +\end{definitie} + +\begin{definitie}{Surjectie} + \label{def:surj} + Een surjectie is een afbeelding $f$ die elementen van een verzameling $A$ afbeeldt op elk element van een verzameling $B$. Niet voor alle elementen in $A$ moet een afbeelding bestaan. +\end{definitie} + +\begin{definitie}{Bijectie} + Een bijectie is een afbeelding $f$ die elk element van een verzameling $A$ \'e\'en-op-\'e\'en afbeeldt op elk element uit een verzameling $B$. Het is zowel een injectie (definitie \ref{def:inj}) als een surjectie (definitie \ref{def:surj}). +\end{definitie} + \subsection{Grafentheorie} \begin{definitie}{Enkelvoudige graaf} @@ -415,7 +429,6 @@ \subsection{NFA} Elke NFA beschrijft een reguliere taal en elke reguliere taal kan beschreven worden door een NFA ($L_E = L_{NFA_E}$). Figuur \ref{fig:regexnfa} toont de overgangen van de elementaire reguliere expressies naar de bijhorende NFA's. \begin{figure}[ht] -\label{fig:regexnfa} \centering \renewcommand{\arraystretch}{1.5} \begin{tabular}{>{\centering\arraybackslash}m{2cm}|>{\centering\arraybackslash}m{10cm}} @@ -476,6 +489,7 @@ \subsection{NFA} \end{nfa} \\ \end{tabular} \caption{De overgang van een reguliere expressie naar een NFA.} +\label{fig:regexnfa} \end{figure} \subsection{GNFA} @@ -558,6 +572,17 @@ \subsection{DFA} \end{enumalgo} \end{algoritme} +\begin{nfa} + \node[initial,state] (q1) {$\{q_1\}$}; + \node[state,accepting] (q2) [right=1.5cm of q1] {$\{q_1,q_2\}$}; + + \path (q1) edge [loop above] node {$a$} (q1) + edge [bend left] node [above] {$b$} (q2) + (q2) edge [loop above] node {$b$} (q2) + edge [bend left] node [below] {$a$} (q1); + \addvmargin{1mm} +\end{nfa} + Algoritme \ref{alg:cdfa} impliceert ook dat voor elke $a \in \Sigma$ een overgang $\delta(q_t,a)=q_t$ bestaat van $q_t$ naar $q_t$, waarin $t$ staat voor ``trash''. Bovendien kunnen er ook bogen bestaan van $q \in F$ naar $q_t$. Een voorbeeld van hoe een complete DFA voor een gegeven parti\"ele DFA eruit ziet wordt gegeven in sectie \ref{ex:dfatotal}. De complete DFA wordt voornamelijk gebruikt in praktijk. Verder in dit document wordt vaak gebruik gemaakt van een DFA met de assumptie dat $\delta$ een totale functie is. Daarbij wordt impliciet gesteld dat voor een niet-complete DFA eerst de constructie van de equivalente complete DFA wordt uitgevoerd. @@ -579,6 +604,8 @@ \subsection{DFA} \end{itemize} \end{algoritme} +Sectie \ref{ex:nfadfa} toont enkele voorbeelden van de conversie van NFA's naar DFA's. + Elke reguliere taal wordt bepaald door een DFA, omdat elke reguliere taal wordt bepaald door een NFA en elke NFA kan worden omgezet tot een DFA. \begin{definitie}{De overgangsfunctie $\delta^*$ van een DFA voor strings} @@ -666,9 +693,52 @@ \subsection{Minimale DFA} Sectie \ref{ex:dfamin} toont een voorbeeld van de minimalisatie van een DFA, gebruikmakende van algoritme \ref{alg:dfamin}. -% TODO: Bewijs minimale DFA heeft minimaal aantal toestanden -% TODO: Isomorfe DFA's -% TODO: NFA kleiner dan DFA_min? +\begin{bewijs}{We bewijzen dat een minimale een minimaal aantal toestanden heeft.} + Stel $DFA_1$ ($Q_1$, $\Sigma$, $\delta_1$, $q_s$, $F_1$) met $Q_1 = \{q_s,q_1,q_2,...,q_n\}$ is een machine zonder onbereikbare toestanden waarvan elk paar toestanden f-verschillend zijn. Stel dat $DFA_2$ ($Q_2$, $\Sigma$, $\delta_2$, $q_s$, $F_2$) een DFA is met minder toestanden dan $DFA_1$. + + \begin{itemize} + \item Elke toestand in $DFA_1$ is bereikbaar, dus er bestaan strings $s_i$ met $i=1...n$ zodanig dat $\delta^*_1(q_s,s_i)=q_i$. + \item $DFA_2$ heeft minder toestanden dan $DFA_1$, dus er is een $i$ en $j$ met $i \neq j$, zodanig dat er strings $s_i$ en $s_j$ zijn waarvoor $DFA_2$ meerdere keren in dezelfde toestand komen, dus $\delta^*_2(q_s,s_i)=\delta^*_2(q_s,s_j)$. + \item $q_i$ en $q_j$ zijn f-verschillend, dus er bestaat een string $v$ zodanig dat $\delta^*_2(q_i,v) \in F_1 \en \delta^*_2(q_j,v) \notin F_1$ of omgekeerd. Bij gevolg geldt ook $\delta^*_2(q_s,s_iv) \in F_1 \en \delta^*_2(q_s,q_jv) \notin F_1$ of omgekeerd. We zeggen dat $DFA_1$ van $s_iv$ en $s_jv$ just \'e\'en string accepteert. + \end{itemize} + + We kunnen nu aantonen dat $\delta^*_2(q_s,s_iv) = \delta^*_2(\delta^*_2(q_i),v) = \delta^*_2(\delta^*_2(q_j),v) = \delta^*_2(q_s,s_jv)$, wat betekent dat $DFA_1$ en $DFA_2$ niet dezelfde taal kunnen bepalen. +\end{bewijs} + +Het is belangrijk te beseffen dat er geen DFA bestaat die dezelfde taal bepaald als een minimale DFA, met minder toestanden. Maar dat is niet noodzakelijk waar voor een NFA! Er kan namelijk een NFA bestaan die minder toestanden heeft dan ene minimale DFA en nog steeds dezelfde taal bepaalt. Dit is het gevolg van de beperkingen die bij een DFA worden opgelegd, die niet gelden voor een NFA, zoals het verbod op $\epsilon$-bogen en dat er voor een bepaald symbool hoogstens \'e\'en boog uit een toestand mag vertrekken. Daarom zal een DFA (zelfs een minimale DFA) die equivalent is met een NFA, vaak meer toestanden hebben. Een voorbeeld van een taal waar dit geldt is uitgewerkt in sectie \ref{ex:nfaldfamin}. + +\begin{definitie}{Isomorfe DFA's} + Een $DFA_1$ ($Q_1$, $\Sigma$, $\delta_1$, $q_{s1}$, $F_1$) is isomorf met een $DFA_2$ ($Q_2$, $\Sigma$, $\delta_2$, $q_{s2}$, $F_2$) indien enkel de namen van hun toestanden verschillen. Dus er bestaat een bijectie $b: Q_1 \rightarrow Q_2$ zodanig dat + \begin{itemize} + \item $b(F_1) = F_2$ + \item $b(q_{s1}) = q_{s2}$ + \item $\forall a \in \Sigma: b(\delta_1(q,a)) = \delta_2(b(q),a)$ (zie figuur \ref{fig:isodfa}) + \end{itemize} +\end{definitie} + +\begin{figure}[ht] +\centering +\begin{nfa} + \node [state] (q1) {$q_1$}; + \node [state] (q2) [right=3cm of q1] {$q_2$}; + \node [state] (p1) [below=1.5cm of q1] {$p_1$}; + \node [state] (p2) [below=1.5cm of q2] {$p_2$}; + + \node (DFA1) [draw,fit=(q1) (q2),inner sep=.4cm] {}; + \node (DFA2) [draw,fit=(p1) (p2),inner sep=.4cm] {}; + + \node [yshift=.3cm] at (DFA1.south) {$DFA_1$}; + \node [yshift=.3cm] at (DFA2.south) {$DFA_2$}; + + \path (q1) edge [bend left=15] node {$a$} (q2) + edge [] node {$b$} (p1) + (q2) edge [] node {$b$} (p2) + (p1) edge [bend left=15] node {$a$} (p2); + \addvmargin{1mm} +\end{nfa} +\caption{Commutatief diagram voor $b$ en $\delta_i$.} +\label{fig:isodfa} +\end{figure} \subsection{Myhill-Nerode relaties op $\sstar$} @@ -866,7 +936,6 @@ \subsection{PDA} \end{definitie} \begin{figure}[!ht] - \label{fig:pdasstep} \centering \begin{pda} \node[state] (A) [] {}; @@ -876,6 +945,7 @@ \subsection{PDA} \addvmargin{1mm} \end{pda} \caption{Een overgang van een PDA.} + \label{fig:pdasstep} \end{figure} \begin{nobreakparagraph} @@ -971,7 +1041,6 @@ \subsection{Pompend lemma voor contextvrije talen} \end{bewijs} \begin{figure}[ht] - \label{fig:pumptree} \centering \begin{tikzpicture}[-, >=stealth', @@ -1006,6 +1075,7 @@ \subsection{Pompend lemma voor contextvrije talen} edge [dotted, bend left] node {} (l4); \end{tikzpicture} \caption{De parse tree met de repeterende variabele $X$.} + \label{fig:pumptree} \end{figure} % TODO: Toepassing pompend lemma voor CFL diff --git a/voorbeelden.tex b/voorbeelden.tex index adb78c6..9b08de5 100644 --- a/voorbeelden.tex +++ b/voorbeelden.tex @@ -1,10 +1,10 @@ \section{Voorbeelden} -\subsection{NFA $\longrightarrow$ RE} +\subsection{NFA naar RE} \label{ex:gnfa} \begin{nfa} - \node[state] (S) {$S$}; + \node[initial,state] (S) {$S$}; \node[state] (A) [below right of=S] {$A$}; \node[state,accepting] (E) [above right of=A] {$E$}; @@ -124,6 +124,148 @@ \subsection{NFA $\longrightarrow$ RE} \paragraph{Stap 3} De RE voor de NFA is ``$b^*a(a|b)^*$". +\subsection{NFA naar DFA} +\label{ex:nfadfa} + +\subsubsection{Voorbeeld 1} + +\begin{nfa} + \node[initial,state] (S) {$S$}; + \node[state] (A) [below right of=S] {$A$}; + \node[state,accepting] (E) [above right of=A] {$E$}; + + \path (S) edge [] node {$a$} (E) + edge [] node {$a,\epsilon$} (A) + (A) edge [loop below] node {$b$} (A) + edge [bend right] node {$a$} (E) + (E) edge [loop right] node {$a,b$} (E) + edge [bend right] node [above] {$\epsilon$} (A); + \addvmargin{1mm} +\end{nfa} + +We construeren een tabel met alle toestanden van $Q_d = \powerset(Q_n)$ en de epsilon-bereikbare functie: + +\begin{center} +\begin{tabular}{r|r} + $q \in Q_d$ & $eb(q)$ \\ \hline + $\{\}$ & $\{\}$ \\ + $\{S\}$ & $\{S,A\}$ \\ + $\{A\}$ & $\{A\}$ \\ + $\{E\}$ & $\{A,E\}$ \\ + $\{S,A\}$ & $\{S,A\}$ \\ + $\{S,E\}$ & $\{S,A,E\}$ \\ + $\{A,E\}$ & $\{A,E\}$ \\ + $\{S,A,E\}$ & $\{S,A,E\}$ \\ +\end{tabular} +\end{center} + +We stellen nu de verzamelingen voor $\delta_n(Q_d,a)$ en $\delta_n(Q_d,b)$ op: + +\begin{center} +\begin{tabular}{r|r|r|r} + $q \in Q_d$ & $eb(q)$ & $\delta_n(q,a)$ & $\delta_n(q,b)$ \\ \hline + $\{\}$ & $\{\}$ & $\{\}$ & $\{\}$ \\ + $\{S\}$ & $\{S,A\}$ & $\{A,E\}$ & $\{\}$ \\ + $\{A\}$ & $\{A\}$ & $\{E\}$ & $\{A\}$ \\ + $\{E\}$ & $\{A,E\}$ & $\{E\}$ & $\{E\}$ \\ + $\{S,A\}$ & $\{S,A\}$ & $\{A,E\}$ & $\{A\}$ \\ + $\{S,E\}$ & $\{S,A,E\}$ & $\{A,E\}$ & $\{E\}$ \\ + $\{A,E\}$ & $\{A,E\}$ & $\{E\}$ & $\{A,E\}$ \\ + $\{S,A,E\}$ & $\{S,A,E\}$ & $\{A,E\}$ & $\{A,E\}$ \\ +\end{tabular} +\end{center} + +Tenslotte stellen nu de verzamelingen voor $\delta_d(Q_d,a)=eb(\delta_n(Q_d,a))$ en $\delta_d(Q_d,b)=eb(\delta_n(Q_d,b))$ op: + +\begin{center} +\begin{tabular}{r|r|r|r|r|r} + $q \in Q_d$ & $eb(q)$ & $\delta_n(q,a)$ & $\delta_n(q,b)$ & $\delta_d(q,a)$ & $\delta_d(q,b)$ \\ \hline + $\{\}$ & $\{\}$ & $\{\}$ & $\{\}$ & $\{\}$ & $\{\}$ \\ + $\{S\}$ & $\{S,A\}$ & $\{A,E\}$ & $\{\}$ & $\{A,E\}$ & $\{\}$ \\ + $\{A\}$ & $\{A\}$ & $\{E\}$ & $\{A\}$ & $\{A,E\}$ & $\{A\}$ \\ + $\{E\}$ & $\{A,E\}$ & $\{E\}$ & $\{E\}$ & $\{A,E\}$ & $\{A,E\}$ \\ + $\{S,A\}$ & $\{S,A\}$ & $\{A,E\}$ & $\{A\}$ & $\{A,E\}$ & $\{A\}$ \\ + $\{S,E\}$ & $\{S,A,E\}$ & $\{A,E\}$ & $\{E\}$ & $\{A,E\}$ & $\{A,E\}$ \\ + $\{A,E\}$ & $\{A,E\}$ & $\{E\}$ & $\{A,E\}$ & $\{A,E\}$ & $\{A,E\}$ \\ + $\{S,A,E\}$ & $\{S,A,E\}$ & $\{A,E\}$ & $\{A,E\}$ & $\{A,E\}$ & $\{A,E\}$ \\ +\end{tabular} +\end{center} + +De resulterende DFA: + +\begin{nfa} + \node[initial,state] (S) {$\{S,A\}$}; + \node[state] (A) [below right of=S] {$\{A\}$}; + \node[state,accepting] (E) [above right of=A] {$\{A,E\}$}; + + \path (S) edge [] node {$a$} (E) + edge [] node {$b$} (A) + (A) edge [loop below] node {$b$} (A) + edge [] node {$a$} (E) + (E) edge [loop right] node {$a,b$} (E); + \addvmargin{1mm} +\end{nfa} + +\subsubsection{Voorbeeld 2} + +\begin{nfa} + \node[initial,state] (q1) {$q_1$}; + \node[state,accepting] (q2) [right of=q1] {$q_2$}; + + \path (q1) edge [loop above] node {$a,b$} (q1) + edge [] node {$b$} (q2); + \addvmargin{1mm} +\end{nfa} + +We construeren een tabel met alle toestanden van $Q_d = \powerset(Q_n)$ en de epsilon-bereikbare functie: + +\begin{center} +\begin{tabular}{r|r} + $q \in Q_d$ & $eb(q)$ \\ \hline + $\{\}$ & $\{\}$ \\ + $\{q_1\}$ & $\{q_1\}$ \\ + $\{q_2\}$ & $\{q_2\}$ \\ + $\{q_1,q_2\}$ & $\{q_1,q_2\}$ \\ +\end{tabular} +\end{center} + +We stellen nu de verzamelingen voor $\delta_n(Q_d,a)$ en $\delta_n(Q_d,b)$ op: + +\begin{center} +\begin{tabular}{r|r|r|r} + $q \in Q_d$ & $eb(q)$ & $\delta_n(q,a)$ & $\delta_n(q,b)$ \\ \hline + $\{\}$ & $\{\}$ & $\{\}$ & $\{\}$ \\ + $\{q_1\}$ & $\{q_1\}$ & $\{q_1\}$ & $\{q_1,q_2\}$ \\ + $\{q_2\}$ & $\{q_2\}$ & $\{\}$ & $\{\}$ \\ + $\{q_1,q_2\}$ & $\{q_1,q_2\}$ & $\{q_1\}$ & $\{q_1,q_2\}$ \\ +\end{tabular} +\end{center} + +Tenslotte stellen nu de verzamelingen voor $\delta_d(Q_d,a)=eb(\delta_n(Q_d,a))$ en $\delta_d(Q_d,b)=eb(\delta_n(Q_d,b))$ op: + +\begin{center} +\begin{tabular}{r|r|r|r|r|r} + $q \in Q_d$ & $eb(q)$ & $\delta_n(q,a)$ & $\delta_n(q,b)$ & $\delta_d(q,a)$ & $\delta_d(q,b)$ \\ \hline + $\{\}$ & $\{\}$ & $\{\}$ & $\{\}$ & $\{\}$ & $\{\}$ \\ + $\{q_1\}$ & $\{q_1\}$ & $\{q_1\}$ & $\{q_1,q_2\}$ & $\{q_1\}$ & $\{q_1,q_2\}$ \\ + $\{q_2\}$ & $\{q_2\}$ & $\{\}$ & $\{\}$ & $\{\}$ & $\{\}$ \\ + $\{q_1,q_2\}$ & $\{q_1,q_2\}$ & $\{q_1\}$ & $\{q_1,q_2\}$ & $\{q_1\}$ & $\{q_1,q_2\}$ \\ +\end{tabular} +\end{center} + +De resulterende DFA: + +\begin{nfa} + \node[initial,state] (q1) {$\{q_1\}$}; + \node[state,accepting] (q2) [right=1.5cm of q1] {$\{q_1,q_2\}$}; + + \path (q1) edge [loop above] node {$a$} (q1) + edge [bend left] node [above] {$b$} (q2) + (q2) edge [loop above] node {$b$} (q2) + edge [bend left] node [below] {$a$} (q1); + \addvmargin{1mm} +\end{nfa} + \subsection{Parti\"ele DFA naar complete DFA} \label{ex:dfatotal} @@ -326,9 +468,139 @@ \subsection{DFA minimaliseren} \node[state,accepting] (q4) [below right of=q2] {$q_4$}; \node[state] (q5) [below right of=q1] {$q_5$}; - \path (q1) edge [] node {$a,b$} (q2) - edge [] node {$c$} (q5) - (q2) edge [] node {$c$} (q4) - (q5) edge [] node {$d$} (q4); + \path (q1) edge [] node {$a,b$} (q2) + edge [] node {$c$} (q5) + (q2) edge [] node {$c$} (q4) + (q5) edge [] node {$d$} (q4); + \addvmargin{1mm} +\end{nfa} + +\subsection{Taal met NFA kleiner dan minimale DFA} +\label{ex:nfaldfamin} + +Een voorbeeld van een taal waarvoor een NFA bestaat die kleiner is dan DFA$_{min}$ is de taal over $\Sigma = \{a,b\}$ bepaald door een reguliere expressie gegeven als +\begin{equation*} + (a|b)^*a(a|b)(a|b) +\end{equation*} + +Een NFA die dezelfde taal bepaalt is: + +\begin{nfa} + \node[initial,state] (S) {$S$}; + \node[state] (A) [right of=S] {$A$}; + \node[state] (B) [right of=A] {$B$}; + \node[state,accepting] (E) [right of=B] {$E$}; + + \path (S) edge [loop above] node {$a,b$} (S) + edge [] node {$a$} (A) + (A) edge [] node {$a,b$} (B) + (B) edge [] node {$a,b$} (E); + \addvmargin{1mm} +\end{nfa} + +We stellen een verkorte tabel op beginnende bij toestand $S$. Er is geen enkele boog met $\epsilon$, dus $\forall a \in \Sigma: \delta_n(q,a)=\delta_d(q,a)$. Elke toestand van $Q_d$ krijgt een alias om de leesbaarheid te bevorderen. + +\begin{center} +\begin{tabular}{r|r|r|r} + $q \in Q_d$ & $eb(q)$ & $\delta_n(q,a)=\delta_d(q,a)$ & $\delta_n(q,b)=\delta_d(q,b)$ \\ \hline + $1=\{S\}$ & $\{S\}$ & $\{S,A\}$ & $\{S\}$\\ + $2=\{S,A\}$ & $\{S,A\}$ & $\{S,A,B\}$ & $\{S,B\}$\\ + $3=\{S,A,B\}$ & $\{S,A,B\}$ & $\{S,A,B,E\}$ & $\{S,B,E\}$\\ + $4=\{S,B\}$ & $\{S,B\}$ & $\{S,A,E\}$ & $\{S,E\}$\\ + $5=\{S,A,B,E\}$ & $\{S,A,B,E\}$ & $\{S,A,B,E\}$ & $\{S,B,E\}$\\ + $6=\{S,B,E\}$ & $\{S,B,E\}$ & $\{S,A,E\}$ & $\{S,E\}$\\ + $7=\{S,A,E\}$ & $\{S,A,E\}$ & $\{S,A,B\}$ & $\{S,B\}$\\ + $8=\{S,E\}$ & $\{S,E\}$ & $\{S,A\}$ & $\{S\}$\\ +\end{tabular} +\end{center} + +We kunnen vervolgende de bijhorende DFA construeren: + +\begin{nfa} + \node[initial,state] (1) {$1$}; + \node[state] (2) [above left of=1] {$2$}; + \node[state] (4) [above right of=2] {$4$}; + \node[state,accepting] (7) [right of=4] {$7$}; + \node[state] (3) [right of=7] {$3$}; + \node[state,accepting] (5) [right of=3] {$5$}; + \node[state,accepting] (6) [below right of=5] {$6$}; + \node[state,accepting] (8) [below left of=6] {$8$}; + + \path (1) edge [loop below] node {$b$} (1) + edge [] node {$a$} (2) + (2) edge [] node {$b$} (4) + edge [bend left=90] node {$a$} (3) + (4) edge [bend left=40] node {$a$} (7) + edge [bend right=10] node {$b$} (8) + (7) edge [] node {$a$} (3) + edge [] node {$b$} (4) + (3) edge [] node {$a$} (5) + edge [bend right=10] node {$b$} (6) + (5) edge [loop above] node {$a$} (5) + edge [] node {$b$} (6) + (6) edge [bend left=15] node {$a$} (7) + edge [] node {$b$} (8) + (8) edge [] node {$a$} (2) + edge [] node {$b$} (1); \addvmargin{1mm} -\end{nfa} \ No newline at end of file +\end{nfa} + +We proberen om de gevonden DFA nog verder te minimaliseren door de f-verschillende toestanden te bepalen met het standaard algoritme. We bekomen de volgende graaf: + +\begin{ugraph} + \node[state] (1) {$1$}; + \node[state] (2) [above right of=1] {$2$}; + \node[state] (4) [right of=2] {$4$}; + \node[state] (7) [below right of=4] {$7$}; + \node[state] (3) [below of=7] {$3$}; + \node[state] (5) [below left of=3] {$5$}; + \node[state] (6) [left of=5] {$6$}; + \node[state] (8) [above left of=6] {$8$}; + + % INIT + \path (1) edge [] node {} (7) + (2) edge [] node {} (7) + (4) edge [] node {} (7) + (3) edge [] node {} (7) + (1) edge [] node {} (5) + (2) edge [] node {} (5) + (4) edge [] node {} (5) + (3) edge [] node {} (5) + (1) edge [] node {} (6) + (2) edge [] node {} (6) + (4) edge [] node {} (6) + (3) edge [] node {} (6) + (1) edge [] node {} (8) + (2) edge [] node {} (8) + (4) edge [] node {} (8) + (3) edge [] node {} (8); + % REPEAT + \path (1) edge [] node {} (3) + (1) edge [] node {} (4) + (2) edge [] node {} (3) + (2) edge [] node {} (4) + (5) edge [] node {} (7) + (5) edge [] node {} (8) + (6) edge [] node {} (7) + (6) edge [] node {} (8) + (7) edge [] node {} (8) + (1) edge [] node {} (2) + (5) edge [] node {} (6); + \addvmargin{1mm} +\end{ugraph} + +Vervolgens bepalen we de complementgraaf: + +\begin{ugraph} + \node[state] (1) {$1$}; + \node[state] (2) [above right of=1] {$2$}; + \node[state] (4) [right of=2] {$4$}; + \node[state] (7) [below right of=4] {$7$}; + \node[state] (3) [below of=7] {$3$}; + \node[state] (5) [below left of=3] {$5$}; + \node[state] (6) [left of=5] {$6$}; + \node[state] (8) [above left of=6] {$8$}; + \addvmargin{1mm} +\end{ugraph} + +De complementgraaf bevat geen enkele component die uit meer dan \'e'en toestand bestaat. We concluderen dat de DFA reeds minimaal is. We zien nu ook dat de NFA minder toestanden heeft dan de equivalente minimale DFA. \ No newline at end of file