lean
alive2
Our great sponsors
lean | alive2 | |
---|---|---|
4 | 4 | |
1,915 | 671 | |
- | 3.1% | |
0.0 | 9.3 | |
over 3 years ago | 9 days ago | |
C++ | C++ | |
Apache License 2.0 | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
lean
-
Paper from 2021 claims P=NP with poorly specified algorithm for maximum clique using dynamical systems theory
Apparently, it even still segfaulted in 2018 https://github.com/leanprover/lean/issues/1958. I don't expect my tools to segfault.
-
Low-level format file of mathlib
Does anyone happen to have the mathlib library in the [low-level format](https://github.com/leanprover/lean/blob/master/doc/export_format.md)? I've been trying to run lean --export to obtain it, but I keep getting various errors.
-
Mathematics: our overlooked ability
I have spent a good deal of time trying to formalize elementary mathematics and computer science textbooks in the Lean Theorem Prover, and in trying to extend and improve Lean to make the process easier. I have been able to translate entire chapters of several textbooks into Lean in a natural way, with every line of Lean seemingly isomorphic to the informal presentation. However, once in a while I will hit a statement or proof step that may seem simple to me but that requires a major refactor, or adding new features to Lean itself, or just seems like a brick wall. My brain is able to perform massive refactorings of mathematical knowledge and abstractions, synthesize the equivalent of tens of thousands of lines of tricky and performance-critical software, and maybe even expand the logic I am effectively operating in, all in the blink of an eye.
-
How do I get back into math?
However, mathlib makes some weird design choices. For example, (semi)groups are defined using multiplicative notation -- and then immediately followed by an entire section giving the exact same definitions using additive notation! The claimed reason for this is that the more abstract approach is inconvenient for automation. I did it in Coq using the abstract approach, and indeed, noticed that doing so broke automation, which I then worked around in various ways. But it's just weird to me as a mathematician to have additive and multiplicative groups be different objects, so I wouldn't want to do it the Lean way come hell or high water. The Lean approach causes practical difficulties as well: you have to prove every theorem about groups twice. In some cases (e.g. product groups), you have to prove every theorem FOUR times. Ugh.
alive2
-
Basic SAT model of x86 instructions using Z3, autogenerated from Intel docs
You can use it to (mostly) validate small snippets are the same. See Alive2 for the application of Z3/formalization of programs as SMT for that [1]. As far as I'm aware there are some problems scaling up to arbitrarily sized programs due to a lack of formalization in higher level languages in addition to computational constraints. With a lot of time and effort it can be done though [2].
- John Regehr: Alive2 LLVM optims verification
-
Verifying GCC optimizations using an SMT solver
Yeah, this kind of thing is nice.
Alive had been used for years (almost a decade actually) by people to verify LLVM instcombine transforms.
Alive2 (https://github.com/AliveToolkit/alive2) makes it easier to do the same with most optimization passes.
-
Programming in Z3 by learning to think like a compiler
Alive/Alive2 [1] is one of the most famous frameworks for compiler transformation verification using BitVec logic
What are some alternatives?
Agda - Agda is a dependently typed programming language / interactive theorem prover.
CrossHair - An analysis tool for Python that blurs the line between testing and type systems.
FStar - A Proof-oriented Programming Language
klee - KLEE Symbolic Execution Engine
Coq-HoTT - A Coq library for Homotopy Type Theory
recreational-rosette - Some fun examples of solving problems with symbolic execution
CoqGym - A Learning Environment for Theorem Proving with the Coq proof assistant
zz - 🍺🐙 ZetZ a zymbolic verifier and tranzpiler to bare metal C
arend-lib
Symbolica - Symbolica's open-source symbolic execution engine. [Moved to: https://github.com/Symbolica/Symbolica]
ttlite - A SuperCompiler for Martin-Löf's Type Theory
llvm-tutor - A collection of out-of-tree LLVM passes for teaching and learning