\documentclass[a4paper,11pt]{article}
\usepackage[croatian]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amsthm,amssymb,stmaryrd,fancyhdr,graphicx}
\usepackage{tikz}
\usetikzlibrary{arrows,automata,positioning}

\addtolength{\hoffset}{-1cm}\addtolength{\textwidth}{2cm}
\addtolength{\voffset}{-2cm}\addtolength{\textheight}{2cm}
\setlength{\headheight}{3em}
\setlength{\arraycolsep}{2pt}
\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}

\pagestyle{fancy}
\fancyhead[L]{Filip Nikšić}
\fancyhead[R]{MTR---Zadaća 3, originalni dio}

%%% Enumeracije
%\renewcommand{\labelenumi}{(\alph{enumi})} % redefinira labelu countera u enumeracijama prve dubine

%%% Konkretna matematika
\newcommand{\rast}[1]{\overline{#1}}
\newcommand{\pad}[1]{\underline{#1}}
\newcommand{\hiper}[3]{\ensuremath{\left(\genfrac{}{}{0pt}{}{#1}{#2}\,\Big|\,#3\right)}}

%%% Logicki simboli
\newcommand{\ekv}{\ensuremath{\ \Leftrightarrow\ }}
\newcommand{\Ekv}{\ensuremath{\ \Longleftrightarrow\ }}
\newcommand{\slijedi}{\ensuremath{\ \Rightarrow\ }}
\newcommand{\Slijedi}{\ensuremath{\ \Longrightarrow\ }}

%%% Relacije
\renewcommand{\ge}{\geqslant}
\renewcommand{\le}{\leqslant}
\newcommand{\tmanje}{\trianglelefteqslant} % treba paket stmaryrd

%%% Matematicka teorija racunarstva
\newcommand{\fix}{\ensuremath{\text{fix}\,}}
\newcommand{\blank}{\textvisiblespace}

%%% Ostalo
\renewcommand{\tt}{\texttt}
\newcommand{\potez}[1]{\overline{#1}}
\newcommand{\id}{\ensuremath{\text{id}}}
\renewcommand{\epsilon}{\varepsilon}
\newcommand{\ideu}{\!\to\!}

\theoremstyle{definition}
\newtheorem{zad}{Zadatak}

\renewcommand{\qedsymbol}{$\blacksquare$}

\title{Matematička teorija računarstva\\ Zadaća 3}
\author{Filip Nikšić\\ \tt{fniksic@gmail.com}}
\date{13.~svibnja 2008.}

\begin{document}

\maketitle

\section*{Originalni dio}

%\setcounter{zad}{0}

\begin{zad}[10 bodova]
  Zadan je jezik
    $$L=\big\{ w\ |\ w\in \tt{aa}(\tt{ba})^\star\tt{cc} \cup \tt{cc}(\tt{ba})^\star\tt{aa} \big\}\,.$$
  Je li $L$ regularan?
\end{zad}

\begin{proof}[Rješenje]
  Ovo je jednostavan zadatak koji provjerava osnovno razumijevanje gradiva. Budući da je
  jezik zadan regularnim izrazom, nužno je regularan. Nema potrebe za primjenom leme o
  pumpanju, a ne mora se ni konstruirati konačan automat.
\end{proof}

%\newpage

\begin{zad}[20 bodova]\label{zad2}
  Zadan je jezik
    $$L=\big\{ ww^{\mathcal{R}}u\ |\ w,u\in(\tt{a}\cup\tt{b})^+ \big\}\,.$$
  Je li $L$ regularan? Je li kontekstno slobodan?
\end{zad}

\begin{proof}[Rješenje]
  Intuitivno je jasno da $L$ nije regularan jezik. Prvi pokušaj za dokazivanje neregularnosti
  bila bi primjena leme o pumpanju. Nažalost, za $p=4$ svaka riječ iz $L$ duljine barem $p$
  zadovoljava uvjete leme.

  To bi nas moglo navesti da pomislimo da je $L$ regularan, međutim, pogledajmo reziduale od $L$:
  \begin{align*}
    L_0 &:= \tt{a}^{-1}L = \big\{ ww^{\mathcal{R}}\tt{a}u\ |\ w\in(\tt{a}\cup\tt{b})^\star, u\in(\tt{a}\cup\tt{b})^+ \big\} \\
    L_1 &:= \tt{b}^{-1}L_0 = \big\{ ww^{\mathcal{R}}\tt{ba}u\ |\ w\in(\tt{a}\cup\tt{b})^\star, u\in(\tt{a}\cup\tt{b})^+ \big\} \\
    L_2 &:= \tt{a}^{-1}L_1 = \big\{ ww^{\mathcal{R}}\tt{aba}u\ |\ w\in(\tt{a}\cup\tt{b})^\star, u\in(\tt{a}\cup\tt{b})^+ \big\}
  \end{align*}

  Dalje rekurzivno definiramo niz jezika $(L_n)_{n\in\mathbb{N}}$:
  $$
    \begin{aligned}
      L_{2k+1} &:= \tt{b}^{-1}L_{2k} \\
      L_{2k+2} &:= \tt{a}^{-1}L_{2k+1}
    \end{aligned}
    \qquad k\in\mathbb{N}
  $$
  
  Indukcijom se lako pokaže da jezici imaju oblik koji se naslućuje u prva tri primjera. Iz toga je jasno da je
  najmanja duljina riječi iz $L_n$ jednaka $n+2$ pa slijedi da su svi ti jezici različiti.

  Budući da je svaki od jezika $L_n$ rezidual jezika $L$, zaključujemo da $L$ ima beskonačno mnogo reziduala
  pa nije regularan.

  Da bismo pokazali da je $L$ kontekstno slobodan, konstruiramo PDA koji ga prepoznaje. (Vidi sliku \ref{pic1}.)

  \begin{figure}[!ht]
    \begin{center}
      \begin{tikzpicture}[->,>=stealth',shorten >=1pt,node distance=2.5cm,semithick,
			  initial text=]
        \node[initial,state]   (q1)		  {};
	\node[state]	       (q2) [right=of q1] {};
	\node[state]	       (q3) [right=of q2] {};
	\node[state]	       (q4) [below=of q3] {};
	\node[state]	       (q5) [left=of q4]  {};
	\node[accepting,state] (q6) [left=of q5]  {};

	\tikzset{every node/.style={text width=3.3em,text badly centered}}
        \path (q1) edge		     node[above] {$\epsilon,\epsilon\ideu\tt{\$}$}  (q2)
	      (q2) edge		     node[above] {$\tt{a},\epsilon\ideu\tt{a}$ \\
						  $\tt{b},\epsilon\ideu\tt{b}$}	    (q3)
	      (q3) edge [loop right] node[right] {$\tt{a},\epsilon\ideu\tt{a}$ \\
						  $\tt{b},\epsilon\ideu\tt{b}$}	    (q3)
		   edge		     node[right] {$\epsilon,\epsilon\ideu\epsilon$} (q4)
	      (q4) edge [loop right] node[right] {$\tt{a},\tt{a}\ideu\epsilon$ \\
						  $\tt{b},\tt{b}\ideu\epsilon$}	    (q4)
		   edge		     node[above] {$\epsilon,\tt{\$}\ideu\epsilon$}  (q5)
	      (q5) edge		     node[above] {$\tt{a},\epsilon\ideu\epsilon$ \\
						  $\tt{b},\epsilon\ideu\epsilon$}   (q6)
	      (q6) edge [loop below] node[below] {$\tt{a},\epsilon\ideu\epsilon$ \\
						  $\tt{b},\epsilon\ideu\epsilon$}   (q6);
      \end{tikzpicture}
      \caption{PDA iz zadatka \ref{zad2}.}
      \label{pic1}
    \end{center}
  \end{figure}
\end{proof}

%\newpage

\begin{zad}[20 bodova]\label{zad3}
  Konstruirajte Turingov stroj koji za riječ iz $1(0\cup 1)^\star$ (broj zapisan u binarnom sustavu)
  ponavlja sljedeće:
  \begin{enumerate}
    \item Ako je na traci zapisan broj 1, prihvati ulaz i završi s radom.
    \item Ako je na traci zapisan paran broj, podijeli ga s 2, inače ga pomnoži s 3 i dodaj mu 1.
    \item Vrati se na prvi korak.
  \end{enumerate}
  Početna pozicija glave je na krajnjem lijevom znaku ulaza.

  Bonus: Za dodatnih 30 bodova dokažite da TS prihvaća svaku riječ iz $1(0\cup 1)^\star$.
\end{zad}

\begin{proof}[Rješenje]
  Turingov stroj vidi se na slici \ref{pic3}.

  \begin{figure}[!ht]
    \begin{center}
      \begin{tikzpicture}[->,>=stealth',shorten >=1pt,node distance=2.5cm,semithick,initial text=]
	\node[state] (r00) {$r_{00}$};
	\node[state] (r10) [right=of r00] {$r_{10}$};
	\node[state] (r01) [above=of r00] {$r_{01}$};
	\node[state] (r11) [right=of r01] {$r_{11}$};
        \node[initial,state] (q0) [below left=of r00] {$q_0$};
	\node[state,accepting] (qDA) [right=3.2cm of q0] {$q_{DA}$};
	\node[state] (q1) [below right=of r10] {$q_1$};
	\node[state] (q4) [above=3.2cm of q0] {$q_4$};
	\node[state] (q3) [above left=of r01] {$q_3$};
	\node[state] (q2) [above right=of r11] {$q_2$};

	\tikzset{every node/.style={text width=2.5em}}
	\path (q0) edge[bend right=20] node[below] {1,1,D} (q1)
	      (q1) edge node[above] {\blank,\blank,S} (qDA)
	           edge node[right] {0,0,D \\ 1,1,D} (q2)
	      (q2) edge[loop right] node[right] {0,0,D \\ 1,1,D} (q2)
		   edge node[above] {\blank,\blank,L} (q3)
	      (q3) edge node[above right,sloped,near start] {1,1,S} (r01)
		   edge node[left] {0,\blank,L} (q4)
	      (q4) edge[loop left] node[left] {0,0,L \\ 1,1,L} (q4)
	           edge node[left] {\blank,\blank,D} (q0)
	      (r01) edge[bend left] node[above,near end] {1,0,L} (r11)
		    edge[bend left=20] node[above left,near start,sloped] {\blank,1,D} (q2)
		    edge node[left] {0,1,L} (r00)
	      (r00) edge[bend right] node[below] {1,1,L} (r10)
		    edge[loop below] node[below] {0,0,L} (r00)
	      (r10) edge[bend right] node[above] {0,1,L} (r00)
		    edge node[right] {1,0,L} (r11)
		    edge[bend right=20] node[below right,very near start,sloped] {\blank,1,D} (q2)
	      (r11) edge[bend left] node[below] {0,0,L \\ \blank,0,L} (r01)
		    edge[loop above] node[right] {1,1,L} (r11);
      \end{tikzpicture}
      \caption{Turingov stroj iz zadatka \ref{zad3}.}
      \label{pic3}
    \end{center}
  \end{figure}

  U stanju $q_0$ glava se nalazi iznad jedinice sasvim lijevo. Stroj pročita tu jedinicu i prijeđe u $q_1$.
  Ukoliko više nema znamenaka (naiđe na \blank), prihvaća ulaz, inače se pozicionira na krajnju desnu
  znamenku (stanje $q_2$ i prijelaz u $q_3$).
  
  Ukoliko je zadnja znamenka 0, broj je paran. Dijelimo ga s 2 brisanjem dotične znamenke
  (prijelaz u $q_4$). Stroj se zatim opet pozicionira na krajnju lijevu znamenku i kreće
  ispočetka iz $q_0$.

  Ukoliko je zadnja znamenka 1, broj je neparan. Prelazimo u središnji dio stroja označen
  stanjima $r_{00}$, $r_{01}$, $r_{10}$, $r_{11}$. Taj dio stroja množi broj s 3 i uvećava
  ga za 1. Ideja je sljedeća: ako označimo broj s $n$, dodaj mu $2n+1$. Primjer:

  \begin{center}
    \begin{minipage}[t]{.27\textwidth}
      \begin{verbatim}
  101101011
 1011010111
-----------
10001000010\end{verbatim}
    \end{minipage}
  \end{center}

  \hfill

  Oznake stanja su sugestivne: $r_{ij}$ znači da je prethodna znamenka pri prolasku preko broja
  zdesna nalijevo bila $i$, i da imamo prijelaz $j$. Zbrojimo trenutnu znamenku s $i$ i $j$ da
  dobijemo najviše dvoznamenkasti broj---prva znamenka je novi prijelaz, a drugu zapisujemo na
  traku. Imamo sve informacije za prijelaz u novo stanje.
  
  Kad središnji dio stroja obavi svoje, vraćamo se u stanje $q_2$ kako bismo se opet pozicionirali
  na krajnju desnu znamenku. (Naime, nakon množenja i uvećavanja nije potrebno provjeravati je
  li na traci zapisan broj 1.)

  Bonus dio ostaje čitatelju za zabavu. :-)
\end{proof}

\end{document}
