free-arrow
cakeml
free-arrow | cakeml | |
---|---|---|
2 | 14 | |
17 | 915 | |
- | 1.1% | |
2.9 | 9.8 | |
2 months ago | 7 days ago | |
Scala | Standard ML | |
- | GNU General Public License v3.0 or later |
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.
free-arrow
-
The Deep Link Equating Math Proofs and Computer Programs
my first thought was something something dependent types (Idris, Agda), but it also sounds like TS-like structural typing with a Rust-like Result type. proving that every incoming message is either parsed correctly or we return an error seems to be the basic building block. and then every transformation should be other pure functions.
thought I guess you mean something more top-downish? for that there's "program interpretation" ( https://github.com/AdrielC/free-arrow )
plus something very heavy-handed https://deepai.org/publication/a-coq-based-synthesis-of-scal...
-
Pure Functional Stream processing in Scala: Cats and Akka – Part 1
Interesting post, although the use of `cats.IO` feels a little shoehorned. I've found some nice cats/akka synergy by abstracting over flows using a `cats.arrow.Arrow` instance for `akka.stream.scaladsl.Flow`. That might be just as shoehorned though, since I haven't yet worked out whether akkas `Flow` forms a lawful Arrow
cakeml
-
The Deep Link Equating Math Proofs and Computer Programs
If I understand what you are asking about correctly, then I do think you are mistaken.
As a sibling comment observed, you would be proving something about a program, but proving things about programs is both possible and done.
This ranges from things like CakeML (https://cakeml.org/) and CompCert (compilers with verified correctness proofs of their optimizations) to something simple like absence of runtime type errors in statically strongly soundly-typed languages.
Of note is that you are proving properties of your program, not proving them perfect in every way. The properties of your program that you prove can vary wildly in both difficulty and usefulness. A sufficiently advanced formally verified compiler like CakeML can transfer a high-level proof about your source code to a corresponding proof about the behavior of the generated machine-executable code.
-
The future of Clang-based tooling
> A single IR with multiple passes is a good way to build a compiler
https://mlir.llvm.org/, which is using, is largely claiming the opposite. Most passes more naturally are not "a -> a", but "a -> b". data structures and data structures work hand in hand, it is very nice to produce "evidence" for what is done in the output data structure.
This is why https://cakeml.org/, which "can't cheat" with partial functions, has so many IRs!
Using just a single IR was historically done for cost-control, the idea being that having many IRs was a disaster in repetitive boilerplate. MLIR seeks to solve that exact problem!
- CakeML – A Verified Implementation of ML
-
Tools for Verifying a Language and its Semantics
You may want to look at [CakeML](https://cakeml.org) done in HOL4, there is also a nice proof pearl about a more .. minimalistic verified bootstrapped compiler also in HOL4.
-
old languages compilers
CakeML
-
Is there a formally-proven real-time language/computing env. or operating system?
There is also Cake ML which is a formally verified functional programming language compiler and runtime.
-
CakeML: A Verified Implementation of ML
There is also a CakeML -> Standard ML compiler though it seems to have been built to translate benchmarks and sort of old so I'm not sure how comprehensive it is: https://github.com/CakeML/cakeml/tree/master/unverified/front-end
-
The λ-Cube
> One guess is that lisps cope with being minimal through use of macros and metaprogramming, it's difficult for a typed language to support that level of metaprogramming while maintaining the various guarantees that one wants from such a system.
Difficult, but certainly not impossible [0].
[0] https://cakeml.org/
-
Two Mechanisations of WebAssembly 1.0
If this interests you, I'd highly recommend checking out CompCert (docs here) and CakeML.
- VLISP: A Verified Implementation of Scheme [pdf]
What are some alternatives?
zio-prelude - A lightweight, distinctly Scala take on functional abstractions, with tight ZIO integration
Daikon - Dynamic detection of likely invariants
ZIO - ZIO — A type-safe, composable library for async and concurrent programming in Scala
hardware - Verilog development and verification project for HOL4
pragmatapro - PragmataPro font is designed to help pros to work better
mpl - The MaPLe compiler for efficient and scalable parallel functional programming
Reactive Streams - Reactive Streams Specification for the JVM
CompCert - The CompCert formally-verified C compiler
aGdaREP - Implementing grep in Agda
Checker Framework - Pluggable type-checking for Java
checkedc - Checked C is an extension to C that lets programmers write C code that is guaranteed by the compiler to be type-safe. The goal is to let people easily make their existing C code type-safe and eliminate entire classes of errors. Checked C does not address use-after-free errors. This repo has a wiki for Checked C, sample code, the specification, and test code.
smlpkg - Generic package manager for Standard ML libraries and programs