6 releases (breaking)
Uses old Rust 2015
0.5.0 | Oct 7, 2022 |
---|---|
0.4.0 | Aug 19, 2020 |
0.3.0 | Aug 6, 2019 |
0.2.1 | Feb 25, 2018 |
0.1.0 | Feb 23, 2018 |
#2620 in Algorithms
21 downloads per month
14KB
265 lines
pocket_prover-set
A base logical system for PocketProver to reason about set properties
extern crate pocket_prover;
extern crate pocket_prover_set;
use pocket_prover::*;
use pocket_prover_set::*;
fn main() {
println!("Result {}", Set::imply(
|s| s.fin_many,
|s| not(s.inf_many)
));
}
There are 4 bits of information, used to derive all other properties:
any
- All types, including those not defineduniq
- A unique valuefin_many
- Many but finite number of valuesinf_many
- Many but infinite number of values
A set is empty (.none()
) when all bits are set to 0.
A set is non-empty (.some()
) when at least bit is set to 1.
A set is undefined when it is any
but neither unique, finite or infinite.
Here is an example of a proof of 8 sets:
extern crate pocket_prover;
extern crate pocket_prover_set;
use pocket_prover::*;
use pocket_prover_set::*;
fn main() {
println!("Result {}", <(Set, Set, Set, Set, Set, Set, Set, Set)>::imply(
|sets| and(sets.uniqs(|xs| xorn(xs)), sets.0.uniq),
|sets| not(sets.7.uniq)
));
}
Dependencies
~2MB
~49K SLoC