Você está na página 1de 22

RESOLUÇÃO LISTA DE EXERCÍCIOS CAP 1 

 
 
1. 
Autômato Finito Determinístico: ​é uma 5-upla (Q, Σ, , q 0 , F), onde 
Q é o conjunto de estados; 
Σ é o alfabeto; 
: Q x Σ ↦ Q é a função de transição; 
q 0 ∈ Q é o estado inicial; 
F é o conjunto de estados de aceitação. 
 
Autômato Finito Não Determinístico: é​ uma 5-upla (Q, Σ, , q 0 , F), onde 
Q é o conjunto de estados; 
Σ é o alfabeto; 
: Q x Σ ↦ 𝒫(Q) é a função de transição; 
q 0 ∈ Q é o estado inicial; 
F é o conjunto de estados de aceitação. 
 
Linguagem Regular:  
- Se a ∈ Σ ou a = ε , { a } é uma linguagem regular. 
- Ø é uma linguagem regular. 
- Se L1 e L2 são linguagens regulares, então L1 ∪ L2 é uma linguagem regular. 
- Se L1 e L2 são linguagens regulares, então L1L2 é uma linguagem regular. 
- Se L é uma linguagem regular, então L* é uma linguagem regular. 
 
Expressão Regular: 
- Se a ∈ Σ , a é uma expressão regular. 
- Ø é uma expressão regular. 
- ε é uma expressão regular. 
- Se R1 e R2 são expressões regulares, então R1 ∪ R2 é uma expressão regular. 
- Se R1 e R2 são expressões regulares, então R1R2 é uma expressão regular. 
- Se R é uma expressão regular, então R* é uma expressão regular. 
 
  
2.  
 
Para  provar  que  um  AFD  e um AFN reconhecem a mesma classe de linguagens, é necessário 
provar  que,  dada  um  AFD,  podemos  construir  um  AFN  equivalente  e  que,  dada  um  AFN, 
podemos construir uma AFD equivalente.  
 
 
Caso 1: Dada uma AFD, construir uma AFN equivalente 
 
Uma  AFD  por  si  só  satisfaz  a  definição de AFN. Logo, dada uma AFD A que reconhece uma 
linguagem R, a própria AFD A será uma AFN que também reconhece R. c.q.d 
Caso 2: Dada uma AFN, construir uma AFD equivalente 
 
Ideia da prova:  
A  idéia  para  transformar  uma  AFN  numa  AFD  consiste  em  memorizar  em  quais  estados  a 
AFN  estaria  depois  da  leitura  de  cada  símbolo  da  cadeia.  É  importante  perceber  que 
memorizar  em  quais  estados  a  AFN  estaria  significa  memorizar  qual  subconjunto  do 
conjunto de estados da AFN está ativo em cada computação. Para um AFN com k estados, há 
2k subconjunto  de  estados.  Logo,  podemos  construir  a  AFD  dada  uma  AFN,  criaremos  um 
estado  para  cada  elemento  do  conjunto  das  partes  da  AFN  e  criaremos  as  transições  de 
forma  a  "apontar"  qual  seria o subconjunto de estados resultante se computássemos a cadeia 
até o ponto atual. 
 
Definição auxiliar:  
E(R) = {q | q pode ser atingido a partir de R viajando − se ao longo de 0 ou mais setas ε}  
 
Prova: 
Seja  uma  AFN  A  =  (Q, Σ, δ, q o , F ) que  reconhece  uma  linguagem  R.  Podemos  definir  uma 
AFD B que também reconhece R através da tupla (Q′, Σ, δ ′, q o ′, F ′) onde: 
 
● Q′ = P (Q)  
● q o ′ = E{ q o } 
● δ ′(R, a) = {q ∈ Q | q ∈ E (δ(r, a)) para algum r ∈ R}  
● F ′ = {R ∈ Q′ | R contém um estado de aceitação pertencente a F }  
 
3. 

Fechamento sob União 

Para  provar  que  a  classe  das  linguagens  regulares  é  fechada  sob a união devemos mostrar que se 


