Cada exemplo abaixo inverte um artefato da Aula 4 para o estilo progressivo e estruturado, de modo que as duas aulas se leiam como um único argumento visto de ambos os extremos. Lean verifica cada linha quando as notas são compiladas.
O enunciado a ∧ (b ∨ c) → (a ∧ b) ∨ (a ∧ c) foi o primeiro exemplo resolvido da Aula 4, provado de forma regressiva. De forma progressiva ele se lê como um termo estruturado. Da hipótese temos a e temos b ∨ c; de b ∨ c obtemos dois casos; em cada um construímos a disjunção correspondente com o construtor anônimo.
Em palavras. Suponha a ∧ (b ∨ c), e nomeie a sua conjunção esquerda ha. A sua conjunção direita é uma disjunção, então raciocinamos por casos. Se b vale, a disjunção esquerda a ∧ b segue de ha e b. Se c vale, a disjunção direita a ∧ c segue de ha e c. A prova regressiva da Aula 4 aplicou Or.elim para dividir o objetivo e fechou cada ramo com marcadores; a prova progressiva consome a mesma disjunção com Or.elim e devolve a disjunção construída diretamente. O compromisso é o de sempre, o roteiro regressivo planejando a partir do objetivo e o termo progressivo construindo a partir das hipóteses.
A regra do ponto único (∀ x, x = t → P x) ↔ P t é o ápice da seção de conectivos, e é uma prova de quantificador que é natural de forma progressiva e desajeitada de forma regressiva.
A direção progressiva instancia a hipótese h no valor fixo t e descarrega a guarda t = t com rfl, de modo que h t rfl prova P t. A direção regressiva fixa um x arbitrário, supõe a guarda x = t, e reescreve P t em P x com a substituição hxt ▸ hpt, onde hxt : x = t carrega a igualdade. De forma regressiva a mesma prova deixaria uma metavariável para a testemunha e uma igualdade desajeitada por descarregar; de forma progressiva a testemunha é simplesmente t.
A prova por calc documenta a cadeia que o leitor segue. A prova por Eq.trans mostra a transitividade que calc esconde. A prova por ac_rfl esconde a cadeia por completo e deixa o verificador rearranjar os termos. As três estão corretas e se apoiam nos mesmos fatos; a escolha é sobre o leitor, não sobre o verificador.
Reverter uma lista duas vezes devolve a lista, e a prova recorre sobre a lista, usando o reverse_append provado acima como sua auxiliar. Isto fecha o ciclo com o quarto exemplo resolvido da Aula 4, que descarregou reverse_cons.
O caso base reverte a lista vazia duas vezes e fecha por rfl. No caso do passo, reverter x :: xs dá appendPretty (reverse xs) [x], e reverter isso, por reverse_append, traz a cabeça de volta à frente e deixa reverse (reverse xs), que a chamada recursiva, a hipótese de indução, reescreve para xs. A tática induction da Aula 4 provaria o mesmo enunciado com ih no lugar da chamada recursiva; as duas são a mesma prova. As semanas 6 e 7 dão o método geral para tipos indutivos arbitrários.