Axm

Métodos de prova

Cinco rotas para o mesmo destino — e por que a escolha importa.

Dois alunos recebem o mesmo enunciado: demonstrar que se n2n^2 é par, então nn é par. O primeiro diz: "Vou assumir que n2n^2 é par e que nn é ímpar, e chegar a uma contradição." O segundo diz: "Vou assumir que nn é ímpar e mostrar que n2n^2 é ímpar." Ambos chegam a uma prova correta — mas por rotas formalmente distintas. A diferença não é estilística. Uma tem um alvo específico desde a primeira linha; a outra, não.

Cada rota tem um nome, uma condição de uso, e uma mesma raiz: todas são instâncias das regras de inferência sobre os conectivos \rightarrow, \vee e ¬\neg.

§1. O que é uma prova

Uma prova é uma derivação: uma sequência de proposições onde cada linha segue das anteriores por uma regra de inferência, ou é uma hipótese assumida explicitamente e identificada como tal. Aristóteles formalizou o silogismo; os estoicos enumeraram cinco regras básicas. Em 1934, Gentzen e — independentemente — Jaśkowski sistematizaram o que hoje chamamos dedução natural.

Na dedução natural, cada conectivo tem um par de regras:

  • Regra de introdução — como construir uma proposição com esse conectivo.
  • Regra de eliminação — como usar uma proposição com esse conectivo.

Prova condicional, contrapositiva, redução ao absurdo e análise de casos são instâncias dessas regras aplicadas a \rightarrow, \vee, e ¬\neg.

§2. Prova condicional

A regra mais usada em toda a matemática. Para provar PQP \rightarrow Q:

Assuma PP. Derive QQ. A condicional está demonstrada.

Em dedução natural, essa é a regra \rightarrow-Introdução. A hipótese PP fica disponível dentro do bloco de prova e é descarregada na conclusão: ela deixa de ser um pressuposto solto e passa a ser o antecedente da condicional provada.

Exemplo. Se nn é par, então n2n^2 é par.

Assuma nn par. Por definição, n=2kn = 2k para algum inteiro kk. Então:

n2=(2k)2=4k2=2(2k2)n^2 = (2k)^2 = 4k^2 = 2(2k^2)

Logo n2n^2 é par. \square

O símbolo \square — o tombstone de Paul Halmos (1973) — marca o fim de uma prova. Substitui o latino Q.E.D. (quod erat demonstrandum).

A estrutura é direta: a hipótese entra, a conclusão sai. No registro computacional, isso é uma função — e não coincidentemente. Uma prova de PQP \rightarrow Q é exatamente uma função que, dado um termo do tipo PP, retorna um termo do tipo QQ:

def prova_par_implica_quadrado_par(n: int) -> int:
    # hipótese: n é par, i.e., n = 2k para algum k
    k = n // 2
    return 4 * k * k  # n² = 2(2k²), logo par

Erro frequente. Assumir o que se quer provar. "Assuma que n2n^2 é par. Então nn é par. Logo n2n^2 par implica nn par." Isso é petição de princípio — a conclusão foi usada como hipótese disfarçada.

§3. Análise de casos

Quando a informação disponível tem a forma PQP \vee Q, a única rota é tratar cada alternativa em separado. A regra \vee-Eliminação:

Se PQP \vee Q, e RR segue de PP, e RR segue de QQ, então RR.

Os dois ramos precisam convergir para a mesma conclusão RR. Não é possível concluir coisas diferentes em cada caso — a disjunção não revela qual alternativa é verdadeira, apenas que pelo menos uma é.

Exemplo. Para todo inteiro nn, n20n^2 \geq 0.

Todo inteiro é não-negativo ou negativo: n0n \geq 0 ou n<0n < 0.

  • Caso 1: n0n \geq 0. Então n2=nn0n^2 = n \cdot n \geq 0.
  • Caso 2: n<0n < 0. Então n>0-n > 0, e n2=(n)2>0n^2 = (-n)^2 > 0.

Em ambos os casos, n20n^2 \geq 0. \square

A disjunção usada não precisa estar na hipótese original. É possível introduzir o terceiro excluído P¬PP \vee \neg P a qualquer momento — ele é uma tautologia — e dividir a prova nos dois casos. Essa técnica aparece em provas que tratam nn par e nn ímpar como casos separados sem que o enunciado mencione paridade.

No registro computacional, \vee-Eliminação é um match sobre um tipo soma:

from typing import Union
 
def prova_usando_P_ou_Q(hipotese: Union[P, Q]) -> R:
    match hipotese:
        case P():
            return prova_R_de_P(hipotese)
        case Q():
            return prova_R_de_Q(hipotese)

Erro frequente. Verificar apenas um dos casos. Se n20n^2 \geq 0 fosse demonstrado somente para n0n \geq 0, a prova estaria incompleta — o caso n<0n < 0 permaneceria aberto.

§4. Contrapositiva

PQP \rightarrow Q é logicamente equivalente a ¬Q¬P\neg Q \rightarrow \neg P. Isso é uma tautologia:

PPQQPQP \rightarrow Q¬Q¬P\neg Q \rightarrow \neg P
VVVV
VFFF
FVVV
FFVV

Quando provar a direção original é difícil, pode ser mais fácil provar a contrapositiva. O método tem um alvo específico: assuma ¬Q\neg Q, derive ¬P\neg P.

Exemplo. Se n2n^2 é par, então nn é par.

Prove a contrapositiva equivalente: se nn é ímpar, então n2n^2 é ímpar.

