Skip to main content

Course 1

Author @ramizaouri

1. Automate à États Finis

1.1 Définition

Une automate est un quintuplé A=(V,Σ,q0,F,δ)\mathcal{A}=(V,\Sigma,q_0,F,\delta) avec:

  • VV est l'ensemble d'états finis
  • Σ\Sigma est un ensemble finis représentant l'alphabet qui peut être exécuté par l'automate
  • q0Vq_0\in V est l'état initial de l'automate
  • FVF \subseteq V est l'ensemble des états finaux de l'automate
  • δV×Σ×V\delta \subseteq V\times \Sigma \times V est la relation de transition

1.2 Transition

On dit que e=(u,a,v)e=(u,a,v) est une transition si eδe\in \delta

Informellement, si l'automate est dans un état uu et elle reçoit aa , un des états possibles qu'elle peut passer à est l'état vv

1.3 Automate déterministe

Une automate déterministe est une automate A=(V,Σ,q0,F,δ)\mathcal{A}=(V,\Sigma,q_0,F,\delta) est une automate dont laquelle δ\delta est une fonction partielle.

C'est à dire δ:TV\delta:\mathcal{T}\rightarrow V est une fonction avec $\mathcal{T}\subseteq V\times \Sigma $

Informellement, c'est à dire que si l'automate est dans un état uu et elle reçoit aa , elle ne peut passer qu'au maximum un seul état, et ça doit être l'état δ(u,a)\delta(u,a)

1.4 Exécution, Chaîne & Langage Reconnu

1.4.1 Exécution

Une exécution possible d'une automate de longueur nNn\in\mathbb{N}^* est un tuple E=(u0,s0,u1,s1,,un1,sn1,un)\mathcal{E}=(u_0,s_0,u_1,s_1,\dots,u_{n-1},s_{n-1},u_n) avec:

  • u0=q0u_0=q_0

  • i{0,,n},uiV\forall i \in\{0,\dots,n\},\quad u_i\in V

  • i{0,,n1},siΣ\forall i \in\{0,\dots,n-1\},\quad s_i\in \Sigma

  • i{1,,n},(ui1,si1,ui)δ\forall i\in\{1,\dots,n\},\quad (u_{i-1},s_{i-1},u_i)\in \delta

  • unFu_n\in F

Toute autre séquence va être rejetée par l'automate

1.4.2 Chaîne et Langage Reconnue

Une chaîne S=s0sn1ΣS=s_0\dots s_{n-1}\in\Sigma^* est reconnue par l'automate A\mathcal{A} si il exécute une exécution E=(u0,s0,u1,s1,,un1,sn1,un)\mathcal{E}=(u_0,s_0,u_1,s_1,\dots,u_{n-1},s_{n-1},u_n)

Le langage reconnue LΣ\mathcal{L}\subseteq \Sigma^* par A\mathcal{A} est l'ensemble de toutes les chaînes reconnues

1.5 Exemple

L'exemple ci dessus représente une automate A=(V,Σ,q0,F,δ)\mathcal{A}=(V,\Sigma,q_0,F,\delta) avec:

  • V={0,1,2}V=\{0,1,2\}

  • Σ={a,b,c}\Sigma=\{a,b,c\}

  • q0=0q_0=0

  • F={0,2}F=\{0,2\} représente les états finaux

  • δ\delta est représenté par:

    abc
    01
    11 ou 2
    20
  1. (1,b,1)(1,b,1) et (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 11 avec le caractère bb

  2. Une exécution possible est: (0,a,1,b,1,b,2,c,0)(0,a,1,b,1,b,2,c,0), elle reconnaît la chaîne abbcabbc

  3. Le langage reconnue par A\mathcal{A} est représenté par l'expression régulière:

(ab+c)(ab+)?(ab^+c)^* (ab^+)^?

Démonstration

L1=bL1+bL2    L1=bbL2L2=cL0+ϵL0=aL1+ϵ=ab+L2+ϵ=ab+cL0+ab++ϵ    L0=(ab+c)(ab++ϵ)=(ab+c)(ab+)?\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}

2. Produits D'automate

2.1 Définition

Soit A1=(V1,Σ1,q1,F1,δ1), A2=(V2,Σ2,q2,F2,δ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) deux automates.

Le produit cartésien entre A1\mathcal{A}_1 et A2\mathcal{A}_2 est l'automate A3=(V3,Σ3,q3,F3,δ3)\mathcal{A}_3=(V_3,\Sigma_3,q_3,F_3,\delta_3) tels que:

  • V3=V1×V2V_3=V_1\times V_2

  • Σ3=Σ1Σ2\Sigma_3=\Sigma_1 \cup \Sigma_2

  • $F_3=V_1\times F_2 \cup F_1\times V_2 $

  • q3=(q1,q2)q_3=(q_1,q_2)

  • δ3\delta_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

