\documentclass[12pt]{amsart}
\usepackage{amsmath}
\usepackage[portuges]{babel}
\usepackage[latin1]{inputenc}
\usepackage{enumerate}
% uncomment next line to get pdf files with hyperlinks
%\usepackage[pdftex,bookmarks=true]{hyperref}

\usepackage{boxedminipage}
\input{deflogic.tex}
\input{defport}
\usepackage{epsf}



\def\stdin{\emph{stdin}}
\def\stdout{\emph{stdout}}
\def\natnum{\textbf{Natnum}}
\title{Indução Matemática}

\author{Raul H.C. Lopes}

\begin{document}

\maketitle

\section{Indu\cao\ matemática}

\subsection{Conjunto indutivamente definido}

Considere a seguinte defini\cao, encontrada em \cite{apostol:calculus}.

\begin{em}\textbf{ Defini\cao\ de um conjunto indutivo.}
Um conjunto de números reais é chamado de \text{conjunto indutivo} se ele
tem as seguintes propriedades:
\begin{enumerate}
  \item O número $1$ pertence ao conjunto.
  \item Para todo $x$ pertencente ao conjunto, o número $x+1$ também pertence
ao conjunto.
\end{enumerate}
  
\end{em}

Essa defini\cao\ apresenta um \emph{método para computar} números reais
a partir de um elemento inicial: o número $1$. Note que essa defini\cao\ 
limita-se a estabelecer como encontrar elementos de \textbf{um} conjunto 
indutivo de reais (os inteiros positivos): 
ela nem tenta cobrir todo o conjunto de reais e nem
mesmo determinar exatamente todos os elementos do conjunto indutivo em questão.

Veja agora a seguinte defini\cao\ retirada da mesma fonte.

\begin{em}\textbf{Defini\cao\ de inteiros positivos.}
  Um número real é chamado inteiro positivo se ele pertence a todo conjunto 
indutivo.
\end{em}

A defini\cao\ acima, claramente referindo-se e complementando a anterior,
tentar definir exatamente o conjunto dos inteiros positivos estabelecendo 
que ele é a interse\cao\ de todos os conjuntos possíveis de se obter, usando
a primeira definicao: ou em outras palavras, ele é o menor conjunto que contém
todos os elementos ditados pelos 2 itens da primeira definicao. 

Além de estabelecer um ``método para enumerar'' todos os elementos do 
conjunto de inteiros positivos, essas duas defini\coes\ ``induzem'':
\begin{enumerate}[i]
  \item um método para testar se qualquer $z$ é um inteiro postivo: verificamos
se $z$ é o elemento inicial do conjunto definido ou se ele pode ser reescrito 
como $x+1$, para algum $x$ pertencente ao conjunto definido. 
  \item um método de prova de propriedades desse conjunto. Para provar a
propriedade $P.n$, para todo $n\ge n_0$:
\begin{enumerate}[1]
  \item Provamos que $P$ é válido para o $n_0$: $n_0$ é a agora o elemento 
inicial de uma sub\sqn\ de interesse;
  \item Provamos que, quando $k\ge n_0$, $P.k$ implica $P.(k+1)$, ou seja para
qualquer elemento da \sqn\ se $P$ vale para esse elemento, então $P$ vale
para o seu sucessor.
\end{enumerate}
\end{enumerate}


\begin{eg}
Prove que para $n$ pertencente ao conjunto de inteiros acima definido

    \item $ \bnd{\forall}{n}{n\geq 4}{n^2 \leq 2^n}$

      \begin{proof}
	$P.n$ a ser provado é ${n^2 \leq 2^n}$  e que deve ser válido com
$n\geq 4$. Seguindo   roteiro de prova tra\c cado acima:
	\begin{enumerate}[1]
	  \item quando $n=4$, $P.n$ reduz-se a $4^2 \leq 2^4$, que é 
trivialmente verificado.
          \item para provar que $P.k$ implica $P.(k+1)$, come\c camos com $P.k$
	    \begin{align*}
	      P.k = & k^2 \leq 2^k \\
                  = & \langle\text{multiplicando por 2}\rangle \\
                    & 2.k^2 \leq 2.2^k \\
                  = & \langle\text{porque }(k+1)^2\le 2k^2,\text{ para } k\geq 3\rangle \\
                    & (k+1)^2 \le 2^{k+1} \\
                  = & P.(k+1) 
	    \end{align*}
	\end{enumerate}
      \end{proof}
