Пример #1
0
def what_fnsymbols_used2(prog: L4Contract) -> Iterable[str]:
    pred = lambda t: isinstance(t, FnApp)

    def f(t: FnApp):
        if isinstance(t, FnApp):
            yield t.fnsymb_name

    return prog.forEach(pred, f)
Пример #2
0
def what_fnsymbol_arity_pairs_used(
        prog: L4Contract) -> Iterable[Tuple[str, int]]:
    pred = lambda t: isinstance(t, FnApp)

    def f(t: FnApp):
        # if isinstance(t, FnApp):
        yield (t.fnsymb_name, len(t.args))

    return prog.forEach(pred, f)
Пример #3
0
def what_sorts_used_explicitly(prog: L4Contract) -> Iterable[Sort]:
    def f(t: Term):
        if isinstance(t, SortLit):
            yield t.lit
        elif isinstance(t, (LocalVar, StateVar)):
            yield t.vardec.sort
        elif isinstance(t, ActionBoundActionParam):
            yield t.action.param_sorts_by_name[t.name]
        elif isinstance(t, ContractParam):
            yield t.paramdec.sort
        elif isinstance(t, RuleBoundActionParam):
            assert isinstance(t.action_id, str), type(t.action_id)
            action = prog.action(t.action_id)
            yield action.param_sort(t.ind)

    return prog.forEachTerm(f)
Пример #4
0
def what_fnsymbols_used(prog: L4Contract) -> Iterable[str]:
    def f(t: Term):
        if isinstance(t, FnApp):
            yield t.fnsymb_name

    return prog.forEachTerm(f)