# ALGOREP: What is Model-Checking ? How to build a Model Checker ?
*Si on a un ping pong, comment on verifie que l'algo marche ?*
> On lance et un espere que ca marche?
> Non ca c'est etre religieux
:::danger
Il faut check toutes les relations et entralecements possibles (effets de bord, etc).
:::
:::success
Il faut faire des preuves automatiques
:::
On va prendre des outils capables d'en faire, en utilisant
- La **description** $\neq$ *implementation* du systeme distribue
- S'abstraire des pbs de langage
# Qu'est-ce qu'un systeme ?
On veut qu'une fusee n'explose pas en vol
# Why is a model required ?
On va considerer que TOUS les systemes qu'on etudie soit un systeme infini.
Le code suivant serveur peut etre considere un systeme:
```cpp=
unsigned received_= 0;
while (1)
{
accept_request();
received_ = received_ + 1 ;
reply_request();
}
```
:::success
Avec un modele, on enleve le probleme de `received_`
:::
![](https://i.imgur.com/1Y6k9jq.png)
## A more realistic example
On a une abstraction des differents comportements de notre systeme
![](https://i.imgur.com/pAtexf4.png)
On est capable de construire l'integralite du systeme. On veut faire le produit cartesien de tout le monde.
![](https://i.imgur.com/WS3YtPO.png)
A l'etat initial du systeme, tout le monde est dans l'etat $1$.
Pour passer de l'etat $111$ a l'etat $211$, on doit avoir en meme temps un message recu et en transit.
*Est-ce qu'on peut avoir 2 envois simultanement ?*
# Kripke structure
![](https://i.imgur.com/rqDYHuQ.png)
On definit un alphabet, un etat, une transition.
![](https://i.imgur.com/4hzeDyn.png)
![](https://i.imgur.com/Ufq8OxJ.png)
## Example
![](https://i.imgur.com/png8488.png)
:::info
On utilise des booleens qu'on appelle des **propositions atomiques**
:::
- On etiquete notre modele pour savoir si on peut atteindre un chemin
# How to express finite behavior ?
*Combien de propositions atomiques ?*
> 3 (rouge, orange, vert)
![](https://i.imgur.com/yU43i0J.png)
*Comment on exprime les comportements a l'infini ?*
> On utilise une logique
## Linear Temporal Logic
![](https://i.imgur.com/PULGKlU.png)
On s'interesse aux operateurs:
- $U$: "vrai jusqu'a qu'autre chose soit vrai"
- $X$: "a la prochaine etape c'est vrai"
## Globally
![](https://i.imgur.com/YE8Qz2F.png)
## Finally
![](https://i.imgur.com/3A8v1UD.png)
## Next
![](https://i.imgur.com/RbB1UJS.png)
## Until
![](https://i.imgur.com/BTqPeRe.png)
## Retour au feu rouge
![](https://i.imgur.com/eAFHerm.png)
![](https://i.imgur.com/GfvJgRZ.png)
# Automata for model checking
![](https://i.imgur.com/8S8W9ih.png)
:::info
**Buchi**: Transformer une logique d'evenement en automate
![](https://i.imgur.com/8mRO1xQ.png)
:::
## Express property automaton
![](https://i.imgur.com/9IApuvL.png)
## Automata approach for model checking
![](https://i.imgur.com/fiSh4ce.png)
On a reussi a creer un modele pour Aut. A et Kripke. On fait un produit synchronise
:::info
**Produit synchronise**
On a l'automate de la propriete
![](https://i.imgur.com/6P1LFsd.png)
On a l'automate du systeme. Quand on lit $d_1$ et $r_1$, on doit s'assurer de lire la meme chose dans notre systeme, on supprime les chemins qui font diverger ces valeurs, par le produit cartesien.
:::
![](https://i.imgur.com/JgsjEd4.png)
On regarde cette automate, si on trouve une pastille noir qui s'appelle en boucle, on a un contre-exemple a notre propriete.
![](https://i.imgur.com/BH8OjA1.png)
> La reponse est oui
![](https://i.imgur.com/m6Y3jyu.png)