| Crates.io | rlfsc |
| lib.rs | rlfsc |
| version | 0.2.2 |
| created_at | 2020-09-01 05:50:31.599004+00 |
| updated_at | 2021-03-01 21:55:28.862637+00 |
| 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 rlfsclogos 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.