39 lines
1.1 KiB
Rust
39 lines
1.1 KiB
Rust
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(s(zero))), s(s(s(s(s(s(s(s(s(zero))))))))))".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());
|
|
//
|
|
}
|