\end{eg}

\subsection{Provas por indu\cao}
Obviamente a constru\cao\ de conjuntos de inteiros não precisa ter como
elemento inicial o número $1$. Assuma agora que \Nat\ é o conjunto
dos inteiros não negativos: na defini\cao\ acima, assuma que o número $0$ é o 
elemento inicial.


\begin{ex}
 Prove por indu\cao:
  \begin{enumerate}
    \item $ (\bndsum{i}{\lele{1}{i}{n}}) i = n(n+1)/2$

    \item $ (\bndsum{i}{\lelt{0}{i}{n}}{2^i}) = 2^n-1$

    \item $ (\bndsum{i}{\lelt{0}{i}{n}}{3^i}) = (3^n-1)/2$

    \item $ (\bndsum{i}{\lele{1}{i}{n}} i^2) = n(n+1)(2n+1)/6$

    \item $ (\bndsum{i}{\lele{0}{i}{n}}{i.2^i}) = (n-1).2^{n+1}+2$


    \item $ (\bndsum{i}{\lele{0}{i}{n}}{(2i+1)^2}) = (n+1) (2n+1)(2n+3)/3$

    \item $ (\bndsum{i}{\lele{0}{i}{n}}{i(i+1)(i+2)}) = n(n+1)(n+2)(n+3)/4$

    \item $ \bnd{\forall}{n,a}{n\geq 1 \land a\neq 1}{(\bndsum{i}{\lelt{0}{i}{n}}{a^i}) = (1-a^n)/(1-a)}$
    \item $ \bnd{\forall}{n}{n\geq 1}{(\bndsum{i}{\lele{1}{i}{n}}{1/(i.(i+1))}) = n/(n+1)}$
    \item $ \bnd{\forall}{n}{n\geq 3}{n+1 < 2^n}$
    \item $ \bnd{\forall}{n}{n\geq 4}{n^2 \leq 2^n}$
    \item $ \bnd{\forall}{n}{n\geq 7}{3^n < n!}$
      \begin{proof}
	$P.n$ a ser provado é ${3^n < n!}$  e que deve ser válido com
$n\geq 7$. Seguindo   roteiro de prova tra\c cado acima:
	\begin{enumerate}[1]
	  \item quando $n=7$, $P.n$ reduz-se a $3^7 < 7!$, que é 
trivialmente verificado.
          \item para provar que $P.k$ implica $P.(k+1)$, come\c camos com $P.k$
	    \begin{align*}
	      P.k = & 3^k \leq k! \\
                  = & \langle\text{multiplicando por (k+1), dado que }k\geq 7\rangle \\
                    & (k+1).3^k \leq (k+1).k!\\
                  = & 3^{k+1}+3^k \leq (k+1)! \\
                  = & \langle\text{porque }3^{k+1}\leq 3^{k+1}+3^k\text{ quando } k\geq 7\rangle \\
                    & 3^{k+1} \leq (k+1)! \\
                  = & P.(k+1) 
	    \end{align*}
	\end{enumerate}
      \end{proof}

  
  \end{enumerate}
\end{ex}

\subsection{Ouro de tolo?}

Já dá para conjecturar: o método de prova acima, o chamado \emph{Princípio
da Indu\cao}, deve ser aplicável à prova de propriedades  de
 qualquer conjunto contável. Então...
Dado  o conjunto de humanos, que nem mesmo é infinito, ficamos tentados 
a realizar aplica\coes\ mais interessantes.
\begin{ex}
Prove que todas as garotas loiras têm olhos claros.

\end{ex}

Para obter a prova acima, você pode:
\begin{enumerate}
  \item Esquecer o \PI\ e partir para o experimento. Que tal na sua turma
de \emph{Estruturas de Dados}? E'claro que isso demanda definir:
\begin{enumerate}[i]
  \item O que são garotas? \textsl{Ok! Isso pode não ser politicamente correto!}
  \item O que são olhos claros?