A  e B são duas linguagens regulares quaisquer, a união dela também será uma linguagem regular. 
Para  fazer  isso  mostramos  que  podemos  fazer  uso  dos  AFDs  M1  e  M2,  que  reconhecem  A  e  B 
respectivamente,  para  construir  um  terceiro  AFD  M,  que  reconhece  a  união  de  A  e  B.  Esse 
processo  pode  ser  simplificado  se  usarmos AFNs (que já mostramos serem equivalentes a AFDs). 
A  AFN  M  vai  passar  sua  entrada  por  ambas  as AFNs M1 e M2, e aceitará a palavra caso uma das 
duas aceite. 

A prova: 

Se  A  e  B  são  linguagens  regulares,  então existem AFNs M1(Q1, ∑1,  1, q0_1, F1) e M2(Q2, ∑2,  2, 


q0_2,  F2)  que  reconhecem  A  e  B,  respectivamente.  Vamos  usar  M1  e M2 para construir um AFN 
M que reconhece a união de A e B da seguinte maneira: 

M = ( 

Q = Q1 U Q2 U q0, 

∑ = ∑1 U ∑2, 

q0 = q0, 
= 1 U 2 U { (q0, ε) = {q0_1, q0_2} }, 

F = F1 U F2 

Fechamento sob Concatenação 

A  para  essa  propriedade  é  similar  ao  caso  anterior,  porém  agora  a  AFN  M  irá  ver  se  é  possível 
partir  a  palavra  w  recebida  em  dois  pedaços  w1 e w2 de tal forma que w1 sejá aceita por M1 e w2 
seja aceita por w2. 

A prova: 

Se  A  e  B  são  linguagens  regulares,  então existem AFNs M1(Q1, ∑1,  1, q0_1, F1) e M2(Q2, ∑2,  2, 


q0_2,  F2)  que  reconhecem  A  e  B,  respectivamente.  Vamos  usar  M1  e M2 para construir um AFN 
M que reconhece a concatenação de A e B da seguinte maneira: 

M = ( 

Q = Q1 U Q2, 

∑ = ∑1 U ∑2, 

q0 = q0_1, 

= 1 U 2 U { (q, ε) = {q0_2}, se q ∈ F1 }, 

F = F2 

Fechamento sob Estrela 

Mais  uma  vez,  teremos  uma  prova  similar  as  anteriores,  mais  especificamente,  essa  prova  será 
similar  a  prova do fechamento sob concatenação, uma vez que a operação de estrela é equivalente 
a  concatenação  de  uma  linguagem  consigo  mesma  uma  quantidade qualquer de vezes (​inclusive 0 
vezes​). 

A prova: 

Se  A  é  uma  linguagem  regular,  então  existe  uma  AFN M1(Q1, ∑1,  1, q0_1, F1) que reconhece A. 


Vamos  usar  esse  AFN M1 para construir um AFN M que reconhece a concatenação de A consigo 
mesma um número qualquer n de vezes maior que ou igual a 0 da seguinte maneira: 

M = ( 

Q = Q1 U q0, 

∑ = ∑1, 

= 1 U { (q0, ε) = q0_1; (q, ε) = q0_1, se q ∈ F1 }, 

F = F1 U q0 

4.  

a)  

b)  

c)  
d) . 
e)  

f)  
g)  

h)  
i)  
 