2.2 Explication Informelle

Informellement, le produit construit une automate "système" A3\mathcal{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} subit une transition avec un caractère aa, 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 A1=(Σ1,V1,q1,δ1,F1),A2=(Σ2,V2,q2,δ2,F2)\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) deux automates

  • Soit Σ=Σ1Σ2\Sigma_\cap=\Sigma_1\cap\Sigma_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 A1\mathcal{A}_1 et A2\mathcal{A}_2 est l'automate A3=(Σ3,V3,q3,δ3,F3)\mathcal{A}_3=(\Sigma_3,V_3,q_3,\delta_3,F_3) définie par:

  • Σ3=Σ1Σ2\Sigma_3=\Sigma_1\cup \Sigma_2

  • q3=(q1,q2)q_3=(q_1,q_2)

  • V3=V1×V2V_3=V_1\times V_2

  • F3=(F1×V2)(V1×F2)F_3=\left(F_1\times V_2\right)\cup \left(V_1\times F_2\right)

  • δ3\delta_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.3 Explication Informelle

Informellement, le produit synchronisé construit une automate "système" A3\mathcal{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} ne peut faire une transition en acceptant un caractère aa de l'alphabet commun, que si chacune des deux automates A1\mathcal{A}_1 et A2\mathcal{A}_2 peut accepter aa à partir de son état courant.
  • Si le caractère aa n'est pas commun, alors aΣia\in \Sigma_i, dans ce cas, seul Ai\mathcal{A}_i fait une transition avec aa. Plus précisément:
    • Ai\mathcal{A}_i fait la transition en acceptant aa à partir de son état courant
    • Aj\mathcal{A}_j reste invariant avec jij\neq i

Cette construction peut être généralisé à plusieurs automates.

3.4 Exemple

L'exemple ci dessus représente deux automate A1=(V1,Σ1,q1,F1,δ1),A2=(V2,Σ2,q2,F2,δ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) avec:

  • V1={u0,u1,u2}V_1=\{u_0,u_1,u_2\}, et V2={v0,v1,v2}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\} et Σ={b}\Sigma_\cap=\{b\}
  • q1=u0q_1=u_0 et q2=v0q_2=v_0
  • F1={u0,u2}F_1=\{u_0,u_2\} et F2={v0}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}) un graphe directe fini avec EV×V\mathcal{E}\subseteq \mathcal{V}\times \mathcal{V}

  • Soit Adj(u)={vV/(u,v)E}\text{Adj}(u)=\{v\in\mathcal{V} / \quad (u,v)\in\mathcal{E}\} la liste d'adjacence d'un nœud uVu\in\mathcal{V}

  • Soit n=Vn=\lvert \mathcal{V}\vert le nombre de nœuds dans G\mathcal{G}. En particulier, pour la simplicité, on pose que n=2mn=2^m et V={0,,n1}\mathcal{V}=\{0,\dots,n-1\}

  • Pour k{0,,2m1}k\in\{0,\dots,2^m-1\}, soit bk=bk,m1bk,0b_k=b_{k,m-1}\dots b_{k,0} la représentation binaire de kk

  • Soit x0,,xm1,x0,,xm1x_0,\dots,x_{m-1},x'*0,\dots,x'*{m-1} 2m2m variables booléennes.

  • Soit e(x,0)=xe(x,0)=x et e(x,1)=xˉe(x,1)=\bar x

  • Soit FF tel que:

    F(k,x0,,xm1)=i=0m1e(xi,bk,i)=bk,i=0xi×bk,i=1xˉiF(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

4.2 Fonction booléenne à partir d'un graphe

On définit la fonction ff par:

Adjf(x0,,xm1,x1,,xm1)=i=0n1jAdj(i)F(i,x0,,xm1)×F(j,x0,,xm1)\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})

Cette fonction binaire va encoder le graphe G\mathcal{G}

Exemple 1

Soit G=(V,E)\mathcal{G}=(\mathcal{V},\mathcal{E}) le graphe suivant:

On a m=3m=3, On construit le tableau de FF

kkAdj(k)\text{Adj}(k)bkb_kF(k,x0,x1,x2)F(k,x_0,x_1,x_2)
00{1,2}\{1,2\}000000x0x1x2x_0x_1x_2
11{3,4}\{3,4\}001001xˉ0x1x2\bar x_0x_1 x_2
22{5,6}\{5,6\}010010x0xˉ1x2x_0\bar x_1x_2
33{7}\{7\}011011xˉ0xˉ1x2\bar x_0\bar x_1 x_2
44\emptyset100100x0x1xˉ2x_0x_1\bar x_2
55\emptyset101101xˉ0x1xˉ2\bar x_0x_1\bar x_2
66\emptyset110110x0xˉ1xˉ2x_0\bar x_1\bar x_2
77\emptyset111111xˉ0xˉ1xˉ2\bar x_0\bar x_1\bar x_2

