use of at.ac.tuwien.kr.alpha.api.programs.NormalProgram in project Alpha by alpha-asp.
the class ArithmeticTermsRewritingTest method rewriteRule.
@Test
public void rewriteRule() {
NormalProgram inputProgram = NormalProgramImpl.fromInputProgram(parser.parse("p(X+1) :- q(Y/2), r(f(X*2),Y), X-2 = Y*3, X = 0..9."));
assertEquals(1, inputProgram.getRules().size());
ArithmeticTermsRewriting arithmeticTermsRewriting = new ArithmeticTermsRewriting();
NormalProgram rewrittenProgram = arithmeticTermsRewriting.apply(inputProgram);
// Expect the rewritten program to be one rule with: p(_A0) :- _A0 = X+1, _A1 = Y/2, q(_A1), _A2 = X*2, r(f(_A2),Y), X-2 = Y*3, X = 0..9.
assertEquals(1, rewrittenProgram.getRules().size());
NormalRule rewrittenRule = rewrittenProgram.getRules().get(0);
assertTrue(rewrittenRule.getHeadAtom().getTerms().get(0) instanceof VariableTerm);
assertEquals(7, rewrittenRule.getBody().size());
}
use of at.ac.tuwien.kr.alpha.api.programs.NormalProgram in project Alpha by alpha-asp.
the class ArithmeticTermsRewritingTest method rewriteExternalAtom.
@Test
public void rewriteExternalAtom() {
NormalProgram inputProgram = NormalProgramImpl.fromInputProgram(parser.parse("p :- Y = 13, &extArithTest[Y*5](Y-4)."));
assertEquals(1, inputProgram.getRules().size());
ArithmeticTermsRewriting arithmeticTermsRewriting = new ArithmeticTermsRewriting();
NormalProgram rewrittenProgram = arithmeticTermsRewriting.apply(inputProgram);
assertEquals(1, rewrittenProgram.getRules().size());
NormalRule rewrittenRule = rewrittenProgram.getRules().get(0);
assertEquals(4, rewrittenRule.getBody().size());
List<Literal> externalLiterals = rewrittenRule.getBody().stream().filter(lit -> lit instanceof ExternalLiteral).collect(toList());
assertEquals(1, externalLiterals.size());
ExternalAtom rewrittenExternal = ((ExternalLiteral) externalLiterals.get(0)).getAtom();
assertEquals(1, rewrittenExternal.getInput().size());
assertTrue(rewrittenExternal.getInput().get(0) instanceof VariableTerm);
assertEquals(1, rewrittenExternal.getOutput().size());
assertTrue(rewrittenExternal.getOutput().get(0) instanceof VariableTerm);
}
use of at.ac.tuwien.kr.alpha.api.programs.NormalProgram in project Alpha by alpha-asp.
the class NaiveGrounderTest method groundConstraintAlreadyGround.
/**
* Asserts that a ground constraint whose positive body is not satisfied by the empty assignment
* is grounded immediately.
*/
@Test
public void groundConstraintAlreadyGround() {
ASPCore2Program program = PROGRAM_PARSER.parse("a :- not b. " + "b :- not a. " + ":- b.");
NormalProgram normal = NORMALIZE_TRANSFORM.apply(program);
InternalProgram prog = new StratifiedEvaluation().apply(AnalyzedProgram.analyzeNormalProgram(normal));
AtomStore atomStore = new AtomStoreImpl();
Grounder grounder = GrounderFactory.getInstance("naive", prog, atomStore, true);
Map<Integer, NoGood> noGoods = grounder.getNoGoods(new TrailAssignment(atomStore));
int litB = Literals.atomToLiteral(atomStore.get(PROGRAM_PART_PARSER.parseBasicAtom("b")));
assertTrue(noGoods.containsValue(NoGood.fromConstraint(Collections.singletonList(litB), Collections.emptyList())));
}
use of at.ac.tuwien.kr.alpha.api.programs.NormalProgram in project Alpha by alpha-asp.
the class NaiveGrounderTest method groundRuleWithLongerBodyAlreadyGround.
/**
* Asserts that a ground rule whose positive non-unary body is not satisfied by the empty assignment
* is grounded immediately.
*/
@Test
public void groundRuleWithLongerBodyAlreadyGround() {
ASPCore2Program program = PROGRAM_PARSER.parse("a :- not b. " + "b :- not a. " + "c :- b. " + "d :- b, c. ");
NormalProgram normal = NORMALIZE_TRANSFORM.apply(program);
InternalProgram prog = new StratifiedEvaluation().apply(AnalyzedProgram.analyzeNormalProgram(normal));
AtomStore atomStore = new AtomStoreImpl();
Grounder grounder = GrounderFactory.getInstance("naive", prog, atomStore, true);
Map<Integer, NoGood> noGoods = grounder.getNoGoods(new TrailAssignment(atomStore));
int litANeg = Literals.atomToLiteral(atomStore.get(PROGRAM_PART_PARSER.parseBasicAtom("a")), false);
int litBNeg = Literals.atomToLiteral(atomStore.get(PROGRAM_PART_PARSER.parseBasicAtom("b")), false);
int litCNeg = Literals.atomToLiteral(atomStore.get(PROGRAM_PART_PARSER.parseBasicAtom("c")), false);
int litDNeg = Literals.atomToLiteral(atomStore.get(PROGRAM_PART_PARSER.parseBasicAtom("d")), false);
assertExistsNoGoodContaining(noGoods.values(), litANeg);
assertExistsNoGoodContaining(noGoods.values(), litBNeg);
assertExistsNoGoodContaining(noGoods.values(), litCNeg);
assertExistsNoGoodContaining(noGoods.values(), litDNeg);
}
use of at.ac.tuwien.kr.alpha.api.programs.NormalProgram in project Alpha by alpha-asp.
the class TestUtils method buildSolverFromSystemConfig.
private static Solver buildSolverFromSystemConfig(ASPCore2Program prog, SystemConfig cfg) {
AtomStore atomStore = new AtomStoreImpl();
NormalProgram normalProg = new NormalizeProgramTransformation(cfg.getAggregateRewritingConfig()).apply(prog);
InternalProgram preprocessed = cfg.isEvaluateStratifiedPart() ? new StratifiedEvaluation().apply(AnalyzedProgram.analyzeNormalProgram(normalProg)) : InternalProgram.fromNormalProgram(normalProg);
return SolverFactory.getInstance(cfg, atomStore, GrounderFactory.getInstance(cfg.getGrounderName(), preprocessed, atomStore, cfg.isDebugInternalChecks()));
}
Aggregations