#谓词 # #另一个 #逻辑 #有效性

predicatechecker

检查一个谓词在另一个为真时是否为真

2 个版本

0.5.2 2023 年 7 月 6 日
0.5.1 2023 年 5 月 11 日

#4 in #真

MPL-2.0 许可证

39KB
649

predicate-checker

Predicate-checker 是一个用 Rust 编写的库,其唯一目的是检查给定的谓词 A 的有效性是否意味着谓词 B 的有效性。

例如,给定谓词 A: x > 5B: x > 6,该库可以使用 Predicate::implies() 函数验证,对于所有 x 的值,如果 A 为真,则 B 也为真(在这个例子中,它是;因此 A.implies(B) 函数将返回 Implication::Total)。

注意:这个库不是由数学家制作的,也不是一个好的程序员,或者一个好的园丁制作的。结果不是 100% 真实的,不应用于比小型项目更重要的事情。抱歉!

用法

Predicate 枚举表示一个布尔表达式。您可以通过组装其他 Predicate<T>T 是一个数值类型)来“手动”构建一个,或者使用内置解析器

use predicatechecker::Predicate;
let predicate = Predicate::from("(x > 2) && (y == 4) && (z < 10)").unwrap(); // returns a Predicate<f64>

现在,您可以检查一个谓词是否“蕴含”另一个

use predicatechecker::Predicate;

fn main() {
    let a = Predicate::from("(x > 2) && (y == 4) && (z < 10)").unwrap();
    let b = Predicate::from("(x > 0) && (y > 2)").unwrap();

    assert_eq!(a.implies(&b), Implication::Total);
}

implies 函数可以返回 3 个不同的值:Implication::TotalImplication::PartialImplication::Inexistant

  • Total 蕴含意味着任何验证 A 的值也将验证 B。
  • Partial 蕴含意味着只有验证 A 的值的子集将验证 B。这可以发生在 Or 谓词上,其中只有两个谓词之一蕴含 B。
  • Inexistant 蕴含意味着 A 通过值 x 的验证不足以知道 x 也验证 B。

安装

将其添加到您的项目的最简单方法是使用 cargo。将其添加到您的 Cargo.toml 文件中

[dependencies]
predicatechecker = "0.5.1"

您还可以克隆此仓库并将其用于自己的项目(请参阅《Cargo 书》中的 指定依赖关系)。

许可证

本项目采用 Mozilla Public License 2.0 许可。请参阅 LICENSE.txt

依赖项

~465KB