Crates.io | rlfsc |
lib.rs | rlfsc |
version | 0.2.2 |
source | src |
created_at | 2020-09-01 05:50:31.599004 |
updated_at | 2021-03-01 21:55:28.862637 |
description | A checker for the LFSC proof language |
homepage | https://github.com/alex-ozdemir/rlfsc |
repository | https://github.com/alex-ozdemir/rlfsc |
max_upload_size | |
id | 283309 |
size | 34,560,127 |
export PATH="$HOME/.cargo/bin/:$PATH"
to your rc
file.cargo install rlfsc
logos
library.std::rc::Rc
.On our small test proof (pf
), we're ~30% slower than LFSC (10.8ms vs 8.0ms)
on my machine.
On the CVC4 signatures (sig
), we're ~30% faster than LFSC (3.0ms vs 4.4ms)
on my machine.
This suggests that our tokenization is indeed better, but our checking is slower.
We do lots of recursion, without tail recursion, causing us to blow small stacks.
It's based on to Aaron's 2008 manuscript, "Proof Checking Technology for Satisfiability Modulo Theories", but, in general, has no optimizations.
Notably:
(\x t) v
becomes t[v / x]
, literally. I.e. we take t
apart,
looking for all the x
's, replace them with v
's, and rebuild t
.(let x v t)
, we put x -> v
in the environment,
and evaluate t
, rather than substituting.logos
to allow this by implementing logos::Source
for std::io::Read
.
Source
a bit.nom
? It's typically used for parsing, but it does support
streaming.logos
or nom
.