You are on page 1of 3

Autômato Finito Não Determinístico (AFN

)


O não-determinismo é uma importante generalização dos modelos de máquinas, sendo de
fundamental importância no estudo da teoria da computação e da teoria das linguagens formais.
Nem sempre a facilidade do não-determinismo aumenta o poder de reconhecimento de linguagens
de uma classe de autômatos. Por exemplo, conforme será mostrado adiante, qualquer Autômato
Finito Não-Determinístico pode ser simulado por um Autômato Finito Determinístico.

A facilidade do não-determinismo para autômatos finitos é interpretada como segue: a
função programa, ao processar uma entrada composta pelo estado corrente e o símbolo lido, tem
como resultado um conjunto de novos estados. Visto que uma máquina é composta por fita,
unidade de controle e programa; pode-se afirmar que um AFN assume um conjunto de estados
alternativos, como se houvesse uma multiplicação da unidade de controle, uma para cada
alternativa, processando independentemente, sem compartilhar recursos com as demais. Assim, o
processamento de um caminho não influi no estado, símbolo lido e posição da cabeça de leitura
dos demais caminhos alternativos.











Observe que, ao contrário do que acontece nos AFDs, nos AFNs, um mesmo símbolo pode
ser lido a partir de um dado estado para dois ou mais estados. Isto é, pode haver mais de uma
transição, a partir de um mesmo estado, com o mesmo símbolo a ser lido.

Um AFN é uma quíntupla M = (E, Q, o, q
0
, F), onde:
E = Alfabeto
Q = Conjunto finito de estados
o = Função de transição ou programa. ( o: Q x E  2
Q
)
q
0
= estado inicial do AF. (q
0
e Q)
F = Conjunto de estados finais. F _ Q

Função de Transição ou Programa (o)

É uma função total. Ou seja, é definida para todos os elementos do domínio Q x E.

Ex.: Dado o AFN M
1








q
p
2
p
N
p
1

a
a
a
...
estado anterior
símbolo lido
conjunto de novos estados
q
o
q
1
q
2
1
1
0
1
1
Cada uma das suas partes poderia ter sido representada separadamente:

Alfabeto = {0,1}
Conjunto de Estados = {q
0
, q
1
, q
2
}
Estado Inicial = q
0
Conjunto de Estados Finais = {q
0
, q
2
}
Função de Transição ou Programa:

o 0 1 A função de transição ou programa sempre estará definida para todo o
domínio. No pior caso, o resultado dela será o conjunto vazio, que é
também um elemento do conjunto das partes de Q.
q
0
C {q
1
, q
2
}
q
1
{q
2
} C
q
2
C {q
1
, q
2
}

OBS.: Todo AFD é um AFN, mas nem todo AFN é um AFD.



Função de Transição ou Programa Estendida a Palavras (o*)

o*(q, c) = {q}
o*(q, aw) = {p| - r e o(q, a) e p e o*(r, w)}

Para provar formalmente se uma palavra w é aceita por um AFN qualquer M = (E, Q, o, q
0
,
F), deve ser verificado se o*(q
0
, w) · F = C. Ou seja, o conjunto de estados onde é possível parar
no autômato, após a leitura da palavra w, deve ter algum estado em comum com o conjunto de
estados finais deste.

Caso se deseje provar que uma palavra é aceita, basta provar por um dos caminhos que
ela é lida e aceita. Para se provar que uma palavra não é aceita por um autômato, deve-se provar
por todos os caminhos possíveis que ela não pode ser aceita.


Função de Transição ou Programa Estendida a Conjunto de Estados (o’)

Dado um conjunto de estados P = {p
1
, ... , p
N
} e um símbolo a de um alfabeto, a função de
transição ou programa estendida ao conjunto de estados P, denotada por o’(P, a), é a união dos
resultados da aplicação da função programa a cada um dos elementos de P. Ou seja:

o’(P, a) = o(p
1
, a) ... o(p
N
, a)


Conversão de AFN para AFD

Para todo e qualquer AFN, é possível encontrar um AFD que seja equivalente a ele, ou seja, que
reconheça a mesma linguagem reconhecida pelo AFN.

Dado um AFN M
1
= (E, Q, o, q
0
, F), é possível encontrar um AFD M
1
= (E, Q’, o’, {q
0
}, F’), onde:

Q’ = 2
Q

F’ = {p e Q | p · F = C}

