%\documentclass[12pt]{amsart}
\documentclass[pdftex,12pt]{amsart}
%\usepackage{listings}
\usepackage[portuges]{babel}
\usepackage{hyperref}


%\lstloadlanguages{Pascal,Haskell}
%\lstset{frame=tb}
%\input{defalgo}
\input{defport}
\input{deflogic}
\input{defseqs}


\title{L\'ogica e prova}
\author{Raul H.C.Lopes}
\begin{document}
\maketitle

\section{Introdu\cao}
Estas notas cont\^em uma formaliza\cao\ da l\oo gica cl\aa ssica de
primeira ordem, fortemente baseada em igualdade e, por isso, 
comumente identificada como l\oo gica equacional\footnote{
Veja a p\aa gina de David Gries para uma  
\href{http://www.cs.cornell.edu/home/gries/Logic/Introduction.html}{
introdu\cao} a \emph{equational
logic}.}
em \cite{gs:discretemaths}. Alguns dos axiomas e regras de
infer\^encia introduzidos no texto de Gries Schneider \cite{gs:discretemaths}
s\ao\ apresentadas
abaixo. O sistema de deu\cao\ natural tamb\ee m \ee\ apresentado.
Ao longo do curso de \emph{T\ee cnicas de Busca e Ordena\cao}
voc\^e pode usar os sistemas de prova de l\oo gica equacional,
Dedu\cao\ Natural,
Sequent Calculus, ou sistema de Hilbert. O importante \ee\  que use um sistema
de forma coerente e apresente refer\^encia para as fontes de suas regras 
para que n\ao\ restem d\uu vidas sobre quaisquer passos de suas provas.

Estas notas cont\^em exerc\ii cios que dever\ao\ ser entregues at\ee\ \`a
data estabelecida na 
p\aa gina da disciplina.

\begin{notation}
	O s\ii mbolo $\dfn$ \ee\ usado para introduzir \emph{nomes} como 
	abrevia\coes\ de f\oo rmulas, ou seja, introduzir 
	\emph{nomes/s\ii mbolos} via defini\cao l\oo gica. Por exemplo,
	\[ P \dfn \lele 0km \land S = \bndsum{i}{\lelt 0ik}{v.i}\]
	introduz o s\ii mbolo $P$ como nome para a f\oo rmula
         \[\lele 0km \land S = \bndsum{i}{\lelt 0ik}{v.i}\]
\end{notation}

\begin{notation}
	A defini\cao\ indutiva do conjunto de f\oo rmulas da l\oo gica
	cl\aa ssica pode ser encontrada em textos como \cite{gs:discretemaths}
	ou \cite{kleene:meta52}. Vale notar que ser\ao\ usados:
	\begin{itemize}
		\item $(\neg p)$: nega\cao\ de $p$.
		\item $(p \land q)$: conjun\cao\ de $p$ e $q$.
		\item $(p\lor q)$: disjun\cao\ de $p$ e $q$.
		\item $(p \limp q)$: $p$ implica $q$.
		\item $(p = q)$: equival\^encia l\oo gica.
		\item $\bndA{x}{P x}{Q x}$: quantifica\cao\ universal: para todo
			$x$, satisfazendo $(P x)$, $(Q x)$ vale.
		\item $\bndE{x}{P x}{Q x}$: quantifica\cao\ exist\^encial: 
			existe algum
			$x$, satisfazendo $(P x)$, tal que $(Q x)$ vale.
	\end{itemize}
\end{notation}

\begin{notation}
	Como \ee\ usual em textos de teoria da prova, o s\ii mbolo $\follows$
	\ee\ usado para denotar uma rela\cao\ de con\sqn\ l\oo gica ou
	dedutibilidade. Assim
	\begin{itemize}
		\item $\Gamma\follows \alpha$ denota que, da conjun\cao\ das
			premissas contidas em $\Gamma$, $\alpha$ pode ser
			provada.
		\item $\follows\alpha$ denota que $\alpha$ \ee\ um teorema 
			da l\oo gica.
	\end{itemize}
\end{notation}

\begin{notation}
	As seguintes regras, essencialmente retiradas de 
	\cite{curry:foundations} e usadas tanto por Curry
	\footnote{Ali\aa s, 
	se voc\^e tem interesse s\ee rio em \textbf{Ci\^encia
	da Computa\cao}, cedo ou tarde deveria ler
	\cite{curry:foundations}.}
	quanto por Church, 
	poder\ao\ ser usadas para reduzir o n\uu mero 
	de par\^entesis usados em express\oes\ aritm\ee ticas e l\oo gicas.
	\begin{itemize}
		\item operadores aritm\ee ticos s\ao\ mais fortes do que 
			operadores relacionais. Assim
			\[1 + 2 = 3 \]
			obviamente \ee\ uma abrevia\cao\ de 
			\[ (1+2) = 3 \]
		\item dentre os operadores relacionais, nega\cao\ \ee\ o mais
			forte, seguido de conjun\cao\ e disjun\cao\ e, por 
			\uu ltimo, implica\cao\ e igualdade.
		\item ponto (\textbf{.}) e dois pontos (\textbf{:})  podem
			ser usados como \emph{marcadores} para reduzir a n\uu mero de 
			par\^entesis. Fim e in\ii cio de express\ao\ s\ao\ 
			marcadores com zero pontos.
			As regras b\aa sicas para seu uso neste
			texto s\ao:
			\begin{enumerate}
				\item um marcador com mais pontos tem mais 
					for\ca\ do que um marcador com menos 
					pontos.
				      \[ rev.\xcat xy \ll:=\lr: rev\xcat yx\]
				      abrevia
				      \[ (rev(\xcat xy)) = (rev(\xcat yx))\]
				\item um marcador \`a esquerda de um operador
					delimita uma express\ao\ que se estende
					para a esquerda at\ee\ um marcador de
					mais alta prioridade.
					\[ x+f.y\]
					abrevia
					\[x+f(y)\]
					
				\item um marcador \`a direita de um operador
					delimita uma express\ao\ que se estende
					para a direita at\ee\ um marcador de
					mais alta prioridade.
			        \item a express\ao\ delimitada por um marcador
					respeita os tipos da express\ao\ 
					envolvida.
				      \[ rev.\xnil = \xnil \]
				      abrevia 
				      \[ rev(\xnil) = \xnil \]
				      e n\ao\
				      \[ rev(\xnil=\xnil)\]
				      que violaria o fato de $rev$ mapeia
				      \sqn s para \sqn s.
				\item um ponto amarrado a um operador relacional
					tem mais for\ca\ do que um ponto ligado
					operador funcional.
					\[rev.x\ll.=\lr.rev.y\]
					abrevia
					\[rev(x) = rev(y)\]
				\item um marcador mais \`a esquerda tem mais 
					prioridade do que um marcador mais
					\'a direita.
				\[ p \limp\lr. q\limp\lr. r\limp s\]
				abrevia
				\[ p\limp(q\limp(\limp s)\]
			\end{enumerate}
	\end{itemize}
\end{notation}


\begin{definition}
	A seguir s\ao\ apresentados teoremas da l\oo gica de primeira ordem
	que s\ao\ usados em diversas provas ao longo deste documento. Note
	que:
	\begin{itemize}
	\item A equival\^encia l\oo gica de duas proposi\coes\ \ee\ representada
		pela igualdade das mesmas\footnote{
		Textos cl\aa ssicos de l\oo gica, por exemplo
		\cite{kleene:meta52}, preferem o uso de um s\ii mbolo distinto,
		no caso $(\equiv)$ 
		para representar equival\^encia l\oo gica. Essa
		tamb\ee m \ee\ tend\^encia seguida por \cite{gs:discretemaths}.
		\'E interessante notar, no entanto, que este \uu ltimo texto
		liga os sucessivos passos de uma prova, que s\ao\
		equival\^encias l\oo gicas, usando igualdade. Por isso, eu 
		prefiro seguir a tradi\cao\ da l\oo gica de alta ordem e 
		tratar equival\^encia como igualdade de proposi\coes.}
		escrevendo-se
		\[ p = q\]
		em lugar de
		\[ p \equiv q\]
	\item Regras de infer\^encia s\ao\ freq\"uentemente introduzidas
		usando a nota\cao:
		\[\infrtwop{\Gamma_0}{\alpha_1}{\Gamma_1}{\alpha_1}{\Lambda}{\beta}\]
		que abrevia o racioc\ii nio: se $\Gamma_0$ \ee\ um conjunto
		de hip\oo teses apartir do qual se pode provar $\alpha_0$ e
		$\Gamma_1$ \ee\ outro conjunto de hip\oo teses do qual se
		pode provar $\alpha_1$, ent\ao\ do conjunto de hip\oo teses
		$\Lambda$ \ee\ poss\ii vel provar (deduzir) $\beta$. 
		
		Para exemplo mais concreto, observe a seguinte a regra, 
		apresentada como \emph{Introdu\cao\ da Conjun\cao} no sistema
		de Dedu\cao\ Natural.
		\[\infrtwop{}{p}{}{q}{}{p\land q}\]
		que diz que
\begin{itemize}
	\item se $p$ \ee\ um teorema da l\oo gica e $q$ \ee\ um teorema
		da l\oo gica, ent\ao\ $(p\land q)$ \ee\ um teorema da l\'ogica;
	\item ou, lendo de baixo para cima, para provar que $(p\land q)$ \ee\
		verdadeiro (ou seja, $\follows (p\land q)$), prove
		que $p$ \ee\ verdadeiro (ou seja, $\follows p$) e prove
		que $q$ \ee\ verdadeiro (ou seja, $\follows q$).

	\end{itemize}
	\end{itemize}

\end{definition}

% equational logic
%	regras
%	exercicios
\input{eqlogic}

% natural deduction
%	regras
%	exercicios
\input{natdeduction}

% quantificadores
%	notacao
%	raciocionio com quantificadores
%	exercicios
\input{quantifiers}

\section{Conclus\~ao?}
Estas notas representam um rascunho inicial de um curso de uso de l\oo gica
para prova de propriedades de programas.
Elas s\ao\ necessariamente incompletas e precisam
de muitas corre\coes\ e adi\coes\ em termos de:
\begin{itemize}
	\item novos exemplos;
	\item novos exerc\ii cios;
	\item valida\coes\ usando algum assistente de prova.
\end{itemize}

Agrade\co\ contribui\coes\ nesse sentido.

\bibliographystyle{amsplain}
\bibliography{abbrev,general,program,simulation,co,algorithms,compgeo,formal,maths}


\end{document}

