Philip Zucker writes on egraphs, SMT solvers, theorem proving, category theory and program verification, often with code examples.
HN links it for its work on egraphs, Datalog and automated proving, and the author himself describes it as covering these subjects.
Author seems to be using https://github.com/ailidani/paxi for actual implementation and proof.
I'm more of a python/rust guy. There have been some attempts to make model checkers in rust: https://github.com/stateright/stateright
The issue is that rust is a very large language and it's hard to get it right.
I have a python implementation of raft over here:
https://github.com/adsharma/raft/tree/master/raft/states
That's small enough to be self contained and perhaps run through a model checker some day and transpiled to many statically typed languages.
The issue with TLA+ proofs such as:
https://github.com/fpaxos/raft.tla
is that it's hard to tell if a particular C++ or Rust implementation conforms to the spec.
So how do we check and transpile?
* https://www.philipzucker.com/Modelling_TLA_in_z3py/
* https://github.com/adsharma/py2many
It's not really clear that functional style is easier/closer to proofs, tbh: https://hillelwayne.com/post/theorem-prover-showdown/ :-).
There's absolutely a constructivist form of unification, the description of a particular unification algorithm is typically a rewrite system (OP has one here: https://www.philipzucker.com/assets/traat/unify_rules.png) which qualifies as constructive imho (it builds an explicit solution, ie a substitution). But the imperative implementation of such a rewrite system can be readable too (especially if you still have pattern matching as in, say, Rust or OCaml).
I don't think there's any link to be had with the Curry Howard correspondence here. No types, no lambda calculus, nothing of the sort.
https://www.philipzucker.com/https:/www.philipzucker.com/nand2tetris-chc/
Not sure what's happening, but that's the present link on HN. It should be:
https://www.philipzucker.com/nand2tetris-chc/
EDIT: Canonical link issue:
<link rel="canonical" href="https:/www.philipzucker.com/nand2tetris-chc/" />
^
There's a typo there, causing HN to rewrite it as the first link.
The only major problem (IMO) is that Lean and the others (Coq, Hol, Isabelle, Agda, Idris, etc...) are all pretty hard to read.
Check out "Automated Propositional Sequent Proofs in Your Browser with Tau Prolog" for a promising approach: https://www.philipzucker.com/javascript-automated-proving/ It's rendering LaTeX proof trees.
Yes, at least these egg-based projects are usign this idea, but it looks like it's just one of the options:
https://souffle-lang.github.io/docs.html
http://www.philipzucker.com/souffle-egg4/
https://arxiv.org/pdf/2004.03082.pdf
Love it!
I implemented something similar in Mathematica:
http://blog.benwiener.com/programming/art/2017/08/24/lewitt.html
My friend implemented it in Elm:
http://www.philipzucker.com/elm-eikonal-sol-lewitt/