Built with Alectryon, running Coq+SerAPI, Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.

Multi-prover documents

Alectryon documents can use multiple provers. Inputs for each prover are processed independently.

To compile:

alectryon polyglot.rst
    # reST+… → HTML;  produces ‘polyglot.html’
Require Import PeanoNat.


forall a b : nat, a * b = b * a

forall a b : nat, a * b = b * a

forall b : nat, 0 = b * 0
a: nat
IHa: forall b : nat, a * b = b * a
forall b : nat, b + a * b = b * S a

forall b : nat, 0 = b * 0
induction b; simpl; congruence.
a: nat
IHa: forall b : nat, a * b = b * a

forall b : nat, b + a * b = b * S a
a: nat
IHa: forall b : nat, a * b = b * a

a * 0 = 0
a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S a
S (b + a * S b) = S (a + b * S a)
a: nat
IHa: forall b : nat, a * b = b * a

a * 0 = 0
rewrite IHa; reflexivity.
a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S a

S (b + a * S b) = S (a + b * S a)
a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S a

S (b + S b * a) = S (a + (b + a * b))
a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S a

S (b + (a + b * a)) = S (a + (b + a * b))
a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S a

S (b + (a + b * a)) = S (a + (b + b * a))
a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S a

S (b + a + b * a) = S (a + b + b * a)
a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S a

S (a + b + b * a) = S (a + b + b * a)
reflexivity. Qed.
open Nat

def customSum : Nat -> Nat
  | 0      => 0
  | succ n => succ n + customSum n

55
customSum 10 namespace Nat theorem mul_two : n : Nat, 2 * n = n + n :=

(n : Nat), 2 * n = n + n
n: Nat

2 * n = n + n
n: Nat

2 * n = n + n

zero
2 * zero = zero + zero

Goals accomplished! 🐙
n: Nat
n_ih: 2 * n = n + n

succ
2 * succ n = succ n + succ n
n: Nat
n_ih: 2 * n = n + n

succ
2 * succ n = succ n + succ n
n: Nat
n_ih: 2 * n = n + n

succ
2 * (n + 1) = n + 1 + (n + 1)
n: Nat
n_ih: 2 * n = n + n

succ
2 * n + 2 * 1 = n + 1 + (n + 1)
n: Nat
n_ih: 2 * n = n + n

succ
n + n + 2 * 1 = n + 1 + (n + 1)
n: Nat
n_ih: 2 * n = n + n

succ
n + n + 2 * 1 = n + 1 + (n + 1)

Goals accomplished! 🐙
theorem gauss : n : Nat, 2 * customSum n = n * (n + 1) :=

(n : Nat), 2 * customSum n = n * (n + 1)
n: Nat

2 * customSum n = n * (n + 1)
n: Nat

2 * customSum n = n * (n + 1)

zero
2 * customSum zero = zero * (zero + 1)

Goals accomplished! 🐙
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
2 * customSum (succ n) = succ n * (succ n + 1)
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
2 * (succ n + customSum n) = succ n * (succ n + 1)
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
2 * succ n + 2 * customSum n = succ n * succ n + succ n
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
2 * succ n + 2 * customSum n = succ n * succ n + succ n
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
2 * succ n + n * (n + 1) = succ n * succ n + succ n
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
2 * (n + 1) + n * (n + 1) = (n + 1) * (n + 1) + (n + 1)
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
2 * (n + 1) + n * (n + 1) = (n + 1) * (n + 1) + (n + 1)
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
n + n + 2 + (n * n + n) = n * n + n + (n + 1) + (n + 1)
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
n + n + 2 + (n * n + n) = n * n + n + (n + 1) + (n + 1)
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
n * n + n + (n + n + 2) = n * n + n + (n + 1) + (n + 1)
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
n * n + n + (n + n + 2) = n * n + n + (n + 1) + (n + 1)
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
n * n + (n + (n + (n + 2))) = n * n + (n + (n + (1 + (n + 1))))
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
n * n + (n + (n + (n + 2))) = n * n + (n + (n + (1 + (n + 1))))
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
n * n + (n + (n + succ (n + 1))) = n * n + (n + (n + (1 + (n + 1))))
n: Nat
n_ih: 2 * customSum n = n * (n + 1)

succ
n * n + (n + (n + succ (n + 1))) = n * n + (n + (n + (n + 1 + 1)))

Goals accomplished! 🐙
end Nat