Essayons d'abord de ressentir et Après ( β ) . Considérons un arbre de dérivation qui contient β ; "contient" signifie ici que vous pouvez couper des sous-arbres afin que β soit un sous-mot du front de l'arbre. Ensuite, l'ensemble avant (après) sont tous les fronts potentiels de la partie gauche (droite) de l'arbre de β :Before(β)After(β)βββ
[ source ]
Nous devons donc construire une grammaire pour la partie alignée horizontalement (verticalement) de l'arbre. Cela semble assez facile car nous avons déjà une grammaire pour tout l'arbre; nous devons juste nous assurer que toutes les formes sententielles sont des mots (changer les alphabets), filtrer celles qui ne contiennent pas (c'est une propriété régulière car β est fixe) et tout couper après (avant) β , y compris β . Cette découpe devrait également être possible.ββββ
Passons maintenant à une preuve formelle. Nous allons transformer la grammaire comme indiqué et utiliser les propriétés de fermeture de pour effectuer le filtrage et la découpe, c'est-à-dire que nous effectuons une preuve non constructive.CFL
Soit une grammaire sans contexte. Il est facile de voir que SF ( G ) est sans contexte; construire G ′ = ( N ′ , T ′ , δ ′ , N S ) comme ceci:G=(N,T,δ,S)SF(G)G′=(N′,T′,δ′,NS)
- N′={NA∣A∈N}
- T′=N∪T
- δ′={α(A)→α(β)∣A→β∈δ}∪{NA→A∣A∈N}
avec pour tout t ∈ T et α ( A ) = N A pour tout un ∈ N . Il est clair que L ( G ′ ) = SF ( G ) ; par conséquent, la fermeture de préfixe correspondante Pref ( SF ( G ) ) et la fermeture de suffixe Suff ( SF ( G ) ) sont également sans contexte¹.α(t)=tt∈Tα(A)=NAa∈NL(G′)=SF(G)Pref(SF(G))Suff(SF(G))
Maintenant, pour tout sont L ( β ( N ∪ T ) ∗ ) et L ( ( N ∪ T ) ∗ β ) les langues régulières. Comme C F L est fermé sous l'intersection et le quotient droit / gauche avec les langues régulières, nous obtenonsβ∈(N∪T)∗L(β(N∪T)∗)L((N∪T)∗β)CFL
Before(β)=(Pref(SF(G)) ∩ L((N∪T)∗β))/β∈CFL
et
.After(β)=(Suff(SF(G)) ∩ L(β(N∪T)∗))∖β∈CFL
¹ est fermé sous le quotient droit (et gauche) ; Pref ( L ) = L / Σ ∗ et similaire pour le préfixe de rendement Suff resp. fermeture du suffixe.CFLPref(L)=L/Σ∗Suff
Oui, et After ( β ) sont des langues sans contexte. Voici comment je le prouverais. Tout d'abord, un lemme (qui est le nœud). Si L est CF alors:Before(β) After(β) L
et
sont CF.
En fait, maintenant que je vois l'argument du renversement, il serait encore plus facile de commencer parAprès (L,β) , car le transducteur est plus simple à décrire et à vérifier - il génère la chaîne vide tout en recherchant un β . Quand il trouveβ il bifurque de façon non déterministe, une fourchette continue de chercher d'autres copies de β , l'autre fork copiant textuellement tous les caractères suivants de l'entrée vers la sortie, acceptant tout le temps.
Il ne reste plus qu'à faire en sorte que cela fonctionne aussi bien pour les formes sententielles que pour les LFC. Mais c'est assez simple, car le langage des formes sententielles d'un CFG est lui-même un CFL. Vous pouvez montrer qu'en remplaçant chaque non-terminalX tout au long de g en disant X′ , déclarant X être un terminal, et ajouter toutes les productions X′→ X à la grammaire.
Je vais devoir réfléchir à votre question sur l’ambiguïté.
la source