5. 
a. Se  M  é  determinístico  significa  que  dada  uma  palavra  de  entrada w existe uma única 
execução  possível  de  M  sobre  w.  Isso  quer  dizer  que  há  apenas  uma  possível 
sequência de estados pelos quais o AFD irá passar ao processar a entrada w. 
b. Como  M  é  determinístico,  sabemos  que  existe  uma  única  sequência de estados pelos 
quais  M  passa  ao  avaliar  uma  dada  palavra  w.  Devido  a  isso,  sabemos  que  existe  um 
único  estado  possível  no  qual  M  para  ao completar a leitura de w. Se M aceita w, isso 
quer  dizer  que  M  para  em  um  estado  de  aceitação,  porém  como  os  estados  de 
aceitação  e  rejeição  foram  trocados  em  M’,  isso  quer  dizer  que  o  estado  no  qual  M’ 
para  será  um  estado  de  rejeição,  e,  portanto,  M’  rejeitará  toda  palavra que M aceitar. 
Da  mesma  forma  o  contrário:  quando  M  roda  sobre  uma  palavra  w,  e  a  rejeita,  isso 
quer  dizer  que  quando  M  acaba  de  ler  w  ele  deve  se  encontrar  em  um  estado  de 
rejeição,  mas  como  os  estados  são  trocados  em  M’,  esse  estado  passa  a  ser  de 
aceitação,  e  M’  deve  aceitar  w.  Se  M’  aceita  toda  palavra  que  M rejeita, e rejeita toda 
palavra  que  M  aceita,  M’  reconhece  o  complemento  da  linguagem  de  M,  por 
definição. 
c. Pode-se  verificar  que  isso  não  é  verdade  para  AFN  com  um  exemplo  simples de dois 
estados.  com  apenas  duas  transições:  O  primeiro  estado  tem  uma  transição  para  o 
segundo  ao  ler  a  letra  ‘a’,  e  uma  transição  para  si  mesmo  ao  ler  essa  mesma  letra.  O 
segundo  estado  é  um  estado  de  aceitação.  Assim, esse automato aceita a palavra ‘a’, e 
‘aa’,  e  ‘aaa’,  e  assim  por  diante.  Se  trocarmos  os  estados  de  aceitação,  isto  é,  o 
primeiro  passar  a  ser  o  único  estado  de  aceitação,  veremos  que  esse  novo  AFN  M’ 
continua aceitando ‘a’, e ‘aa’, e ‘aaa’, e assim por diante. 
 
 
 
 
6.  

a.  

b.  

c.  
d.  
 
 
​7. 

 
 
8.  ​Para  provar  que  as  expressões  regulares  reconhecem  a  classe  das  linguagens  regulares  e 
não que isso. Precisamos provar duas direções: 
 
- Se  uma  linguagem  é  descrita  por  uma  expressão  regular,  então  há  um  AFD  que  a 
descreve. 
 
Vamos  provar  essa  direção  através  de  um  algoritmo  que  converte  uma  expressão  regular 
genérica  em  um  AFN.  Como  AFN  e  AFD  são  modelos  equivalentes  (questão  2),  então 
teremos  provado  o  enunciado.  Utilizaremos  a  definição  formal  para  criar  um  algoritmo  de 
construção capture todo o poder expressivo das expressões regulares. 
 

 
4. R = R1 ⋃ R2 , R = R1 ⋂ R2 e R = R1   *

 
Equivalente  a  provar  que  a  classe  das  linguagens  regulares  é  fechada  sobre  as  operações 
união, intersecção e estrela, que estão na questão 3. 
 
- Se  uma  linguagem  é  descrita  por  um  AFD,  então  há  uma  expressão  regular  que  a 
descreve. 
 
Essa  direção  da  prova  é  mais  complicada  e  necessita  da  utilização  de  um  modelo  especial 
chamado  AFNG  para  formalizarmos  a  prova. Passaremos pelos seguintes passos para provar 
esse enunciado: 
 
1. Apresentar o novo modelo AFNG e a conversão de um AFD em um AFNG.  
2. Apresentar  um  algoritmo  que  converte  uma  AFNG  de  n  estados  em uma AFNG de 2 
estados e provar sua corretude. 
 
Uma  prova  completa  também  necessitaria  provar  a  equivalência  entre  AFNG  e AFD, porém 
isso  será  considerado  trivial para essa prova devido ao tamanho da questão e do fato de que o 
livro também não se preocupa em provar essa equivalência. 
 
