public List<ModuleParameterSymbol> getAllModuleParameterSyms() {
   List<ModuleParameterSymbol> result = moduleScope.getSymbolsOfType(ModuleParameterSymbol.class);
   for (ModuleIdentifier e : moduleScope.getInheritedIdentifiers()) {
     try {
       ModuleScopeBuilder s = symtab.getModuleScope(e);
       result.addAll(s.getSymbolsOfType(ModuleParameterSymbol.class));
     } catch (NoSuchModuleException e1) { // should've been caught a long time ago
       throw new RuntimeException(e1);
     }
   }
   return result;
 }
 private Set<PExp> getModuleLevelAssertionsOfType(ClauseType type) {
   Set<PExp> result = new LinkedHashSet<>();
   List<GlobalMathAssertionSymbol> assertions = new LinkedList<>();
   List<FacilitySymbol> facilities = new LinkedList<>();
   try {
     assertions.addAll(
         moduleScope
             .query(
                 new SymbolTypeQuery<GlobalMathAssertionSymbol>(GlobalMathAssertionSymbol.class))
             .stream()
             .filter(e -> e.getClauseType() == type)
             .collect(Collectors.toList()));
     facilities.addAll(
         moduleScope.query(new SymbolTypeQuery<FacilitySymbol>(FacilitySymbol.class)));
   } catch (NoSuchModuleException | UnexpectedSymbolException e) {
   }
   return assertions
       .stream()
       .map(assertion -> substituteByFacilities(facilities, assertion))
       .collect(Collectors.toSet());
 }
  @Override
  public void enterTypeRepresentationDecl(ResolveParser.TypeRepresentationDeclContext ctx) {
    Scope s = symtab.getScope(ctx);
    currentTypeReprSym = null;
    try {
      currentTypeReprSym =
          moduleScope
              .queryForOne(new UnqualifiedNameQuery(ctx.name.getText()))
              .toProgReprTypeSymbol();
    } catch (SymbolTableException e) {
    }
    List<PExp> opParamAntecedents =
        getAssertionsFromModuleFormalParameters(
            getAllModuleParameterSyms(), this::extractAssumptionsFromParameter);

    VCAssertiveBlockBuilder block =
        new VCAssertiveBlockBuilder(g, s, "Well_Def_Corr_Hyp=" + ctx.name.getText(), ctx)
            .assume(opParamAntecedents)
            .assume(getModuleLevelAssertionsOfType(ClauseType.REQUIRES))
            .assume(currentTypeReprSym.getConvention());
    assertiveBlocks.push(block);
  }