Come dimostrare che una lingua è regolare?


48

Esistono molti metodi per dimostrare che una lingua non è regolare , ma cosa devo fare per dimostrare che una lingua è regolare?

Ad esempio, se mi viene dato che è regolare, come posso dimostrare che anche la seguente L è regolare?LL

L:={wL:uv=w for uΣL and vΣ+}

Posso disegnare un automa finito non deterministico per dimostrarlo?


1
c'è un refuso nella definizione del tuo , per favore modifica per risolvere. L
Ran G.,

2
Il "disegno" non è una prova; devi dare un NFA e dimostrare che accetta la lingua.
Raffaello

Penso che la definizione della lingua non abbia ancora senso ...
hugomg,

2
comunque, la lingua specifica è irrilevante se la domanda è "posso disegnare un NFA per dimostrare che è regolare". @corium, possiamo modificare la domanda per riflettere la domanda più generale: "come dimostrare che una specifica è regolare"? L
Ran G.,

Risposte:


48

Sì, se riesci a trovare uno dei seguenti:

per qualche lingua , allora L è regolare. Esistono modelli più equivalenti , ma i precedenti sono i più comuni.LL

Esistono anche proprietà utili al di fuori del mondo "computazionale". è anche regolare seL

  • è finito,
  • puoi costruirlo eseguendo determinate operazioni su lingue regolari e quelle operazioni sono chiuse per lingue regolari , come ad esempio

    • intersezione,
    • complemento,
    • omomorfismo,
    • inversione,
    • quoziente sinistro o destro,
    • trasduzione regolare

    e altro ancora , o

  • usando il teorema di Myhill – Nerode se il numero di classi di equivalenza per è finito.L

Nell'esempio dato, abbiamo alcune lingue (regolari) come base e vogliamo dire qualcosa su una lingua L derivata da essa. Seguendo il primo approccio - costruiamo un modello adatto per L - possiamo assumere qualunque modello equivalente per L che desideriamo tanto; rimarrà astratto, ovviamente, poiché L è sconosciuto. Nel secondo approccio, possiamo usare L direttamente e applicare le proprietà di chiusura per arrivare a una descrizione per L .LLLLLLL


4
Potrebbe anche valere la pena notare che dimostrare che una lingua è finita è sufficiente per dimostrarne la regolarità. Ciò può essere utile, in particolare nelle prove non costruttive per casi.
Patrick87,

2
Regexp come si trova nei linguaggi di programmazione può fare molto di più rispetto ai linguaggi normali. Dovresti limitarti a costrutti "classici".
David Lewis,

4
@DavidLewis: In questo sito, si può presumere che per "espressione regolare" si intenda la nozione classica.
Raffaello

@DavidLew: Sono d'accordo, si dovrebbe evitare "regexp" nel contesto della teoria per evitare confusione.
Raffaello

Nota che per uno dei primi quattro proiettili, avrai bisogno di una prova che dimostri che la tua rappresentazione è effettivamente corretta.
Raffaello

10

Metodi elementari

  1. Automi finiti (possibilmente non deterministici, con transizioni vuote).
  2. Espressioni regolari.
  3. Equazioni lineari di destra (o sinistra, ma non entrambe), come dove K e L sono regolari.X=KX+LKL
  4. Grammatica regolare (tipo 3).
  5. Operazioni che preservano le lingue regolari (operazioni booleane, prodotto, stella, shuffle, morfismi, inversioni di morfismi, inversione, ecc.)
  6. Riconosciuto da un monoide finito.

Metodi logici (spesso utilizzati nella verifica formale)

  1. Logica monadica del secondo ordine (teorema di Büchi).
  2. Logica temporale lineare (teorema di Kamp).
  3. Teorema dell'albero di Rabin (logica monadica del secondo ordine con due successori). Molto potente.

Metodi avanzati

  1. Lemmi di pompaggio sofisticati. Vedi ad esempio
    [1] J. Jaffe, un lemma di pompaggio necessario e sufficiente per le lingue regolari, Sigact News - SIGACT 10 (1978) 48-49.
    [2] A. Ehrenfeucht, R. Parikh e G. Rozenberg, Lemmi di pompaggio per set regolari, SIAM J. Comput. 10 (1981), 536-541.
    [3] S. Varricchio, Una condizione di pompaggio per set regolari, SIAM J. Comput. 26 (1997) 764-771.

  2. Bene quasi ordini. Vedi
    [4] W. Bucher, A. Ehrenfeucht, D. Haussler, Sui regolatori totali generati dalle relazioni di derivazione, Theor. Comput. Sci. 40 (1985) 131-148.
    [5] M. Kunz, Soluzioni regolari di disuguaglianze linguistiche e quasi ordini .

  3. N

  4. Metodi algebrici basati su trasduzioni (vedi anche Operazioni che preservano le lingue regolari ).


