#证明器 #逻辑 #一阶 #求解器

pocket_prover-set

为PocketProver推理集合属性的基础逻辑系统

6个版本 (重大更新)

使用旧的Rust 2015

0.5.0 2022年10月7日
0.4.0 2020年8月19日
0.3.0 2019年8月6日
0.2.1 2018年2月25日
0.1.0 2018年2月23日

算法类别中排名第2338

每月下载量21

MIT许可

14KB
265

pocket_prover-set

为PocketProver推理集合属性的基础逻辑系统

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)
    ));
}

有4个信息位,用于推导所有其他属性

  • any - 所有类型,包括未定义的类型
  • uniq - 唯一值
  • fin_many - 有限多个值
  • inf_many - 无限多个值

当所有位都设置为0时,集合为空(.none())。

当至少有一个位设置为1时,集合为非空(.some())。

当它为any但既不是唯一、有限也不是无限时,集合为未定义。

以下是一个8个集合的证明示例

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)
    ));
}

依赖项

~2MB
~48K SLoC