Mots ayant le même produit associatif droit et gauche

9

J'ai commencé à étudier les automates non déterministes en utilisant le livre de Hopcroft et Ullman . Je suis coincé dans un problème que j'ai trouvé très intéressant:

Donnez un automate fini non déterministe acceptant toutes les chaînes qui ont la même valeur lorsqu'elles sont évaluées de gauche à droite comme de droite à gauche en multipliant selon le tableau suivant:

×abcaaacbcabcbca

Donc, si nous avons la chaîne abc ,
le produit de gauche à droite est (a×b)×c=a×c=c et
le produit de droite à gauche est a×(b×c)=a×b=a

Donc , ne devrait pas être acceptable pour les automates. Pour moi, il est évident que toute chaîne a a ou b b ou c c est une chaîne acceptable (leur évaluation droite et gauche fonctionne sur les mêmes chaînes partielles). Il est facile de donner un NFA qui décrit l'évaluation de gauche à droite mais le problème est que si la machine essaie de calculer l' évaluation de droite à gauche , je pense qu'elle a besoin de connaître la longueur de la chaîne (donc une mémoire infinie est nécessaire).abcaabbcc

Alors, comment un automate non déterministe peut-il évaluer de droite à gauche afin de se comparer à l'évaluation de gauche à droite?

M. Ariel
la source

Réponses:

6

La première astuce consiste à considérer la table de multiplication comme la table de transition d'un automate chaque état représentant une lettre dans votre table de multiplication, mais sans se soucier encore de l'acceptation. Ainsi, les lettres à gauche et dans le corps du tableau sont en fait des états - il serait plus précis de les écrire commeA , mais je ne le ferai pas. Les lettres en haut sont des entrées.qa,qb,qc

Construisez ensuite l'automate ("AT " pour la transposition) pourla multiplication inverseen transposant A :TA

ATabcaacbbaacccba

Donc vous amène à l'état c , et de même A T ( c b aA(abc)c passe à l'état a de A T , comme vous le constatez.AT(cba)aAT

Cependant, suppose que vous allez de droite à gauche, et nous voulons toujours aller de gauche à droite. Donc, la deuxième astuce consiste à inverser l'automate (pas la multiplication, qui nous ramènerait juste si nous avions commencé), en inversant toutes les flèches, ce qui conduit à un automate A T R non déterministe donné par le tableau de transition ci-dessous, avec sous-ensembles indiqués par des lettres concaténées pour empêcher le poulet de se gratter, donc un c est vraiment { a , c } . (j'espère que j'ai bien compris - semble fonctionner).ATATRac{a,c}

ATRabcaabbcbcaccabababbcacbccacabcacabcabbcabcabcabcabc

Vous pouvez l'interpréter comme un automate non déterministe avec seulement les trois lignes au-dessus de la ligne ou une version déterminée avec les 8 lignes.

