Invariantes de laço para prova de correção e terminação
Gabarito: letra B. A alternativa descreve corretamente o método: escolher um invariante verdadeiro antes do laço, mostrar que ele se preserva a cada iteração, definir uma função variante estritamente decrescente em ℕ (garantindo terminação) e, ao final, da invariante verdadeira e da guarda falsa deduzir a pós-condição.
Invariantes de laço são condições lógicas que permanecem verdadeiras antes e depois de cada iteração. Para provar correção parcial, mostra-se que o invariante vale na entrada do laço e que é preservado pelas iterações. A terminação é provada com uma função variante que diminui estritamente a cada passo e é limitada inferiormente. Quando o laço termina (guarda falsa), o invariante ainda é verdadeiro e, junto com a negação da guarda, implica a pós-condição.
Alternativa A — ❌ Incorreta
Partir da pós-condição e inverter instruções não é um método formal. Aceitar preservação empírica (testes) não prova correção para todos os casos. O laço termina quando a guarda se torna falsa, não verdadeira.
Alternativa B — ✅ Correta ⟵ GABARITO
Descreve precisamente os três passos: invariante inicial, preservação, função variante decrescente em ℕ, e conclusão da pós-condição. É a definição clássica do método.
Alternativa C — ❌ Incorreta
Derivar invariante de exemplos não é uma prova formal; decrementos eventuais não garantem terminação (a função deve ser monótona decrescente e limitada). Substituir guarda pela pós-condição não faz sentido lógico.
Alternativa D — ❌ Incorreta
O invariante não deve ser igual à pós-condição (geralmente é mais fraco). Provar que o invariante se torna verdadeiro no meio do laço não assegura correção. Finalizar com guarda ainda verdadeira contradiz a terminação.
Gabarito: letra B.