4

La risposta di Ran G. fornisce un elenco abbastanza ampio dei modelli equivalenti che possono essere utilizzati per specificare lingue regolari (e l'elenco continua, automi a due vie, logica MSO, ma che è coperto dal link sotto "modelli più equivalenti '). E come sottolinea Raffaello, abbiamo bisogno di una discussione per convincere il pubblico che la rappresentazione scelta è davvero corretta.

LLLL

L=(ΣL)Σ

LL


1
L

@Raphael Mi dispiace di aver fatto il punto. Le risposte precedenti sembrano spiegare che possiamo costruire una descrizione del linguaggio (come automa, operazioni, ecc.). Sono d'accordo. Tuttavia, la domanda sembra riguardare le proprietà di chiusura, vedere l'esempio fornito. Quel punto mi manca nelle altre risposte: per dimostrare una proprietà di chiusura supponi di avere una descrizione e costruirne una nuova.
Hendrik Jan

1
L

1
LLLLLLLLL

1
Oh va bene. In realtà, preferirei modificare la domanda e rimuovere la parte "ad esempio", rendendo così la domanda più generale e un riferimento per domande simili future. (:
Ran G.


4

L1SL2={x1y1xnynΣ:x1xnL1,y1ynL2}
Ai=Σ,Qi,Fi,δi,q0iLii=1,2Σ,Q,F,δ,q0
  • Q1×Q2×{1,2}xiyi
  • q0=q01,q02,1
  • F=F1×F2×{1}
  • δ(q1,q2,1,σ)=δ1(q1,σ),q2,2δ(q1,q2,2,σ)=q1,δ2(q2,σ),1

LR={wR:wΣ}.
(w1wn)R=wnw1LΣ,Q,F,δ,q0Σ,Q,F,δ,q0
  • Q=Q{q0}
  • q0
  • q0
  • δ(q0,ϵ)=FqQσΣδ(q,σ)={q:δ(q,σ)=q}

q0


R(L)={yxΣ:xyL}.
LΣ,Q,F,δ,q0Σ,Q,F,δ,q0q=δ(q0,x)δ(q,y)Fδ(q0,x)=qyx
  • Q={q0}Q×Q×{1,2}q0q,qcurr,sqqcurrsyx
  • F={q,q,2:qQ}δ(q0,x)=q
  • δ(q0,ϵ)={q,q,1:qQ}q
  • δ(q,qcurr,s,σ)=q,δ(qcurr,σ),sq,qcurrQs{1,2}
  • δ(q,qf,1,ϵ)=q,q0,2qQqfFyxy

Ek(L)={xΣ: there exists yL whose edit distance from x is at most k}.
Σ,Q,F,δ,q0LΣ,Q,F,δ,q0Ek(L)
  • Q=Q×{0,,k}
  • q0=q0,0
  • F=F×{0,,k}
  • q,σ,iδ(q,σ),iδ(q,i,σ)
  • q,i+1δ(q,i,σ)q,σ,ii<k
  • δ(q,σ),i+1δ(q,i,ϵ)q,σ,ii<k
  • δ(q,σ),i+1δ(q,i,τ)q,σ,τ,ii<k

3

Una lingua è normale se puoi scrivere uno scanner che decide su stringhe arbitrarie se appartengono o meno alla lingua usando non più di una quantità fissa di memoria - cioè il riconoscimento può essere fatto nello spazio O (1) .


O (1) spazio, intendi? In ogni caso, ciò è coperto dal fatto che DFA è sufficiente; potrebbe essere utile annotare esplicitamente questa equivalenza in termini di programmazione.
Raffaello

Sì, è solo una prospettiva diversa.
reinierpost,

3

La trasformazione delle espressioni regolari è un modo per dimostrare la chiusura in determinate operazioni. I due esempi più semplici sono la chiusura sotto inversione e la chiusura sotto omomorfismo .

rLLRL

  • ϵR=ϵσR=σR=
  • (r1+r2)R=(r1R+r2R)(r)R=(rR)(r1r2)R=r2Rr1R

(r1r2)R=r2Rr1R(01)R=10rRLR

h:ΣΔrLh(L)σrh(σ)


0

Un altro modo è costruire la lingua usando le operazioni in base alle quali si sa che sono chiuse. Questa è un'estensione per mostrare un'espressione regolare, poiché hai molte più operazioni disponibili (inverti la stringa, complemento, intersezione, taglia un pezzo, mantieni solo una parte, omomorfismi e omomorfismi inversi, ...)


2
Questo è già menzionato nella risposta di Ran.
Raffaello
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.