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 * aforall a b : nat, a * b = b * aforall b : nat, 0 = b * 0a: nat
IHa: forall b : nat, a * b = b * aforall b : nat, b + a * b = b * S ainduction b; simpl; congruence.forall b : nat, 0 = b * 0a: nat
IHa: forall b : nat, a * b = b * aforall b : nat, b + a * b = b * S aa: nat
IHa: forall b : nat, a * b = b * aa * 0 = 0a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S aS (b + a * S b) = S (a + b * S a)rewrite IHa; reflexivity.a: nat
IHa: forall b : nat, a * b = b * aa * 0 = 0a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S aS (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 aS (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 aS (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 aS (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 aS (b + a + b * a) = S (a + b + b * a)reflexivity. Qed.a: nat
IHa: forall b : nat, a * b = b * a
b: nat
IHb: b + a * b = b * S aS (a + b + b * a) = S (a + b + b * a)
open Nat def customSum : Nat -> Nat | 0 => 0 | succ n => succ n + customSum ncustomSum 10 namespace Nat theorem mul_two : ∀ n : Nat, 2 * n = n + n :=∀ (n : Nat), 2 * n = n + nn: Nat2 * n = n + nn: Nat2 * n = n + n
zero2 * zero = zero + zeroGoals accomplished! 🐙n: Nat
n_ih: 2 * n = n + n
succ2 * succ n = succ n + succ nn: Nat
n_ih: 2 * n = n + n
succ2 * succ n = succ n + succ nn: Nat
n_ih: 2 * n = n + n
succ2 * (n + 1) = n + 1 + (n + 1)n: Nat
n_ih: 2 * n = n + n
succ2 * n + 2 * 1 = n + 1 + (n + 1)n: Nat
n_ih: 2 * n = n + n
succn + n + 2 * 1 = n + 1 + (n + 1)n: Nat
n_ih: 2 * n = n + n
succn + n + 2 * 1 = n + 1 + (n + 1)theorem gauss : ∀ n : Nat, 2 * customSum n = n * (n + 1) :=Goals accomplished! 🐙∀ (n : Nat), 2 * customSum n = n * (n + 1)n: Nat2 * customSum n = n * (n + 1)n: Nat2 * customSum n = n * (n + 1)
zero2 * customSum zero = zero * (zero + 1)Goals accomplished! 🐙n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succ2 * customSum (succ n) = succ n * (succ n + 1)n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succ2 * (succ n + customSum n) = succ n * (succ n + 1)n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succ2 * succ n + 2 * customSum n = succ n * succ n + succ nn: Nat
n_ih: 2 * customSum n = n * (n + 1)
succ2 * succ n + 2 * customSum n = succ n * succ n + succ nn: Nat
n_ih: 2 * customSum n = n * (n + 1)
succ2 * succ n + n * (n + 1) = succ n * succ n + succ nn: Nat
n_ih: 2 * customSum n = n * (n + 1)
succ2 * (n + 1) + n * (n + 1) = (n + 1) * (n + 1) + (n + 1)n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succ2 * (n + 1) + n * (n + 1) = (n + 1) * (n + 1) + (n + 1)n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succn + n + 2 + (n * n + n) = n * n + n + (n + 1) + (n + 1)n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succn + n + 2 + (n * n + n) = n * n + n + (n + 1) + (n + 1)n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succn * n + n + (n + n + 2) = n * n + n + (n + 1) + (n + 1)n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succn * n + n + (n + n + 2) = n * n + n + (n + 1) + (n + 1)n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succn * n + (n + (n + (n + 2))) = n * n + (n + (n + (1 + (n + 1))))n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succn * n + (n + (n + (n + 2))) = n * n + (n + (n + (1 + (n + 1))))n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succn * n + (n + (n + succ (n + 1))) = n * n + (n + (n + (1 + (n + 1))))n: Nat
n_ih: 2 * customSum n = n * (n + 1)
succn * n + (n + (n + succ (n + 1))) = n * n + (n + (n + (n + 1 + 1)))end NatGoals accomplished! 🐙