\documentclass[12pt, a4paper]{article}

\usepackage[portuguese]{babel}

\newcounter{conta}
\newcounter{conta2}

\begin{document}


\begin{flushleft} \Huge\bf
1  INTRODU\c C\~AO
\end{flushleft}

\vspace*{2cm}
\begin{flushleft} \LARGE\bf
1.1 Origens da l\'ogica matem\'atica
\end{flushleft}

\vspace*{.5cm}
\begin{itemize} \Large
 \item A l\'ogica come\c cou com os gregos (Arist\'oteles, 384-322 AC)
  \begin{itemize}
   \item no\c c\~ao de {\bf dedu\c c\~ao}: deriva\c c\~ao de {\bf conclus\~oes}
         a partir de {\bf premissas}.
   \item {\bf Silogismo} Aristot\'elico. Exemplos:

         \begin{enumerate}
          \item[\ ] {\em Premissa\/}: Todo H \'e M. \\
          \item[\ ] {\em Premissa\/}: X \'e H. \\
          \item[\ ] {\em Conclus\~ao\/}: X \'e M.
         \end{enumerate}
  \end{itemize}
\end{itemize}
\vfill
\ 

\pagebreak
\noindent{\Huge\bf Definindo Rela\c c\~oes por meio de fatos}

\vspace*{13cm}
\begin{itemize} \LARGE
 \item {\em Inst\^ancia\/} ({\em relacionamento\/}) $\Rightarrow$ {\bf cl\'ausula}.
 \item Exemplo de cl\'ausula: \verb|parent(pam,bob).|
\end{itemize}

\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog

\pagebreak
\begin{itemize}\LARGE
\item Exemplos de consultas:

       \begin{enumerate} 
        \item[\ \ ] \verb|?- parent(bob,pat).| \\
                    \verb|yes|
       \end{enumerate}
       \begin{enumerate} 
        \item[\ \ ] \verb|?- parent(liz,pat).| \\
                    \verb|no|
       \end{enumerate}
       \begin{enumerate} 
        \item[\ \ ] \verb|?- parent(tom,ben).| \\
                    \verb|no|
       \end{enumerate}
       \begin{enumerate} 
        \item[\ \ ] \verb|?- parent(X,liz).| \\
                    \verb|X = tom|
       \end{enumerate}
       \begin{enumerate} 
        \item[\ \ ] \verb|?- parent(bob,X).| \\
                    \verb|X = ann|; \\
                    \verb|X = pat|; \\
                    \verb|no|
       \end{enumerate}
       \begin{enumerate} 
        \item[\ \ ] \verb|?- parent(X,Y).| \\
                    \verb|X = pam| \\
                    \verb|Y = bob|; \\
                    \verb|X = tom| \\
                    \verb|Y = bob|;
       \end{enumerate}
       \hspace*{1cm}$\vdots$
\end{itemize}

\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog
\end{document}


\pagebreak
\begin{itemize} \LARGE
 \item Algumas consultas mais sofisticadas:

       \begin{enumerate} 
        \item[\ \ ] \verb|?- parent(Y,jim),parent(X,Y).|
       \end{enumerate}
       \begin{enumerate} 
        \item[\ \ ]\verb|?- parent(X,Y),parent(Y,jim).|
       \end{enumerate}
       \begin{enumerate} 
        \item[\ \ ] \verb|?- parent(tom,X),parent(X,Y).|
       \end{enumerate}
       \begin{enumerate} 
        \item[\ \ ] {\em Ann e Pat s\~ao filhos de uma mesma pessoa?}
       \end{enumerate}
\end{itemize}

\vspace*{1cm}
\begin{itemize} \LARGE
 \item Cada cl\'ausula de uma consulta \'e uma {\bf meta}.
 \item Meta satisfeita: {\bf sucesso}
 \item Meta n\~ao satisfeita: {\bf falha}.
\end{itemize}

\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog

\pagebreak
\noindent{\Huge\bf Definindo Rela\c c\~oes por meio de regras}

\vspace*{2cm}
\begin{itemize} \LARGE
 \item Exemplo de {\bf Regra}:

       \begin{enumerate}
        \item[\ \ ] Para todo $X$ e $Y$, \\
                    \hspace*{.5cm} $Y$ \'e filho(a) de $X$ se \\
                    \hspace*{1cm} $X$ \'e pai ou m\~ae de $Y$.
       \end{enumerate}

 \item Em Prolog:

       \begin{enumerate}
        \item[\ \ ] \verb|offspring(Y,X) :- parent(X,Y).|
       \end{enumerate}

 \item Outro exemplo:

       \begin{enumerate}
        \item[\ \ ] \verb|mother(X,Y) :- parent(X,Y), female(X).|
       \end{enumerate}

 \item Alguns novos fatos:

       \begin{enumerate}
        \item[\ \ ] \verb|female(pam).| \\
                    \verb|male(tom).| \\
                    \verb|male(bob).| \\
                    \verb|female(liz).| \\
                    \verb|female(pat).| \\
                    \verb|female(ann).| \\
                    \verb|male(jim).|
       \end{enumerate}
\end{itemize}

\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog

\pagebreak
\begin{itemize} \LARGE
 \item Algumas regras representadas por grafos:

       \vspace*{12cm}

 \item Consultas:
       
       \begin{enumerate} 
        \item[\ \ ] \verb|?- sister(ann,pat)|
        \item[\ \ ] \verb|?- sister(X,pat)|
       \end{enumerate}

\end{itemize}

\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog

\pagebreak
\noindent{\LARGE\bf Alguns pontos importantes:}

\begin{itemize} \Large
 \item Programas podem ser estendidos adicionando-se cl\'au\-su\-las.
 \item Existem 3 tipos de cl\'ausulas: {\em fatos}, {\em regras} e {\em consultas}.
 \item Uma cl\'ausula tem uma {\em cabe\c ca\/} e um {\em corpo}.
 \item Um fato tem uma cabe\c ca e o corpo \'e vazio.
 \item Um regra tem uma cabe\c ca e corpo n\~ao \'e vazio.
 \item Uma consulta tem apenas corpo.
 \item Vari\'aveis s\~ao quantificadas universalmente.

       Exemplo:
       \begin{enumerate} 
        \item[\ \ ] \verb|hasachild(X) :- parent(X,Y)|
       \end{enumerate}
    
\end{itemize}

\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog

\pagebreak
\noindent{\Huge\bf Regras recursivas}

\vspace*{2cm}
\begin{itemize} \LARGE
 \item Exemplo: a rela\c c\~ao {\em predecessor}:

       \vspace*{9cm}

       \begin{enumerate} 
        \item[\ \ ] \verb|predecessor(X,Z) :- parent(X,Z).|
        \item[\ \ ] \verb|predecessor(X,Z) :-| \\
                    \hspace*{.5cm} \verb|parent(X,Y),| \\
                    \hspace*{.5cm} \verb|predecessor(Y,Z).|
       \end{enumerate}

       \begin{enumerate}
        \item[\ \ ] Quais as respostas para a consulta a seguir?
        \item[\ \ ] \verb|?- predecessor(pam,X).|
       \end{enumerate}

 \item {\bf Coment\'ario}: ap\'os \% ou entre /* e */.

\end{itemize}

\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog
\pagebreak

\ 

\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog

\pagebreak
\noindent{\Huge\bf Como Prolog responde a consultas}

\vspace*{2cm}
\begin{itemize} \LARGE
 \item Para processar uma consulta: mostrar que ela \'e {\em consequ\^encia
       l\'ogica\/} dos fatos e regras.
 \item As cl\'ausulas s\~ao usadas na {\em ordem em que s\~ao escritas\/}.
 \item As metas dos corpos (da consulta ou de uma regra) s\~ao processadas
       {\em da esquerda para a direita\/}.
 \item Se uma meta n\~ao \'e satisfeita, ocorre {\em backtracking\/}.
\end{itemize}

\vspace*{.5cm}
\noindent{\LARGE\bf Um exemplo}:

\vspace*{.3cm}
       \begin{enumerate}\LARGE
        \item[\ \ ] \verb|?- predecessor(tom,pat)|
       \end{enumerate}


\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog

\pagebreak
\begin{enumerate} \LARGE
 \item Tenta a regra pr1:

       \vspace*{7.5cm}

 \item Ao falhar, tenta regra pr2:

       \vspace*{6cm}

\end{enumerate}

\vfill
\hfill Cap\'{\i}tulo 1: Introdu\c c\~ao a Prolog

\pagebreak
\begin{enumerate} \LARGE
 \item[3.] Completando:


\end{enumerate}

\vfill

\pagebreak
\noindent{\Huge\bf Significado declarativo e procedural de programas}

\vspace*{2cm}
\begin{itemize}\LARGE
 \item Significado {\em declarativo\/}: programa visto como um
       conjunto de f\'ormulas l\'ogicas (definindo rela\c c\~oes).
 \item Significado {\em procedural\/}: programa visto como uma sequ\^encia
       de procedimentos, avaliados de determinada forma.
 \item O significado declarativo determina {\em quais\/} s\~ao as
       respostas; o procedural determina {\em como\/} as respostas s\~ao
       obtidas.
 \item A programa\c c\~ao pode ser feita em 2 fases:
       \begin{enumerate}
        \item Especifica\c c\~ao (programa\c c\~ao) declarativa.
        \item Rearranjo (e talvez modifica\c c\~oes) tendo em vista aspectos
              de controle e efici\^encia.
       \end{enumerate}
\end{itemize}

\end{document}

