use notation::Formula;
use std::{collections::HashMap, io::Error};
pub fn syntactic_algorithm(formula: Formula) -> Result<bool, Error>{
let mut _formula = formula.clone();
let mut interpretation: HashMap<i32, bool> = HashMap::new();
for literal in &formula.literals {
println!("Enter value for literal {} in the interpretation: ", literal);
let mut input = String::new();
std::io::stdin().read_line(&mut input).unwrap();
let input: bool = input.trim().parse().unwrap();
interpretation.insert(*literal, input);
}
for clause in &mut _formula.clauses {
for literal in &mut clause.literals {
if interpretation.contains_key(&literal.value) {
if interpretation[&literal.value] {
literal.negated = false;
} else {
literal.negated = true;
}
}
}
}
let mut value: bool = true;
for clause in &mut _formula.clauses {
let mut _clausal_value: bool = true;
for literal in &mut clause.literals {
if literal.negated {
_clausal_value = false;
}
}
value = value && _clausal_value;
}
Ok(value)
}