Exemple #1
0
def ivy_compile(decls, mod=None, create_isolate=True, **kwargs):
    mod = mod or im.module
    with mod.sig:
        check_instantiations(mod, decls)
        for name in decls.defined:
            mod.add_to_hierarchy(name)
        infer_parameters(decls.decls)
        with TopContext(collect_actions(decls.decls)):
            IvyDomainSetup(mod)(decls)
            IvyConjectureSetup(mod)(decls)
            IvyARGSetup(mod)(decls)
        mod.macros = decls.macros
        # progress properties are not state symbols -- remove from sig
        for p in mod.progress:
            remove_symbol(p.defines())
        mod.type_check()
        # try instantiating all the actions to type check them
        for name, action in mod.actions.iteritems():
            #            print "checking: {} = {}".format(name,action)
            type_check_action(action, mod)
            if not hasattr(action, 'lineno'):
                print "no lineno: {}".format(name)
            assert hasattr(action, 'formal_params'), action

            # print "actions:"
            # for x,y in mod.actions.iteritems():
            #     print iu.pretty("action {} = {}".format(x,y))

        if create_isolate:
            iso.create_isolate(isolate.get(), mod, **kwargs)
Exemple #2
0
def ivy_compile(decls,mod=None,create_isolate=True,**kwargs):
    mod = mod or im.module
    with mod.sig:
        check_instantiations(mod,decls)
        for name in decls.defined:
            mod.add_to_hierarchy(name)
#        infer_parameters(decls.decls)
        with TopContext(collect_actions(decls.decls)):
            IvyDomainSetup(mod)(decls)
            IvyConjectureSetup(mod)(decls)
            IvyARGSetup(mod)(decls)
        mod.macros = decls.macros
        # progress properties are not state symbols -- remove from sig
        for p in mod.progress:
            remove_symbol(p.defines())
        mod.type_check()
        # try instantiating all the actions to type check them
        for name,action in mod.actions.iteritems():
#            print "checking: {} = {}".format(name,action)
            type_check_action(action,mod)
            if not hasattr(action,'lineno'):
                print "no lineno: {}".format(name)
            assert hasattr(action,'formal_params'), action
    
            # print "actions:"
            # for x,y in mod.actions.iteritems():
            #     print iu.pretty("action {} = {}".format(x,y))

        if create_isolate:
            iso.create_isolate(isolate.get(),mod,**kwargs)
            im.module.labeled_axioms.extend(im.module.labeled_props)
            im.module.theory_context().__enter__()
Exemple #3
0
def ivy_compile(ag, decls):
    with ag.domain.sig:
        ag.init_cond = true_clauses()
        for name in decls.defined:
            ag.domain.add_to_hierarchy(name)
        with TopContext(collect_actions(decls.decls)):
            IvyDomainSetup(ag.domain)(decls)
            IvyARGSetup(ag)(decls)
        ag.domain.macros = decls.macros
        if not ag.states:
            ac = ag.context
            with ac:
                if ag.predicates:
                    if not ag.init_cond.is_true():
                        raise IvyError(
                            None,
                            "init and state declarations are not compatible")
                    for n, p in ag.predicates.iteritems():
                        s = eval_state_facts(p)
                        if s is not None:
                            s.label = n
                else:
                    ac.new_state(ag.init_cond)
        ag.domain.type_check()
        # try instantiating all the actions to type check them
        for name, action in ag.actions.iteritems():
            #            print "checking: {} = {}".format(name,action)
            type_check_action(action, ag.domain, ag.states[0].in_scope)
            if not hasattr(action, 'lineno'):
                print "no lineno: {}".format(name)
            assert hasattr(action, 'formal_params'), action
        iso = isolate.get()
        if iso:
            isolate_component(ag, iso)
        else:
            # apply all the mixins in no particular order
            for name, mixins in ag.mixins.iteritems():
                for mixin in mixins:
                    action1, action2 = (lookup_action(mixin, ag, a.relname)
                                        for a in mixin.args)
                    mixed = ivy_actions.mixin_before(mixin, action1, action2)
                    ag.actions[mixin.args[1].relname] = mixed
            # find the globally exported actions (all if none specified, for compat)
            if ag.exports:
                ag.public_actions = set()
                for e in ag.exports:
                    if not e.scope():  # global export
                        ag.public_actions.add(e.exported())
            else:
                for a in ag.actions:
                    ag.public_actions.add(a)

            print "actions:"
            for x, y in ag.actions.iteritems():
                print iu.pretty("action {} = {}".format(x, y))

    ivy_logic.sig = ag.domain.sig  # TODO: make this an environment
Exemple #4
0
def ivy_compile(ag,decls):
    ag.actions = {}
    ag.predicates = {}
    ag.assertions = []
    ag.mixins = defaultdict(list)
    ag.domain.clear()
    ag.public_actions = set()
    ag.isolates = {}
    ag.exports = []
    ag.delegates = []
    with ag.domain.sig:
        ag.init_cond = true_clauses()
        for name in decls.defined:
            ag.domain.add_to_hierarchy(name)
        with TopContext(collect_actions(decls.decls)):
            IvyDomainSetup(ag.domain)(decls)
            IvyARGSetup(ag)(decls)
        ag.domain.macros = decls.macros
        if not ag.states:
            ac = ag.context
            with ac:
                if ag.predicates:
                    if not ag.init_cond.is_true():
                        raise IvyError(None,"init and state declarations are not compatible");
                    for n,p in ag.predicates.iteritems():
                        s = eval_state_facts(p)
                        if s is not None:
                            s.label = n
                else:
                    ac.new_state(ag.init_cond)
        ag.domain.type_check()
        # try instantiating all the actions to type check them
        for name,action in ag.actions.iteritems():
#            print "checking: {} = {}".format(name,action)
            type_check_action(action,ag.domain,ag.states[0].in_scope)
            if not hasattr(action,'lineno'):
                print "no lineno: {}".format(name)
        iso = isolate.get()
        if iso:
            isolate_component(ag,iso)
        else:
            # apply all the mixins in no particular order
            for name,mixins in ag.mixins.iteritems():
                for mixin in mixins:
                    action1,action2 = (lookup_action(mixin,ag,a.relname) for a in mixin.args)
                    mixed = ivy_actions.mixin_before(mixin,action1,action2)
                    ag.actions[mixin.args[1].relname] = mixed
            # find the globally exported actions (all if none specified, for compat)
            if ag.exports:
                ag.public_actions = set()
                for e in ag.exports:
                    if not e.scope(): # global export
                        ag.public_actions.add(e.exported())
            else:
                for a in ag.actions:
                    ag.public_actions.add(a)

            print "actions:"
            for x,y in ag.actions.iteritems():
                print iu.pretty("action {} = {}".format(x,y))


    ivy_logic.sig = ag.domain.sig # TODO: make this an environment
Exemple #5
0
def loop_action(action, mod):
    subst = dict((p, ivy_logic.Variable('Y' + p.name, p.sort))
                 for p in action.formal_params)
    action = lu.substitute_constants_ast(action, subst)
    ia.type_check_action(action, mod)  # make sure all is legal
    return action