\end{enumerate}
  \item Tentar \PI, mas quem são $P.k$ e $P.(k+1)$? Aliás, esse é o ponto 
fundamental de toda a prova por indu\cao: indentificar $P.k$, a \emph{hipótese
de indu\cao}, e realizar o \emph{passo indutivo} para obter $P.(k+1)$.
\end{enumerate}

Ok! De volta ao reino de \Nat...

Veja o seguinte ``teorema''e sua ``prova'', retirados de \cite{DEK:TAoCP-I}.
\begin{etheo}
  Dados inteiros positivos $a$ e $n$, $a^{n-1} = 1$.

\eproof
\begin{enumerate}[1]
  \item Para $n=1$, $a^{1-1} = a^0 = 1$.
  \item Para $n=k+1$, 
          \[a^{(k+1)-1}=a^k=\frac{a^{k-1}\cdot a^{k-1} }{a^{(k-1)-1}} = \frac{1\cdot 1}{1} = 1\]
\end{enumerate}
\end{etheo}

O que está errado? Talvez o fato de que para se obter a prova para $n=k+1$,
foram usados como hipóteses o fato de que a assertiva seria válida 
para $n=k$ e $n=k-1$? Não! Na verdade, como mostrado na próxima se\cao, esse
é um raciocínio válido.

\subsection{Indu\cao\ forte}
Considere o seguinte problema.\footnote{Retirado das notas de aula de 
Tom Leighton, do curso de Mathematics for Computer Science, MIT, Setembro/97.}

\begin{eg}
\label{leighton:stamps}
  Para qualquer número $n\ge 8$, é possível obter a partir de uma soma de 
fatores todos iguais a $3$ ou $5$.

\textbf{A caminho da prova.}
\begin{enumerate}
  \item Para $n=8$, $ 8 = 5+3$.
  \item Provar $P.(k+1)$, assumindo apenas $P.k$ é mais difícil. Tente 
provar que $P.(k+1)$, 
assumindo que $P.k$ para $\lele{8}{k}{n}$.
\end{enumerate}
\end{eg}

\begin{theo}
Seja $P$ uma propriedade sobre \Nat\ e assuma foram provados:
\begin{enumerate}[i]
  \item $P.0$;
  \item $\bnd{\forall}{n}{n\in\Nat}{(\bnd{\forall}{m\in\Nat}{m\le n}{P.m})\limp P.(n+1)}$
\end{enumerate}
Prove que $\bnd{\forall}{n}{n\in\Nat}{P.n}.$

\begin{proof}
Seja $Q.n = \bnd{\forall}{m\in\Nat}{m\le n}{P.m}$.

Por indu\cao, é fácil provar que \bnd{\forall}{n}{n\in\Nat}{Q.n}.
\begin{enumerate}[1]
  \item $Q.0 = \bnd{\forall}{m\in\Nat}{m\le 0}{P.m} = P.0$, que é verdadeiro.
  \item Assumindo que $Q.n = \bnd{\forall}{m\in\Nat}{m\le n}{P.m}$ é verdadeiro,
pode-se deduzir $P.(n+1)$, pelo segundo dos fatos conhecidos de $P$.  Mas,

\begin{align*}
   Q.n \land P.(n+1) = & (\bnd{\forall}{m\in\Nat}{m\le n}{P.m}) \land P.(n+1)\\
   = & \bnd{\forall}{m\in\Nat}{m\le n+1}{P.m} \\
   = & Q.(n+1)
\end{align*}

\end{enumerate}
\end{proof}
\end{theo}

A prova acima estabelece o chamado \textbf{\PIF} como con\sqn\ do
\PI. O \PIF\ ajuda na hora de resolver o problema apresentado no
exemplo \ref{leighton:stamps}. Após a prova para o caso básico, quando $n=8$,
a solu\cao\ prosseguiria em obter prova para o caso em que $n=9$ (soma de fatores
iguais a $3$) e provar que, assumindo que qualquer k ($\lele{10}{k}{n}$) pode
ser escrito como soma de fatores iguais a $3$ ou $5$, $k+1$ também pode
ser escrito da mesma forma. Tente!  



