diff --git a/01-regular/regular.tex b/01-regular/regular.tex
index 297db04408807e670ce701f0fd00e521681322b4..9b320c17a73d4325d096a42f18d7a89c40a5b05f 100644
--- a/01-regular/regular.tex
+++ b/01-regular/regular.tex
@@ -107,7 +107,7 @@ Tedy existuje-li konečný automat~$A$ takový, že $L = L(A)$.
 přijímací stavy mají tučný zelený okraj.}
 
 \examplen{počítání jedniček}{
-Uvažme jazyk $L_3 = \{ \alpha\in\{\0,\1\} \mid |\alpha|_{\1} \bmod 3 = 0 \}$,
+Uvažme jazyk $L_3 = \{ \alpha\in\{\0,\1\}^* \mid |\alpha|_{\1} \bmod 3 = 0 \}$,
 tedy jazyk slov, jejichž počet jedniček je dělitelný třemi. Tento jazyk je regulární.
 O~tom se snadno přesvědčíme sestrojením automatu: bude mít stavy $\{0,1,2\}$ odpovídající
 možným zbytkům po dělení počtu zatím přečtených jedniček třemi. Stav~0 bude jak počáteční,
@@ -905,7 +905,7 @@ Nyní ukážeme, jak ekvivalentní stavy sloučit:
 \defn{Nechť $A=(Q,\Sigma,\delta,q_0,F)$ DFA, $\approx$ ekvivalence jeho stavů
 a pro každý stav $s\in Q$ je $[s]$ jeho ekvivalenční třída.
 Pak definujeme \df{faktorový automat} $A/\mathord{\approx} = (Q',\Sigma,\delta',q'_0,F')$, kde:
-\tightlist{o}
+\list{o}
 \:$Q' = \{[s] \mid s\in Q\}$,
 \:$\delta'([s],x) = [t]$, kdykoliv $\delta(s,x)=t$,
 \:$q'_0 = [q_0]$,
@@ -1016,7 +1016,239 @@ V~tomto oddílu prozkoumáme některé souvislosti mezi teorií automatů
 a algebrou. Předpokládáme čtenáře zběhlého v~základech algebry, takže
 důkazy jsou zde poněkud hutnější.
 
-\subsection{Monoidy a polookruhy}
+\subsection{Kanonické automaty}
+
+Když jsme zkoumali jazyk $L_{01} = \{ \0^n\1^n \}$, intuice nám říkala, že by neměl být
+regulární, protože si po načtení $\0^n$ musíme pamatovat libovolně velké číslo~$n$,
+na což nestačí konečná paměť automatu. Nyní se pokusíme něco jako paměť potřebnou
+k~rozpoznávání jazyka zavést pořádně.
+
+\defn{Nechť $L$ je nějaký jazyk nad abecedou~$\Sigma$. Řetězce $\alpha,\beta \in \Sigma^*$
+jsou rozlišitelné vzhledem k~$L$, pokud existuje nějaký suffix $\sigma\in\Sigma^*$
+takový, že právě jeden z~řetězců $\alpha\sigma$ a~$\beta\sigma$ leží v~$L$.
+}
+
+\defn{\em{Syntaktická kongruence} neboli \em{Nerodova kongruence}\foot{Pro zjednodušení
+výkladu zde nerozlišujeme levé kongruence od pravých. Brzy to uvedeme na pravou míru.}
+jazyka $L\subseteq\Sigma^*$ je binární relace~$\sim_L$ na množině řetězců~$\Sigma^*$
+taková, že $\alpha\sim_L\beta$ právě tehdy, když $\alpha$ a~$\beta$ nejsou
+rozlišitelné vzhledem k~$L$.
+}
+
+\obs{Syntaktická kongruence je ekvivalence na množině~$\Sigma^*$.}
+
+\example{
+Pro jazyk $L_{01}$ jsou každá dvě slova $\0^n$ a~$\0^m$ ($n\ne m$) navzájem rozlišitelná,
+stačí zvolit suffix~$\1^n$, takže syntaktická kongruence má nekonečně mnoho tříd.
+Naopak pro jazyk $\{ \0^n \mid n \bmod 3 = 0 \}$
+jsou slova $\0^n$ a $\0^m$ rozlišitelná právě tehdy, když $n-m$ je dělitelné třemi;
+syntaktická kongruence má proto jenom 3~třídy určeně zbytkem po dělení délky řetězce třemi.
+}
+
+Ukážeme, že kdykoliv má syntaktická kongruence konečně mnoho tříd, jazyk
+je regulární. Dokážeme totiž vytvořit automat, jehož stavy odpovídají třídám
+synaktické kongruence. (Časem uvidíme, že platí i opačná implikace.)
+
+\defn{\df{Kanonický automat} pro jazyk~$L\subset\Sigma^*$ je $A_L = (Q,\Sigma,\delta,q_0,F)$, kde:
+\list{o}
+\:$Q = \{ [\alpha] \mid \alpha\in\Sigma^* \}$ je množina ekvivalenčních tříd syntaktické ekvivalence~$\sim_L$,
+\:$\delta([\alpha],x) = [\alpha x]$,
+\:$q_0 = [\varepsilon]$,
+\:$F = \{ [\alpha] \mid \alpha\in L \}$.
+\endlist
+}
+
+\obs{Opět nezáleží na volbě reprezentantů tříd. Kdykoliv $[\alpha]=[\alpha']$, tak slova $\alpha$
+a~$\alpha'$ nejsou rozlišitelná žádným suffixem, a~proto ani $\alpha x$ a $\alpha' x$
+nemohou být rozlišitelná, takže $[\alpha x] = [\alpha' x]$. Také z~$[\alpha]=[\alpha']$
+plyne, že $\alpha$ i~$\alpha'$ jsou buď obě v~$L$, nebo obě mimo~$L$ -- jinak by slova
+byla rozlišitelná prázdným suffixem.
+}
+
+\lemma{Kanonický automat~$A_L$ přijímá jazyk~$L$.
+}
+
+\proof
+Indukcí podle délky řetězce~$\alpha$ dokážeme, že $\delta(q_0,\alpha) = [\alpha]$.
+Stav $[\alpha]$ je přijímací právě tehdy, když $\alpha\in L$.
+\qed
+
+Podobně se můžeme dívat na všechny automaty -- stavům vždy můžeme přiřadit nějaké
+ekvivalenční třídy slov.
+
+\defn{\df{Automatová kongruence} pro automatu $A=(Q,\Sigma,\delta,q_0,F)$ je binární relace
+$\simeq_A$ na množině slov $\Sigma^*$ taková, že $\alpha\simeq_A\beta$ právě tehdy, když
+po zpracování slov $\alpha$ a~$\beta$ automat skončí ve stejném stavu (tedy $\delta^*(q_0,\alpha)
+= \delta^*(q_0,\beta)$).
+}
+
+\lemma{Nechť $L$ je jazyk automatu~$A$ a $\alpha\simeq_A\beta$. Potom slova $\alpha$
+a $\beta$ nejsou rozlišitelná žádným suffixem, takže platí $\alpha\sim_L\beta$.
+}
+
+\proof
+Pokusme se $\alpha$ od~$\beta$ oddělit nějakým suffixem~$\sigma$.
+Automat po zpracování $\alpha$ a~$\beta$ skončí v~tomtéž stavu~$s$.
+Potom $\delta^*(q_0,\alpha\sigma) = \delta^*(q_0,\beta\sigma) = \delta^*(s,\sigma)$,
+takže $\alpha\sigma\in F$ právě tehdy, když $\beta\sigma\in F$. K~oddělení tedy nedošlo.
+\qed
+
+\cor{
+Automatová kongruence~$\simeq_A$ je tedy zjemněním syntantické kongruence~$\sim_L$.
+Ekvivalenční třídy kongruence~$\sigma_A$ navíc odpovídají dosažitelným stavům
+automatu~$A$. Proto automat má alespoň tolik stavů, kolik je tříd syntaktické kongruence.
+}
+
+Z~toho už snadno získáme následující slavnou větu.
+
+\theoremn{Myhillova-Nerodova}{
+Jazyk~$L$ je regulární právě tehdy, když jeho syntaktická kongruence~$\sim_L$
+má konečně mnoho tříd.
+}
+
+\proof
+Nechť $\sim_L$ má konečně mnoho tříd. Pak existuje kanonický automat pro~$L$,
+takže $L$ je regulární.
+Naopak existuje-li nějaký automat~$A$ přijímající jazyk~$L$, uvažme jeho
+automatovou kongruenci~$\simeq_A$. Počet jejích tříd je shora omezený počtem
+stavů automatu, tudíž je konečný. A~jelikož automatová kongruence je zjemněním
+syntaktické, musí mít syntaktická také konečně mnoho tříd.
+\qed
+
+\subsection{Izomorfismus automatů}
+
+Mnoha různými odvětvími matematiky se jako červená nit vine pojem \em{izomorfismu.}
+Odhlédneme-li od detailů, vždy se tím myslí bijekce mezi nějakými dvěma množinami,
+která zachovává nějaké vlastnosti.
+
+\example{Izomorfismus neorientovaných grafů $G=(V,E)$ a $G'=(V',E')$ je bijekce
+$f: V\rightarrow V'$, která zachovává vlastnost \uv{být spojen hranou}.
+Tedy $\{u,v\}\in E$ právě tehdy, když $\{f(u),f(v)\} \in E'$.
+Existuje-li taková bijekce, řekneme, že grafy $G$ a~$G'$ jsou izomorfní,
+a představujeme si, že se liší jenom pojmenováním vrcholů. Snadno nahlédneme, že vlastnost
+\uv{být izomorfní} je ekvivalence na grafech.
+}
+
+Podobně můžeme definovat izomorfismus konečných automatů.
+
+\defn{\df{Izomorfismus automatů} $A = (Q,\Sigma,\delta,q_0,F)$ a $A' = (Q',\Sigma,\delta',q'_0,F')$
+je bijekce $f: Q\rightarrow Q'$, pro kterou platí:
+
+\list{o}
+\:$f(q_0) = q'_0$,
+\:$s\in F \Leftrightarrow f(s)\in F'$,
+\:$\delta(s,x) = t \Leftrightarrow \delta'(f(s),x) = f(t)$.
+\endlist
+
+Pokud taková bijekce existuje, řekneme, že automaty $A$ a~$A'$ jsou izomorfní, což značíme $A\cong A'$.
+}
+
+\obs{
+Relace~$\cong$ je ekvivalence na automatech.
+}
+
+\note{
+Izomorfismus tedy zachovává vlastnosti \uv{být počáteční stav}, \uv{být koncový stav}
+a přechody mezi stavy. Izomorfní automaty se proto liší jen pojmenováním stavů. S~touto
+představou je následující tvrzení jen cvičením z~dosazování do definic:
+}
+
+\lemma{
+Izomorfní automaty rozpoznávají tentýž jazyk.
+}
+
+\proof
+Nechť mezi automaty $A=(Q,\Sigma,\delta,q_0,F)$ a $A'=(Q',\Sigma,\delta',q'_0,F')$ vede izomorfismus~$f$.
+Uvažme slovo $\alpha\in\Sigma^*$ délky~$n$ a výpočet automatu~$A$ nad tímto slovem. To je nějaká posloupnost stavů
+$q_0=s_0,s_1,\ldots,s_n$. Funkce~$f$ tento výpočet zobrazí na posloupnost stavů
+$s'_0=f(s_0),s'_1=f(s_1),\ldots,s'_n=f(s_n)$.
+
+Ověříme, že tato posloupnost je výpočtem automatu~$A'$ nad tímtéž slovem.
+Použijeme vlastnosti z~definice izomorfismu. Nejprve ověříme $s'_0 = f(s_0) = f(q_0) = q'_0$.
+Podle definice výpočtu je $s_{i+1} = \delta(s_i, \alpha[i])$, takže
+$s'_{i+1} = f(s_{i+1}) = f(\delta(s_i, \alpha[i])) = \delta'(f(s_i), \alpha[i]) = \delta'(s'_i, \alpha[i])$.
+
+Nakonec víme, že $s_n\in F$ právě tehdy, když $s'_n = f(s_n) \in F'$, takže automaty
+se shodnou na tom, zda slovo~$\alpha$ přijmou. Jelikož $\alpha$ jsme mohli zvolit libovolně,
+znamená to, že automaty přijímají tentýž jazyk.
+\qed
+
+\subsection{Minimální automaty}
+
+Postupně ukážeme, že všechny redukované automaty přijímající jazyk~$L$
+jsou izomorfní s~kanonickým automatem~$A_L$.
+
+\lemma{
+Nechť $A$ je automat přijímající jazyk~$L$.
+Stavy $s$ a~$t$ jsou ekvivalentní právě tehdy, když jejich třídy automatové kongruence~$\simeq_A$
+leží v~těže třídě syntaktické kongruence~$\sim_L$.
+}
+
+\proof
+Nechť $T_s$ a~$T_t$ jsou třídy kongruence~$\simeq_A$ příslušné ke stavům~$s$, $t$
+a $\alpha\in T_s$ a $\beta\in T_t$ jsou nějací reprezentanti těchto tříd. Platí tedy
+$s=\delta^*(q_0,\alpha)$ a $t=\delta^*(q_0,\beta)$.
+
+Stavy $s$ a~$t$ jsou ekvivalentní právě tehdy, když pro každé dva suffixy~$\sigma$
+je $\delta^*(s,\sigma)\in F \Leftrightarrow \delta^*(t,\sigma)\in F$. To je totéž
+jako $\delta^*(q_0,\alpha\sigma)\in F \Leftrightarrow \delta^*(q_0,\alpha\sigma)\in F$,
+čili $\alpha\sigma\in L \Leftrightarrow \beta\sigma\in L$, a~to je přesně $\alpha\sim_L\beta$.
+\qed
+
+\cor{
+Automat bez nedosažitelnych stavů je redukovaný právě tehdy, když automatová kongruence je rovna
+syntaktické kongruenci jazyka. Kanonický automat je proto vždy redukovaný.
+}
+
+Rovnost tříd obou kongruencí nám dá postup, jak sestrojit izomorfismus
+s~kanonickým automatem. Z~toho plyne následující věta, která se někdy považuje
+za druhou část tvrzení Myhillovy-Nerodovy věty.
+
+\theorem{
+Nechť~$A$ je redukovaný automat přijímající jazyk~$L$.
+Potom~$A$ je izomorfní s~kanonickým automatem pro jazyk~$L$.
+}
+
+\proof
+Nechť $A=(Q,\Sigma,\delta,q_0,F)$ je daný redukovaný automat
+a $A_L=(Q',\Sigma,\delta',q'_0,F')$ je kanonický automat pro jazyk~$L$.
+
+Definujme funkci~$f$, která každému stavu $s\in Q$ přiřadí příslušnou třídu $f(s)$
+automatové kongruence~$\simeq_A$. Z~předchozího víme, že pro redukovaný automat jsou třídy kongruence~$\simeq_A$
+rovny třídám syntaktické kongruence~$\sim_L$. Takže $f$ přiřazuje stavům automatu~$A$
+stavy kanonického automatu~$A_L$. Tato funkce je bijekce a ukážeme, že je to dokonce izomorfismus
+automatů. To už je jednoduché cvičení na dosazování do definic.
+
+Nejprve ověříme kompatibilitu s~přechodovou funkcí. Chceme, aby platilo
+$f(\delta(s,x)) = \delta'(f(s),x)$.
+Jelikož automat~$A$ má všechny stavy dosažitelné, existuje nějaké slova~$\alpha$,
+po jehož zpracování automat skončí ve stavu~$s$. Platí tedy $\alpha\in f(s)$,
+což je totéž jako $f(s) = [\alpha]$.
+Po zpracování slova $\alpha x$ automat skončí ve stavu $s' = \delta(s,x)$,
+jehož třída je $f(s') = [\alpha x]$.
+To odpovídá přechodu kanonického automatu: podle jeho definice je $\delta'([\alpha],x) = [\alpha x]$.
+
+Pak ověříme, že $f(q_0) = q'_0$. Třída $f(q_0)$ obsahuje slova, po kterých automat
+skončí v~počátečním stavu, takže $f(q_0) = [\varepsilon]$. To je ovšem~$q'_0$ z~definice
+kanonického automatu.
+
+Nakonec potřebujeme zkontrolovat kompatibilitu s~přijímacími stavy:
+Stav~$s$ s~třídou $f(s) = [\alpha]$ je přijímací právě tehdy, když $\alpha\in L$,
+což je právě když $f(s)\in F'$.
+\qed
+
+\defn{
+Automat $A$ je \df{minimální,} pokud má mezi všemi automaty přijímajícími jazyk~$L$
+nejmenší počet stavů.
+}
+
+\cor{
+Každý minimální automat je redukovaný (jinak bychom redukcí získali menší automat).
+Tudíž je izomorfní s~kanonickým automatem~$A_L$. Jazyk má tedy (až na izomorfismus)
+právě jedne minimální automat.
+}
+
+\subsectionstar{Monoidy a polookruhy}
 
 \defn{
 \df{Monoid} je algebraická struktura $(X,\cdot,1)$, kde $X$ je množina prvků,
@@ -1076,7 +1308,7 @@ jsou svázány distributivitou $(A\cup B)\cdot C = A\cdot C \cup B\cdot C$
 a analogicky z~opačné strany.
 }
 
-\subsection{Lineární rovnice pro jazyky}
+\subsectionstar{Lineární rovnice pro jazyky}
 
 Pojďme prozkoumat, jak se chovají rovnice typu $X=AX\cup B$, kde $X$ je neznámý
 jazyk a $A$ a~$B$ známé jazyky. To je analogie lineárních rovnic, jen v~okruhu jazyků
@@ -1178,99 +1410,8 @@ To vyjde, neboť koeficienty soustavy jsou konečné, a~tedy regulární jazyky
 a řešení soustavy z~nich umíme vyjádřit pomocí operací regulárních výrazů.
 }
 
-\subsection{Izomorfismus automatů}
-
-Mnoha různými odvětvími matematiky se jako červená nit vine pojem \em{izomorfismu.}
-Odhlédneme-li od detailů, vždy se tím myslí bijekce mezi nějakými dvěma množinami,
-která zachovává nějaké vlastnosti.
-
-\example{Izomorfismus neorientovaných grafů $G=(V,E)$ a $G'=(V',E')$ je bijekce
-$f: V\rightarrow V'$, která zachovává vlastnost \uv{být spojen hranou}.
-Tedy $\{u,v\}\in E$ právě tehdy, když $\{f(u),f(v)\} \in E'$.
-Existuje-li taková bijekce, řekneme, že grafy $G$ a~$G'$ jsou izomorfní,
-a představujeme si, že se liší jenom pojmenováním vrcholů. Snadno nahlédneme, že vlastnost
-\uv{být izomorfní} je ekvivalence na grafech.
-}
-
-Podobně můžeme definovat izomorfismus konečných automatů.
-
-\defn{\df{Izomorfismus automatů} $A = (Q,\Sigma,\delta,q_0,F)$ a $A' = (Q',\Sigma,\delta',q'_0,F')$
-je bijekce $f: Q\rightarrow Q'$, pro kterou platí:
-
-\list{o}
-\:$f(q_0) = q'_0$,
-\:$s\in F \Leftrightarrow f(s)\in F'$,
-\:$\delta(s,x) = t \Leftrightarrow \delta'(f(s),x) = f(t)$.
-\endlist
-
-Pokud taková bijekce existuje, řekneme, že automaty $A$ a~$A'$ jsou izomorfní, což značíme $A\cong A'$.
-}
-
-\obs{
-Relace~$\cong$ je ekvivalence na automatech.
-}
-
-\note{
-Izomorfismus tedy zachovává vlastnosti \uv{být počáteční stav}, \uv{být koncový stav}
-a přechody mezi stavy. Izomorfní automaty se tedy liší jen pojmenováním stavů. S~touto
-představou je následující tvrzení jen cvičením z~dosazování do definic:
-}
-
-\lemma{
-Izomorfní automaty rozpoznávají tentýž jazyk.
-}
-
-\proof
-Nechť mezi automaty $A=(Q,\Sigma,\delta,q_0,F)$ a $A'=(Q',\Sigma,\delta',q'_0,F')$ vede izomorfismus~$f$.
-Uvažme slovo $\alpha\in\Sigma^*$ délky~$n$ a výpočet automatu~$A$ nad tímto slovem. To je nějaká posloupnost stavů
-$q_0=s_0,s_1,\ldots,s_n$. Funkce~$f$ tento výpočet zobrazí na posloupnost stavů
-$s'_0=f(s_0),s'_1=f(s_1),\ldots,s'_n=f(s_n)$.
-
-Ověříme, že tato posloupnost je výpočtem automatu~$A'$ nad tímtéž slovem.
-Použijeme vlastnosti z~definice izomorfismu. Nejprve ověříme $s'_0 = f(s_0) = f(q_0) = q'_0$.
-Podle definice výpočtu je $s_{i+1} = \delta(s_i, \alpha[i])$, takže
-$s'_{i+1} = f(s_{i+1}) = f(\delta(s_i, \alpha[i])) = \delta'(f(s_i), \alpha[i]) = \delta'(s'_i, \alpha[i])$.
-
-Nakonec víme, že $s_n\in F$ právě tehdy, když $s'_n = f(s_n) \in F'$, takže automaty
-se shodnou na tom, zda slovo~$\alpha$ přijmou. Jelikož $\alpha$ jsme mohli zvolit libovolně,
-znamená to, že automaty přijímají tentýž jazyk.
-\qed
-
-\subsection{Redukce automatu}
-
-TODO:
-
-\list{o}
-\:Odstranění nedosažitelných stavů (možná později?)
-\:Připomenutí ekvivalencí a jejich tříd, zjemnění ekvivalence
-\:Ekvivalence stavů
-\:Algoritmus na konstrukci ekvivalence (indukce podle délky oddělujícího slova)
-\:Cvičení: využití algoritmu pro test, zda dva automaty přijímají tentýž jazyk
-\:Faktorizace stavů $\Rightarrow$ redukovaný automat, jeho ekvivalence stavů je triviální
-\:Plán: dva redukované automaty pro tentýž jazyk jsou izomorfní
-\endlist
-
-\subsection{Kongruence slov a Myhillova-Nerodova věta}
-
-TODO:
-
-\list{o}
-\:Co je to kongruence na monoidu
-\:Automatová kongruence (potřebujeme všechny stavy dosažitelné)
-\:Syntaktická kongruence (asi jen jednostranná)
-\:Automatová kongruence je zjemněním syntaktické
-\:Myhillova-Nerodova věta: jazyk je regulární $\Leftrightarrow$ levá/pravá syntaktická
-  kongruence má konečně mnoho tříd.
-\:Nějaké příklady jazyků a jejich kongruencí
-\:Dva stavy jsou ekvivalentní, pokud jejich kongruenční třídy patří do téže třídy syntaktické kongruence.
-\:Pokud dva automaty mají tutéž automatovou kongruenci, jsou izomorfní.
-\:Důsledek: Redukované automaty pro tentýž jazyk jsou izomorfní.
-\endlist
-
 \exercises
 
-\ex{Charakterizujte všechna řešení rovnice $X=AX\cup B$ v~případě, že $\varepsilon\in A$.
-
 \ex{Homomorfismus se od izomorfismu liší tím, že nevyžadujeme, aby zobrazení bylo bijektivní.
 Můžeme si tedy představit, že je to izomorfismus jednoho objektu s~nějakou podmnožinou druhého
 objektu. Rozmyslete si, co znamená homomorfismus automatů, a~ukažte, že z~něj také plyne,
@@ -1278,6 +1419,8 @@ objektu. Rozmyslete si, co znamená homomorfismus automatů, a~ukažte, že z~n
 }
 
 \ex{Formulujte definici izomorfismu pro nedeterministické automaty.}
+
+\exx{Charakterizujte všechna řešení rovnice $X=AX\cup B$ v~případě, že $\varepsilon\in A$.
 }
 
 \endexercises