Definiremos um AFNG da seguinte forma: 
 

 
Para converter um AFD para um AFNG seguimos uma sequência curta de passos: 
1. Criamos  dois  novos  estados,  um  que  será  o  novo  estado  inicial  e  que  tem  uma 
transição  espontânea  para  o  estado  inicial  atual,  e  um  que  será  o  novo  estado  de 
aceitação,  para o qual todos os atuais estados de aceitação passam a ter uma transição 
espontânea. 
2. Com  esse  novo  estado  de  aceitação  definido,  os  outros  estados  de  F  deixam  de  ser 
estados de aceitação 
3. Para  todo  par  de  estados  q1  e  q2,  se  q1  não  possui  nenhuma  transição  para  q1, 
adicionamos  a  transição  (q1,  ∅)  =  q2.  A  transição  no  conjunto  vazio  é  diferente  da 
transição  no  símbolo  vazio,  sendo  seu  oposto:  se  a  transição  no  símbolo  vazio 
acontece  imediatamente  sem  precisar  de  qualquer  entrada,  a  transição  no  conjunto 
vazio ​nunca​ acontece, independente do símbolo da entrada. 
Com  a  AFNG gerada, podemos aplicar o algoritmo que converte uma AFNG de n estados em 
uma  AFNG  de  dois  estados,  em  que  a  única  transição  acontece  justamente  na  expressão 
regular  que  descreve  a  linguagem  da  AFD.  Esse  algoritmo  consiste  em  eliminar  um  estado 
intermediário por vez, até que sobre apenas o inicial e o final. 
O algoritmo consiste em pegar um conjunto de três estados por vez, na seguinte formulação: 

 
A  partir  daí  é  possível  ir  eliminando  as  dependências  do  estado  intermediário  até  que  ele 
possa  ser  eliminado  do  AFNG.  Esse  processo  é  repetido  até  que  se  chegue  a  forma  final 
desejada. 
 
 
 
9.  ​A  prova  de  que  uma  AFN  pode  ser  convertida  para  uma  AFN  com  um  único  estado  de 
aceitação, criaremos um algoritmo que realize essa conversão e provaremos sua corretude. 
 
Seja  um  AFN  N  =  (Q, Σ, δ, q o , F )   que  reconhece  a  linguagem  R.  Podemos  definir  um AFN 
M = (Q′, Σ, δ ′, q o , {q novo }) tal que: 
 
