L1c: A conceptually simple formally verified compiler
github.com
github.com
On other end, one uses an ML-like language, SPARK Ada, or something designed for easy verification to specify and test the behavior of the software. Like FLINT or Cleanroom, one breaks it down into functions amendable to analysis or verification. Those functions' implementations are done in a way that can straight-forward albeit tediously written in the verified, macro-asm. Human review and test-centered equivalence checking argues correspondence at first with formal methods later if desired. Run verified asm toolchain on it to get a correctness argument that your app's source equals machine code. If your app is a compiler, you will have many more without hand-doing the macro-asm and a bunch of verified macro's to use in next app. ;)
What do you think about macro-asm + formal methods for verified component construction ground up + top down? Any potential you see?
Note: My scheme was inspired by both VLISP and Wirth's Lilith machine. VLISP implemented PreScheme first then used it to implement the full software. Wirth implemented a more ideal processor ISA, M-code, that represented things like stack operations with perfect Modula-2 compatibility. He then did a Modula-2 to M-Code compiler with the rest of the software written in Modula-2 w/ M-code for acceleration. For both systems, raising the machine level up a notch reduced their overall work and made the source more consistent throughout.
My proof works by creating such a value.
There are obviously lots of places where this can go wrong, but good progress has been made towards most of them - http://materials.dagstuhl.de/files/15/15182/15182.KonradSlin... is a decent explanation.
As a handwavey argument, the proof could be incorrect, but if it were incorrect, the incorrectness would be more interesting than the current proof (i.e. a serious bug would have been located in the theorem prover).