Nous définissons maintenant des "équations" entre expressions rationnelles et montrons comment résoudre des systèmes d'équations de ce type.
Les définitions rationnelles permettent de proposer des expressions rationnelles plus lisibles. Cependant, il est parfois nécessaire d'obtenir une expression rationnelle ne comportant que des symboles du vocabulaire. Il faut donc alors essayer de trouver (ou retrouver) cette expression. La simple substitution n'est pas toujours suffisante, surtout en cas de récursivité. La solution consiste à passer par la résolution d'un système d'équations rationnelles. La transformation s'effectue en utilisant directement les définitions rationnelles. L'opérateur → devient =, l'opérateur | devient +, parfois ε devient 1 et les identificateurs deviennent des variables. La résolution du système ainsi obtenu donne l'expression rationnelle du langage. Nous allons donc décrire ces systèmes d'équations ainsi que la méthode de résolution.
|
Les systèmes d'équations rationnelles sont des ensembles d'équations dont les coefficients sont des expressions rationnelles. |
Par exemple, le système suivant est un système d'équations rationnelles :
X=a1X+a2Y+a3 Y=b1X+b2Y+b3 |
avec ai, bi (i=1,2,3) des expressions rationnelles. |
Alors une solution est :
X=(a1|a2b2*b1)*(a3|a2b2*b3) Y=(b2|b1a1*a2)(b3|b1a1*a3) |
Remarque : les solutions ne sont pas uniques, mais, en général, on s'intéresse à la plus petite des solutions (le plus petit point fixe).
Remarques : il est possible d'avoir aij=∅ quand il n'y a pas de terme correspondant à Xj dans l'équation de Xi. ∅ joue le rôle de 0 et ε celui de 1 (l'équation pour Xi comporte alors Xj sans coefficient à droite). Souvent, on utilise même 1 plutôt que ε dans ces équations.
Pour résoudre un tel système, il suffit, par analogie avec les systèmes linéaires, de procéder par élimination de variables. Pour cela, il est nécessaire de passer par le lemme d'Arden.
Démonstration :
Les deux cas se traitent de manière similaire. Pour démontrer Arden (par exemple le cas 1) il suffit d'abord de montrer que X=K*L est une solution de X=KX+L. Ensuite, il faut montrer que cette solution est la seule possible. Pour cela, il faut procéder par l'absurde en proposant une autre solution P à l'équation.
De ce lemme, il est possible de démontrer un certain nombre d'identités rationnelles très utiles pour démontrer des équivalences d'expressions rationnelles ou pour simplifier des expressions.
En particulier, il assez aisé de démontrer les identités suivantes :
Pour démontrer e1 par exemple, il suffit de démontrer que (a+b)* = a*(ba*)*. (a+b)*, selon le lemme d'Arden, est l'unique solution de l'équation X = (a+b)X+1. Si (a+b)* = a*(ba*)*, alors a*(ba*)* est aussi solution de cette équation :
(a+b)(a*(ba*)*)+1 = | a+(ba*)* + ba*(ba*)*+1 |
a+(ba*)* + (ba*)++1 | |
a+(ba*)* + (ba*)* | |
(a+ + 1)(ba*)* | |
(a+b)(a*(ba*)*)+1 = | a*(ba*)* |
Donc est bien solution de l'équation : CQFD
Revenons maintenant à l'algorithme de résolution d'un système d'équations rationnelles. Soit un système de n équations rationnelles notées X1, ..., Xn. Cette méthode se déroule en trois phases :
Il faut penser à simplifier continuellement vos expressions
rationnelles pour avoir un résultat le plus simple possible. De plus,
en fonction des simplifications choisies et de l'ordre adopté, les
résultats ne sont pas toujours identiques (du point de vue des
expressions obtenues) mais toujours équivalents.
Par exemple, Soit D={X1,
X2, X3} avec A={0,1} et le système S :
X1 = 0X2 + 1X1 + ε
X2 = 0X3 + 1X2
X3 = 0X1 + 1X3
étape 1 | X1 = 1X1
+ (0X2 + ε) X2 = 1X2 + (0X3) X3 = 1X3 + (0X1) |
étape 2 | X1 = 1X1 + (0X2
+ ε) X2 = 1X2 + (0X3) X3 = 1X3 + (01*(01*0X3 + ε)) |
étape 3 | X3= (1+01+0)X3
+ 01*=(1+01*01*0)*01* X2 = 1*(0X3) = 1*0(1+01*01*0)*01* X1 = 1*(0X2 + ε) = 1*01*0(1+01*01*0)*01*+1* |
Nous verrons dans un prochain chapitre que ces systèmes sont utiles pour obtenir la description par une expression de langages décrits par un automate d'état fini.
Exercices et tests :
Exercice 5.1. a et b sont deux expressions rationnelles. Montrer que :
Exercice 5.2. Démonter que a(ba)*b =
(ab)+.
Exercice 5.3. Résoudre les systèmes suivants :
mercredi, 26/11/03 8:43