Considere a seguinte série, conhecida como série de Fibonacci\footnote{Veja em
\cite{gs:discretemaths} e \cite{DEK:TAoCP-I} história, fatos e folclore
em torno do números de Fibonacci.}

\begin{align*}
  F_0 = & 0 \\
  F_1 = & 1 \\
  F_n = & F_{n-1}+F_{n-2}, \text{ para } n>1 
\end{align*}


\begin{ex}
\label{fib:poweroftwo}
  Use o \PIF\ para provar que $F_n < 2^n$. 
\end{ex}

Por outro lado, veja o seguinte exemplo interessante.

\begin{eg}
\label{even:fibs}
  Todos os números da série de Fibonacci são pares.

 \eproof
Por indu\cao\ forte. 
\begin{enumerate}[1]
  \item Quando $n=0$, $F_n = 0$, que é par.
  \item Assumindo que para todo $\lele{0}{k}{n}$, $F_n$ é par, 
$F_{n+1} = F_n+F_{n-1}$, é par porque $F_n$ e $F_{n-1}$ também são, 
por hipótese
de indu\cao.
\end{enumerate}

\end{eg}

Humm... Mas, $1,3,5$ todos estão na série de Fibonacci e são ímpares. 
Bem, talvez sejam apenas uns poucos, uma minoria. Basta disfar\c car e fingir
que não estão lá. Ou... ``esquece tudo: essa tal de \CC\ não funciona porque
o fundamento matemático não é confiável.'' Bem, e quem disse que indu\cao\
é fundamento de alguma coisa?
 

\subsection{Classe indutiva}

\begin{definition}
  $\mathfrak{X}$ é uma classe indutiva se:
  \begin{enumerate}[(i)]
    \item seus elementos são gerados a partir de uma das seguintes opera\coes:
    \begin{enumerate}[1.]
    \item existe uma especifica\cao\ inicial $\mathcal{B}$ 
de um conjunto de elementos que
pertencem a $\mathfrak{X}$ (chamados elementos iniciais);
    \item existe um conjunto $\mathcal{M}$ de opera\coes\ que aplicadas a elementos 
de $\mathfrak{X}$ produzem novos elementos de $\mathfrak{X}$.
  \end{enumerate}
   \item Todos elemento de $\mathfrak{X}$ pode ser obtido come\c cando com um
ou mais elementos de $\mathcal{B}$ e aplicando a cada passo uma opera\cao\ de
$\mathcal{M}$ a elementos obtidos em algum passo anterior ou obtidos de  
$\mathcal{B}$.
  \end{enumerate}

É comum dizer que $\mathcal{X}$ é a menor classe (ou o fecho universial da classe), 
cujos elementos iniciais são
dados por $\mathcal{B}$ e que tem novos elementos construídos por aplica\coes\
repetidas de $\mathcal{M}$. \footnote{Veja capítulos iniciais \cite{curry:foundations} sobre 
conceitos de  classe indutiva, algoritmo, e questões definidas e 
semi-definidas.}
\end{definition}

\begin{eg}
\label{class:fibs}
  A série de Fibonacci é uma classe indutiva, cujos elementos iniciais são
$F_0 = $ e $F_1 = 1$. Qualquer $F_n$, para $n>1$, é obtido da soma de
$F_{n-1}$ e $F_{n_2}$.
\end{eg}

O \PI\ fica mais claro quando aplicado ao conceito de classe indutiva.
\begin{definition}
  Uma propriedade $P$ é válida para todos os elementos de uma classe indutiva
$\mathfrak{X}$ se:
  \begin{enumerate}[(i)]
    \item $P$ é válida para todos os elementos iniciais de $\mathfrak{X}$ ($P$
é válida para os elementos gerados por $\mathcal{B}$).
   \item Qualquer opera\cao\ $\mathcal{M}$ (que permite gerar elementos
de $\mathfrak{X}$ a partir de elementos já conhecidos) preserva a validade de
$P$.
  \end{enumerate}
\end{definition}

\begin{eg}
  Uma propriedade é válida para classe da série de Fibonacci, definida
em \ref{class:fibs} se ela for válida para seus elementos iniciais: $0$ e
$1$. Logo, a propriedade de que todos os elementos da classe são pares,
do exemplo \ref{even:fibs}, não é válida.
\end{eg}

