Решается выходом на мета-уровень: модель объявляется первоклассным объектом, дальше компилируется набор декларативных (тут они называются non-causal) моделей, соответствующих разным состояниям моделируемой системы.
Функциональные языки, виртуальные машины, языки для компилирования в них программ на таких языках, как Modelica, и специальные языки для моделирования систем с изменяющейся структурой (Hydra).
Вот оно: пересечение программирования и моделирования. Программирование -- это про работу с языками и исполнение (даже если это исполнение "в каком-то смысле" -- например, компилирование вместо счета). Моделирование -- это когда нужно понять, как оно соответствует целевой системе.
Мне это представляется важным, чтобы моделировать жизненный цикл -- ведь система в ходе жизненного цикла меняет свою структуру, и нужно уметь это растолковать компьютеру. Статьи на тему структурно-динамических систем как раз про такие средства, но они еще не слишком стандартны. В стандартном уже языке Modelica это напрямую не выразишь, и нужно придумывать какие-то специальные приемы. Чем и займемся.
Программирование -- это про языки и их исполнение в разных смыслах. Моделирование -- про описание внешней предметной области. И не нужно путать одно с другим. Люди, которые работают с Eclipse Modeling Framework -- это программисты, а не модельеры...
А онтологи -- это декларативные модельеры. Но не программисты.