| Crates.io | boolean-logic |
| lib.rs | boolean-logic |
| version | 0.1.3 |
| created_at | 2024-10-27 08:35:55.569302+00 |
| updated_at | 2024-10-27 10:26:09.989022+00 |
| description | propositional logic evaluator that creates truth tables for propositional expressions |
| homepage | https://github.com/KhaledHosseini/propositional-logic |
| repository | https://github.com/KhaledHosseini/propositional-logic |
| max_upload_size | |
| id | 1424419 |
| size | 5,845,291 |
Supported operators and symbols:
not, ¬, !, ∼and, &, &&, ∧or, |, ||, ∨xor, ⊕->, =>, ⇒, →, ⊃<->, <=>, ⇔, ↔, iff, xnor=, ==, eq, ≡!=, ≠(), {}, []1, true, True0, false, Falsea-z, A-ZNote: the order of evaluation of operators are: not, and, or, xor, →, ↔, ≡ and ≠. Please use parentheses in order to adjust the operator priorities. incorrect expressions result in wrong tables.
Note: Characters are case sensetive. for example q is not the same as Q.
Example:
P ∨ (Q ∧ R) ≡ (P ∨ Q) ∧ (P ∨ R) or P or (Q and R) == (P or Q) and (P or R)| P | Q | R | (Q ∧ R) | (P ∨ (Q ∧ R)) | (P ∨ Q) | (P ∨ R) | ((P ∨ Q) ∧ (P ∨ R)) | ((P ∨ (Q ∧ R)) ≡ ((P ∨ Q) ∧ (P ∨ R))) |
|---|---|---|---|---|---|---|---|---|
| true | true | true | true | true | true | true | true | true |
| true | true | false | false | true | true | true | true | true |
| true | false | true | false | true | true | true | true | true |
| true | false | false | false | true | true | true | true | true |
| false | true | true | true | true | true | true | true | true |
| false | true | false | false | false | true | false | false | true |
| false | false | true | false | false | false | true | false | true |
| false | false | false | false | false | false | false | false | true |
(P ∧ (∼ Q)) ⇔ (P ⇒ Q) or (P and (not Q) <-> (P -> Q))| P | Q | ¬Q | (P ∧ ¬Q) | (P → Q) | ((P ∧ ¬Q) ↔ (P → Q)) |
|---|---|---|---|---|---|
| true | true | false | false | true | false |
| true | false | true | true | false | false |
| false | true | false | false | true | false |
| false | false | true | false | true | false |
not true or not false| P | Q | ¬P | ¬Q | (¬P ∨ ¬Q) |
|---|---|---|---|---|
| false | true | true | false | true |
rust. see here for the instructions.cargo run to run the app.cargo test to run the tests.You can export the truth tables to one of the following formats or print it to terminal.
let s = "(P and not Q) <-> (P -> Q)";//"(P ∧ (∼ Q)) ⇔ (P ⇒ Q)";
let tokens = Tokens::from_text(s);
match Evaluator::new(tokens) {
Ok(evaluator) => {
match evaluator.evaluate_all() {
Ok(result) => {
print!("{}\n",result);
// result.save_to_html("test.html");
// result.save_to_csv("test.csv");
// result.save_to_pdf("test.pdf");
},
Err(error) => {
println!("{}",error);
},
}
},
Err(er) => {
println!("{}",er);
},
}
Or you can evaluate for specific values for P and Q only.
let s = "(∼ P) ∨ (∼ Q)";
let tokens = Tokens::from_text(s);
let evaluator = Evaluator::new(tokens).unwrap();
let mut values = IndexMap::<char,bool>::new();
values.insert('P', false);
values.insert('Q', true);
let mut result = evaluator.evaluate(&values).unwrap();
for v in values.iter().rev() {
result.insert_before(0, (*v.0).into(), *v.1);
}
let result = evaluator_result::EvaluatorResult{result:vec![result]};
println!("{}",result);
// result.save_to_html("test.html");
// result.save_to_csv("test.csv");
// result.save_to_pdf("test.pdf");