C'est la démarche inverse de celle présentée auparavant d'expansion des termes par leur définition complète.
Un concept du programme auquel on souhaite donner un nom symbolique est représenté textuellement (dans le texte lu sous l'éditeur) par ce nom symbolique. La technique s'apparente très nettement au procédé de macro-expansion qu'on trouve à côté d'un certain nombre de langages. Sa définition plus générale en permettrait aussi un emploi plus riche.
Par exemple, la pile générique est définie par :

Dans le texte de définition de la pile, il apparaît le nom symbolique "élément". A l'utilisation de la pile, le mécanisme d'instanciation demandera de compléter la partie « représentation » du symbole "élément" ; ce sera dans l'exemple "real", mais ceci n'apparaîtra pas dans le texte source qui définit la pile de réels tel qu'il est vu sous l'éditeur.
Par ce mécanisme on a tout loisir de paramétrer les objets que l'on construit par des constantes, des types, des traitements, des "bouts de phrases" du langage, ... indépendamment des possibilités offertes par le langage.
Les symboles à leur tour pourraient se construire selon les règles précédemment décrites. Par exemple, le type pile exporté est :

L'utilisateur décrit alors son type pile par :
![]()
("100" et "real" sont ici les paramètres d'instanciation). La distinction textuelle entre le symbole et sa représentation permet alors à l'utilisateur de progressivement dériver l'expression symbolique du problème en un programme exécutable en langage informatique, sans jamais perdre de vue les symboles qu'il dérive.