Zélus is a synchronous language extended with Ordinary Differential Equations (ODEs) to program hybrid systems that mix discrete-time and continuous-time models. An example is a (discrete-time) model of a control software paired with a (continuous-time) model of the plant. The language shares the basic principles of the synchronous languages Lustre with modularity features from Lucid Synchrone (type inference, hierarchical automata, and higher-order functions). It is conservatively extended to write continuous-time models expressed by ODEs and zero-crossing events. The compiler is written in OCaml and is structured as a series of source-to-source and traceable transformations that ultimately yield statically scheduled sequential code. Continuous-time models are simulated using an off-the-shelf numerical solver (here Sundials CVODE and, for the moment, the two built-in solvers ode23 and ode45).
Zélus is used for experimenting new ways to design and implement hybrid systems modeling languages and tools a la Simulink/Stateflow and Modelica. It reuses the principles and compilation techniques developed for synchronous languages, extending them to deal with models that mix discrete and continuous-time. The language provides three dedicated inference type systems that ensure important safety properties: (1) it rejects wrong combinations of discrete and continuous-time systems by ensuring that all discontinuities are aligned with zero-crossing or time events; (2) fix-point equations with instantaneous causality loops are statically rejected; (3) programs in which signals may depend on uninitialized values are statically rejected.
The language is experimental and it evolves continuously. The current active version is v2.
The compiler distribution includes runnable examples demons-trating different aspects of the language. The source code for several of the examples can be viewed online.