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)
예제 #2
0
파일: ivy_transrel.py 프로젝트: odedp/ivy
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)
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
파일: ivy_graph.py 프로젝트: asyaf/ivy
    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])
예제 #6
0
 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])