a sequencer for the M-VAVE FM-1 · written in Lean · 315 theorems about it
M-VAVE · $60 · JieLi AC7911B · 213 firmwares listed on 1 November
photos: M-VAVE; Nick Indge, Ars Technica











"We're not even through October, and there are already more community firmware projects available to install on the FM-1 than I could ever hope to cover. And just in case you were wondering: yes, it plays Doom."
Ars Technica, 26 October 2026
the chip they all run on
The others were written in weeks, in C, with an AI, for a chip with no debugger. So was this one, in Lean. 315 theorems about that Lean go through the kernel on every build.
a generative sequencer, and why prove one
A generative sequencer with a modular synth's oscillator in a $60 keyboard, with 315 theorems about the promises it makes.
a Eurorack case; middle row, a Mutable Instruments Braids reading CSAW, the oscillator this firmware compiles from source. Photo Paul Anthony, CC BY-SA 4.0
what it is
why prove any of this
four lanes · Braids, FM, an 808 kit, a filter · two sends · the PUNCH page · seven looks
the sequencer
the engines
the effects
punch-in effects
Firmware/ → C → the FM-1 and the browser; Proofs/ about the Firmware
| Check | What it establishes |
|---|---|
| Proved | 315 theorems about the Lean the chip runs: sequencer, FM voice, 808, range and no-wrap facts about every Braids engine, reverb, delay, mix, patch format. Three standard axioms, nothing else. |
| The compiler, tested | 354 exported functions compiled to C and run on random inputs; the kernel checks each value against the definition. 2124 values a run. |
| The proofs, watched | Twelve theorem statements asserted on the running firmware where the C takes the Lean's answer. Tens of millions of checks over the test run; the count and the failures (zero) are printed by make test. |
trusted, listed in the README
315 theorems, in five kinds
| Kind | Theorems | For example | What it is good for | |
|---|---|---|---|---|
| The music it plays | 84 | run_every_note_on_has_a_note_offrun_clock_never_driftsrun_bar_plays_every_hit |
| |
| Music theory | 22 | euclid_is_christoffeltonnetz_group_is_dihedralharmony_hexachord_theorem |
| |
| Sound, in fixed point | 175 | fm_sine_boundeddrum_output_never_wrapsfilter_states_stay_bounded |
| |
| The mix and the effects | 28 | mix_bus_never_wrapsreverb_tail_dies_awaydelay_echoes_die_away |
| |
| Patches | 6 | patch_decode_encode_round_trippatch_decode_only_fitspresets_all_fit |
|
four presets playing at once, 78 seconds (P) · mpancia.github.io/fmfm · make install && make run
the film
formalfred.webm
P plays · R from the start