A Lean tactic for Canonical, a search procedure for terms in dependent type theory.
See the codeCanonical exhaustively searches for terms in dependent type theory. The canonical tactic proves theorems, synthesizes programs, and constructs objects in Lean.
https://github.com/user-attachments/assets/ec13ad85-7d09-4a32-9c73-3b5b501722a4
Add the following dependency to your lakefile.toml:
[[require]]
name = "Canonical"
scope = "chasenorman"
Or, if you are using a lakefile.lean:
require "chasenorman" / "Canonical"
You should then be prompted to run lake update Canonical.
Basic examples:
import Canonical
-- prove properties by induction
def add_assoc (a b c : Nat) : (a + b) + c = a + (b + c) :=
by canonical
-- enumerate over elements of a type
example : List Nat := by canonical (count := 10)
-- supply premises
def Set (X : Type) := X → Prop
axiom P_ne_not_P : P ≠ ¬ P
theorem Cantor (f : X → Set X) : ¬ ∀ y, ∃ x, f x = y :=
by canonical [P_ne_not_P, congrFun]
More examples can be found in the Canonical repository.
125 commits
Lean
80.6%
JavaScript
19.4%
A Lean tactic for Canonical, a search procedure for terms in dependent type theory.
See the codeCanonical exhaustively searches for terms in dependent type theory. The canonical tactic proves theorems, synthesizes programs, and constructs objects in Lean.
https://github.com/user-attachments/assets/ec13ad85-7d09-4a32-9c73-3b5b501722a4
Add the following dependency to your lakefile.toml:
[[require]]
name = "Canonical"
scope = "chasenorman"
Or, if you are using a lakefile.lean:
require "chasenorman" / "Canonical"
You should then be prompted to run lake update Canonical.
Basic examples:
import Canonical
-- prove properties by induction
def add_assoc (a b c : Nat) : (a + b) + c = a + (b + c) :=
by canonical
-- enumerate over elements of a type
example : List Nat := by canonical (count := 10)
-- supply premises
def Set (X : Type) := X → Prop
axiom P_ne_not_P : P ≠ ¬ P
theorem Cantor (f : X → Set X) : ¬ ∀ y, ∃ x, f x = y :=
by canonical [P_ne_not_P, congrFun]
More examples can be found in the Canonical repository.
125 commits
Lean
80.6%
JavaScript
19.4%