● Q′ = Q ⋃ q novo  
● δ ′(R, a) = { 
/ R para algum estado q ∈ F  
δ (R, a) se q ∈
δ(R, a) ⋃ q novo se q ∈ R para algum estado q ∈ F e a = ε  
δ (R, a) se q ∈ R para algum estado q ∈ F e a =/ ε  

 
Para provar a corretude do algoritmo, suponha uma palavra w.  
 
- Caso  w ∈ R ,  então N irá parar num estado de aceitação. Como M contém as mesmas 
transições  que  N,  M  também  parará  no  mesmo  estado  que  N,  que  não  é  mais  um 
estado  de  aceitação.  Como para todo estado de aceitação de N há uma transição vazia 
para  q novo   ,  M  também  parará  num  estado  de  aceitação.  Logo,  M  aceita  todas  as 
palavras que N aceita. 
- Caso  w ∈/ R ,  então  N  irá  parar  em  um  estado  diferente  do  estado  de  aceitação. 
Como  M  tem  as  mesmas  transições  que  N,  com  adição  das  transições  vazias  para 
q novo   e  não  há  nenhuma transição vazia saindo de  q novo , é impossível  q novo  pertencer 
ao  conjunto  de  estados  ativos  no  final  da  computação  de  w.  Como  q novo   é  um  único 
estado de aceitação de M, então M não aceita nenhuma palavra que N não aceita. 
Logo, M reconhece R, como queríamos demonstrar. 
  
 
 
 
 
 
 
 
 
 
 
 
10. 
 
 
11.  
 
Essa prova é dividida na prova de dois lemas: 
 
● Se uma linguagem é regular, então há uma AFN-TODOS que a reconhece 
 
Uma  linguagem  é  regular  se é reconhecida por um AFD. Um AFD satisfaz a definição de um 
AFN-TODOS  onde  todas  as  transições são definidas e não são usadas transições vazias, logo 
esse lema é verdadeiro. 
 
● Se uma linguagem é reconhecida por um AFN-TODOS, então a linguagem é regular. 
 
Se  uma  linguagem  regular,  é  reconhecida  por  um  AFD.  Para  provar o lema então, criaremos 
um algoritmo que, dado um AFN-TODOS, constroi um AFD equivalente. 
 
Seja um AFN-TODOS T = (Q, Σ, q i , δ, F ) , construa uma AFD D = (Q′, Σ, q ′i , δ ′, F ′) tal que: 
 
● Q′ = P (Q)  
● q ′i = E({q i })  

● δ ′(R, a) = ∪ E (δ(r, a))  


r∈R
● F ′ = P (F )  
 
Observe  que  a  definição  da  AFD  D é bastante parecida com a conversão AFD -> AFN, com a 
diferença  no  conjunto  de  aceitação,  onde  F ′ = P (F )   garante  que  a  AFD  só  irá  aceitar  se  o 
estado  atual  simbolizar um subconjunto do conjunto das partes dos estados da AFN-TODOS 
que sejam todos estados de aceitação. Dessa forma, provamos o lema. 
 
Como  as  duas  direções  do  teorema  foram  provadas,  podemos  concluir  que  a  classe  de 
linguagens  reconhecidas  por  uma  AFN-TODOS  é  a  classe  das  linguagens  regulares,  como 
queríamos demonstrar. 
 
12. 
 

 
 
A descrição da linguagem é equivalente a reconhecer palavras que: 
 
1. Não comecem com 0 
2. Não terminem com 1 (par) 
3. Não terminem com dois 0 (não divisível por 4) 
 
Ao  começar a computação, a AFD acima, que chamaremos de D, caso leia um 0, não satisfará 
a condição 1 e logo passará para um estado "morto". Caso leia um 1, ela passa para um estado 
onde  verificará  as  outras  duas  condições.  Caso  leia  um  0,  a  AFD  irá  para  o  estado  de 
aceitação,  pois  não  terminará  com  0  e  o  penúltimo  símbolo  foi  1,  logo  não  terminará  com 
dois  0.  Caso  leia  00,  a  cadeia  irá  ferir  a  condição  3,  logo  não  aceitará.  Caso  leia  1,  0^n1  ,  a 
AFD continuará no segundo estado, pois não satisfaz ainda a condição de ser par. 
 
 
13.  
a) 
 
Utilizaremos a prova por construção para provar que NAOPREFIXO é regular.  
 
Dado  um  AFD  A  =  (Q, Σ, q i , δ, F )   que  reconhece  uma  linguagem  R.  Construiremos  uma 
AFD  B  que  reconhece  NAOPREFIXO(R).  A  idéia  consiste  em  inutilizar  qualquer  transição 
saindo de um estado de aceitação. Construa B = (Q′, Σ, q i , δ ′, F ) onde: 
 
● Q′ = Q ⋃ {q morto }  
● δ ′(r, a) = {  
q morto se r ∈ F  
q morto se r = q morto  
/ F  
δ (r, a) se r ∈
 

 
 
Seja w uma cadeia. 
 
● Caso  w ∈ R   e  w  tenha  um  prefixo  próprio  pertencente  a  R,  B não aceitará w, pois a 
computação de b terá passado por q morto e não há formas de sair dele. 
● Caso  w ∈ R e w não tenha um prefixo próprio pertencente a R, B aceitará w, pois B é 
composto das mesmas transições de A. 
● Caso  w ∈
/ R e  w  não  tenha  um  prefixo  próprio  pertencente  a  R,  B  não  aceitará  w, 
pois  B  é  composto  das  mesmas  transições  de  A,  logo  parará  num  estado  de  não 
aceitação. 
● Caso  w ∈ / R e  w  tenha  um  prefixo  próprio  pertencente a R, B não aceitará w, pois B 
terminará em q morto . 
 
Logo, B reconhece NAOPREFIXO(R), como queríamos demonstrar. 
 
b) 
 
