\documentclass[11pt,a4paper]{book}

\usepackage[brazil]{babel}
\usepackage[latin1] {inputenc}
\usepackage{fullpage}

\pagestyle{empty}

\begin{document}

\noindent Departamento de Ci\^{e}ncia da Computa\c{c}\~{a}o \hfill ICEx/UFMG \\
\noindent {\it Lógica Aplicada a Computação} \hfill $\mbox{2}^{\mbox{\underline{o}}}$ semestre de 2011 \\
\noindent Professor: Newton Jos\'{e} Vieira \\
\noindent {\bf Segundo Trabalho} \hfill Entrega: até 1/12/2011

\vspace*{8mm}
O trabalho consta de duas partes. Para cada uma entregue a listagem do programa em Prolog e um \textit{trace} dos testes efetuados.

\vspace*{5mm}
\noindent\textbf{\large 1. O problema do macaco e das bananas}

\vspace*{5mm}
Modifique o programa da Figura 2.14 do livro
\begin{quote}
Bratko, I. \textit{Prolog Programming for Artificial Intelligence}, 3rd edition, Addison Wesley, 2001.
\end{quote}
que pode ser recuperado no site

\noindent  http://www.pearsoned.co.uk/highereducation/resources/bratkoprologprogrammingforartificialintelligence3e/

\noindent (arquivo fig2\_14.pl), de tal forma que ele retorne uma sequ\^encia de opera\c c\~oes que deve ser executada pelo macaco (caso exista alguma) para que ele consiga as bananas.

\vspace*{6mm}
\noindent {\bf Sugest\~ao:}

\vspace*{3mm}
Rotule o estado inicial com uma constante; por exemplo: {\tt i}. Com isto o estado inicial seria {\tt state(atdoor,onfloor,atwindow,hasnot,i)}. A estrutura que representa um estado tem um argumento a mais para
o r\'otulo do estado, que ir\'a representar a sequ\^encia de opera\c c\~oes utilizada para o macaco alcan\c car o estado. Ao se aplicar a opera\c c\~ao {\tt push}, por exemplo, o estado mudaria de
\begin{center}
 {\tt state(P1,onfloor,P1,H,S)}
\end{center}
para
\begin{center}
 {\tt state(P2,onfloor,P2,H,push(P1,P2,S))}.
\end{center}
Fazendo-se as modifica\c c\~oes pertinentes, a uma consulta da forma
\begin{flushleft}
 {\tt ?- canget(state(atdoor,onfloor,atwindow,hasnot,i),S).}
\end{flushleft}
corresponderá uma resposta da forma:
\begin{flushleft}
 {\tt S = grasp(climb(push(atwindow,middle,walk(atdoor,atwindow,i))))}.
\end{flushleft}

Em seguida, reescreva o programa definindo a rela\c c\~ao
\begin{quote}
 {\tt canget(State,Actions)}
\end{quote}
de forma que {\tt Actions} seja uma lista que representa a sequ\^encia de opera\c c\~oes que o macaco deve executar para conseguir as bananas partindo do estado {\tt State}. Assim,à consulta
\begin{quote}
 {\tt ?-canget(state(atdoor,onfloor,atwindow,hasnot),A).}
\end{quote}
corresponderá a resposta:
\begin{quote}
 {\tt A = [walk(door,window),push(window,middle),climb,grasp]}
\end{quote}

\vspace*{10mm}
\noindent\textbf{\large 2. SAT}

\vspace*{5mm}
Implemente um dos algoritmos \textsf{sat$\downarrow$b} ou \textsf{sat$\downarrow$bf}. Utilize a diretiva op para declarar operadores infixados para \textsf{nao}, \textsf{e}, \textsf{ou}, \textsf{imp}, \textsf{sse}. Não precisa prever os conectivos $\top$ e $\bot$.

Use o algoritmo para mostrar, para algumas fórmulas (umas 4 em cada grupo, de comprimentos variáveis), que elas são:
\begin{itemize}
 \item tautológicas;
 \item contraditórias;
 \item contingentes.
\end{itemize}
\end{document}
 
