package org.ggp.base.util.statemachine.implementation.prover.query; import java.util.HashSet; import java.util.List; import java.util.Set; import org.ggp.base.util.gdl.grammar.GdlPool; import org.ggp.base.util.gdl.grammar.GdlProposition; import org.ggp.base.util.gdl.grammar.GdlRelation; import org.ggp.base.util.gdl.grammar.GdlSentence; import org.ggp.base.util.gdl.grammar.GdlTerm; import org.ggp.base.util.gdl.grammar.GdlVariable; import org.ggp.base.util.statemachine.MachineState; import org.ggp.base.util.statemachine.Move; import org.ggp.base.util.statemachine.Role; public final class ProverQueryBuilder { private static final GdlRelation INIT_QUERY = GdlPool.getRelation(GdlPool.INIT, new GdlTerm[] { GdlPool.getVariable("?x") }); private static final GdlRelation NEXT_QUERY = GdlPool.getRelation(GdlPool.NEXT, new GdlTerm[] { GdlPool.getVariable("?x") }); private static final GdlRelation ROLE_QUERY = GdlPool.getRelation(GdlPool.ROLE, new GdlTerm[] { GdlPool.getVariable("?x") }); private static final GdlProposition TERMINAL_QUERY = GdlPool.getProposition(GdlPool.TERMINAL); private static final GdlVariable VARIABLE = GdlPool.getVariable("?x"); private ProverQueryBuilder() { } public static Set<GdlSentence> getContext(MachineState state) { return state.getContents(); } public static Set<GdlSentence> getContext(MachineState state, List<Role> roles, List<Move> moves) { Set<GdlSentence> context = new HashSet<GdlSentence>(state.getContents()); for (int i = 0; i < roles.size(); i++) { context.add(toDoes(roles.get(i), moves.get(i))); } return context; } public static GdlRelation getGoalQuery(Role role) { return GdlPool.getRelation(GdlPool.GOAL, new GdlTerm[] { role.getName(), VARIABLE }); } public static GdlRelation getInitQuery() { return INIT_QUERY; } public static GdlRelation getLegalQuery(Role role) { return GdlPool.getRelation(GdlPool.LEGAL, new GdlTerm[] { role.getName(), VARIABLE }); } public static GdlRelation getNextQuery() { return NEXT_QUERY; } public static GdlRelation getRoleQuery() { return ROLE_QUERY; } public static GdlProposition getTerminalQuery() { return TERMINAL_QUERY; } public static GdlRelation toDoes(Role role, Move move) { return GdlPool.getRelation(GdlPool.DOES, new GdlTerm[] { role.getName(), move.getContents() }); } }