69 research outputs found
Second-Order Functions and Theorems in ACL2
SOFT ('Second-Order Functions and Theorems') is a tool to mimic second-order
functions and theorems in the first-order logic of ACL2. Second-order functions
are mimicked by first-order functions that reference explicitly designated
uninterpreted functions that mimic function variables. First-order theorems
over these second-order functions mimic second-order theorems universally
quantified over function variables. Instances of second-order functions and
theorems are systematically generated by replacing function variables with
functions. SOFT can be used to carry out program refinement inside ACL2, by
constructing a sequence of increasingly stronger second-order predicates over
one or more target functions: the sequence starts with a predicate that
specifies requirements for the target functions, and ends with a predicate that
provides executable definitions for the target functions.Comment: In Proceedings ACL2 2015, arXiv:1509.0552
Formal Verification of Zero-Knowledge Circuits
Zero-knowledge circuits are sets of equality constraints over arithmetic
expressions interpreted in a prime field; they are used to encode computations
in cryptographic zero-knowledge proofs. We make the following contributions to
the problem of ensuring that a circuit correctly encodes a computation: a
formal framework for circuit correctness; an ACL2 library for prime fields; an
ACL2 model of the existing R1CS (Rank-1 Constraint Systems) formalism to
represent circuits, along with ACL2 and Axe tools to verify circuits of this
form; a novel PFCS (Prime Field Constraint Systems) formalism to represent
hierarchically structured circuits, along with an ACL2 model of it and ACL2
tools to verify circuits of this form in a compositional and scalable way;
verification of circuits, ranging from simple to complex; and discovery of bugs
and optimizations in existing zero-knowledge systems.Comment: In Proceedings ACL2-2023, arXiv:2311.0837
Leo: A Programming Language for Formally Verified, Zero-Knowledge Applications
Decentralized ledgers that support rich applications suffer from three limitations. First, applications are provisioned tiny execution environments with limited running time, minimal stack size, and restrictive instruction sets. Second, applications must reveal their state transition, enabling miner frontrunning attacks and consensus instability. Third, applications offer weak guarantees of correctness and safety.
We design, implement, and evaluate Leo, a new programming language designed for formally verified, zero-knowledge applications. Leo provisions a powerful execution environment that is not restricted in running time, stack size, or instruction sets. Besides offering application privacy and mitigating miner-extractable value (MEV), Leo achieves two fundamental properties. First, applications are formally verified with respect to their high-level specification. Second, applications can be succinctly verified by anyone, regardless of the size of application.
Leo is the first known programming language to introduce a testing framework, package registry, import resolver, remote compiler, formally defined language, and theorem prover for general-purpose, zero-knowledge applications
Compositional Formal Verification of Zero-Knowledge Circuits
We provide a preliminary report of our ongoing work in formally defining and verifying, in a compositional way, the R1CS gadgets generated by Aleo\u27s snarkVM. The approach is applicable to other systems that generate gadgets in a similar manner, and that may use non-R1CS representations
- …
