def compose_state_action(state, axioms, action, check=True): """ Compose a state and an action, returning a state """ # print "state: {}".format(state) # print "action: {}".format(action) su, sc, sp = state au, ac, ap = action sc, sp = clausify(sc), clausify(sp) if check: pre_test = and_clauses(and_clauses(sc, ap), axioms) model = small_model_clauses(pre_test) if model != None: trans = extract_pre_post_model(pre_test, model, au) post_updated = [new(s) for s in au] pre_test = exist_quant(post_updated, pre_test) raise ActionFailed(pre_test, trans) if su != None: # none means all moded ssu = set(su) # symbols already modified in state rn = dict((x, old(x)) for x in au if x not in ssu) sc = rename_clauses(sc, rn) ac = rename_clauses(ac, rn) su = list(su) union_to_list(su, au) img = forward_image(sc, axioms, action) ## print "compose: {}".format((su,img,sp)) return (su, img, sp)
def compose_state_action(state,axioms,action, check=True): """ Compose a state and an action, returning a state """ # print "state: {}".format(state) # print "action: {}".format(action) su,sc,sp = state au,ac,ap = action sc,sp = clausify(sc),clausify(sp) if check: pre_test = and_clauses(and_clauses(sc,ap),axioms) model = small_model_clauses(pre_test) if model != None: trans = extract_pre_post_model(pre_test,model,au) post_updated = [new(s) for s in au] pre_test = exist_quant(post_updated,pre_test) raise ActionFailed(pre_test,trans) if su != None: # none means all moded ssu = set(su) # symbols already modified in state rn = dict((x,old(x)) for x in au if x not in ssu) sc = rename_clauses(sc,rn) ac = rename_clauses(ac,rn) su = list(su) union_to_list(su,au) img = forward_image(sc,axioms,action) ## print "compose: {}".format((su,img,sp)) return (su,img,sp)
def compose_state_action(state, axioms, action, check=True): """ Compose a state and an action, returning a state """ # print "state: {}".format(state) # print "action: {}".format(action) su, sc, sp = state au, ac, ap = action sc, sp = clausify(sc), clausify(sp) if check: pre_test = and_clauses(and_clauses(sc, ap), axioms) if clauses_sat(pre_test): raise ActionFailed(pre_test) if su != None: # none means all moded ssu = set(su) # symbols already modified in state rn = dict((x, old(x)) for x in au if x not in ssu) sc = rename_clauses(sc, rn) ac = rename_clauses(ac, rn) su = list(su) union_to_list(su, au) img = forward_image(sc, axioms, action) ## print "compose: {}".format((su,img,sp)) return (su, img, sp)
def compose_state_action(state,axioms,action, check=True): """ Compose a state and an action, returning a state """ # print "state: {}".format(state) # print "action: {}".format(action) su,sc,sp = state au,ac,ap = action sc,sp = clausify(sc),clausify(sp) if check: pre_test = and_clauses(and_clauses(sc,ap),axioms) if clauses_sat(pre_test): raise ActionFailed(pre_test) if su != None: # none means all moded ssu = set(su) # symbols already modified in state rn = dict((x,old(x)) for x in au if x not in ssu) sc = rename_clauses(sc,rn) ac = rename_clauses(ac,rn) su = list(su) union_to_list(su,au) img = forward_image(sc,axioms,action) ## print "compose: {}".format((su,img,sp)) return (su,img,sp)
def get_predicates(self,clauses): # print "get_predicates: {}".format(clauses) d = self.parent_state.domain sig = d.sig urs = [x for x in used_unary_relations_clauses(clauses) if not is_skolem(x)] cs = [x for x in used_constants_clauses(clauses) if not is_skolem(x) and not has_enumerated_sort(sig,x) and not x.is_numeral()] ufs = [x for x in used_unary_functions_clauses(clauses) if not is_skolem(x) and has_enumerated_sort(sig,x)] nrs = [x for x,arity in d.relations.iteritems() if arity == 0] union_to_list(urs,[x for x,arity in d.relations.iteritems() if arity == 1]) union_to_list(cs,[x for x,arity in d.functions.iteritems() if arity == 0 and not has_enumerated_sort(sig,x)]) union_to_list(ufs,[x for x,arity in d.functions.iteritems() if arity == 1 and has_enumerated_sort(sig,x)]) # print "ufs: {}".format(ufs) ccs = [Constant(c) for c in cs] # print "sorts: {}".format([(c,c.get_sort()) for c in ccs]) return ([Literal(1,Atom(c,[])) for c in nrs] + [Literal(1,Atom(equals,[Variable("X",c.get_sort()),c])) for c in ccs] + [Literal(1,Atom(r,[Variable("X",r.sort.dom[0])])) for r in urs] + [(App(f,Variable('X',f.sort.dom[0])),[Constant(Symbol(x,f.sort.rng)) for x in f.sort.rng.defines()]) for f in ufs])
def get_predicates(self, clauses): # print "get_predicates: {}".format(clauses) d = self.parent_state.domain sig = d.sig urs = [ x for x in used_unary_relations_clauses(clauses) if not is_skolem(x) ] cs = [ x for x in used_constants_clauses(clauses) if not is_skolem(x) and not has_enumerated_sort(sig, x) and not x.is_numeral() ] ufs = [ x for x in used_unary_functions_clauses(clauses) if not is_skolem(x) and has_enumerated_sort(sig, x) ] nrs = [x for x, arity in d.relations.iteritems() if arity == 0] union_to_list( urs, [x for x, arity in d.relations.iteritems() if arity == 1]) union_to_list(cs, [ x for x, arity in d.functions.iteritems() if arity == 0 and not has_enumerated_sort(sig, x) ]) union_to_list(ufs, [ x for x, arity in d.functions.iteritems() if arity == 1 and has_enumerated_sort(sig, x) ]) # print "ufs: {}".format(ufs) ccs = [Constant(c) for c in cs] # print "sorts: {}".format([(c,c.get_sort()) for c in ccs]) return ([Literal(1, Atom(c, [])) for c in nrs] + [ Literal(1, Atom(equals, [Variable("X", c.get_sort()), c])) for c in ccs ] + [Literal(1, Atom(r, [Variable("X", r.sort.dom[0])])) for r in urs] + [(App(f, Variable('X', f.sort.dom[0])), [ Constant(Symbol(x, f.sort.rng)) for x in f.sort.rng.defines() ]) for f in ufs])