Utilizaremos a prova por construção para provar que NAOESTENDE é regular.  
 
Dado  um  AFN  A  =  (Q, Σ, q i , δ, F )   que  reconhece  uma  linguagem  R.  Construiremos  uma 
AFN  B  que  reconhece  NAOESTENDE().  A  idéia  consiste  em  modificar  o  conjunto  dos 
estados  de  aceitação  para  não  permitir  estados  que  deem  em outros estados de aceitação em 
algum momento da computação. Construa B = (Q, Σ, q i , δ, F ′) onde: 
 
● F ′ = { q ∈ F | não há transição saindo de q de tamanho ≥ 1 para algum estado r ∈ F }  
 
Seja w uma cadeia 
 
● Caso  w ∈ R   e  w  seja  um  prefixo  próprio  de  uma  cadeia  de R, B não irá aceitar, pois 
caso  w  seja  um  prefixo  próprio  de  uma  cadeia  de  R,  significa  que  há um caminho do 
estado  de  aceitação  q1  da  computação  de  w  até  um  outro  estado  de  aceitação  q2.  q2 
não  pode  ser  um  estado  de  aceitação  de  B  pela  definição  do  conjunto  de  estados  de 
aceitação F'. 
● Caso  w ∈ R e  w  não  seja  um prefixo próprio de uma cadeia de R, B irá aceitar pois B 
contém as mesmas transições de A e o estado final não fere a restrição dada por F'. 
● Caso  w ∈
/ R ,  B  não  irá  aceitar  pois  B  contém as mesmas transições de A e nenhum 
estado de não aceitação foi transformado em um estado de aceitação. 
 
Logo, NAOESTENDE é regular, como queríamos demonstrar. 
 
14. 
 
a) L3 = { w ∈ {0, 1} * | contém exatamente dois 0 e termina com 0}  
b) maxcadeia(L)  é  equivalente  a  NAOESTENDE.  Logo  maxcadeia  é  regular  a  partir  da 
mesma prova. 
c) Não.  Suponha  que  o  enunciado  seja  verdadeiro.  Considere  uma  linguagem  L  = 
{0i 1j | i > j } .  L  não  é  regular,  mas  aplicar  maxcadeia(L)  resulta  em  {},  que  é  regular. 
Logo, por contradição, o enunciado é falso. 
 
15. 

 
16.
 
 
17.  Através  da  prova  do  fechamento  da  concatenação  sobre  linguagens  regulares,  sabemos 
que  podemos  construir  um  AFN  A  que  reconhece  L1  ⋂  L2  adicionando  somente  transições 
vazias  dos  estados  de  aceitação  de  L1  para  o  estado  inicial  de  L2.  Logo,  A  tem  n1  +  n2 
estados.  Sabemos  que  podemos  converter um AFN em um AFD com um conjunto de estados 
igual ao conjunto das partes dos estados da AFN. Como P(Q)  =  2|Q| e | QA | = n1 + n2, podemos 
construir um AFD que reconhece L1 ⋂ L2 com 2n1 +n2 estados, como queríamos demonstrar. 
 
 
 
 
 
18. 

 
 
19.  
 
Provaremos  por  construção.  Suponha  uma  AFN  A  =  (Q, Σ, δ, q o , F )   que  reconhece  uma 
linguagem regular R. Construiremos uma AFN B = (Q′, Σ, δ ′, q o ′, F ′) que reconhece AR . 
Para isso utilizaremos a seguinte função auxiliar:  
 
CONTRARIO( δ ) = { δ ′ | δ ′(q, a) = q ′ se δ(q ′, a) = q ∈ δ}  
 
CONTRARIO  recebe  uma  função  de  transição  e  troca  os  estados  de  entrada  com os estados 
de saída para cada função possível. 
 
Logo, AR será tal que: 
 
