private List<PExp> extractAssumptionsFromParameter(ProgParameterSymbol p) { List<PExp> resultingAssumptions = new ArrayList<>(); if (p.getDeclaredType() instanceof ProgNamedType) { // both PTFamily AND PTRepresentation are a PTNamed ProgNamedType declaredType = (ProgNamedType) p.getDeclaredType(); PExp exemplar = declaredType.getExemplarAsPSymbol(); if (declaredType instanceof ProgFamilyType) { PExp constraint = ((ProgFamilyType) declaredType).getConstraint(); constraint = constraint.substitute(getSpecializationsForFacility(p.getTypeQualifier())); resultingAssumptions.add( constraint.substitute( declaredType.getExemplarAsPSymbol(), p.asPSymbol())); // ASSUME TC (type constraint -- since we're conceptual) } else if (declaredType instanceof PTRepresentation) { ProgReprTypeSymbol repr = ((PTRepresentation) declaredType).getReprTypeSymbol(); PExp convention = repr.getConvention(); resultingAssumptions.add( convention.substitute(declaredType.getExemplarAsPSymbol(), p.asPSymbol())); // ASSUME RC (repr convention -- since we're a repr) resultingAssumptions.add(repr.getCorrespondence()); } } else { // PTGeneric // resultingAssumptions.add(g.formInitializationPredicate( // p.getDeclaredType(), p.getName())); } return resultingAssumptions; }