Files
papers/lux-formal-verification-lean4/lux-formal-verification-lean4.tex
zeekay f4ee7a0525 Publish under the org, not a person
Bylines, paper authorship, correspondence addresses and the founder blurb under
each post named an individual. They name the organisation that published the
work instead: the brand on posts and pages, the research byline on papers, and
research@ in place of a personal address. Both are what these repositories
already used elsewhere — nothing new was coined.

Co-authors are untouched. Where a paper named someone else alongside, they stay
named; only the one byline changed. Bibliography entries, running heads,
PDF metadata and affiliations move with it, so a citation still resolves to
whoever the cited paper names.

Sample and fixture data uses the placeholder name these tests already use
elsewhere, so no assertion changed meaning.
2026-09-01 08:58:10 -07:00

111 lines
3.4 KiB
TeX
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
\documentclass[11pt,a4paper]{article}
\usepackage{../shared/luxcover}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amsfonts,amsthm}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{listings}
\usepackage{listingsutf8}
\input{../shared/lstlang}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{float}
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{proposition}[theorem]{Proposition}
\newtheorem{definition}{Definition}
\newtheorem{corollary}[theorem]{Corollary}
\newtheorem{remark}{Remark}
\lstset{
basicstyle=\small\ttfamily,
keywordstyle=\color{blue}\bfseries,
commentstyle=\color{gray},
stringstyle=\color{red},
breaklines=true,
frame=single,
numbers=left,
numberstyle=\tiny\color{gray},
extendedchars=true,
inputencoding=utf8,
literate=%
{×}{{$\times$}}1
{→}{{$\to$}}1
{←}{{$\leftarrow$}}1
{≥}{{$\geq$}}1
{≤}{{$\leq$}}1
{μ}{{$\mu$}}1
{►}{{\ensuremath{\blacktriangleright}}}1
{✓}{{\ensuremath{\checkmark}}}1
{✅}{{\ensuremath{\checkmark}}}1
{—}{{--}}1
{–}{{-}}1
{¬}{{\ensuremath{\neg}}}1
{·}{{\ensuremath{\cdot}}}1
{∀}{{\ensuremath{\forall}}}1
{∃}{{\ensuremath{\exists}}}1
{∈}{{\ensuremath{\in}}}1
{∉}{{\ensuremath{\notin}}}1
{∧}{{\ensuremath{\wedge}}}1
{∨}{{\ensuremath{\vee}}}1
{∩}{{\ensuremath{\cap}}}1
{≠}{{\ensuremath{\neq}}}1
{⟨}{{\ensuremath{\langle}}}1
{⟩}{{\ensuremath{\rangle}}}1
}
\hypersetup{
colorlinks=true,
linkcolor=blue,
citecolor=blue,
urlcolor=blue
}
\title{Formal Verification with Lean~4 for Blockchain Systems}
\author{
Lux Research \\
Lux Industries, Inc.\thanks{Corresponding author: [email protected]}\\
\texttt{[email protected]}
}
\date{2025}
\begin{document}
\luxcoverpage
\begin{abstract}
Formal verification provides mathematical certainty that software satisfies its specification.
This paper teaches formal verification from first principles using Lean~4, a dependently typed
proof assistant and programming language developed at Microsoft Research. We cover the
foundations---propositions as types, tactics, induction---then apply them to blockchain-specific
problems: consensus safety and liveness, BFT threshold arithmetic, and cryptographic
primitive correctness. We present 384 machine-checked theorems with zero uses of
\texttt{sorry} (Lean's axiom-of-trust escape hatch), covering Lux Network's Quasar
consensus, BLS signature aggregation, and post-quantum threshold schemes. Every proof
compiles with \texttt{lake build} and is maintained in \texttt{luxfi/formal}. This is a
builder's guide: each concept is followed by working Lean~4 code that the reader can type,
compile, and modify.
\end{abstract}
\tableofcontents
\newpage
%% ============================================================
\input{sections/01-why-formal-verification}
\input{sections/02-lean-4-fundamentals}
\input{sections/03-modeling-consensus-in-lean-4}
\input{sections/04-induction-on-chain-height}
\input{sections/05-bft-threshold-proofs}
\input{sections/06-cryptographic-primitive-verification}
\input{sections/07-our-proof-corpus-384-theorems-0-sorry}
\input{sections/08-practical-guide-writing-your-first-block}
\input{sections/09-common-patterns}
\input{sections/10-lessons-learned}
\input{sections/99-conclusion}
\end{document}