crestdsl 0.5.2
A Continuous REactive SysTems DSL


<p align="center">
<img src="/docs/assets/crestlogo.svg" />
</p>

# **CREST** - A Continuous REactive SysTems DSL

[![Build Status](https://travis-ci.org/crestdsl/CREST.svg?branch=master)](https://travis-ci.org/crestdsl/CREST) 
[![PyPI](https://img.shields.io/pypi/v/crestdsl.svg?color=blue)](https://pypi.org/project/crestdsl/)
[![Documentation Status](https://readthedocs.org/projects/crestdsl/badge/?version=latest)](https://crestdsl.readthedocs.io/?badge=latest)
[![codecov](https://codecov.io/gh/crestdsl/CREST/branch/master/graph/badge.svg)](https://codecov.io/gh/crestdsl/CREST)
(I know, I know, I'm really busy though...)

[![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/crestdsl/CREST/master)
<-- Launch this repository and play with CREST directly in your browser!

---

## Introduction

CREST is a novel modelling language for the definition of Continuous-time, REactive SysTems.
It is a domain-specific language (DSL) targets small cyber-physical systems (CPS) such as home automation systems.
Specifically, it focusses on the flow and transfer of resources within a CPS.
While CREST is a graphical language and its systems can be visualised as CREST diagrams, 
the main form of use is as internal DSL for the Python general purpose programming language.


## Try me !

CREST uses [Docker](https://www.docker.com/), [Jupyter](https://jupyter.org) notebooks and [Binder](https://mybinder.readthedocs.io/en/latest/) to create, edit and simulate interactive models online.

You can try CREST yourself by clicking on [this link](https://mybinder.org/v2/gh/crestdsl/CREST/master) (or on the "launch binder" badge above).

You will find several notebooks that will introduce CREST's
[Syntax & Semantics](https://mybinder.org/v2/gh/crestdsl/CREST/master?filepath=Syntax-Semantics.ipynb) and [Simulation](https://mybinder.org/v2/gh/stklik/CREST/master?filepath=Simulation.ipynb).
You can also just launch the docker container on binder (click the badge) and create a new notebook. 
You can then create and simulate your own models.


## Installation

**Recommended:** Download/clone this repository and use the sources.
The easiest way is to use the latest version of CREST is to either launch it on Binder (see above),
or create a local Docker image (`scripts/docker-build.sh`) and then run it (`scripts/docker-run.sh`).
Alternatively you can use [`repo2docker`](https://github.com/jupyter/repo2docker).

**Local install:** You can also use CREST locally and install the dependencies manually. See the [Dockerfile](./Dockerfile) for information about the tools and libraries that are used. CREST also requires Microsoft's [Z3Prover](https://github.com/Z3Prover) to be installed (including the Python API).

**Soon:** A pip-install is in the pipelines but has been delayed due to publication season :-)


---

## Publications

<details>
    <summary>
 Stefan Klikovits, Auélien Coet and Didier Buchs:
        <b>ML4CREST: Machine Learning for CPS Models </b>.
        2nd International Workshop on Model Driven Engineering for the Internet-of-Things (MDE4IOT), Copenhagen, 2018
    </summary>
    <pre>
@InProceedings{Klikovits:MDE4IOT:ML4CREST,
    title = {{ML4CREST}: Machine Learning for CPS Models},
    author = {Stefan Klikovits and Aur\'{e}lien Coet and Didier Buchs},
    booktitle = {2nd International Workshop on Model Driven Engineering for the Internet-of-Things (MDE4IOT), Copenhagen, Denmark, October 15, 2018. Proceedings},
    year = {2018},
}
    </pre>
</details>

<details>
    <summary>
 Stefan Klikovits, Alban Linard and Didier Buchs:
        <b>CREST - A DSL for Reactive Cyber-Physical Systems</b>.
        10th System Analysis and Modeling Conference (SAM) 2018
    </summary>
    <pre>
@InProceedings{Klikovits:SAM18:CREST,
    title = {{CREST} - A {DSL} for Reactive Cyber-Physical Systems},
    author = {Stefan Klikovits and Alban Linard and Didier Buchs},
    booktitle = {10th International System Analysis and Modeling Conference (SAM 2018), Copenhagen, Denmark, October 15-16, 2018. Proceedings},
    year = {2018},
    pages = {29-45},
    isbn = {978-3-030-01041-6}
}
    </pre>
</details>

<details>
<summary>
Stefan Klikovits, Alban Linard, and Didier Buchs: 
    <b>CREST Formalization</b>. 
Technical Report. Software Modeling and Verification Group, University of Geneva. 2018
</summary>
<pre>
@techreport{Klikovits:CRESTFormalization:2018,
    author = {Stefan Klikovits and Alban Linard and Didier Buchs},
    title = {{CREST} Formalization},
    institution = {Software Modeling and Verification Group, University of Geneva},
    doi = {10.5281/zenodo.1284561},
    year = {2018}
}
</pre>
</details>


<details>
<summary>
    Stefan Klikovits, Alban Linard, Didier Buchs:
    <b>CREST - A Continuous, REactive SysTems DSL</b>. 
    MODELS (Satellite Events) 2017: 286-291
</summary>
<pre>
@inproceedings{Klikovits:CREST:Gemoc:2017,
  author    = {Stefan Klikovits and
               Alban Linard and
               Didier Buchs},
  title     = {{CREST} - {A} Continuous, REactive SysTems {DSL}},
  booktitle = {Proceedings of {MODELS} 2017 Satellite Event: Workshops (ModComp,
               ME, EXE, COMMitMDE, MRT, MULTI, GEMOC, MoDeVVa, MDETools, FlexMDE,
               MDEbug), Posters, Doctoral Symposium, Educator Symposium, {ACM} Student
               Research Competition, and Tools and Demonstrations co-located with
               {ACM/IEEE} 20th International Conference on Model Driven Engineering
               Languages and Systems {(MODELS} 2017), Austin, TX, USA, September,
               17, 2017.},
  pages     = {286--291},
  year      = {2017},
  url       = {http://ceur-ws.org/Vol-2019/gemoc\_2.pdf}
}
</pre>
</details>

---

### Thanks
 * to Prof. Didier Buchs and the University of Geneva or enabling me to do this research project
 * to the [Jupyterhub](https://github.com/orgs/jupyterhub/people) and [Binder](https://mybinder.org) teams for providing their amazing service