\begin{ex}
  Reveja sua prova do exercício \ref{fib:poweroftwo} à luz do conceito de
classe indutiva.
\end{ex}

\begin{ex}
  Seja $\phi = (1+\sqrt{5})/2$. Prove que
  \[ \phi^{n-2} \leq F_n \leq \phi^{n-1} \]
\end{ex}


\section{Elemento mínimo}

\begin{theo}
  Qualquer $M\subseteq\Nat$, tal que $M$ não é vazio,  tem um elemento mínimo.
  \begin{proof}
    Assumindo que $M\subseteq\Nat$ e que $M$ não tem elemento mínimo, chega-se
à contradi\cao\ de que $M$ é vazio.
    Por \PIF, prova-se que $\bnd{\forall}{n}{n\in\Nat}{n\not\in M}$.
    \begin{enumerate}[(1)]
      \item Para $n=0$, $n\not\in M$ ou $n$ seria mínimo, pois $M\subseteq\Nat$
e $0$ é mínimo em $\Nat$.
      \item Assumindo-se que $\bnd{\forall}{k\in\Nat}{\le\le{0}{k}{n}}{k\not\in M}$, conclui-se que $k+1\not\in M$, ou $k+1$ seria mínimo de $M$.

Logo $M$ é vazio, ou $M$ tem mínimo.
    \end{enumerate}
  \end{proof}
\end{theo}




\section{Indu\cao\ e computa\cao}

\subsection{Tipos como conjuntos indutivos}
Tipos de dados  são representa\coes\ em alguma linguagem de programa\cao\ de
classes indutivas. Na verdade, qualuqer computa\cao\ pode ser vista como
a atividade de enumerar os elementos de uma class indutiva.

\begin{eg}
\label{natnums}
Considere a classe \natnum\ como a menor classe que contém:
\begin{enumerate}[(i)]
  \item $Z$, como único elemento inicial;
  \item $(S x)$, quando $x$ já pertence a \natnum.
\end{enumerate}


\end{eg}

\subsection{Admissibilidade de fun\coes}

Uma representa\cao\ em Haskell para a classe \natnum\ seria:

\begin{verbatim}

  data Natnum = Z | (S Natnum)

\end{verbatim}

Um exemplo de fun\cao\ seria:

\begin{verbatim}

  itsum m Z = m
  itsum m (S n) = itsum (S m) n

\end{verbatim}

A fun\cao\ \textbf{itsum} acima definida permite introduzir dois conceitos
importantes:

\begin{enumerate}[1.]
  \item \emph{Admissibilidade da fun\cao}: a fun\cao\ acima será dita 
admissível porque existe uma medida de complexidade dos seus argumentos
que é sempre decrescente em qualquer chamada recursiva da mesma. Nessa
fun\cao, o segundo argumento da chamada recursiva é sempre mais simples
que o segundo argumento da chamada que a precede.

Por exemplo, assuma um mapeamento $f:Natnum \rightarrow\Nat$ que associa:
\begin{align*}
  f.(m,Z) =& 0\\
  f.(m,(S n))  =& f.n+1  
\end{align*}

Claramente $f$ 'e uma medida de complexidade para os argumentos de chamada
de \textbf{itsum} decresce a cada chamada recursiva, formando um cadeia
finita decrescente, com mínimo em $(m,Z)$.

 \item Diferentemente da fun\cao\ \textbf{recsum} abaixo, \textbf{itsum}
pode ser avaliada por um processo de repeti\cao\  substitui\coes\ simples da
chamada original pela chamada recursiva.

\end{enumerate}

\begin{verbatim}

  recsum m Z = m
  recsum m (S n) = S(recsum m n) 
 
\end{verbatim}

A computa\cao\ de \textbf{recsum} demanda que uma memória seja mantida
das sucessivas chamadas recursivas para os \textbf{S} sejam adicionados
ao resultado final da chamada não recursiva.
 

Uma fun\cao\ interessante de se definir para a aritmética de Peano é a
de subtracao. Veja as seguintes defini\coes.

