Outro método, não coberto pelas respostas acima, é a transformação finita de autômatos . Como um exemplo simples, vamos mostrar que os idiomas regulares estão fechados na operação de reprodução aleatória , definida da seguinte forma:
Você pode mostrar o fechamento em ordem aleatória usando as propriedades de fechamento, mas também pode mostrá-lo diretamente usando os DFAs. Suponha que seja um DFA que aceite (para ). Construímos um novo DFA seguinte maneira:
L1SL2={x1y1…xnyn∈Σ∗:x1…xn∈L1,y1…yn∈L2}
Ai=⟨Σ,Qi,Fi,δi,q0i⟩Lii=1,2⟨Σ,Q,F,δ,q0⟩
- O conjunto de estados é , onde o terceiro componente se lembra se o próximo símbolo é um (quando 1) ou (quando 2).Q1×Q2×{1,2}xiyi
- O estado inicial é .q0=⟨q01,q02,1⟩
- Os estados de aceitação são .F=F1×F2×{1}
- A função de transição é definida por e .δ(⟨q1,q2,1⟩,σ)=⟨δ1(q1,σ),q2,2⟩δ(⟨q1,q2,2⟩,σ)=⟨q1,δ2(q2,σ),1⟩
Uma versão mais sofisticada desse método envolve adivinhação . Como exemplo, vamos mostrar que os idiomas regulares são fechados sob reversão , ou seja,
(Aqui .) Essa é uma das operações de fechamento padrão, e o fechamento com reversão ocorre facilmente com a manipulação de expressões regulares (que pode ser considerada a contrapartida da transformação de autômatos finitos em expressões regulares) - apenas inverta a expressão regular. Mas você também pode provar o fechamento usando NFAs. Suponha que seja aceito por um DFA . Construímos um NFA
LR={wR:w∈Σ∗}.
(w1…wn)R=wn…w1L⟨Σ,Q,F,δ,q0⟩⟨Σ,Q′,F′,δ′,q′0⟩ , em que
- O conjunto de estados é .Q′=Q∪{q′0}
- O estado inicial é .q′0
- O estado de aceitação exclusivo é .q0
- A função de transição é definida da seguinte maneira: e para qualquer estado e , .δ′(q′0,ϵ)=Fq∈Qσ∈Σδ(q′,σ)={q:δ(q,σ)=q′}
(Podemos nos livrar de se permitirmos vários estados iniciais.) O componente de adivinhação aqui é o estado final da palavra após a reversão.q′0
Adivinhar muitas vezes envolve também verificar. Um exemplo simples é o fechamento em rotação :
Suponha que seja aceito pelo DFA . Construímos um NFA , que opera da seguinte maneira. O NFA adivinha primeiro . Em seguida, verifica se e que , movendo-se de para não determinística. Isso pode ser formalizado da seguinte maneira:
R(L)={yx∈Σ∗:xy∈L}.
L⟨Σ,Q,F,δ,q0⟩⟨Σ,Q′,F′,δ′,q′0⟩q=δ(q0,x)δ(q,y)∈Fδ(q0,x)=qyx
- Os estados são . Além do estado inicial , os estados são , onde é o estado que adivinhámos, é o estado atual especifica se estamos em a parte da entrada (quando 1) ou na parte da entrada (quando 2).Q′={q′0}∪Q×Q×{1,2}q′0⟨q,qcurr,s⟩qqcurrsyx
- Os estados finais são : aceitamos quando .F′={⟨q,q,2⟩:q∈Q}δ(q0,x)=q
- As transições implementam a adivinhação .δ′(q′0,ϵ)={⟨q,q,1⟩:q∈Q}q
- As transições (para cada e ) simulam o DFA original.δ′(⟨q,qcurr,s⟩,σ)=⟨q,δ(qcurr,σ),s⟩q,qcurr∈Qs∈{1,2}
- As transições , para cada e , implementam o movimento da parte para a parte. Isso só é permitido se atingirmos um estado final na parte .δ′(⟨q,qf,1⟩,ϵ)=⟨q,q0,2⟩q∈Qqf∈Fyxy
Outra variante da técnica incorpora contadores limitados. Como exemplo, vamos considerar o fechamento da distância de edição de alteração :
Dado um DFA para , e construa um NFA para do seguinte modo:
Ek(L)={x∈Σ∗: there exists y∈L whose edit distance from x is at most k}.
⟨Σ,Q,F,δ,q0⟩L⟨Σ,Q′,F′,δ′,q′0⟩Ek(L)
- O conjunto de estados é , em que o segundo item conta o número de alterações feitas até o momento.Q′=Q×{0,…,k}
- O estado inicial é .q′0=⟨q0,0⟩
- Os estados de aceitação são .F′=F×{0,…,k}
- Para cada temos transições .q,σ,i⟨δ(q,σ),i⟩∈δ′(⟨q,i⟩,σ)
- As inserções são manipuladas pelas transições para todos os modo que .⟨q,i+1⟩∈δ′(⟨q,i⟩,σ)q,σ,ii<k
- As exclusões são manipuladas por transições para todos os modo que .⟨δ(q,σ),i+1⟩∈δ′(⟨q,i⟩,ϵ)q,σ,ii<k
- As substituições são identificadores semelhantes pelas transições para todos os tal que .⟨δ(q,σ),i+1⟩∈δ′(⟨q,i⟩,τ)q,σ,τ,ii<k