Conception formelle

Modèle abstrait / modèle concret

Exercice 1 : porte XOR

Écrire un module XOR_SPEC(a,b,c) tel que c vaut a xor b. Ajouter un module XOR_IMPL(a,b,c) qui met en œuvre une porte XOR selon le schéma ci-dessous, en réutilisant les module AND et OR réalisés précédemment.

Écrire un module main et une spécification LTL qui s'assure que XOR_IMPL est bien une mise en œuvre de XOR_SPEC.

Vérifier que XOR_IMPL réalise une porte XOR en utilisant directement une spécification LTL, sans recourir au module XOR_SPEC.

Exercice 2 : additionneur 1 bit

Écrire un module ADD1(a,b,ci,s,co) qui met en œuvre l'additioneur 1 bit ci-dessous. Les opérateurs xor et nand seront mis en œuvre par des modules implémentant ces fonctions logiques (on réutilisera le module XOR_IMPL de l'exercice précédent).

    procedure add1(a,b,ci : in bit; s, co : out bit) is
    begin
      s := (a xor b) xor ci;
      co := (a nand b) nand (ci nand (a xor b));
    end
  

Spécifier en LTL les propriétés attendues concernant les sorties s et co de l'algorithme. Vérifier que votre modèle satisfait la spécification.

Exercice 3 : additioneur série 3 bits

Réutiliser le modèle précédent pour construire un additionneur 3 bits série. Spécifier les propriétés attendues en LTL, et vérifier que votre modèle satisfait cette spécification.

Modèles à états

Exercice 4 : missionnaires et cannibales

Trois missionnaires et trois cannibales sont sur la même rive d'un fleuve qu'ils souhaitent traverser. Pour cela, ils peuvent utiliser une barque qui peut contenir au plus 2 personnes. La barque ne peut pas traverser la rivière lorsqu'elle est vide. Si les cannibales sont plus nombreux que les missionnaires sur l'une ou l'autre rive, ils les dévorent (ce que l'on souhaite éviter).

Télécharger le fichier missionaries_and_cannibals.smv. Pourquoi cette spécification LTL permet-elle d'obtenir une stratégie gagnante? Que se passe-t-il à la vérification du modèle? Modéliser le mouvement des missionnaires et des cannibales. On ignorera dans un premier temps la contrainte de nombre.

Exercise 5 : feux routiers

On considère une intersection avec 3 feux routiers. L'objectif est de concevoir un contrôleur des 3 feux qui garantit la sécurité et l'accessibilité de l'intersection. La sécurité consiste à s'assurer qu'au plus un des 3 feux est vert. L'accessibilité requiert que si un véhicule attend, alors son feu finit par passer au vert.

Télécharger le fichier crossing1.smv. Il s'agit d'une première version (erronée) du modèle pour laquelle on souhaite vérifier l'accessibilité de l'intersection.

  1. Vérifier ce modèle et expliquer les contre-exemples obtenus. Suggérer une correction du modèle.
  2. Vérifier le nouveau modèle obtenu. Expliquer le nouveau contre-exemple. Proposer une modification du modèle.
  3. Maintenant que l'accessibilité de l'intersection est vérifiée, on souhaite vérifier sa sécurité. On ajoute la spécification ci-dessous. Explique le contre-exemple obtenu et proposer un correction du modèle.
  4. LTLSPEC
      G (  ! (lights[1] = GREEN & lights[2] = GREEN)
          & ! (lights[1] = GREEN & lights[3] = GREEN)
          & ! (lights[2] = GREEN & lights[3] = GREEN));
        
  5. La propriété de sécurité est satisfaite, mais ce sont à nouveaux les propriétés d'accessibilités qui ne le sont plus. Analyser les contre-exemples et proposer une correction du modèle.
  6. Le modèle obtenu satisfait toutes ses spécifications. Que pouvez-vous conclure sur une mise en œuvre du contrôleur?