# Gli insiemi Prima e Dopo per le grammatiche senza contesto sono sempre senza contesto?

14

Lascia che $G$$G$ sia una grammatica senza contesto. Una stringa di terminali e non terminali di $G$$G$ è detto essere una forma sentential di $G$$G$ se lo si può ottenere applicando produzioni di $G$$G$ zero o più volte al simbolo iniziale di $S$$S$ . Let $\mathrm{SF}\left(G\right)$$\operatorname{SF}(G)$ l'insieme di forme proposizionali di $G$$G$ .

Sia $\alpha \in \mathrm{SF}\left(G\right)$$\alpha \in \operatorname{SF}(G)$ e sia $\beta$$\beta$ una sottostringa di $\alpha$$\alpha$ - chiamiamo $\beta$$\beta$ un frammento di $\mathrm{SF}\left(G\right)$$\operatorname{SF}(G)$ . Adesso molla

$\operatorname{Before}(\beta) = \{ \gamma \ |\ \exists \delta . \gamma \beta \delta \in \operatorname{SF}(G) \}$

e

$\operatorname{After}(\beta) = \{ \delta \ |\ \exists \gamma . \gamma \beta \delta \in \operatorname{SF}(G) \}$ .

Le lingue $\mathrm{Before}\left(\beta \right)$$\operatorname{Before}(\beta)$ e $\mathrm{After}\left(\beta \right)$$\operatorname{After}(\beta)$ contesto? E se $G$$G$ non fosse ambiguo? Se $G$$G$ non è inequivocabile, $\mathrm{Before}\left(\beta \right)$$\operatorname{Before}(\beta)$ e $\mathrm{After}\left(\beta \right)$$\operatorname{After}(\beta)$ anche descrivibili da un linguaggio inequivocabile senza contesto?

Questo è un seguito alla mia domanda precedente , dopo che un precedente tentativo di rendere più facile rispondere alla mia domanda non è riuscito. Una risposta negativa renderà molto difficile rispondere alla domanda comprensiva a cui sto lavorando.

Risposte:

8

Diamo una sensazione per e $\mathrm{Before}\left(\beta \right)$$\operatorname{Before}(\beta)$ prima. Considera un albero di derivazione che contiene ; "contiene" qui significa che puoi tagliare i sottotitoli in modo che sia una parola secondaria del fronte dell'albero. Quindi, il set prima (dopo) sono tutti i potenziali fronti della parte dell'albero a sinistra (a destra) di :$\mathrm{After}\left(\beta \right)$$\operatorname{After}(\beta)$$\beta$$\beta$$\beta$$\beta$$\beta$$\beta$ [ fonte ]

Quindi dobbiamo costruire una grammatica per la parte dell'albero allineata orizzontalmente (allineata verticalmente). Sembra abbastanza facile dato che abbiamo già una grammatica per l'intero albero; dobbiamo solo assicurarci che tutti i moduli sentenziali siano parole (cambiare gli alfabeti), filtrare quelli che non contengono (che è una proprietà regolare poiché è fisso) e tagliare tutto dopo (prima) , incluso . Questo taglio dovrebbe anche essere possibile.$\beta$$\beta$$\beta$$\beta$$\beta$$\beta$$\beta$$\beta$

Ora per una prova formale. Trasformeremo la grammatica come indicato e utilizzeremo le proprietà di chiusura di per eseguire il filtraggio e il taglio, ovvero eseguiremo una prova non costruttiva.$\mathrm{C}\mathrm{F}\mathrm{L}$$\mathrm{CFL}$

Sia una grammatica senza contesto. È facile vedere che è privo di contesto; costruire questo modo:$G=\left(N,T,\delta ,S\right)$$G = (N, T, \delta, S)$$\mathrm{SF}\left(G\right)$$\operatorname{SF}(G)$${G}^{\prime }=\left({N}^{\prime },{T}^{\prime },{\delta }^{\prime },{N}_{S}\right)$$G'=(N',T',\delta',N_S)$

