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)
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)
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)
def what_fnsymbols_used(prog: L4Contract) -> Iterable[str]: def f(t: Term): if isinstance(t, FnApp): yield t.fnsymb_name return prog.forEachTerm(f)