Models as Values in a Model Expression Algebra: A Functional Approach to Model Driven Engineering
Sinisa Neskovic (IT University of Copenhagen, Copenhagen, Denmark), Dejan Stojimirovic (University of Belgrade, Faculty of Organizational Sciences, Belgrade, Serbia)

TL;DR
This paper introduces a unified, formal algebraic framework for model driven engineering, where models and transformations are expressed as values and terms within a type-safe functional language.
Contribution
It develops a novel model expression algebra that unifies models, metamodels, templates, and transformations under a single formalism with formal guarantees.
Findings
Proves type preservation and safety of model evaluation and transformation
Supports megamodels and weaving models without extra mechanisms
Demonstrates a domain-specific language embedding for practical use
Abstract
This paper proposes a functional foundation for model driven engineering that unifies model construction, metamodels, templates, and transformations under a single formalism: the model expression algebra. In this algebra, models are values, model expressions are terms, and evaluation is the interpretation homomorphism from terms to values. Model expressions are composed from four operators: model creation and element creation operators, reference operators for retrieving models and elements, and computation operators that embed functional computations. Metamodels are type schemas that constrain the algebra, and model templates, understood as parameterized model expressions, are formalized as open terms with free variables. Model transformations then arise naturally as model templates whose input parameter is a source model. We prove type preservation under evaluation and type safety of…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