• ${N}^{\prime }=\left\{{N}_{A}\mid A\in N\right\}$$N' = \{N_A \mid A \in N\}$
• ${T}^{\prime }=N\cup T$$T' = N \cup T$
• ${\delta }^{\prime }=\left\{\alpha \left(A\right)\to \alpha \left(\beta \right)\mid A\to \beta \in \delta \right\}\cup \left\{{N}_{A}\to A\mid A\in N\right\}$$\delta' = \{\alpha(A) \to \alpha(\beta)\mid A\to\beta \in \delta \} \cup \{N_A \to A \mid A\in N\}$

con per tutti e per tutti . È chiaro che ; quindi il prefisso di chiusura corrispondente e suffisso chiusura $\alpha \left(t\right)=t$$\alpha(t)=t$$t\in T$$t \in T$$\alpha \left(A\right)={N}_{A}$$\alpha(A)=N_A$$a\in N$$a\in N$$\mathcal{L}\left({G}^{\prime }\right)=\mathrm{SF}\left(G\right)$$\mathcal{L}(G')=\operatorname{SF}(G)$$\mathrm{Pref}\left(\mathrm{SF}\left(G\right)\right)$$\operatorname{Pref}(\operatorname{SF}(G))$$\mathrm{Suff}\left(\mathrm{SF}\left(G\right)\right)$$\operatorname{Suff}(\operatorname{SF}(G))$ sono privi di contesto, too¹.

Ora, per qualsiasi sono e lingue regolari. Dato che è chiuso sotto l'intersezione e il quoziente destro / sinistro con lingue regolari, otteniamo$\beta \in \left(N\cup T{\right)}^{\ast }$$\beta \in (N\cup T)^*$$\mathcal{L}\left(\beta \left(N\cup T{\right)}^{\ast }\right)$$\mathcal{L}(\beta(N\cup T)^*)$$\mathcal{L}\left(\left(N\cup T{\right)}^{\ast }\beta \right)$$\mathcal{L}((N\cup T)^*\beta)$$\mathrm{C}\mathrm{F}\mathrm{L}$$\mathrm{CFL}$

$\qquad \displaystyle \operatorname{Before}(\beta) = (\operatorname{Pref}(\operatorname{SF}(G))\ \cap\ \mathcal{L}((N\cup T)^*\beta))\,/\,\beta \in \mathrm{CFL}$

e

.$\qquad \displaystyle \operatorname{After}(\beta) = (\operatorname{Suff}(\operatorname{SF}(G))\ \cap\ \mathcal{L}(\beta(N\cup T)^*))\,\backslash\, \beta \in \mathrm{CFL}$

¹ è chiuso sotto il quoziente destro (e sinistro) ; e simili per prefisso rendimento resp. chiusura del suffisso.$\mathrm{C}\mathrm{F}\mathrm{L}$$\mathrm{CFL}$$\mathrm{Pref}\left(L\right)=L/{\mathrm{\Sigma }}^{\ast }$$\operatorname{Pref}(L) = L / \Sigma^*$$\mathrm{Suff}$$\operatorname{Suff}$

I started to write an answer then realized my proof was the same as yours. I'd have put it this way (compressed to fit here): form a grammar ${G}^{\prime }$$G'$ by adding a new terminal $\stackrel{^}{A}$$\hat A$ (a metavariable) for each non-terminal $A$$A$ and a production $A\to \stackrel{^}{A}$$A\to\hat A$. Then sentential forms of $G$$G$ are the words recognized by $G$$G$ that consist of metavariables. This is the intersection of a CFG with a regular language and thus is regular. The prefix set of a CFG is a CFG (take a PDA and make every state final). $\mathrm{B}\mathrm{e}\mathrm{f}\mathrm{o}\mathrm{r}\mathrm{e}\left(\gamma \right)=\left\{\gamma \mid \gamma \beta \in L\left(\mathrm{P}\mathrm{r}\mathrm{e}\mathrm{f}\mathrm{i}\mathrm{x}\left(\stackrel{^}{G}\right)\right)\right\}$$\mathrm{Before}(\gamma) = \{\gamma \mid \gamma\beta\in L(\mathrm{Prefix}(\hat G))\}$ is again a CFG.
Gilles 'SO- stop being evil'

1
@Gilles, three comments on that: 1) the sentential forms typically (properly) contain the language. 2) "make every state final" -- that won't work; you'll accept prefixes of non-words, too. 3) The last step of "cutting off" a suffix seems to be tricky to get rigorous. :/ Do you have a rigorous but more compact proof than mine?
Raphael

