A Lean Machine-to-Machine Interface
Go to file
Leni Aniva 572548c1bd Add json goal printing 2023-05-27 23:10:39 -07:00
Pantograph Add json goal printing 2023-05-27 23:10:39 -07:00
Test Add json goal printing 2023-05-27 23:10:39 -07:00
.gitignore Update gitignore to exclude hidden files 2023-05-24 09:32:19 -07:00
Main.lean Add json goal printing 2023-05-27 23:10:39 -07:00
Pantograph.lean Add unsafe filtering in catalog 2023-05-12 16:12:21 -07:00
README.md Rename tactic failure mode to avoid confusion 2023-05-24 23:11:17 -07:00
lake-manifest.json Add testing stub 2023-05-22 11:47:46 -07:00
lakefile.lean Add option format for proof output and test cases 2023-05-22 14:49:56 -07:00
lean-toolchain Initial commit 2023-05-07 15:19:45 -07:00

README.md

Pantograph

An interaction system for Lean 4.

Installation

Install elan and lean4. Then, execute

lake build

In order to use mathlib, its binary must also be built

lake build Qq
lake build aesop
lake build std
lake build mathlib

In a future version, the dependencies of mathlib will be removed and the user will be responsible for adding such library paths to LEAN_PATH.

Usage

build/bin/pantograph OPTIONS|MODULES

The REPL loop accepts commands as single-line JSON inputs and outputs either an Error: (indicating malformed command) or a json return value indicating the result of a command execution. The command can be passed in one of two formats

command { ... }
{ "cmd": command, "payload": ... }

The list of available commands can be found in Pantograph/Commands.lean. An empty command aborts the REPL.

The Pantograph executable must be run with a list of modules to import. It can also accept options of the form --key=value e.g. --pp.raw=true.

Example: (~5k symbols)

$ build/bin/Pantograph Init
catalog
inspect {"name": "Nat.le_add_left"}

Example with mathlib (~90k symbols)

$ lake env build/bin/Pantograph Mathlib.Analysis.Seminorm
catalog

Example proving a theorem: (alternatively use proof.start {"copyFrom": "Nat.add_comm"}) to prime the proof

$ env build/bin/Pantograph Init
proof.start {"expr": "∀ (n m : Nat), n + m = m + n"}
proof.tactic {"treeId": 0, "stateId": 0, "goalId": 0, "tactic": "intro n m"}
proof.tactic {"treeId": 0, "stateId": 1, "goalId": 0, "tactic": "assumption"}
proof.printTree {"treeId": 0}
proof.tactic {"treeId": 0, "stateId": 1, "goalId": 0, "tactic": "rw [Nat.add_comm]"}
proof.printTree {"treeId": 0}

where the application of assumption should lead to a failure.

Troubleshooting

If lean encounters stack overflow problems when printing catalog, execute this before running lean:

ulimit -s unlimited

Testing

The tests are based on LSpec. To run tests,

test/all.sh