Assuma nn ímpar. Então n=2k+1n = 2k + 1 para algum inteiro kk. Assim:

n2=(2k+1)2=4k2+4k+1=2(2k2+2k)+1n^2 = (2k+1)^2 = 4k^2 + 4k + 1 = 2(2k^2 + 2k) + 1

Logo n2n^2 é ímpar. \square

A prova pela contrapositiva é estruturalmente uma prova condicional — assume a hipótese ¬Q\neg Q e deriva ¬P\neg P diretamente. O que muda é apenas qual condicional escolhemos provar.

§5. Redução ao absurdo

Para provar PP:

Assuma ¬P\neg P. Derive uma contradição. Conclua PP.

Uma contradição é um par de proposições BB e ¬B\neg B simultaneamente deriváveis. O símbolo \botbottom, lido falso ou absurdo — é a proposição falsa em todo caso: o piso abaixo de todas as proposições, oposto da tautologia \top. Formalmente, \bot não tem regra de introdução — nada o constrói diretamente. Tem apenas uma regra de eliminação:

Definição

Ex falso quodlibet — de \bot, qualquer proposição segue.

É por isso que uma contradição destrói a prova: dela, tudo e o contrário de tudo são deriváveis.

Exemplo. Não existe inteiro maior que todos os outros inteiros.

Suponha, para contradição, que existe tal inteiro MM. Considere M+1M + 1. Por definição de adição em Z\mathbb{Z}, M+1>MM + 1 > M. Mas MM era, por hipótese, maior que todo inteiro — inclusive M+1M + 1. Contradição. Logo não existe tal MM. \square

O alvo é não-específico. Ao assumir ¬P\neg P, não sabemos de antemão qual contradição vai aparecer. Qualquer BB e ¬B\neg B servem. Isso dá liberdade — mas também menos direção do que a contrapositiva. Quando a prova começa com "suponha que n2n^2 é par e nn é ímpar", não está claro imediatamente onde a contradição vai surgir.

Diferença com a contrapositiva — em resumo. Para provar PQP \rightarrow Q:

  • Contrapositiva: assuma ¬Q\neg Q; derive ¬P\neg P. Alvo fixo.
  • Redução ao absurdo: assuma P¬QP \wedge \neg Q; derive qualquer \bot. Alvo livre.

A contrapositiva é sempre uma prova direta na direção invertida. A redução ao absurdo é uma prova indireta: não construímos PP — eliminamos ¬P\neg P.

Nota sobre a lógica clássica. Na forma plena — assumir ¬P\neg P, derivar \bot, concluir PP — a redução ao absurdo é uma regra clássica, equivalente ao terceiro excluído e à dupla negação. A lógica intuicionista admite introdução de negação (assumir PP, derivar \bot, concluir ¬P\neg P) mas rejeita a versão que elimina uma negação. Ver lógicas não-clássicas.

§6. A escolha do método depende da forma do problema

MétodoHipótese assumidaO que se derivaAlvo
Prova condicionalPPQQEspecífico: QQ
Análise de casosPQP \vee QRR em cada ramoEspecífico: RR (dois caminhos)
Contrapositiva¬Q\neg Q¬P\neg PEspecífico: ¬P\neg P
Redução ao absurdo¬P\neg Pqualquer \botLivre: qualquer contradição

A escolha do método depende da forma da proposição a provar e da informação disponível:

  • Se a conclusão é uma condicional e a rota direta é clara: prova condicional.
  • Se negar a conclusão fornece informação útil que facilita a derivação: contrapositiva.
  • Se não há rota direta visível e assumir o contrário produz tensão com o que já se sabe: redução ao absurdo.
  • Se a hipótese disponível é uma disjunção, ou a prova exige separar casos: análise de casos.

Esses métodos se compõem. A prova da irracionalidade de 2\sqrt{2} usa redução ao absurdo como moldura e prova condicional internamente. Uma prova de paridade usa análise de casos para separar pares e ímpares e prova condicional dentro de cada ramo.

§7. Registro computacional

O isomorfismo de Curry-Howard, já visto em lógica proposicional e lógica de predicados, vale aqui apenas para a lógica intuicionista. A redução ao absurdo clássica não tem análogo direto.

Regra lógicaConstrução computacional
I\rightarrow I (prova condicional)abstração lambda: lambda p: ...
E\rightarrow E (modus ponens)aplicação de função: f(p)
E\vee E (análise de casos)match/case sobre tipo soma
¬I\neg I (introdução de negação, intuicionista)função de PP para Never
E\bot E (ex falso)raise / assert False — nunca retorna
C\bot_C (redução clássica)call/cc — sem equivalente em Python
from typing import Never
 
# ex falso quodlibet: de ⊥, qualquer coisa
def ex_falso(absurdo: Never) -> object:
    raise AssertionError("nunca alcançado")
 
# análise de casos sobre P | Q
def por_casos(hipotese: P | Q) -> R:
    match hipotese:
        case P():
            return prova_de_P(hipotese)
        case Q():
            return prova_de_Q(hipotese)

A lógica intuicionista é a lógica da computação: cada prova é um programa, cada proposição um tipo, cada derivação um termo que pode ser executado. A lógica clássica estende isso com um operador de controle — mas o preço é perder a correspondência direta entre provar e computar.


Esses quatro métodos — prova condicional, análise de casos, contrapositiva, redução ao absurdo — são os instrumentos com que toda a matemática que segue é construída. O próximo passo é ver esses instrumentos em ação nos módulos de conjuntos e funções, onde as provas deixam de ser exercícios e passam a ser o tecido das definições.