What I've Learned About Formal Methods in Half a Year
I&#x27;ve always thought theorem proving to be about proving equality of the function and the result.<p>Lean to me is not only obscure but unapproachable by someone from a non-mathematical background.<p>Take this snippet for instance<p><pre><code>      theorem nat.add_comm : ∀ (n m : ℕ), n + m = m + n :=
      λ (n m : ℕ),
      nat.brec_on m
         (λ (m : ℕ) (_F : nat.below (λ (m : ℕ), ∀ (n : ℕ), n + m = m + n) m) (n : ℕ),
            nat.cases_on m
               (λ (_F : nat.below (λ (m : ℕ), ∀ (n : ℕ), n + m = m + n) 0),
                  id_rhs (n + 0 = 0 + n) (eq.symm (nat.zero_add n)))
               (λ (m : ℕ) (_F : nat.below (λ (m : ℕ), ∀ (n : ℕ), n + m = m + n) (nat.succ m)),
                  id_rhs (n + (m + 1) = nat.succ m + n) (eq.symm (nat.succ_add m n) ▸ congr_arg nat.succ (_F.fst.fst n)))
               _F)
         n

</code></pre>
If we want to democratise formal methods and theorem proving, we should lean towards natural language expressions of proof and not mathematical expressions and greek characters.<p>This is the path that languages such as Idris <a href="https:&#x2F;&#x2F;www.idris-lang.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.idris-lang.org&#x2F;</a> have taken