OUT(s,i)
s(t+ε) = NEXT(s(t), i(t), ε)
NEXT(s,i), OUT(s,i)
Sortie (OUT)
EtatSuivant (NEXT)
Exemple : accepteur de ABA
NEXT | A | B | C |
1 | 3 | 1 | 1 |
2 | 3 | 1 | 1 |
3 | 3 | 2 | 1 |
OUT | A | B | C |
1 | 0 | 0 | 0 |
2 | 1 | 0 | 0 |
3 | 0 | 0 | 0 |
NEXT | A | B | C |
rien | a | rien | rien |
ab | a | rien | rien |
a | a | ab | rien |
OUT | A | B | C |
rien | 0 | 0 | 0 |
ab | 1 | 0 | 0 |
a | 0 | 0 | 0 |
Deux états sont équivalents si leurs sorties sont les mêmes et leurs états suivants sont équivalents.
Exemple :
NEXT | A | B | C |
1 | 4 | 1 | 1 |
2 | 3 | 1 | 1 |
3 | 4 | 2 | 1 |
4 | 3 | 2 | 1 |
OUT | A | B | C |
1 | 0 | 0 | 0 |
2 | 1 | 0 | 0 |
3 | 0 | 0 | 0 |
4 | 0 | 0 | 0 |
3 et 4 sont équivalents.
Exemple :
NEXT | A | B | C |
1 | 1 | 2 | 3 |
2 | 4 | 5 | 6 |
3 | 7 | 8 | 9 |
4 | 1 | 2 | 3 |
5 | 4 | 5 | 6 |
6 | 7 | 8 | 9 |
7 | 1 | 2 | 3 |
8 | 4 | 5 | 6 |
9 | 7 | 8 | 9 |
OUT | A | B | C |
1 | 0 | 0 | 0 |
2 | 1 | 0 | 0 |
3 | 0 | 0 | 0 |
4 | 0 | 0 | 0 |
5 | 0 | 0 | 0 |
6 | 0 | 0 | 0 |
7 | 0 | 0 | 0 |
8 | 0 | 0 | 0 |
9 | 0 | 0 | 0 |
états 1, 4, 7 sont équivalents
états 3, 6, 9 sont équivalents
états 5 et 8 sont équivalents
Construisez l’accepteur de ABA ou BAB (il devra produire 1 chaque fois lorsque ABA est reconnu, 2 lorsque BAB est reconnu et rien dans les autres cas).
NEXT: {((‘s, i), s’) | (i = A ∧ s’ = 3) ∨ ((((i = B) ∧ (‘s ≠ 3)) ∨ (i = C)) ∧ (s’ = 1)) ∨ ((i = B) ∧ (‘s = 3) ∧ (s’ = 2)) } OUT: {(‘s, i), out) | (i = A ∧ ‘s = 2 ∧ out = 1) ∨ (¬(i = A ∧ ‘s = 2) ∧ out = 0) }
Les prédicats peuvent être utilisés pour tester l’implémentation.
1. et 2. sont des "boîtes transparentes" ("clear box")
3. et 4. sont des "boîtes noires" ("black box")
3. n’est pas applicable de façon générale
3. est un cas spécial de 4.
Classe de mode : Fonctionnement
Modes dans la classe : Opération, Arrêt, Attente, Test
Mode | Événement | |||
Opération | x | EnArr | x | EnTest |
Arrêt | EnOp1 | x | EnAtt1 | EnTest |
Attente | EnOp2 | x | x | EnTest |
Test | x | x | EnAtt2 | x |
Action = | Opération | Arrêt | Attente | Test |
EnOp1 = @T(LimMinEau < LimiteEau < LimMaxEau) WHEN
(Durée(EnMode(Arrêt)) < TempsVerrouillage) ∧ (TestBouton ≠ appuyé)
EnOp2 = @T(Durée(ResetBouton = appuyé) ≥ 3 s) WHEN
(LimMinEau < LimiteEau < LimMaxEau)
EnArr = @F(DansLimites) WHEN (TestBouton ≠ appuyé)
EnAtt1 = @T(Durée(EnMode(Arrêt)) ≥ TempsVerrouillage) WHEN
(TestBouton ≠ appuyé)
EnAtt2 = @T(Durée(EnMode(Test)) = 14 s)
EnTest = @T(Durée(TestBouton = appuyé) ≥ 500 ms)