use picolog::ast::Body; use picolog::ast::Module; fn main() { env_logger::builder() .filter_level(log::LevelFilter::Debug) .format_timestamp(None) .init(); //println!("{:#?}", Module::parse_from_file("1.pl")); let module: Module = " integer(zero). integer(s(X)) :- integer(X). add(X, zero, X). add(X, s(Y), Z) :- add(s(X), Y, Z). mult(zero, X, zero). mult(s(Y), X, Z) :- mult(Y, X, W), add(W, X, Z). " .into(); //let prop: Body = "integer(s(X))".into(); let prop: Body = "mult(X, s(s(zero)), s(s(s(s(zero)))))".into(); //let prop: Body = "mult(X, Y, Z)".into(); //let prop: Body = "mult(s(s(zero)), s(s(zero)), X)".into(); for c in module.prove(&prop) { println!("true:"); println!("{}", c.simplified()); let _ = std::io::stdin().read_line(&mut String::new()); } // let p: Predicate = "add(s(zero), zero, Y)".into(); // let p1: Predicate = "add(X, zero, X)".into(); // // let p: Predicate = "integer(s(zero))".into(); // // let p1: Predicate = "integer(s(X))".into(); // println!("{}", p.matches(&p1).unwrap()); // }