● Q′ = Q ⋃ {q novo }  
● q o ′ = q novo  
● F ′ = { q o } 
● δ ′(R, a) = {  
F ⋃ CONTRARIO( δ ) se q novo ∈ R e a = ε  
CONTRARIO( δ ) caso contrário 

 
A  ideia  é  inverter  as  transições  de A, criar um novo estado inicial com transições vazias para 
os  antigos  estados  de  aceitação  e  tornar  o  antigo  estado  inicial  o  novo  estado  de  aceitação. 
Logo, AR é regular. 
 
20.  
a) B  pode ser descrita pela expressão regular  1Σ* 1Σ* . Como B pode ser descrita por uma 
expressão regular, B é regular. 
b) Provaremos  que  C  não  é  regular  através  do  lema  de  bombeamento.  Suponha  que  C 
seja  regular  e  seja  a  cadeia  w  =  1p 01p .  Se  dividirmos  w  em  xyz  de  forma  que  y tenha 
somente  1’s  da  esquerda  da  cadeia  e  bombearmos  para  baixo  de  forma  a  ter  a cadeia 
xz,  xz  não  será  regular  pois  o  número  de  1’s  a  esquerda  será  menor  que o número de 
1’s  a  direita.  Como  há  uma  cadeia  válida  que,  se  bombeada,  não  pertence  a 
linguagem,  C  não  satisfaz  o  lema  de  bombeamento.  Logo,  C  não  é  regular  por 
contradição. 
 
21. 
 
a) Provaremos  por  contradição. S abemos que abn cn = F ⋂ ab* c* .  Suponha  que  F  é 
regular.  Como  ab* c* é  regular,  abn cn   também  deve  ser  regular  pela  propriedade  do 
fecho  da  intersecção  sobre  a  classe  das  linguagens  regulares.  Porém,  abn cn   não  é 
regular, como provaremos abaixo: 
 
● L = abn cn não é regular 
 
Provaremos  por  contradição.  Suponha  que  L  seja  regular.  Então  L  satisfaz  o  lema  de 
bombeamento.  Suponha  a  cadeia  w  =  abp cp ∈ L .  Pelo  lema  do  bombeamento,  w  pode  ser 
dividida em xyz tal que:  
 
1. |xy| <= p 
2. |y| > 0 
3. xy * z ∈ L   
 
Vamos verificar todas as formas possíveis de dividir w em xyz. 
 
● Caso  y  seja  formado  só  pelo  a,  o  seu  bombeamento  faz  com  que  o  número de ‘a’ seja 
maior que 1, logo xy * z não pertencerá a linguagem. 
● Caso  y seja formado por ab*, o seu bombeamento também irá ferir a terceira condição 
pelo mesmo motivo do caso anterior. 
● Caso  y  seja  formado  apenas  por  b’s,  o  seu  bombeamento  fará  com  que  o  número  de 
b’s e c’s não sejam mais iguais, contrariando a terceira condição do lema. 
● Caso  y  seja  formado  por  b’s  e c’s, a cadeia resultante do bombeamento terá o número 
correto  de  b’s  e  c’s,  porém  na  ordem  errada. Assim, essa divisão contraria a condição 
3 do lema de bombeamento. 
 
Como  não  há  nenhuma forma de dividir w de forma que satisfaça o lema de bombeamento, L 
não é regular, como queríamos demonstrar. 
 
Como  L  não  é  regular,  pelo  fecho  da  intersecção  sobre  a  classe  das  linguagens  regulares  F 
também não pode ser regular, como queríamos demonstrar. 
b) 
 
Vamos  verificar  se  F  satisfaz  o  lema  de  bombeamento.  Para  isso,  vamos  verificar  todas  as 
possibilidades  de  cadeias  possíveis  e  vamos  mostrar  que  toda  cadeia  de  F  pode  ser 
bombeada.  
 
