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;
  }