Ainsi:

f(x0,x1,x2,x0,x1,x2)=i=07jAdj(i)F(i,x0,x1,x2)×F(j,x0,x1,x2)=i=03jAdj(i)F(i,x0,x1,x2)×F(j,x0,x1,x2)=F(0,x0,x1,x2)×F(1,x0,x1,x2)+F(0,x0,x1,x2)×F(2,x0,x1,x2)+F(1,x0,x1,x2)×F(3,x0,x1,x2)+F(1,x0,x1,x2)×F(4,x0,x1,x2)+F(2,x0,x1,x2)×F(5,x0,x1,x2)+F(2,x0,x1,x2)×F(6,x0,x1,x2)+F(3,x0,x1,x2)×F(7,x0,x1,x2)=x0x1x2xˉ0x1x2+x0x1x2x0xˉ1x2+xˉ0x1x2xˉ0xˉ1x2+xˉ0x1x2x0x1xˉ2+x0xˉ1x2xˉ0x1xˉ2+x0xˉ1x2x0xˉ1xˉ2+xˉ0xˉ1x2xˉ0xˉ1xˉ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}

4.3 Graphe à partir d'une fonction booléenne

  • Soit ff une fonction booléenne à 2m2m variables

  • Soit n=2mn=2^m et V={0,,n1}\mathcal{V}=\{0,\dots,n-1\}

On va construire le graphe G\mathcal{G} à partir de ff

Pour cela on va calculer sa matrice d'adjacence MM en utilisant la propriété suivante:

Mi,j=f(bi,0,,bi,m1,bj,0,,bj,m1)M_{i,j}=f(b_{i,0},\dots,b_{i,m-1},b_{j,0},\dots,b_{j,m-1})

À partir de la matrice MM on peut construire la liste des arêtes E\mathcal{E} et par suite le graphe G=(V,E)\mathcal{G}=(\mathcal{V},\mathcal{E})

Exemple 2

Soit f(x0,x1,x0,x1)=x0x1+x1x0f(x_0,x_1,x'_0,x'_1)=x_0x'_1+x_1x'_0

On génère la table de ff

x0x_0x1x_1x0x'_0x1x'_1ff
00000
00010
00100
00110
01000
01010
01101
01111
10000
10011
10100
10111
11000
11011
11101
11111

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))=(0000001101010111)\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}

Ainsi, le graphe G\mathcal{G} est donc le suivant:

5. BDD à Partir d'une fonction booléenne

Toute fonction booléenne ff avec un nombre fini nn 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 nn. Pour cela, on doit représenter ff sous une forme compacte. La solution est d'utiliser un Binary Decision Diagram

5.1 Cas d'étude: f(x,y,z)=(xyz)+xˉyzf(x,y,z)=(x\oplus y\oplus z) +\bar xyz

Pour introduire les BDDs, nous allons étudier la fonction booléenne:

f(x,y,z)=(xyz)+xˉyzf(x,y,z)=(x\oplus y\oplus z) +\bar xyz

Avec \oplus est l'opérateur XOR\texttt{XOR}

5.2 Génération de la table

xyzf
0000
0011
0101
0111
1001
1010
1100
1111

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>zx>y>z

5.4 Arbre de Décision

5.5 Construction de BDD

5.5.1 Définition d'arbres isomorphes

Deux arbres binaires T1,T2\mathcal{T}_1,\mathcal{T}_2 sont isomorphes lorsque:

  1. Elles portent sur une même variable
  2. Les sous-arbres left(T1)\text{left}(T_1) et left(T2)\text{left}(T_2) sont isomorphes
  3. Les sous-arbres right(T1)\text{right}(T_1) et right(T2)\text{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 zz est redondante car elle donne toujours le même résultat 11

On doit la supprimer

En effet, un arbre T\mathcal{T} est redondante si left(T)\text{left}(\mathcal{T}) et right(T)\text{right}(\mathcal{T}) sont isomorphes. Dans ce cas on peut supprimer la redondance en:

  • Mettant la racine de l'arbre à left(T)\text{left}(\mathcal{T})
  • Si T\mathcal{T} est un fils de T\mathcal{T}', alors on remplace aussi T\mathcal{T} par left(T)\text{left}(\mathcal{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 zz 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 00 sont isomorphes

Itération 3

On remarque que les arbres portant sur 11 sont isomorphes