● Seja  a  cadeia  w  =  abp cp . Podemos  dividir  w  de  forma  que  y  tenha  somente  o  a,  e  seu 
bombeamento gerará uma cadeia ainda presente na linguagem.  
● Seja  a  cadeia  w  =  b* c* .  ab* c* . Podemos  dividir  w  de forma que y tenha somente b’s, e 
seu bombeamento gerará uma cadeia ainda presente na linguagem.  
● Seja  a  cadeia  w  =  aa*b*c*.  Podemos  dividir  w  de forma que y tenha somente o a, e seu 
bombeamento gerará uma cadeia ainda presente na linguagem.  
 
Como  não  há  uma  cadeia  de  F  que  não  satisfaça  o  lema  de  bombeamento,  F  satisfaz  o  lema 
de bombeamento.  
 
c)  Os  resultados  não  se  contradizem  por  que  o  lema  de  bombeamento  é  uma  condição 
necessária,  mas  não  suficiente  para  que  uma  linguagem  seja  regular.  Isto  é,  toda  linguagem 
regular  satisfaz  o  lema,  porém  isso  não  quer  dizer  que  toda  a  linguagem  não  regular  não 
satisfaz. 
 
 
 
22. 
a) Suponha  uma  cadeia  w  que  pertence  a  R1  e  uma  cadeia s que pertence a R2. Como w 
pertence  a  R1  e  R1 ≾ S1, w pertence a S1. Como s pertence a R2 e R2 ≾ S2, s pertence a 
S2.  Logo,  (R1  o  R2)  é  equivalente  a  ws.  Como  w  pertence  a  S1  e  s  pertence  a  S2,  ws 
pertence a (S1 ° S2). Logo, (R1 o R2) ≾ (S1 ° S2), como queríamos demonstrar. 
b) Suponha  uma  cadeia  w  que  pertence  a  R. w* pertence a R* por definição. Como R ≾ S, 
w  pertence  a  S.  Como  w  pertence  a  S,  w*  pertence  a  S*.  Logo,  como  w  é  uma  cadeia 
qualquer, R* ≾ S*, como queríamos demonstrar. 
c) Prova por indução: 
 
 
Caso base: n = 0 
 
(R 0 o S) ≾ T é​ equivalente a S ≾ T, que é verdadeiro através das pré-condições. 
 
Caso indutivo: Suponha (R i o S) ≾ T . ​Prove que (R i +1 o S) ≾ T . 
 
(R i+1 o S) ≾ T é equivalente a R o (R i o S) ≾ T . 
 
Como  (R  o  T)  ≾  T,  isso  significa  que,  para  qualquer  cadeia  w  ∈ R  e qualquer cadeia s  ∈ T , 
ws ∈ T . 
 
Seja a cadeia k ∈ (R i o S) . Como, pela hipótese indutiva, (R i o S) ≾ T , k
​ ∈ T . 
 
Logo, como w ∈ R e k ∈ T . wk ∈ T , por (R o T) ≾ T. 
 
Logo,  como  wk  ∈ T   é  equivalente  a  R o (R i o S) ≾ T ,  (R i +1 o S) ≾ T ,  ​como  queríamos 
demonstrar. 
 
 
23. 
 
a) Falso.  abn cn   não  é  regular  e  abn cn   ⊆ Σ* , que é regular. Logo, por contra exemplo, o 
enunciado é falso. 
b) Falso.  {a}   ⊆ abn cn .  {a}   é  regular,  enquanto  abn cn   não  é.  Logo,  por  contra 
exemplo, o enunciado é falso. 
c) Verdadeiro. Suponha que C U { ε } seja regular. Temos dois casos possíveis.  
 
● Caso ε ∈ C , C U { ε } = C, logo C é regular, o que contradiz a pré condição. 
● Caso  ε ∈
/ C ,  C  =  (C  U  { ε })  ⋂ {ε} .  Como  {ε}   é  regular  e  as  linguagens 
regulares  são  fechadas  sobre  a  operação  de  intersecção e união, C é regular, o 
que contradiz a pré condição. 
 
Como  a  suposição  sempre  chega  a  uma  contradição,  Se  C  não  é regular, então C U { ε } não é 
regular, como queríamos demonstrar. 

Você também pode gostar