What I've Learned About Formal Methods in Half a Year
I've always thought theorem proving to be about proving equality of the function and the result.Lean to me is not only obscure but unapproachable by someone from a non-mathematical background.Take this snippet for instance      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


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.This is the path that languages such as Idris https://www.idris-lang.org/ have taken