use of suite.node.Node in project suite by stupidsing.
the class FindPredicates method elaborate.
private Stack<Node> elaborate(Prover prover, Node var, Node goal) {
Stack<Node> stack = new Stack<>();
Tree subGoal = Tree.of(TermOp.AND___, goal, new Data<Source<Boolean>>(() -> {
stack.push(new Cloner().clone(var));
return Boolean.FALSE;
}));
new Prover(prover).elaborate(subGoal);
return stack;
}
use of suite.node.Node in project suite by stupidsing.
the class SystemPredicates method call.
public Boolean call(Node query) {
BuiltinPredicate predicate;
Tree tree;
Operator op;
Node left;
String name = null;
Node pass = null;
if (query instanceof Atom) {
name = ((Atom) query).name;
pass = Atom.NIL;
} else if ((tree = Tree.decompose(query)) != null)
if ((op = tree.getOperator()) != TermOp.TUPLE_) {
name = op.getName();
pass = query;
} else if ((left = tree.getLeft()) instanceof Atom) {
name = ((Atom) left).name;
pass = tree.getRight();
}
predicate = name != null ? get(name) : null;
return predicate != null ? predicate.prove(prover, pass) : null;
}
use of suite.node.Node in project suite by stupidsing.
the class FindUtil method collectList.
public static List<Node> collectList(Finder finder, Node in) {
List<Node> nodes = new ArrayList<>();
finder.find(To.source(in), node -> nodes.add(new Cloner().clone(node)));
return nodes;
}
use of suite.node.Node in project suite by stupidsing.
the class SewingProverBuilder method build.
@Override
public Fun<Node, Finder> build(RuleSet ruleSet) {
ProverFactory sewingProver = new SewingProverImpl(ruleSet);
return goal -> {
Node goal1 = SewingGeneralizerImpl.generalize(goal);
Prove_ pred = sewingProver.prover(goal1);
return (source, sink) -> {
ProverConfig proverConfig1 = new ProverConfig(ruleSet, proverConfig);
proverConfig1.setSource(source);
proverConfig1.setSink(sink);
pred.test(proverConfig1);
};
};
}
use of suite.node.Node in project suite by stupidsing.
the class SewingProverBuilder2 method build.
@Override
public Fun<Node, Finder> build(RuleSet ruleSet) {
boolean isRewrite = !proverConfig.isTrace();
QueryRewriter qr = isRewrite ? new QueryRewriter(Prototype.multimap(ruleSet)) : null;
RuleSet ruleSet1;
if (qr != null) {
ruleSet1 = Suite.newRuleSet();
qr.rules().entries().forEach(p -> ruleSet1.addRule(p.t1));
} else
ruleSet1 = ruleSet;
Fun<Node, Finder> fun = new SewingProverBuilder(proverConfig).build(ruleSet1);
if (qr != null)
return goal -> fun.apply(qr.rewriteClause(goal));
else
return fun;
}
Aggregations