Enfin, la machine pour résoudre le problème est l'automate produit croisé des et A T R d'origine , c'est-à-dire A × A T R pour effectuer le comportement d'intersection des deux automates (nous n'avons plus besoin de A T ) . A × A T R possède des états qui sont des paires comme un , un c . La fonction de transition exécute A et A T R indépendamment. Un état de départ unique 1 , 1 AATRA×ATRATA×ATRa,acAATR1,1 passe en sous entréea,a , ena en entrée b , etc. b,bb

Accepter les états dans la version non-déterministe sont etc. Dans la version déterministe, acceptant états sont des paires , dans lequel le premier composant est du second ensemble des composants, tels que un , un ou b , b c .a,aa,ab,bc

augmenté et déterminé comme indiqué a 25 = 3 8 + 1 états, alors pardonnez-moi si je ne l'écris pas en détail. Mais la version non déterministe n'a que 10 = 3 3 + 1 états.A×ATR25=38+110=33+1

David Lewis
la source
Merci, cela m'a vraiment aidé votre réponse pour comprendre l'idée derrière le non déterminisme et le "revers" d'un automate. J'avais du mal à comprendre ces concepts en utilisant le livre de Hopcroft, maintenant j'utilise le livre de Sipser "Introduction à la théorie du calcul", son vrai bien.
M. Ariel
Considérez l'entrée . 1 , 1 se déplace à b , b après l' entrée b , puis à c , sous entrée a , donc b un n'est pas acceptée, mais devrait être? ba1,1b,bbc,aba
cemulate
8

Si L est une langue régulière, alors L R , la langue constituée de l'inversede tous les mots de L , est également régulière. Prenez cela comme un exercice.()LLRL

Comment cela nous aide-t-il à résoudre le problème? Soit les langages constitués de toutes les chaînes évaluées en a , b , c lors de l'évaluation de gauche à droite. La langue qui vous intéresse est ( L aL R a ) ( L bL R b ) ( L cL R c ) . Cela montre que si vous savez prouver (La,Lb,Lca,b,c

(LaLaR)(LbLbR)(LcLcR).
, vous pouvez alors construire un NFA pour la langue en question.()

En fait, si vous utilisez l' idée de la preuve de , vous pouvez probablement continuer et construire l'automate. Examinons donc cela. En particulier, essayons de construire un NFA pour L R a , le langage de toutes les chaînes qui évaluent à()LaR lorsqu'il est évalué de droite à gauche.a

L'idée est la suivante. Supposons que la première lettre que vous voyez soit . Ensuite, le reste de la chaîne doit être évalué à b (puisque b x = a implique x = b ). Un raisonnement similaire s'applique lorsque la première lettre est c . Cependant, lorsque la première lettre est un , le reste peut être évalué à a ou b , ou être nul. Avec un NFA, nous pouvons deviner (et vérifier plus tard notre supposition).bbbx=ax=bcaab

Cet indice devrait vous donner suffisamment de matière à réflexion et, espérons-le, résoudre le problème.

Yuval Filmus
la source
Belle façon de le prouver avec la formule - votez pour cela. Quant à l'idée alternative de "deviner et vérifier non déterministe", c'est généralement OK pour une preuve, mais c'est assez difficile à réaliser, comme le demande le problème. Je pense qu'il y a beaucoup de détails manquants ici, comme comment garder une trace de la chaîne du back-end.
David Lewis
@David, les détails manquent exprès.
Yuval Filmus
@Yuval - il n'a pas dit que c'était des devoirs - nous faisons confiance aux gens ici, n'est-ce pas? Je pense également que cette preuve d'existence se traduira par une machine assez grande, probablement beaucoup plus grande que nécessaire.
David Lewis
@DavidLewis: Gilles a donné une réponse plus complète qui montre que le NFA n'est en effet pas trop grand; le non-déterminisme fait cela pour vous. Cependant, le DFA correspondant peut être énorme.
Raphael
@MohamedAbbas Peut-être, je ne prévois pas de vérifier.
Yuval Filmus
6

Mignonne.

Tout d'abord, construisez un automate qui calcule le produit de gauche à droite. Facile! Mettez une transition chaque fois quexy=z. Il y a trois états{a ,b ,c }représentant les trois produits possibles. Commencez dans un quatrième état1 avec1xyzxy=z{a,b,c}1 pour toutx. L'état final estx si et seulement si le produit du mot saisi de gauche à droite estx1xxxxx .

Construisons maintenant un automate qui calcule le produit de droite à gauche. Celui-ci sera non déterministe. Comment fait-on cela? Simple… Pour aller dans l'autre sens, il suffit de tout inverser : les flèches et le sens du produit.

Où nous avions avant xyxy, on prend maintenant : quand on consomme le mot de gauche à droite, on passe d'un produit à son facteur de droite. Ou, en d'autres termes,xxyxyxyyx.

Ajouter un nœud déconnecté 1 pour le mot vide. Tous les nœuds sont initiaux.

(x1,x2)y(z1,z2)x1yz1x2yz2(1,x)(x,x) be final. A word is recognized by this non-deterministic automaton iff its product from left to right and its product from right to left are the same x.

Gilles 'SO- stop being evil'
la source
I'm having a bit of trouble grokking this. Don't you have to verify that xyyx leads to a finite state set? IAC, it's not just as simple as "reverse everything", since you still have to consume from left to right, but multiply from right to left, and I'm not sure you've done that.
David Lewis
@DavidLewis The state set is finite, I defined it to be {overleftarrowa,b,b,1}. I have reversed the order of the multiplication (barring more typos).
Gilles 'SO- stop being evil'
5

It seems that your main problem is utilising nondeterminism, so let me elaborate on that.

The basic idea the others utilise is that a nondeterministic machine can guess the final result.

Let us consider your small example abc and Gilles' construction idea. The automaton "computing" the right-to-left product guesses the result in the beginning and verifies it. So there are three possibilities:

  • Guess a: As the first symol is a, the rl-product of bc must have been a or b.
    • Guess a: As the second symbol is b, the last symbol must have been b.
      • (Guess b:) It is c, so don't accept.
    • Guess b: As the second symbol is b, the last symbol must have been c.
      • (Guess c:) It is indeed c, so we accept.
  • Guess b: As the first symol is a, this is not possible, so don't accept.
  • Guess c: As the first symol is a, the rl-product of bc must have been c
    • (Guess c:) As the second symbol is b, the last symbol must have been a
      • (Guess a:) It is c, so don't accept.

As you can see, the NFA is able to guess and check every possible computation bottom-up. Because the accepted language is defined as the set of strings that is accepted by at least one run, all non-accepting runs on the input are ignored; the NFA "always guesses right".

Now it is easy for this NFA to remember its first choice until the end. If it accepts, it can compare the remembered symbol to the lr-product (deterministically) obtained in parallel (how language intersection relates to NFA is surely covered in Ullman/Hopcroft, and any other basic textbook).

Raphael
la source
The idea of guessing an string was weird to me, but I have been reading the book of Sipser and I think that is a better aproach for newbies like me in the theory of computation.
Mr. Ariel
Think of guessing as forking with assumed input. But need to be careful with guessing strategies -- ensure that any storage needed for guessing is bounded uniformly for all forked threads, otherwise you don't have a finite-state automaton any more. Also, need a uniform bound on the number of forked threads active. I think Raphael's description here works, but it needs to be mentioned at least.
David Lewis