$G$$G$$b$$b$$b$$b$

9

$\text{Before}\left(\beta \right)$$\mbox{Before}(\beta)$ and $\text{After}\left(\beta \right)$$\mbox{After}(\beta)$ are context-free languages. Here's how I would prove it. First, a lemma (which is the crux). If $L$$L$ is CF then:

$\mbox{Before}(L,\beta) = \{ \gamma \ |\ \exists \delta . \gamma \beta \delta \in L \}$

and

$\mbox{After}(L,\beta) = \{ \gamma \ |\ \exists \delta . \delta \beta \gamma \in L \}$

are CF.

Proof? For $\text{Before}\left(L,\beta \right)$$\mbox{Before}(L,\beta)$ construct a non-deterministic finite-state transducer ${T}_{\beta }$$T_{\beta}$ that scans a string, outputting every input symbol it sees and simultaneously searches non-deterministically for $\beta$$\beta$. Whenever ${T}_{\beta }$$T_{\beta}$ sees the first symbol of $\beta$$\beta$ it forks non-deterministically and ceases outputting symbols until either it finishes seeing $\beta$$\beta$ or it sees sees a symbol that deviates from $\beta$$\beta$, stopping in either case. If ${T}_{\beta }$$T_{\beta}$ sees $\beta$$\beta$ in full, it accepts upon stopping, which is the only way it accepts. If it sees a deviation from $\beta$$\beta$, it rejects.

The lemma can be jiggered to handle cases where $\beta$$\beta$ could overlap with itself (like $abab$$abab$ -- keep looking for $\beta$$\beta$ even while in the midst of scanning for a prior $\beta$$\beta$) or appears multiple times (actually, the original non-determinisic forking already handles that).

It's fairly clear that ${T}_{\beta }\left(L\right)=\text{Before}\left(L,\beta \right)$$T_\beta(L) = \mbox{Before}(L,\beta)$, and since the CFLs are closed under finite-state transduction, $\text{Before}\left(L,\beta \right)$$\mbox{Before}(L,\beta)$ is therefore CF.

A similar argument goes for $\text{After}\left(L,\beta \right)$$\mbox{After}(L,\beta)$, or it could be done with string reversals from $\text{Before}\left(L,\beta \right)$$\mbox{Before}(L,\beta)$ , CFLs also being closed under reversal:

$\text{After}\left(L,\beta \right)=\text{rev}\left(\text{Before}\left(\text{rev}\left(L\right),\text{rev}\left(\beta \right)\right)\right)$$\mbox{After}(L,\beta) = \mbox{rev}(\mbox{Before}(\mbox{rev}(L),\mbox{rev}(\beta)))$

Actually, now that I see the reversal argument, it would be even easier to start with $\text{After}\left(L,\beta \right)$$\mbox{After}(L,\beta)$, since the transducer for that is simpler to describe and verify -- it outputs the empty string while looking for a $\beta$$\beta$. When it finds $\beta$$\beta$ it forks non-deterministically, one fork continuing to look for further copies of $\beta$$\beta$, the other fork copying all subsequent characters verbatim from input to output, accepting all the while.

What remains is to make this work for sentential forms as well as CFLs. But that is pretty straightforward, since the language of sentential forms of a CFG is itself a CFL. You can show that by replacing every non-terminal $X$$X$ throughout $G$$G$ by say ${X}^{\mathrm{\prime }}$$X^\prime$, declaring $X$$X$ to be a terminal, and adding all productions ${X}^{\mathrm{\prime }}\to X$$X^\prime \rightarrow X$ to the grammar.