5个版本
0.1.4 | 2023年11月22日 |
---|---|
0.1.3 | 2023年10月12日 |
0.1.2 | 2023年10月12日 |
0.1.1 | 2023年10月12日 |
0.1.0 | 2023年10月12日 |
#335 in 数学
每月48次下载
33KB
844 行
什么是dis?
这是一个简单的命题到值,或者说是命题包。如果您想模拟一个逻辑系统,该系统产生的值取决于系统后续评估的解释,则它将完美运行。每个命题都是递归定义的,这意味着一个元素本身也可以是一个命题。
命题系统
本包的第一部分是一个逻辑命题系统,具有预定义的逻辑结构。每个定义的命题都可以评估(或解释)和否定。
示例
至少命题
定义至少为2的命题如下
use std::rc::Rc;
let at_least = AtLeast {
variables: vec![
Rc::new( Proposition::Variable( Variable {id: String::from("a") } ) ),
Rc::new( Proposition::Variable( Variable {id: String::from("b") } ) ),
Rc::new( Proposition::Variable( Variable {id: String::from("c") } ) ),
],
at_least: 2,
id: None,
};
// Trying out different interpretations
// Only "a" should result in 0 or false
assert_eq!(
implication_proposition.interpret(
&interit! {
String::from("a") => 1.0
}
),
0.0
);
// "a" and "b" should result in 1 or true
assert_eq!(
implication_proposition.interpret(
&interit! {
String::from("a") => 1.0
}
),
1.0
);
定义一个"如果a和b,则x,y和z"的命题如下
### Implication proposition
```rust
use std::rc::Rc;
let implication_proposition = Implies {
left: Rc::new (
Proposition::And(
And {
variables: vec![
Rc::new( Proposition::Variable( Variable {id: String::from("a") } ) ),
Rc::new( Proposition::Variable( Variable {id: String::from("b") } ) ),
],
id: None,
}
)
),
right: Rc::new (
Proposition::And(
And {
variables: vec![
Rc::new( Proposition::Variable( Variable {id: String::from("x") } ) ),
Rc::new( Proposition::Variable( Variable {id: String::from("y") } ) ),
Rc::new( Proposition::Variable( Variable {id: String::from("z") } ) ),
],
id: None,
}
)
),
id: None,
};
assert_eq!(
implication_proposition.interpret(
&interit! {
String::from("a") => 0.0
}
),
1.0
);
assert_eq!(
implication_proposition.interpret(
&interit! {
String::from("a") => 1.0,
String::from("b") => 1.0
}
),
0.0
);
assert_eq!(
implication_proposition.interpret(
&interit! {
String::from("a") => 1.0,
String::from("b") => 1.0,
String::from("x") => 1.0,
String::from("y") => 1.0,
String::from("z") => 1.0
}
),
1.0
);
依赖关系
~0.8–1.4MB
~33K SLoC