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)
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__()
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
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
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