{ "cells": [ { "cell_type": "markdown", "id": "bc2df244", "metadata": {}, "source": [ "# Welcome to Stormvogel!\n", "\n", "\n", "This notebook provides an introduction to the stormvogel project, a first example, and pointers to further material. We recommend to also look at\n", "\n", "- The source code, hosted at [Github](https://github.com/stormchecker/stormvogel)\n", "- The python packages, hosted at [Pypi](https://pypi.org/project/stormvogel/)\n", "- User documentation, which includes this notebook [Docs](https://stormchecker.github.io/stormvogel/)\n", "- Reach out to us at our [Discord Server](https://discord.gg/byeKSasJY6)\n" ] }, { "cell_type": "markdown", "id": "d89194b1", "metadata": {}, "source": [ "## Installing with pip\n", "\n", "The easiest way to install stormvogel is by pip:\n", "```\n", "pip install stormvogel\n", "pip install stormpy # Optional, for efficient model checking algorithms\n", "```" ] }, { "cell_type": "markdown", "id": "23e9d31d", "metadata": {}, "source": [ "## Running the Docker container\n", "\n", "Another way to run stormvogel is by running our [Docker](https://www.docker.com) container on your local machine.\n", "```\n", "docker pull stormvogel/stormvogel\n", "docker run -it -p 8080:8080 stormvogel/stormvogel\n", "```\n", "\n", "See the GitHub repository for more advanced installation options." ] }, { "cell_type": "markdown", "id": "b8074c5d", "metadata": {}, "source": [ "## What is probabilistic model checking?\n", "\n", "### Qualitative model checking\n", "Model checking, in this context, refers to methods and techniques to exhaustively analyze whether a model of system behavior satisfies a given formal specification. For the (initial) development of such techniques, Clarke, Emerson and Sifakis were awarded the ACM Turing Award in 2007. Specifically, these models are typically state-based formalism that describe the dynamics of a system, such as a hardware circuit or a computer program. Simple specifications ask: *Is it possible to reach this error state?*, *Is it possible to simultaneously open the microwave while it is active?*, *Can one throw 3 sixes in a row?* etc. Traditionally, the outcome is a yes/no answer, but typically, model checking techniques output some kind of witness that certifies why the answer is yes or provides a counterexample when the answer is no.\n", "\n", "Below we have a toy model of a car. The idea is that the car always choose whether to 'wait' (that is, continue driving), or to 'brake'. This car does not satisfy the specification to never reach the state 'accident' as a driver could choose to consistently continue driving." ] }, { "cell_type": "code", "execution_count": 1, "id": "15c73405", "metadata": { "execution": { "iopub.execute_input": "2026-03-26T10:47:23.382487Z", "iopub.status.busy": "2026-03-26T10:47:23.382221Z", "iopub.status.idle": "2026-03-26T10:47:23.776470Z", "shell.execute_reply": "2026-03-26T10:47:23.775838Z" }, "jupyter": { "is_executing": true } }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "