Comment sentir intuitivement qu'une langue est régulière

9

Étant donné un langage , comment dire directement, sans regarder les règles de production, que ce langage n'est pas régulier?L={anbncn}

Je pourrais utiliser le lemme de pompage mais certains gars disent juste en regardant la grammaire que ce n'est pas normal. Comment est-ce possible?

doniyor
la source
1
Tout le monde peut regarder n'importe quelle langue et dire simplement que ce n'est pas régulier. Je ne suis pas sûr que l'intuition, en soi, soit autant en jeu ici que l'expérience. Il s'agit d'une langue assez simple (bien qu'elle ne soit pas régulière) et qui est inévitablement rencontrée dans l'étude des langues formelles. Une fois qu'on vous a dit que ce n'est pas régulier et que vous avez prouvé que ce n'est pas régulier en utilisant une technique de preuve valide, vous n'avez généralement pas besoin d'une preuve pour convaincre les autres, car ils l'ont tous prouvé eux-mêmes lors de leur introduction au matière.
Patrick87
oui, mais parfois dans les conférences, ils suivent juste quelques preuves mathématiques sèches, mais ils manquent vraiment d'explications intuitives avec de vrais exemples simples
doniyor
Oubliez . Avez-vous déjà eu l'impression que a n b n n'est pas régulière? anbncnanbn
Uday Reddy
2
Regarder une grammaire et proclamer parce que la grammaire n'est pas régulière la langue n'est pas régulière est une erreur. Il existe de nombreuses grammaires non régulières pour les langues normales. Il faut se méfier! Cela dit, il est facile de décider si une grammaire est régulière; il suffit de vérifier les productions.
Raphael
Il y a une question similaire sur math.SE .
Raphael

Réponses:

11

La principale propriété des DFA / NFA est le manque de mémoire illimitée. Si vous regardez une langue et le seul algorithme (qui devrait plus tard être traduit en un automate fini) auquel vous pouvez penser requiert cette propriété, c'est-à-dire que vous pensez que tout algorithme qui le reconnaîtra devra se souvenir d'un nombre arbitraire de choses (comme dans votre exemple) alors cette langue n'est probablement pas régulière.n

Bien sûr, vous devez toujours vous rappeler que l'intuition mathématique peut être erronée, et la seule façon d'être sûr de votre intuition est de le prouver.

EDIT: Je vais répondre à la dernière question dans les commentaires ici, à cause du manque d'espace.

vous parlez de mémoire illimitée, ce que vous voulez dire, c'est la raison pour laquelle ce n'est pas régulier. mais un ^ nb ^ m peut aussi avoir une mémoire illimitée si je veux, n'est-ce pas? cela ne me donne toujours pas de paix.

Le problème n'est pas la taille des mots (vous rencontrerez généralement des langages réguliers infinis, car chaque langue finie est régulière, et c'est assez ennuyeux), mais combien le DFA doit se souvenir.
Dans l' , il n'est pas nécessaire de se souvenir de m , n . L'algorihm a juste besoin de s'assurer qu'ils sont positifs et que le mot est correctement ordonné. Il s'agit d'une liste finie et chacun des éléments de la liste nécessite une quantité constante de mémoire. Comparez cela à un n b n , pour lequel un simple alogrithme est nécessaire pour se rappeler que le nombre de a est égal au nombre de bambnm,n
anbnab's. Cela nécessitera une mémoire illimitée. Quand je regarde un langage et que tout algorithme auquel je pense peut avoir besoin d'une mémoire illimitée, mon intuition que le langage n'est pas régulier se renforce. Si je ne trouve pas d'algorithme "intelligent" (qui nécessite une quantité de mémoire constante) dans un laps de temps raisonnable (combien de temps est à vous), j'essaierai de prouver que la langue n'est pas régulière.
J'espère que cela le rend un peu plus clair.

Boris Trayvas
la source
merci, les preuves mathématiques apportent l'intuition, mais regardez cette règle de production: S -> ab | aSb. c'est pour un ^ nb ^ n qui dit qu'il n'est pas non plus régulier. mais un ^ mb ^ n est régulier avec m, n> = 1. Pourquoi est-ce? ce sont en fait la même forme, non? je ne comprends pas la différence entre ces deux langues
doniyor
1
Pour un ^ nb ^ n, vous devez garder une trace de 2 choses: premièrement, que le nombre de a est égal au nombre de b (c'est la partie impossible pour les DFA), et deuxièmement qu'aucun 'b' n'est suivi d'un 'a '. Pour un ^ mb ^ n, vous ne vous souciez pas de la valeur de m, n. Vous vous souciez seulement qu'il y ait au moins un «a» et au moins un «b» et qu'aucun «b» ne soit suivi d'un «a». De manière informelle, vous devez vous souvenir de seulement 3 choses.
Boris Trayvas
oh ok, maintenant je l'ai.
doniyor
donc l'ordre est aussi la chose cruciale, non? comme aabbcc accepté mais pas aabcbc uniquement parce que la commande n'est pas correcte. droite?
doniyor
1
"La principale propriété des langues régulières est le manque de mémoire illimitée." - Je sais ce que tu veux dire, mais cette phrase n'a aucun sens. "vous sentez que tout algorithme qui le reconnaîtra devra se souvenir d'un nombre arbitraire de choses" - C'est en effet la seule intuition que je connaisse aussi, mais son genre est très, très dangereux; voir ici .
Raphael
5

Je pourrais utiliser le pompage de la lemme

Exactement. Après avoir utilisé le lemme de pompage ou l'une des autres techniques plusieurs fois (des dizaines), vous commencerez à voiranbn

Un bon moyen de tester votre intuition est de regarder ces langues:

  1. {xyyzx,y,z{a,b}+}
  2. {xyyzx,y,z{a,b}}
  3. {xyyzx,y,z{a,b,c}+}
  4. {xyyzx,y,z{a,b,c}}

Quels sont sans contexte?

Raphael
la source
1
Si quelqu'un connaît des exemples tout aussi sympas pour la frontière des langues normales, veuillez le dire. Veuillez ne pas gâcher la réponse dans les commentaires.
Raphael
Raphael - excellent travail! merci d'avoir donné des exemples et de m'avoir testé explicitement.
doniyor
4

Vous pouvez réellement décider si une langue est régulière en utilisant des calculs assez simples, plutôt que de faire une preuve complète. Il suffit d'appliquer un critère très puissant: une langue est régulière si et seulement si elle a un nombre fini de quotients.

LxxLwxwLL={anbn}aL={an1bn|n1}bL=akL={ankbn|nk}L

DDSaaLDS

James Koppel
la source
b \ L signifie: si je divise le L par b, alors j'obtiendrai un ensemble vide?. est-ce parce que je dois commencer à lire le mot depuis le début? et non par derrière?
doniyor
1
bL=L/b
1
Voici un bon diaporama qui explique les quotients et comment en construire des DFA: cs.cmu.edu/~cdm/pdf/Minimization.pdf
James Koppel
oh d'accord, merci beaucoup. maintenant je reçois un peu. mmm ... permettez-moi d'étudier cela à nouveau pendant un certain temps si ...
doniyor