Ao final do processo de conversão, todos os estados que não fazem parte de um caminho que leve
do estado inicial {q
0
} a qualquer um dos finais deve ser eliminado, para que o autômato seja
minimizado. Ou seja, se um estado não consegue ser atingido a partir do inicial, ou ainda se ele
não dá acesso a um estado final, ele pode ser desprezado.
Ex.: Dado o AFN M
1
abaixo, podemos encontrar um AFD M
2
que seja equivalente a ele. A
linguagem aceita por eles deve ser L = { w e {a, b}* | a é sufixo de w }.






Construção do AFD M
2
:

Q’ = { C, {q
0
}, {q
1
}, {q
0
, q
1
} }
F’ = { {q
1
}, {q
0
, q
1
} }

o’ a B
C C C
{q
0
} {q
0
, q
1
} {q
0
}
{q
1
} C C
{q
0
, q
1
} {q
0
, q
1
} {q
0
}
















Os estados C e {q1}
podem ser eliminados,
pois ambos não podem
ser atingidos a partir do
estado inicial ({q0}).
Os estados restantes,
agora, podem ser
renomeados.
q
o
q
1
a, b
a
b
b

{q
1
}

{q
0
,q
1
}


C

{q
0
}
a, b
a, b
a
a
b
b

{q
0
,q
1
}


{q
0
}
a
a
b

q
1



q
0

a
a
b

w)} Para provar formalmente se uma palavra w é aceita por um AFN qualquer M = (. F). q2}  {q1. q2} Estado Inicial = q0 Conjunto de Estados Finais = {q0. q2} A função de transição ou programa sempre estará definida para todo o domínio. q0. F’). F). denotada por ’(P. para que o autômato seja minimizado. é possível encontrar um AFD M1 = (. a)  .: Todo AFD é um AFN. . Q . deve ser verificado se *(q0.Cada uma das suas partes poderia ter sido representada separadamente: Alfabeto = {0. . aw) = {p|  r  (q. se um estado não consegue ser atingido a partir do inicial. . ou ainda se ele não dá acesso a um estado final. o conjunto de estados onde é possível parar no autômato. w)  F  . a função de transição ou programa estendida ao conjunto de estados P. Função de Transição ou Programa Estendida a Conjunto de Estados (’) Dado um conjunto de estados P = {p1. a) Conversão de AFN para AFD Para todo e qualquer AFN. ) = {q} *(q. todos os estados que não fazem parte de um caminho que leve do estado inicial {q0} a qualquer um dos finais deve ser eliminado. Q. após a leitura da palavra w. deve-se provar por todos os caminhos possíveis que ela não pode ser aceita..1} Conjunto de Estados = {q0. que é também um elemento do conjunto das partes de Q. q2} Função de Transição ou Programa:  q0 q1 q2 0  {q2}  1 {q1. ou seja. Ou seja. Ou seja: ’(P. Ou seja. o resultado dela será o conjunto vazio. OBS.. Dado um AFN M1 = (. Função de Transição ou Programa Estendida a Palavras (*) *(q. mas nem todo AFN é um AFD. {q0}.. a) e p  *(r. onde: Q’ = 2 F’ = {p  Q | p  F  } Ao final do processo de conversão. a) = (p1. a). basta provar por um dos caminhos que ela é lida e aceita. ele pode ser desprezado. Caso se deseje provar que uma palavra é aceita. deve ter algum estado em comum com o conjunto de estados finais deste. q1. Q’. No pior caso.  (pN. . Q.. pN} e um símbolo a de um alfabeto. é a união dos resultados da aplicação da função programa a cada um dos elementos de P. ’. Para se provar que uma palavra não é aceita por um autômato. é possível encontrar um AFD que seja equivalente a ele. q0. que reconheça a mesma linguagem reconhecida pelo AFN.

q1} } ’  {q0} {q1} {q0.Ex. {q0}. {q0. agora. q1}  {q0. {q0. {q1}. A linguagem aceita por eles deve ser L = { w  {a. b  a. podem ser renomeados. q1} B  {q0}  {q0} b {q0} b a a. podemos encontrar um AFD M2 que seja equivalente a ele. a.: Dado o AFN M1 abaixo. {q0. b}* | a é sufixo de w }. q1} a  {q0.q1} a b q0 b a q1 a . pois ambos não podem ser atingidos a partir do estado inicial ({q0}). b qo a q1 Construção do AFD M2: Q’ = { . q1} } F’ = { {q1}.q1} a b {q0} b a Os estados restantes. {q0. b {q1} Os estados  e {q1} podem ser eliminados.