Verifying lightgoppa

D. J. Bernstein, 20230811

lightgoppa-20230811 is a collection of computer-verified proofs regarding Goppa decoding. The proofs are written in the HOL Light language. (For comparison, leangoppa-20230726 has essentially the same theorems with proofs written in the Lean language.) This page explains how to run HOL Light to verify the proofs.

Prerequisites: Debian VM with at least 2GB free disk space. Probably adaptations of these instructions can work in other environments.

As root in the VM:

apt install git opam wget -y
adduser --disabled-password --gecos lightgoppa lightgoppa
su - lightgoppa

All remaining steps are within the lightgoppa account:

time opam init -a --disable-sandboxing
time opam switch create 4.05.0
eval `opam env`
time opam pin add camlp5 7.10 -y
time opam install num camlp-streams ocamlfind -y

git clone
cd hol-light
git checkout 29b3e114f5c166584f4fbcfd1e1f9b13a25b7349

time ocaml -I `camlp5 -where` camlp5o.cma -init \
< > lightgoppa-20230811.out
grep Error lightgoppa-20230811.out

These commands normally produce 40778 lines of output in lightgoppa-20230811.out, including copies of all definitions and proven theorems. The first 80% of the lines are from various HOL Light libraries. The main lightgoppa-20230811 theorem statements are collected at the end. If you comment out a random proof line in (by putting (* before the line and *) after) then you should end up seeing “Error” in lightgoppa-20230811.out rather than the desired theorems.

On a dual EPYC 7742 server running at 2.245GHz, the timed commands above were observed to take 21 seconds, 307 seconds, 68 seconds, 143 seconds, and 1165 seconds respectively. This server has 128 cores, but most of the time was spent on single-core processing.

Beware that OCaml is a general-purpose programming language. Malicious code anywhere inside the OCaml software, inside the HOL Light software, or inside lightgoppa can spoil verification, destroy files, etc. In other words, the proof verification relies on a large TCB.