\begin{verbatim}
  
  -- pred: predecessor de um Natnum
  pred Z = Z
  pred (S m) = m

  -- recsub: subtracao recursiva dependente de memoria auxiliar

  recsub m Z = m
  recsub m (S n) = pred(recsub m n)
\end{verbatim}

Nenhuma das defini\coes\ concorda inteiramente com a aritmética de Peano:
nesse sistema formal, zero não tem predecessor. Na defini\cao\ acima,
o objeto \textbf{Z}, introduzido para representar zero, tem como
predecessor, via fun\cao\ \textbf{pred}, o próprio \textbf{Z}. Isso afeta
diretamente a opera\cao\ de subtra\cao: a diferen\c ca de $m$ e $n$ quando
o segundo é maior fica igual a zero.

Uma defini\cao\ alternativa para a diferen\c ca de dois \natnum,
é dada pela fun\cao\ iterativa \textbf{itsub}.

\begin{verbatim}
  
  itsub (m,Z) = m
  itsub (Z,n) = Z
  itsub ((S m),(S n)) = itsub (m,n)

\end{verbatim}

Antes de mais nada, note que \textbf{itsub} é admissível.

\begin{ex}
  Prove que 
\[ itsub (m,(S n)) = pred(itsub(m,n)) \]

Use indu\cao\ sobre $n$ (segundo argumento do $(m,n)$ da chamada recursiva.)
No passo indutiva, considere dois casos: quando $m$ é \textbf{Z} e quando
$m$ é \textbf{(S u)} para algum $u$. 
\end{ex}

\subsection{Generalizando indu\cao}
É importante observar que a medidade complexidade de argumentos de uma
fun\cao\ não precisa se restringir a um único argumento. Como exposto em 
\cite{gs:discretemaths} (ver também \cite{DEK:TAoCP-III},
página 20, exercício 15) podemos generalizar todo o
conceito de indu\cao\ matemática e de admissibilidade fun\coes\ se, dado
um conjunto $S$ (de inteiros, \textbf{Natnum}, tuplas, etc), pudermos
estabelecer um rela\cao\ $\prec$ tal que:
\begin{itemize}
  \item toda a cadeia em $S$ tem um mínimo $x$: para todo $y\in S$ existe um
mínimo $x$ tal que $x\prec x_1\prec x_2\prec\ldots\prec y$.
  \item Se, para $x,y,z\in S$, $x\prec y$ e $y\prec z$, então $x\prec z$.
\end{itemize}

Nessa situa\cao\ $S$ é dito \emph{bem fundado.}

Uma fun\cao\ recursiva é admissível se os argumentos das suas chamadas 
recursivas admitem algum rela\cao\ de precedência que determina um
rela\cao\ bem fundada.

\begin{verbatim}
  gcd m n = if m < n
            then gcd m (n-m)
            else if m > n
            then gcd (m-n) n
            else m
\end{verbatim}

A rela\cao\ abaixo
\begin{align*}
  (m_0,n_0) \prec (m_1,n_1) & \text{ quando } m_0<m_1 \\
  (m_0,n_0) \prec (m_1,n_1) & \text{ quando } (m_0=m_1)\land (n_0<n_1)
\end{align*}

e o fato de que nas chamadas recursivas de \textbf{gcd} os argumentos
de chamada são sempre maiores ou iguais do zero pode ser usada para provar 
que a defini\cao\ de \textbf{gcd} é admissível ( sempre termina.)

Por outro lado, usando indu\cao\ forte, a rela\cao\ $\prec$ acima e
o fato de que o maior divisor de $m$ e $n$ é também o maior divisor de
$m$ e $m-n$ (quando $m$ é maior do que $n$), permite provar que a fun\cao\
acima calcula corretamente o maior divisor comum de dois inteiros
positivos.

\subsection{Tipos abstratos de dados}

\begin{ex}
\label{hnatnums}
  Crie em Haskell um tipo de dados para representar seu indutivo da
questão \ref{natnums}.
\end{ex}

\begin{ex}
  Crie em Haskell, ao menos, as seguintes fun\coes\ sobre o tipo da
