-
Notifications
You must be signed in to change notification settings - Fork 9
Home
The end goal of this repository is to:
- Independently evaluate and typecheck Lean 4 programs with a kernel implemented both in Rust and Lean 4
- Content-address every Lean 4 environment, declaration, expression and universe level via using the IPLD data format, with a name-irrelevant representation similar to the Unison language
- Compile Lean programs to the Lurk zk-SNARK language, so that we can generate zero-knowledge proof, which can be verified in constant-time and space, that a Lean program
f
, with inputx
, evaluates toy
- Compile the Yatima typechecker itself to Lurk, so we can generate zero-knowledge proofs that our Lean typechecker, with inputs
env : Yatima.Environment
andconst : Yatima.Constant
, returns successfully without error. For example, we can produce a cryptographic witness that some definitiondef foo : M := N
correctly typechecks, which can be validated without re-running the typechecker.
This will enable us to produce a succinct and efficiently verifiable correctness certificate for e.g. Lean's mathematical library (and for each of its declarations) once it's ported to Lean 4, which currently takes over 4 hours to be typechecked by the Lean 3 kernel (as of May '22).
-
Since we want to build on top of Lean 4 source files, we can take advantage from the fact that its API becomes available for any Lean 4 code that does
import Lean
. Thus, we are creating an application in Lean 4 to make use of itsLean.Elab.runFrontend
function, which can parse the source files and instantiateLean.Environment
for us. -
With a
Lean.Environment
at hand, we can translate its declarations to our own content-addressedYatima
types, such asYatima.Expr
,Yatima.Univ
etc, outputting a.ya
file -
Then we can have our
Yatima
types typechecked with our own Rust/Lean 4 kernels -
We will also be able to generate
Lurk
programs fromYatima
types
-
Created by the team
-
Official documentation
-
Literature, books, repositories, videos, pages etc