Course 1 Author @ramizaouri
1. Automate à États Finis 1.1 Définition Une automate est un quintuplé A = ( V , Σ , q 0 , F , δ ) \mathcal{A}=(V,\Sigma,q_0,F,\delta) A = ( V , Σ , q 0 , F , δ ) avec:
V V V est l'ensemble d'états finisΣ \Sigma Σ est un ensemble finis représentant l'alphabet qui peut être exécuté par l'automateq 0 ∈ V q_0\in V q 0 ∈ V est l'état initial de l'automateF ⊆ V F \subseteq V F ⊆ V est l'ensemble des états finaux de l'automateδ ⊆ V × Σ × V \delta \subseteq V\times \Sigma \times V δ ⊆ V × Σ × V est la relation de transition1.2 Transition On dit que e = ( u , a , v ) e=(u,a,v) e = ( u , a , v ) est une transition si e ∈ δ e\in \delta e ∈ δ
Informellement, si l'automate est dans un état u u u et elle reçoit a a a , un des états possibles qu'elle peut passer à est l'état v v v
1.3 Automate déterministe Une automate déterministe est une automate A = ( V , Σ , q 0 , F , δ ) \mathcal{A}=(V,\Sigma,q_0,F,\delta) A = ( V , Σ , q 0 , F , δ ) est une automate dont laquelle δ \delta δ est une fonction partielle.
C'est à dire δ : T → V \delta:\mathcal{T}\rightarrow V δ : T → V est une fonction avec $\mathcal{T}\subseteq V\times \Sigma $
Informellement, c'est à dire que si l'automate est dans un état u u u et elle reçoit a a a , elle ne peut passer qu'au maximum un seul état, et ça doit être l'état δ ( u , a ) \delta(u,a) δ ( u , a )
1.4 Exécution, Chaîne & Langage Reconnu 1.4.1 Exécution Une exécution possible d'une automate de longueur n ∈ N ∗ n\in\mathbb{N}^* n ∈ N ∗ est un tuple E = ( u 0 , s 0 , u 1 , s 1 , … , u n − 1 , s n − 1 , u n ) \mathcal{E}=(u_0,s_0,u_1,s_1,\dots,u_{n-1},s_{n-1},u_n) E = ( u 0 , s 0 , u 1 , s 1 , … , u n − 1 , s n − 1 , u n ) avec:
u 0 = q 0 u_0=q_0 u 0 = q 0
∀ i ∈ { 0 , … , n } , u i ∈ V \forall i \in\{0,\dots,n\},\quad u_i\in V ∀ i ∈ { 0 , … , n } , u i ∈ V
∀ i ∈ { 0 , … , n − 1 } , s i ∈ Σ \forall i \in\{0,\dots,n-1\},\quad s_i\in \Sigma ∀ i ∈ { 0 , … , n − 1 } , s i ∈ Σ
∀ i ∈ { 1 , … , n } , ( u i − 1 , s i − 1 , u i ) ∈ δ \forall i\in\{1,\dots,n\},\quad (u_{i-1},s_{i-1},u_i)\in \delta ∀ i ∈ { 1 , … , n } , ( u i − 1 , s i − 1 , u i ) ∈ δ
u n ∈ F u_n\in F u n ∈ F
Toute autre séquence va être rejetée par l'automate
1.4.2 Chaîne et Langage Reconnue Une chaîne S = s 0 … s n − 1 ∈ Σ ∗ S=s_0\dots s_{n-1}\in\Sigma^* S = s 0 … s n − 1 ∈ Σ ∗ est reconnue par l'automate A \mathcal{A} A si il exécute une exécution E = ( u 0 , s 0 , u 1 , s 1 , … , u n − 1 , s n − 1 , u n ) \mathcal{E}=(u_0,s_0,u_1,s_1,\dots,u_{n-1},s_{n-1},u_n) E = ( u 0 , s 0 , u 1 , s 1 , … , u n − 1 , s n − 1 , u n )
Le langage reconnue L ⊆ Σ ∗ \mathcal{L}\subseteq \Sigma^* L ⊆ Σ ∗ par A \mathcal{A} A est l'ensemble de toutes les chaînes reconnues
1.5 Exemple L'exemple ci dessus représente une automate A = ( V , Σ , q 0 , F , δ ) \mathcal{A}=(V,\Sigma,q_0,F,\delta) A = ( V , Σ , q 0 , F , δ ) avec:
V = { 0 , 1 , 2 } V=\{0,1,2\} V = { 0 , 1 , 2 }
Σ = { a , b , c } \Sigma=\{a,b,c\} Σ = { a , b , c }
q 0 = 0 q_0=0 q 0 = 0
F = { 0 , 2 } F=\{0,2\} F = { 0 , 2 } représente les états finaux
δ \delta δ est représenté par:
( 1 , b , 1 ) (1,b,1) ( 1 , b , 1 ) et ( 1 , b , 2 ) (1,b,2) ( 1 , b , 2 ) sont deux transitions. L'automate n'est pas déterministe car il y a deux transitions possibles à partir de 1 1 1 avec le caractère b b b
Une exécution possible est: ( 0 , a , 1 , b , 1 , b , 2 , c , 0 ) (0,a,1,b,1,b,2,c,0) ( 0 , a , 1 , b , 1 , b , 2 , c , 0 ) , elle reconnaît la chaîne a b b c abbc abb c
Le langage reconnue par A \mathcal{A} A est représenté par l'expression régulière:
( a b + c ) ∗ ( a b + ) ? (ab^+c)^* (ab^+)^? ( a b + c ) ∗ ( a b + ) ? Démonstration
L 1 = b L 1 + b L 2 ⟹ L 1 = b ∗ b L 2 L 2 = c L 0 + ϵ L 0 = a L 1 + ϵ = a b + L 2 + ϵ = a b + c L 0 + a b + + ϵ ⟹ L 0 = ( a b + c ) ∗ ( a b + + ϵ ) = ( a b + c ) ∗ ( a b + ) ? \begin{align} L_1&=bL_1+bL_2\\ \implies L_1&=b^*bL_2\\ L_2&=cL_0+\epsilon\\ L_0&=aL_1+\epsilon\\ &= ab^+L_2+\epsilon\\ &=ab^+cL_0+ab^++\epsilon \\ \implies L_0&=(ab^+c)^* (ab^++\epsilon) \\ &=(ab^+c)^* (ab^+)^? \end{align} L 1 ⟹ L 1 L 2 L 0 ⟹ L 0 = b L 1 + b L 2 = b ∗ b L 2 = c L 0 + ϵ = a L 1 + ϵ = a b + L 2 + ϵ = a b + c L 0 + a b + + ϵ = ( a b + c ) ∗ ( a b + + ϵ ) = ( a b + c ) ∗ ( a b + ) ? 2. Produits D'automate 2.1 Définition Soit A 1 = ( V 1 , Σ 1 , q 1 , F 1 , δ 1 ) , A 2 = ( V 2 , Σ 2 , q 2 , F 2 , δ 2 ) \mathcal{A}_1=(V_1,\Sigma_1,q_1,F_1,\delta_1), \ \mathcal{A}_2=(V_2,\Sigma_2,q_2,F_2,\delta_2) A 1 = ( V 1 , Σ 1 , q 1 , F 1 , δ 1 ) , A 2 = ( V 2 , Σ 2 , q 2 , F 2 , δ 2 ) deux automates.
Le produit cartésien entre A 1 \mathcal{A}_1 A 1 et A 2 \mathcal{A}_2 A 2 est l'automate A 3 = ( V 3 , Σ 3 , q 3 , F 3 , δ 3 ) \mathcal{A}_3=(V_3,\Sigma_3,q_3,F_3,\delta_3) A 3 = ( V 3 , Σ 3 , q 3 , F 3 , δ 3 ) tels que:
V 3 = V 1 × V 2 V_3=V_1\times V_2 V 3 = V 1 × V 2
Σ 3 = Σ 1 ∪ Σ 2 \Sigma_3=\Sigma_1 \cup \Sigma_2 Σ 3 = Σ 1 ∪ Σ 2
$F_3=V_1\times F_2 \cup F_1\times V_2 $
q 3 = ( q 1 , q 2 ) q_3=(q_1,q_2) q 3 = ( q 1 , q 2 )
δ 3 \delta_3 δ 3 est définie par:
δ 3 ( ( u , u ′ ) , a , ( v , v ′ ) ) ⟺ δ 1 ( u , a , v ) and u ′ = v ′ or δ 2 ( u ′ , a , v ′ ) and u = v \delta_3\left((u,u'),a,(v,v')\right) \iff \delta_1(u,a,v) \ \text{and} \ u'=v' \ \text{or} \ \delta_2(u',a,v') \ \text{ and } u=v δ 3 ( ( u , u ′ ) , a , ( v , v ′ ) ) ⟺ δ 1 ( u , a , v ) and u ′ = v ′ or δ 2 ( u ′ , a , v ′ ) and u = v Informellement, le produit construit une automate "système" A 3 \mathcal{A}_3 A 3 représentant les deux automates ensembles.
Dans cette automate, le fonctionnement des deux sous-automates sont mutuellement indépendants.
C'est à dire, si A \mathcal{A} A subit une transition avec un caractère a a a , exactement un des deux automates va subir une transition avec ce caractère.
2.3 Exemple Le produit entre les deux automates est l'automate suivante:
3. Produits Synchronisés D'automates 3.1 Notations Soit A 1 = ( Σ 1 , V 1 , q 1 , δ 1 , F 1 ) , A 2 = ( Σ 2 , V 2 , q 2 , δ 2 , F 2 ) \mathcal{A}_1=(\Sigma_1,V_1,q_1,\delta_1,F_1),\mathcal{A}_2=(\Sigma_2,V_2,q_2,\delta_2,F_2) A 1 = ( Σ 1 , V 1 , q 1 , δ 1 , F 1 ) , A 2 = ( Σ 2 , V 2 , q 2 , δ 2 , F 2 ) deux automates
Soit Σ ∩ = Σ 1 ∩ Σ 2 \Sigma_\cap=\Sigma_1\cap\Sigma_2 Σ ∩ = Σ 1 ∩ Σ 2 l'alphabet commun entre les deux automates. C'est l'alphabet dont lequel on va appliquer la synchronisation
3.2 Définition La composition parallèle entre A 1 \mathcal{A}_1 A 1 et A 2 \mathcal{A}_2 A 2 est l'automate A 3 = ( Σ 3 , V 3 , q 3 , δ 3 , F 3 ) \mathcal{A}_3=(\Sigma_3,V_3,q_3,\delta_3,F_3) A 3 = ( Σ 3 , V 3 , q 3 , δ 3 , F 3 ) définie par:
Σ 3 = Σ 1 ∪ Σ 2 \Sigma_3=\Sigma_1\cup \Sigma_2 Σ 3 = Σ 1 ∪ Σ 2
q 3 = ( q 1 , q 2 ) q_3=(q_1,q_2) q 3 = ( q 1 , q 2 )
V 3 = V 1 × V 2 V_3=V_1\times V_2 V 3 = V 1 × V 2
F 3 = ( F 1 × V 2 ) ∪ ( V 1 × F 2 ) F_3=\left(F_1\times V_2\right)\cup \left(V_1\times F_2\right) F 3 = ( F 1 × V 2 ) ∪ ( V 1 × F 2 )
δ 3 \delta_3 δ 3 est définie par:
δ 3 ( ( u , u ′ ) , a , ( v , v ′ ) ) ⟺ one of the following: { [ δ 1 ( u , a , v ) and u ′ = v ′ or δ 2 ( u ′ , a , v ′ ) and u = v ] and a ∉ Σ ∩ δ 1 ( u , a , v ) and δ 2 ( u ′ , a , v ′ ) and a ∈ Σ ∩ \delta_3\left((u,u'),a,(v,v')\right) \iff \text{one of the following: } \begin{cases} \big[\delta_1(u,a,v) \ \text{and} \ u'=v' \ \text{or} \ \delta_2(u',a,v') \ \text{ and } u=v \big] \ \text{and} \ a\notin \Sigma_{\cap} \\ \delta_1(u,a,v) \ \text{and} \ \delta_2(u',a,v') \ \text{and} \ a\in \Sigma_\cap \end{cases} δ 3 ( ( u , u ′ ) , a , ( v , v ′ ) ) ⟺ one of the following: { [ δ 1 ( u , a , v ) and u ′ = v ′ or δ 2 ( u ′ , a , v ′ ) and u = v ] and a ∈ / Σ ∩ δ 1 ( u , a , v ) and δ 2 ( u ′ , a , v ′ ) and a ∈ Σ ∩ Informellement, le produit synchronisé construit une automate "système" A 3 \mathcal{A}_3 A 3 représentant les deux automates ensembles.
Dans cette automate, il y a des parties qui doivent être synchronisées, et des parties qui vont être exécutées indépendamment:
L'automate A \mathcal{A} A ne peut faire une transition en acceptant un caractère a a a de l'alphabet commun, que si chacune des deux automates A 1 \mathcal{A}_1 A 1 et A 2 \mathcal{A}_2 A 2 peut accepter a a a à partir de son état courant. Si le caractère a a a n'est pas commun, alors a ∈ Σ i a\in \Sigma_i a ∈ Σ i , dans ce cas, seul A i \mathcal{A}_i A i fait une transition avec a a a . Plus précisément:A i \mathcal{A}_i A i fait la transition en acceptant a a a à partir de son état courantA j \mathcal{A}_j A j reste invariant avec j ≠ i j\neq i j = i Cette construction peut être généralisé à plusieurs automates.
3.4 Exemple L'exemple ci dessus représente deux automate A 1 = ( V 1 , Σ 1 , q 1 , F 1 , δ 1 ) , A 2 = ( V 2 , Σ 2 , q 2 , F 2 , δ 2 ) \mathcal{A}_1=(V_1,\Sigma_1,q_1,F_1,\delta_1), \mathcal{A}_2=(V_2,\Sigma_2,q_2,F_2,\delta_2) A 1 = ( V 1 , Σ 1 , q 1 , F 1 , δ 1 ) , A 2 = ( V 2 , Σ 2 , q 2 , F 2 , δ 2 ) avec:
V 1 = { u 0 , u 1 , u 2 } V_1=\{u_0,u_1,u_2\} V 1 = { u 0 , u 1 , u 2 } , et V 2 = { v 0 , v 1 , v 2 } V_2=\{v_0,v_1,v_2\} V 2 = { v 0 , v 1 , v 2 } Σ 1 = { a , b , c } , Σ 2 = { b , d , e } \Sigma_1=\{a,b,c\}, \ \Sigma_2=\{b,d,e\} Σ 1 = { a , b , c } , Σ 2 = { b , d , e } et Σ ∩ = { b } \Sigma_\cap=\{b\} Σ ∩ = { b } q 1 = u 0 q_1=u_0 q 1 = u 0 et q 2 = v 0 q_2=v_0 q 2 = v 0 F 1 = { u 0 , u 2 } F_1=\{u_0,u_2\} F 1 = { u 0 , u 2 } et F 2 = { v 0 } F_2=\{v_0\} F 2 = { v 0 } Le produit synchronisé est:
Les transitions en verts sont les transitions synchrones.
4. Équivalence entre Graphe directe et Fonction booléenne 4.1 Notations Soit G = ( V , E ) \mathcal{G}=(\mathcal{V},\mathcal{E}) G = ( V , E ) un graphe directe fini avec E ⊆ V × V \mathcal{E}\subseteq \mathcal{V}\times \mathcal{V} E ⊆ V × V
Soit Adj ( u ) = { v ∈ V / ( u , v ) ∈ E } \text{Adj}(u)=\{v\in\mathcal{V} / \quad (u,v)\in\mathcal{E}\} Adj ( u ) = { v ∈ V / ( u , v ) ∈ E } la liste d'adjacence d'un nœud u ∈ V u\in\mathcal{V} u ∈ V
Soit n = ∣ V ∣ n=\lvert \mathcal{V}\vert n = ∣ V ∣ le nombre de nœuds dans G \mathcal{G} G . En particulier, pour la simplicité, on pose que n = 2 m n=2^m n = 2 m et V = { 0 , … , n − 1 } \mathcal{V}=\{0,\dots,n-1\} V = { 0 , … , n − 1 }
Pour k ∈ { 0 , … , 2 m − 1 } k\in\{0,\dots,2^m-1\} k ∈ { 0 , … , 2 m − 1 } , soit b k = b k , m − 1 … b k , 0 b_k=b_{k,m-1}\dots b_{k,0} b k = b k , m − 1 … b k , 0 la représentation binaire de k k k
Soit x 0 , … , x m − 1 , x ′ ∗ 0 , … , x ′ ∗ m − 1 x_0,\dots,x_{m-1},x'*0,\dots,x'*{m-1} x 0 , … , x m − 1 , x ′ ∗ 0 , … , x ′ ∗ m − 1 2 m 2m 2 m variables booléennes.
Soit e ( x , 0 ) = x e(x,0)=x e ( x , 0 ) = x et e ( x , 1 ) = x ˉ e(x,1)=\bar x e ( x , 1 ) = x ˉ
Soit F F F tel que:
F ( k , x 0 , … , x m − 1 ) = ∏ i = 0 m − 1 e ( x i , b k , i ) = ∏ b k , i = 0 x i × ∏ b k , i = 1 x ˉ i F(k,x_0,\dots,x_{m-1})=\prod_{i=0}^{m-1}e(x_i,b_{k,i})=\prod_{b_{k,i}=0}x_i \times \prod_{b_{k,i}=1}\bar x_i F ( k , x 0 , … , x m − 1 ) = i = 0 ∏ m − 1 e ( x i , b k , i ) = b k , i = 0 ∏ x i × b k , i = 1 ∏ x ˉ i 4.2 Fonction booléenne à partir d'un graphe On définit la fonction f f f par:
Adj f ( x 0 , … , x m − 1 , x ′ ∗ 1 , … , x ′ ∗ m − 1 ) = ∑ i = 0 n − 1 ∑ j ∈ Adj ( i ) F ( i , x 0 , … , x m − 1 ) × F ( j , x ′ ∗ 0 , … , x ′ ∗ m − 1 ) \text{Adj} f(x_0,\dots,x_{m-1},x'*1,\dots,x'*{m-1})=\sum_{i=0}^{n-1}\sum_{j\in\text{Adj} (i)} F(i,x_0,\dots,x_{m-1})\times F(j,x'*0,\dots,x'*{m-1}) Adj f ( x 0 , … , x m − 1 , x ′ ∗ 1 , … , x ′ ∗ m − 1 ) = i = 0 ∑ n − 1 j ∈ Adj ( i ) ∑ F ( i , x 0 , … , x m − 1 ) × F ( j , x ′ ∗ 0 , … , x ′ ∗ m − 1 ) Cette fonction binaire va encoder le graphe G \mathcal{G} G
Exemple 1 Soit G = ( V , E ) \mathcal{G}=(\mathcal{V},\mathcal{E}) G = ( V , E ) le graphe suivant:
On a m = 3 m=3 m = 3 , On construit le tableau de F F F
k k k Adj ( k ) \text{Adj}(k) Adj ( k ) b k b_k b k F ( k , x 0 , x 1 , x 2 ) F(k,x_0,x_1,x_2) F ( k , x 0 , x 1 , x 2 ) 0 0 0 { 1 , 2 } \{1,2\} { 1 , 2 } 000 000 000 x 0 x 1 x 2 x_0x_1x_2 x 0 x 1 x 2 1 1 1 { 3 , 4 } \{3,4\} { 3 , 4 } 001 001 001 x ˉ 0 x 1 x 2 \bar x_0x_1 x_2 x ˉ 0 x 1 x 2 2 2 2 { 5 , 6 } \{5,6\} { 5 , 6 } 010 010 010 x 0 x ˉ 1 x 2 x_0\bar x_1x_2 x 0 x ˉ 1 x 2 3 3 3 { 7 } \{7\} { 7 } 011 011 011 x ˉ 0 x ˉ 1 x 2 \bar x_0\bar x_1 x_2 x ˉ 0 x ˉ 1 x 2 4 4 4 ∅ \emptyset ∅ 100 100 100 x 0 x 1 x ˉ 2 x_0x_1\bar x_2 x 0 x 1 x ˉ 2 5 5 5 ∅ \emptyset ∅ 101 101 101 x ˉ 0 x 1 x ˉ 2 \bar x_0x_1\bar x_2 x ˉ 0 x 1 x ˉ 2 6 6 6 ∅ \emptyset ∅ 110 110 110 x 0 x ˉ 1 x ˉ 2 x_0\bar x_1\bar x_2 x 0 x ˉ 1 x ˉ 2 7 7 7 ∅ \emptyset ∅ 111 111 111 x ˉ 0 x ˉ 1 x ˉ 2 \bar x_0\bar x_1\bar x_2 x ˉ 0 x ˉ 1 x ˉ 2
Ainsi:
f ( x 0 , x 1 , x 2 , x 0 ′ , x 1 ′ , x ′ ∗ 2 ) = ∑ ∗ i = 0 7 ∑ j ∈ Adj ( i ) F ( i , x 0 , x 1 , x 2 ) × F ( j , x 0 ′ , x 1 ′ , x 2 ′ ) = ∑ i = 0 3 ∑ j ∈ Adj ( i ) F ( i , x 0 , x 1 , x 2 ) × F ( j , x 0 ′ , x 1 ′ , x 2 ′ ) = F ( 0 , x 0 , x 1 , x 2 ) × F ( 1 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 0 , x 0 , x 1 , x 2 ) × F ( 2 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 1 , x 0 , x 1 , x 2 ) × F ( 3 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 1 , x 0 , x 1 , x 2 ) × F ( 4 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 2 , x 0 , x 1 , x 2 ) × F ( 5 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 2 , x 0 , x 1 , x 2 ) × F ( 6 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 3 , x 0 , x 1 , x 2 ) × F ( 7 , x 0 ′ , x 1 ′ , x 2 ′ ) = x 0 x 1 x 2 x ˉ 0 ′ x 1 ′ x 2 ′ + x 0 x 1 x 2 x 0 ′ x ˉ 1 ′ x 2 ′ + x ˉ 0 x 1 x 2 x ˉ 0 ′ x ˉ 1 ′ x 2 ′ + x ˉ 0 x 1 x 2 x 0 ′ x 1 ′ x ˉ 2 ′ + x 0 x ˉ 1 x 2 x ˉ 0 ′ x 1 ′ x ˉ 2 ′ + x 0 x ˉ 1 x 2 x 0 ′ x ˉ 1 ′ x ˉ 2 ′ + x ˉ 0 x ˉ 1 x 2 x ˉ 0 ′ x ˉ 1 ′ x ˉ 2 ′ \begin{align} f(x_0,x_1,x_2,x'_0,x'_1,x'*2)&=\sum*{i=0}^{7}\sum_{j\in\text{Adj} (i)} F(i,x_0,x_1,x_2)\times F(j,x'_0,x'_1,x'_2) \\ &=\sum_{i=0}^{3}\sum_{j\in\text{Adj} (i)} F(i,x_0,x_1,x_2)\times F(j,x'_0,x'_1,x'_2) \\ &= F(0,x_0,x_1,x_2)\times F(1,x'_0,x'_1,x'_2)+F(0,x_0,x_1,x_2)\times F(2,x'_0,x'_1,x'_2) \\ & + F(1,x_0,x_1,x_2)\times F(3,x'_0,x'_1,x'_2) +F(1,x_0,x_1,x_2)\times F(4,x'_0,x'_1,x'_2) \\ &+F(2,x_0,x_1,x_2)\times F(5,x'_0,x'_1,x'_2) +F(2,x_0,x_1,x_2)\times F(6,x'_0,x'_1,x'_2) \\ &+F(3,x_0,x_1,x_2)\times F(7,x'_0,x'_1,x'_2) \\ &=x_0x_1x_2\bar x'_0x'_1 x'_2 + x_0x_1x_2x'_0\bar x'_1x'_2+\bar x_0x_1 x_2\bar x'_0\bar x'_1 x'_2+\bar x_0x_1 x_2 x'_0x'_1 \bar x'_2\\ &+x_0\bar x_1x_2\bar x'_0x'_1\bar x'_2+ x_0\bar x_1x_2 x'_0\bar x'_1\bar x'_2+\bar x_0\bar x_1 x_2\bar x'_0\bar x'_1 \bar x'_2 \end{align} f ( x 0 , x 1 , x 2 , x 0 ′ , x 1 ′ , x ′ ∗ 2 ) = ∑ ∗ i = 0 7 j ∈ Adj ( i ) ∑ F ( i , x 0 , x 1 , x 2 ) × F ( j , x 0 ′ , x 1 ′ , x 2 ′ ) = i = 0 ∑ 3 j ∈ Adj ( i ) ∑ F ( i , x 0 , x 1 , x 2 ) × F ( j , x 0 ′ , x 1 ′ , x 2 ′ ) = F ( 0 , x 0 , x 1 , x 2 ) × F ( 1 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 0 , x 0 , x 1 , x 2 ) × F ( 2 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 1 , x 0 , x 1 , x 2 ) × F ( 3 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 1 , x 0 , x 1 , x 2 ) × F ( 4 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 2 , x 0 , x 1 , x 2 ) × F ( 5 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 2 , x 0 , x 1 , x 2 ) × F ( 6 , x 0 ′ , x 1 ′ , x 2 ′ ) + F ( 3 , x 0 , x 1 , x 2 ) × F ( 7 , x 0 ′ , x 1 ′ , x 2 ′ ) = x 0 x 1 x 2 x ˉ 0 ′ x 1 ′ x 2 ′ + x 0 x 1 x 2 x 0 ′ x ˉ 1 ′ x 2 ′ + x ˉ 0 x 1 x 2 x ˉ 0 ′ x ˉ 1 ′ x 2 ′ + x ˉ 0 x 1 x 2 x 0 ′ x 1 ′ x ˉ 2 ′ + x 0 x ˉ 1 x 2 x ˉ 0 ′ x 1 ′ x ˉ 2 ′ + x 0 x ˉ 1 x 2 x 0 ′ x ˉ 1 ′ x ˉ 2 ′ + x ˉ 0 x ˉ 1 x 2 x ˉ 0 ′ x ˉ 1 ′ x ˉ 2 ′ 4.3 Graphe à partir d'une fonction booléenne Soit f f f une fonction booléenne à 2 m 2m 2 m variables
Soit n = 2 m n=2^m n = 2 m et V = { 0 , … , n − 1 } \mathcal{V}=\{0,\dots,n-1\} V = { 0 , … , n − 1 }
On va construire le graphe G \mathcal{G} G à partir de f f f
Pour cela on va calculer sa matrice d'adjacence M M M en utilisant la propriété suivante:
M i , j = f ( b i , 0 , … , b i , m − 1 , b j , 0 , … , b j , m − 1 ) M_{i,j}=f(b_{i,0},\dots,b_{i,m-1},b_{j,0},\dots,b_{j,m-1}) M i , j = f ( b i , 0 , … , b i , m − 1 , b j , 0 , … , b j , m − 1 ) À partir de la matrice M M M on peut construire la liste des arêtes E \mathcal{E} E et par suite le graphe G = ( V , E ) \mathcal{G}=(\mathcal{V},\mathcal{E}) G = ( V , E )
Exemple 2 Soit f ( x 0 , x 1 , x 0 ′ , x 1 ′ ) = x 0 x 1 ′ + x 1 x 0 ′ f(x_0,x_1,x'_0,x'_1)=x_0x'_1+x_1x'_0 f ( x 0 , x 1 , x 0 ′ , x 1 ′ ) = x 0 x 1 ′ + x 1 x 0 ′
On génère la table de f f f
x 0 x_0 x 0 x 1 x_1 x 1 x 0 ′ x'_0 x 0 ′ x 1 ′ x'_1 x 1 ′ f f f 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1
On a donc:
M = ( f ( 0 , 0 , 0 , 0 ) f ( 0 , 0 , 1 , 0 ) f ( 0 , 0 , 0 , 1 ) f ( 0 , 0 , 1 , 1 ) f ( 1 , 0 , 0 , 0 ) f ( 1 , 0 , 1 , 0 ) f ( 1 , 0 , 0 , 1 ) f ( 1 , 0 , 1 , 1 ) f ( 0 , 1 , 0 , 0 ) f ( 0 , 1 , 1 , 0 ) f ( 0 , 1 , 0 , 1 ) f ( 0 , 1 , 1 , 1 ) f ( 1 , 1 , 0 , 0 ) f ( 1 , 1 , 1 , 0 ) f ( 1 , 1 , 0 , 1 ) f ( 1 , 1 , 1 , 1 ) ) = ( 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 ) \begin{align}M &= \begin{pmatrix}f(0,0,0,0) & f(0,0,1,0) & f(0,0,0,1) & f(0,0,1,1) \\ f(1,0,0,0) & f(1,0,1,0) & f(1,0,0,1) & f(1,0,1,1) \\ f(0,1,0,0) & f(0,1,1,0) & f(0,1,0,1) & f(0,1,1,1) \\ f(1,1,0,0) & f(1,1,1,0) & f(1,1,0,1) & f(1,1,1,1) \end{pmatrix} \\ &= \begin{pmatrix}0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 1 \\ 0 & 1 & 0 & 1 \\ 0 & 1 & 1 & 1 \end{pmatrix} \end{align} M = ⎝ ⎛ f ( 0 , 0 , 0 , 0 ) f ( 1 , 0 , 0 , 0 ) f ( 0 , 1 , 0 , 0 ) f ( 1 , 1 , 0 , 0 ) f ( 0 , 0 , 1 , 0 ) f ( 1 , 0 , 1 , 0 ) f ( 0 , 1 , 1 , 0 ) f ( 1 , 1 , 1 , 0 ) f ( 0 , 0 , 0 , 1 ) f ( 1 , 0 , 0 , 1 ) f ( 0 , 1 , 0 , 1 ) f ( 1 , 1 , 0 , 1 ) f ( 0 , 0 , 1 , 1 ) f ( 1 , 0 , 1 , 1 ) f ( 0 , 1 , 1 , 1 ) f ( 1 , 1 , 1 , 1 ) ⎠ ⎞ = ⎝ ⎛ 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 ⎠ ⎞ Ainsi, le graphe G \mathcal{G} G est donc le suivant:
5. BDD à Partir d'une fonction booléenne Toute fonction booléenne f f f avec un nombre fini n n n de variables booléennes peut être implémenté avec une arbre de décision.
Cependant, la taille d'une telle arbre peut être exponentielle en n n n . Pour cela, on doit représenter f f f sous une forme compacte. La solution est d'utiliser un Binary Decision Diagram
5.1 Cas d'étude: f ( x , y , z ) = ( x ⊕ y ⊕ z ) + x ˉ y z f(x,y,z)=(x\oplus y\oplus z) +\bar xyz f ( x , y , z ) = ( x ⊕ y ⊕ z ) + x ˉ yz Pour introduire les BDDs, nous allons étudier la fonction booléenne:
f ( x , y , z ) = ( x ⊕ y ⊕ z ) + x ˉ y z f(x,y,z)=(x\oplus y\oplus z) +\bar xyz f ( x , y , z ) = ( x ⊕ y ⊕ z ) + x ˉ yz Avec ⊕ \oplus ⊕ est l'opérateur XOR \texttt{XOR} XOR
5.2 Génération de la table x y z f 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 0 1 1 1 1
5.3 Création d'un ordre sur les variables En général, la BDD dépend de l'ordre utilisée sur les variables.
Dans notre cas on va utiliser l'ordre: x > y > z x>y>z x > y > z
5.4 Arbre de Décision 5.5 Construction de BDD 5.5.1 Définition d'arbres isomorphes Deux arbres binaires T 1 , T 2 \mathcal{T}_1,\mathcal{T}_2 T 1 , T 2 sont isomorphes lorsque:
Elles portent sur une même variable Les sous-arbres left ( T 1 ) \text{left}(T_1) left ( T 1 ) et left ( T 2 ) \text{left}(T_2) left ( T 2 ) sont isomorphes Les sous-arbres right ( T 1 ) \text{right}(T_1) right ( T 1 ) et right ( T 2 ) \text{right}(T_2) right ( T 2 ) sont isomorphes On convient que deux arbre nulles sont isomorphes
5.5.2 Supprimer les liaisons redondantes Dans l'arbre de décision, la deuxième sous arbre (de gauche à droite) labellé par z z z est redondante car elle donne toujours le même résultat 1 1 1
On doit la supprimer
En effet, un arbre T \mathcal{T} T est redondante si left ( T ) \text{left}(\mathcal{T}) left ( T ) et right ( T ) \text{right}(\mathcal{T}) right ( T ) sont isomorphes. Dans ce cas on peut supprimer la redondance en:
Mettant la racine de l'arbre à left ( T ) \text{left}(\mathcal{T}) left ( T ) Si T \mathcal{T} T est un fils de T ′ \mathcal{T}' T ′ , alors on remplace aussi T \mathcal{T} T par left ( T ) \text{left}(\mathcal{T}) left ( T ) Cette technique va être appliquer itérativement.
5.5.3 Regrouper les sous-arbres isomorphes Cette technique regroupe chaque groupe d'arbre isomorphes, par un seul représentant.
Elle va être appliquée récursivement (ou itérativement):
Itération 1 On remarque qu'il y a deux sous arbres portant sur z z z qui sont isomorphes
Ceux sont l'arbre la plus à gauche et l'arbre la plus à droite. Elle représente la même logique, donc on peut remplacer chacune par le même représentant.
Itération 2 On remarque que les arbres portant 0 0 0 sont isomorphes
Itération 3 On remarque que les arbres portant sur 1 1 1 sont isomorphes