questão \ref{hnatnums}, defina e prove condi\coes\ de corre\cao\ para as 
mesmas:
\begin{enumerate}
  \item Fun\coes\ recursiva e iterativa para cáclculo de:
    \begin{itemize}
      \item soma de dois objetos;
      \item diferença de dois objetos;
      \item produto de dois objetos;
      \item divião de dois objetos;
      \item resto da divisão inteira de dois objetos.
    \end{itemize}
  \item Fun\coes\ implementar os rela\coes\ lógicas, apresentando condi\coes\
de corre\cao:
    \begin{enumerate}
      \item igualdade;
      \item desigualdade;
      \item menor que;
      \item maior que;
    \end{enumerate}
\end{enumerate}
\end{ex}

\begin{eg}
Dadas as defini\coes\ de $mult$, $recdiv$ e $itmod$, é possivel provar que
\[ m = recsum (mult q (S n)) r,\]
quando 
\begin{align*}
   q =& recdiv m (S n) \\
   r =& itmod m (S n)
\end{align*}



o que corresponde ao teorema $m = q*n+r$, com $n$ maior do zero. Para maior 
clareza, as seguintes abrevia\coes\ serão usadas:
\begin{item}
  \item $m+n$ em lugar de \textbf{recsum m n};
  \item $m-n$ em lugar de \textbf{itsub(m,n)};
  \item $m*n$ em lugar de \textbf{mult m n};
  \item $m/n$ em lugar de \textbf{recdiv m n};
  \item $m\%n$ em lugar de \textbf{itmod m n}.
\end{item}

\begin{proof}
  Por indu\cao\ forte sobre $m$.
  \begin{enumerate}[1.]
    \item $m=Z$.
      \begin{align*}
	m =& ((m /(S n)) * (S n)) + (m \%(S n))\\
          =& \justify{\text{substituindo }m }\\
           & ((Z /(S n)) * (S n)) + (Z \% (S n))\\
          =& \justify{\textbf{defini\coes\ de } recdiv, itmod}
           & (Z *(S n)) + Z\\
          =& \justify{\textbf{defini\cao\ de } mult}
           & Z + Z\\
          =& \justify{\textbf{defini\cao\ de } recsum}\\
           & Z
      \end{align*}
   \item Assumindo que a propriedade é verdadeira para todo $k$ menor ou
igual a $m$, provamos que a mesma vale para $k = (S m)$. Há dois
caos a considerar:
\begin{enumerate}[(i)]
  \item $lt (S m) (S n)$, ou seja, $(S m)$ menor do que $(S n)$.

    \begin{align*}
      (S m) =& (((S m) /(S n)) * (S n)) + ((S m) \%(S n)) \\
            =& \justify{\text{defini\coes\ de }recdiv\text{ e }itmod}\\
             & (Z * (S n)) + (S m)\\
            =& \justify{\text{defini\cao de }mult}\\
             & Z + (S m)\\
            =& \justify{\text{defini\cao\ de } recsum}\\
             &(S m)
    \end{align*}
   \item quando $(S m)$ é maior ou igual a $(S n)$.
     \begin{align*}
      (S m) =& (((S m)/ (S n))* (S n)) + ((S m) \%(S n)) \\
            =& \justify{\text{defini\coes\ de }recdiv\text{ e }itmod}  \\
             & (S(((S m)- (S n))/ (S n)) * (S n)) + (((S m)- (S n)) \% (S n))\\
           =& \justify{\text{defini\cao\ de } mult} \\
            &  ((((S m)- (S n))/ (S n)) * (S n)) + (S n) + (((S m)- (S n)) \% (S n))\\
           =& \justify{\text{comutatividade e associatividade de }recsum}\\
            &  (((((S m)- (S n))/ (S n)) * (S n)) + (((S m)- (S n)) \% (S n))) + (S n)\\
           =& \justify{\text{hipótese de indu\cao}}\\
            & ((S m) - (S n)) + (S n)\\
           =& (S m)
     \end{align*}
\end{enumerate}
  

  \end{enumerate}
\end{proof}
\end{eg}


\begin{ex}
  Repita o exercício anterior em um provador de teoremas (e.g. Isabelle, PVS),
formalizando as provas correspondentes.
\end{ex}

\bibliography{abbrev,analysis,formal,maths,algorithms,program,string}

\bibliographystyle{amsplain}


\end{document}

