© Se o programa P está correcto, então executando P com o exemplo obtemos o resultado correcto. Executando P com o exemplo obtemos o resultado correcto. Logo, o programa P está correcto.

Passo 1

O enunciado apresenta a seguinte argumentação: “Se P está correto então, ao executarmos P num exemplo, obtemos o resultado correto. Como ao executar P nesse mesmo exemplo obtemos o resultado correto, então P está correto.” O tema aqui é raciocínio sobre correção de programas (ou lógica proposicional aplicada à verificação).

Passo 2

Para entender por que isso não prova a correção de P em geral, precisamos reconhecer a forma lógica usada. Chamemos de A a proposição “P está correto para todo caso” e de B a proposição “P produz o resultado correto naquele exemplo”. O raciocínio faz assim: A implica B, e B é verdadeiro, logo A é verdadeiro.
Esse tipo de inferência é conhecido como falácia de afirmação do consequente. Em lógica proposicional, saber que A ⇒ B e que B é verdadeiro não garante que A seja verdadeiro. O correto seria usar modus ponens (A ⇒ B e A é verdadeiro levam a B) ou modus tollens.

Passo 3

Na prática, testar o programa em um único exemplo satisfazer B não dá garantia de que P funcione para todos os outros casos (A). Pode haver entradas diferentes do exemplo em que P falhe.
Portanto, a conclusão de que P está correto geral com base em um único teste é inválida. Para provar a correção de P em todos os casos, seria necessário um argumento formal sobre o comportamento do programa (por exemplo, invariantes de laço, pré- e pós-condições) ou uma cobertura exaustiva de todos os possíveis inputs.

Passo 4

Em resumo, o erro está em tomar um teste bem-sucedido como prova de correção geral: é a falácia de afirmar o consequente.

Resposta

O raciocínio falha por usar a falácia de afirmação do consequente; testar P num único exemplo não garante sua correção para todos os casos, logo não se pode concluir que P está correto.

Exercícios relacionados