Buscar

Operações de Linguagens Formais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 132 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 132 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 132 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Teoria da Computação
Linguagens Formais: Operações
Vilar da Camara Neto
1o período de 2015
cbnd
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 1 / 34
Formalização de linguagens: Operações básicas
Certas operações permitem representar uma linguagem de maneira
bem mais conveniente:
I Repetição
I Fecho de Kleene e Fecho Positivo de Kleene
I Agrupamento
I Concatenação
I União
I Interseção
I Subtração
I Complemento
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 2 / 34
Repetição
O operador de repetição aparece como um “expoente” após um
símbolo e indica o número de repetições desse símbolo:
I 02 é uma sequência de dois “0”s: 00
I 15 é uma sequência de cinco “1”s: 11111
I z3 é uma sequência de três “z”s: zzz
I k0 é uma sequência de zero “k”s: λ
Na verdade, qualquer símbolo repetido zero vezes gera λ.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 3 / 34
Repetição
O operador de repetição aparece como um “expoente” após um
símbolo e indica o número de repetições desse símbolo:
I 02 é uma sequência de dois “0”s: 00
I 15 é uma sequência de cinco “1”s: 11111
I z3 é uma sequência de três “z”s: zzz
I k0 é uma sequência de zero “k”s: λ
Na verdade, qualquer símbolo repetido zero vezes gera λ.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 3 / 34
Repetição
O operador de repetição é muito útil na definição de linguagens:
L = {ak | k < 5}
“Conjunto de sequências de as dado que tenham menos de 5 letras.”
Ou: “Conjunto de sequências de as com menos de 5 letras.”
L = {λ, a, aa, aaa, aaaa}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 4 / 34
Repetição
O operador de repetição é muito útil na definição de linguagens:
L = {ak | k < 5}
“Conjunto de sequências de as dado que tenham menos de 5 letras.”
Ou: “Conjunto de sequências de as com menos de 5 letras.”
L = {λ, a, aa, aaa, aaaa}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 4 / 34
Repetição
O operador de repetição é muito útil na definição de linguagens:
L = {ak | k < 5}
“Conjunto de sequências de as dado que tenham menos de 5 letras.”
Ou: “Conjunto de sequências de as com menos de 5 letras.”
L = {λ, a, aa, aaa, aaaa}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 4 / 34
Repetição
O operador de repetição é muito útil na definição de linguagens:
L = {ak | k < 5}
“Conjunto de sequências de as dado que tenham menos de 5 letras.”
Ou: “Conjunto de sequências de as com menos de 5 letras.”
L = {λ, a, aa, aaa, aaaa}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 4 / 34
Repetição
O operador de repetição é muito útil na definição de linguagens:
L = {ak | k < 5}
“Conjunto de sequências de as dado que tenham menos de 5 letras.”
Ou: “Conjunto de sequências de as com menos de 5 letras.”
L = {λ, a, aa, aaa, aaaa}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 4 / 34
Repetição
O operador de repetição é muito útil na definição de linguagens:
L = {ak | k < 5}
“Conjunto de sequências de as dado que tenham menos de 5 letras.”
Ou: “Conjunto de sequências de as com menos de 5 letras.”
L = {λ, a, aa, aaa, aaaa}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 4 / 34
Repetição
O operador de repetição é muito útil na definição de linguagens:
L = {ak | k < 5}
“Conjunto de sequências de as dado que tenham menos de 5 letras.”
Ou: “Conjunto de sequências de as com menos de 5 letras.”
L = {λ, a, aa, aaa, aaaa}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 4 / 34
Repetição
O operador de repetição também pode ser aplicado sobre conjuntos
→ Neste caso, gera-se conjuntos de palavras:
I L = {0, 1}2 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 2: L = {00, 01, 10, 11}
I L = {a, b}3 é o conjunto de todas as palavras sobre {a, b} que
possuem tamanho = 3:
L = {aaa, aab, aba, abb, baa, bab, bba, bbb}
I L = {0, 1}0 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 0: L = {λ}
“Todas as palavras de tamanho = 0”: Independentemente do
alfabeto, só existe uma palavra de tamanho = 0! → λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 5 / 34
Repetição
O operador de repetição também pode ser aplicado sobre conjuntos
→ Neste caso, gera-se conjuntos de palavras:
I L = {0, 1}2 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 2: L = {00, 01, 10, 11}
I L = {a, b}3 é o conjunto de todas as palavras sobre {a, b} que
possuem tamanho = 3:
L = {aaa, aab, aba, abb, baa, bab, bba, bbb}
I L = {0, 1}0 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 0: L = {λ}
“Todas as palavras de tamanho = 0”: Independentemente do
alfabeto, só existe uma palavra de tamanho = 0! → λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 5 / 34
Repetição
O operador de repetição também pode ser aplicado sobre conjuntos
→ Neste caso, gera-se conjuntos de palavras:
I L = {0, 1}2 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 2: L = {00, 01, 10, 11}
I L = {a, b}3 é o conjunto de todas as palavras sobre {a, b} que
possuem tamanho = 3:
L = {aaa, aab, aba, abb, baa, bab, bba, bbb}
I L = {0, 1}0 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 0: L = {λ}
“Todas as palavras de tamanho = 0”: Independentemente do
alfabeto, só existe uma palavra de tamanho = 0! → λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 5 / 34
Repetição
O operador de repetição também pode ser aplicado sobre conjuntos
→ Neste caso, gera-se conjuntos de palavras:
I L = {0, 1}2 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 2: L = {00, 01, 10, 11}
I L = {a, b}3 é o conjunto de todas as palavras sobre {a, b} que
possuem tamanho = 3:
L = {aaa, aab, aba, abb, baa, bab, bba, bbb}
I L = {0, 1}0 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 0: L = {λ}
“Todas as palavras de tamanho = 0”: Independentemente do
alfabeto, só existe uma palavra de tamanho = 0! → λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 5 / 34
Repetição
O operador de repetição também pode ser aplicado sobre conjuntos
→ Neste caso, gera-se conjuntos de palavras:
I L = {0, 1}2 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 2: L = {00, 01, 10, 11}
I L = {a, b}3 é o conjunto de todas as palavras sobre {a, b} que
possuem tamanho = 3:
L = {aaa, aab, aba, abb, baa, bab, bba, bbb}
I L = {0, 1}0 é o conjunto de todas as palavras sobre {0, 1} que
possuem tamanho = 0: L = {λ}
“Todas as palavras de tamanho = 0”: Independentemente do
alfabeto, só existe uma palavra de tamanho = 0! → λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 5 / 34
Repetição
Exemplo 1:
L =
{
p ∈ {0, 1}n | n ≤ 2}
“Conjunto das palavras sobre o alfabeto {0, 1} dado que o número
de repetições de {0, 1} é no máximo 2.”
Ou: “Conjunto de palavras sobre {0, 1} com no máximo dois
dígitos.”
L = {λ, 0, 1, 00, 01, 10, 11}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 6 / 34
Repetição
Exemplo 1:
L =
{
p ∈ {0, 1}n | n ≤ 2}
“Conjunto das palavras sobre o alfabeto {0, 1} dado que o número
de repetições de {0, 1} é no máximo 2.”
Ou: “Conjunto de palavras sobre {0, 1} com no máximo dois
dígitos.”
L = {λ, 0, 1, 00, 01, 10, 11}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 6 / 34
Repetição
Exemplo 1:
L =
{
p ∈ {0, 1}n |n ≤ 2}
“Conjunto das palavras sobre o alfabeto {0, 1} dado que o número
de repetições de {0, 1} é no máximo 2.”
Ou: “Conjunto de palavras sobre {0, 1} com no máximo dois
dígitos.”
L = {λ, 0, 1, 00, 01, 10, 11}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 6 / 34
Repetição
Exemplo 1:
L =
{
p ∈ {0, 1}n | n ≤ 2}
“Conjunto das palavras sobre o alfabeto {0, 1} dado que o número
de repetições de {0, 1} é no máximo 2.”
Ou: “Conjunto de palavras sobre {0, 1} com no máximo dois
dígitos.”
L = {λ, 0, 1, 00, 01, 10, 11}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 6 / 34
Repetição
Exemplo 1:
L =
{
p ∈ {0, 1}n | n ≤ 2}
“Conjunto das palavras sobre o alfabeto {0, 1} dado que o número
de repetições de {0, 1} é no máximo 2.”
Ou: “Conjunto de palavras sobre {0, 1} com no máximo dois
dígitos.”
L = {λ, 0, 1, 00, 01, 10, 11}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 6 / 34
Repetição
Exemplo 1:
L =
{
p ∈ {0, 1}n | n ≤ 2}
“Conjunto das palavras sobre o alfabeto {0, 1} dado que o número
de repetições de {0, 1} é no máximo 2.”
Ou: “Conjunto de palavras sobre {0, 1} com no máximo dois
dígitos.”
L = {λ, 0, 1, 00, 01, 10, 11}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 6 / 34
Repetição
Exemplo 1:
L =
{
p ∈ {0, 1}n | n ≤ 2}
“Conjunto das palavras sobre o alfabeto {0, 1} dado que o número
de repetições de {0, 1} é no máximo 2.”
Ou: “Conjunto de palavras sobre {0, 1} com no máximo dois
dígitos.”
L = {λ, 0, 1, 00, 01, 10, 11}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 6 / 34
Repetição
Exemplo 2:
L =
{
p ∈ {0, 1}n | n > 0}
“Conjunto de palavras sobre {0, 1} com pelo menos um dígito.”
Pode ser lido como: “Conjunto de números binários”!
Note que esta linguagem possui infinitas palavras: |L| = ∞.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 7 / 34
Repetição
Exemplo 2:
L =
{
p ∈ {0, 1}n | n > 0}
“Conjunto de palavras sobre {0, 1} com pelo menos um dígito.”
Pode ser lido como: “Conjunto de números binários”!
Note que esta linguagem possui infinitas palavras: |L| = ∞.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 7 / 34
Fecho de Kleene
As repetições “zero ou mais vezes” e “uma ou mais vezes” são tão
comuns que há operadores específicos para elas:
O Fecho de Kleene, representado por “elevado a asterisco”,
aplica-se a um conjunto e significa “repetido zero ou mais vezes”.
Exemplo 1:
L = {s}∗
significa:
L = {λ, s, ss, sss, ssss, sssss, . . .}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 8 / 34
Fecho de Kleene
Exemplo 2:
L = {a, b, c}∗
é o mesmo que:
L =
{
p ∈ {a, b, c}n | n ≥ 0}
L = {λ, a, b, c, aa, ab, ac, ba, bb, bc, ca, cb, cc, aaa, aab, . . .}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 9 / 34
Fecho de Kleene
Exemplo 3:
L = {0, 11}∗
As seguintes palavras fazem parte da linguagem L:
L = {λ, 0, 11, 00, 011, 110, 1111, 000, 0011, . . .}
Ou seja, sequências arbitrárias de 0 e 11→ Neste caso, 1 nunca
aparece sozinho!
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 10 / 34
Fecho de Kleene
Exemplo 3:
L = {0, 11}∗
As seguintes palavras fazem parte da linguagem L:
L = {λ, 0, 11, 00, 011, 110, 1111, 000, 0011, . . .}
Ou seja, sequências arbitrárias de 0 e 11→ Neste caso, 1 nunca
aparece sozinho!
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 10 / 34
Fecho de Kleene
É comum ver o Fecho de Kleene aplicado diretamente ao alfabeto:
L = Σ∗
significa “a linguagem contendo todas as palavras sobre o alfabeto
Σ”.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 11 / 34
Fecho Positivo de Kleene
O Fecho Positivo de Kleene, representado por “elevado a mais”,
também se aplica a um conjunto e significa “repetido uma ou mais
vezes”.
Exemplo 1:
L = {x}+
significa:
L = {x, xx, xxx, xxxx, xxxxx, . . .}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 12 / 34
Fecho Positivo de Kleene
Exemplo 2:
L = {0, 1}+
é o mesmo que:
L =
{
p ∈ {0, 1}n | n ≥ 1}
ou:
L =
{
p ∈ {0, 1}n | n > 0}
L = {0, 1}+ é uma maneira bem concisa de representar o conjunto
de números binários!
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 13 / 34
Fecho Positivo de Kleene
Exemplo 2:
L = {0, 1}+
é o mesmo que:
L =
{
p ∈ {0, 1}n | n ≥ 1}
ou:
L =
{
p ∈ {0, 1}n | n > 0}
L = {0, 1}+ é uma maneira bem concisa de representar o conjunto
de números binários!
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 13 / 34
Fecho Positivo de Kleene
Exemplo 3:
L = {0, 11}+
= {0, 11, 00, 011, 110, 1111, 000, 0011, . . .}
Veja que λ /∈ L.
Exemplo 4: No entanto, se definirmos:
L = {λ, 0, 11}+
então:
L = {λ, 0, 11, 00, 011, 110, 1111, 000, 0011, . . .}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 14 / 34
Fecho Positivo de Kleene
Exemplo 3:
L = {0, 11}+
= {0, 11, 00, 011, 110, 1111, 000, 0011, . . .}
Veja que λ /∈ L.
Exemplo 4: No entanto, se definirmos:
L = {λ, 0, 11}+
então:
L = {λ, 0, 11, 00, 011, 110, 1111, 000, 0011, . . .}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 14 / 34
Fecho Positivo de Kleene
Casos interessantes
Alguns casos interessantes:
I L = ∅, então L∗ = {λ};
I L = ∅, então L+ = ∅;
I L = {λ}, então L∗ = {λ};
I L = {λ}, então L+ = {λ}.
Em geral:
I λ ∈ L, então λ ∈ L+;
I λ /∈ L, então λ /∈ L+.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 15 / 34
Concatenação
A concatenação de duas palavras é a palavra formada pelos
símbolos da primeira palavra seguidos dos símbolos da segunda
palavra.
A concatenação de duas palavras p e q é escrita pq.
Exemplos:
I p = 1 e q = 0, então pq = 10
I r = 1101 e s = 01, então rs = 110101
I m = pala e n = vra, então mn = palavra
I a = aaba e b = λ, então ab = aaba
I c = λ e d = λ, então cd = λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 16 / 34
Concatenação
A concatenação de duas palavras é a palavra formada pelos
símbolos da primeira palavra seguidos dos símbolos da segunda
palavra.
A concatenação de duas palavras p e q é escrita pq.
Exemplos:
I p = 1 e q = 0, então pq = 10
I r = 1101 e s = 01, então rs = 110101
I m = pala e n = vra, então mn = palavra
I a = aaba e b = λ, então ab = aaba
I c = λ e d = λ, então cd = λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 16 / 34
Concatenação
A concatenação de duas palavras é a palavra formada pelos
símbolos da primeira palavra seguidos dos símbolos da segunda
palavra.
A concatenação de duas palavras p e q é escrita pq.
Exemplos:
I p = 1 e q = 0, então pq = 10
I r = 1101 e s = 01, então rs = 110101
I m = pala e n = vra, então mn = palavra
I a = aaba e b = λ, então ab = aaba
I c = λ e d = λ, então cd = λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 16 / 34
Concatenação
A concatenação de duas palavras é a palavra formada pelos
símbolos da primeira palavra seguidos dos símbolos da segunda
palavra.
A concatenação de duas palavras p e q é escrita pq.
Exemplos:
I p = 1 e q = 0, então pq = 10
I r = 1101 e s = 01, então rs = 110101
I m = pala e n = vra, então mn = palavra
I a = aaba e b = λ, então ab = aaba
I c = λ e d = λ, então cd = λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 16 / 34
ConcatenaçãoA concatenação de duas palavras é a palavra formada pelos
símbolos da primeira palavra seguidos dos símbolos da segunda
palavra.
A concatenação de duas palavras p e q é escrita pq.
Exemplos:
I p = 1 e q = 0, então pq = 10
I r = 1101 e s = 01, então rs = 110101
I m = pala e n = vra, então mn = palavra
I a = aaba e b = λ, então ab = aaba
I c = λ e d = λ, então cd = λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 16 / 34
Concatenação
A concatenação de duas palavras é a palavra formada pelos
símbolos da primeira palavra seguidos dos símbolos da segunda
palavra.
A concatenação de duas palavras p e q é escrita pq.
Exemplos:
I p = 1 e q = 0, então pq = 10
I r = 1101 e s = 01, então rs = 110101
I m = pala e n = vra, então mn = palavra
I a = aaba e b = λ, então ab = aaba
I c = λ e d = λ, então cd = λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 16 / 34
Concatenação
A concatenação de duas palavras é a palavra formada pelos
símbolos da primeira palavra seguidos dos símbolos da segunda
palavra.
A concatenação de duas palavras p e q é escrita pq.
Exemplos:
I p = 1 e q = 0, então pq = 10
I r = 1101 e s = 01, então rs = 110101
I m = pala e n = vra, então mn = palavra
I a = aaba e b = λ, então ab = aaba
I c = λ e d = λ, então cd = λ
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 16 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {a, b, c} e L2 = {x, y}, então L1L2 = {ax, ay, bx, by, cx, cy}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {a, b, c} e L2 = {x, y}, então L1L2 = {ax, ay, bx, by, cx, cy}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {a, b, c} e L2 = {x, y}, então L1L2 = {ax, ay, bx, by, cx, cy}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {0, 00} e L2 = {λ, 1}, então L1L2 = {0, 01, 00, 001}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {0, 00} e L2 = {λ, 1}, então L1L2 = {0, 01, 00, 001}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {λ, 0} e L2 = {λ, 0}, então L1L2 = {λ, 0, 00}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {λ, 0} e L2 = {λ, 0}, então L1L2 = {λ, 0, 00}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {0}∗ e L2 = {λ, 1}, então
L1L2 = {λ, 1, 0, 01, 00, 001, 000, 0001, 0000, 00001, . . .}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {0}∗ e L2 = {λ, 1}, então
L1L2 = {λ, 1, 0, 01, 00, 001, 000, 0001, 0000, 00001, . . .}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {0}∗ e L2 = {1}∗, então
L1L2 = {λ, 1, 11, 111, . . . , 0, 01, 011, . . . , 00, 001, 0011, . . .}
“Sequência de zero ou mais 0s seguida de uma sequência de
zero ou mais 1s.”
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {0}∗ e L2 = {1}∗, então
L1L2 = {λ, 1, 11, 111, . . . , 0, 01, 011, . . . , 00, 001, 0011, . . .}
“Sequência de zero ou mais 0s seguida de uma sequência de
zero ou mais 1s.”
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
A concatenação de duas linguagens L1 e L2 é a linguagem contendo
todas as concatenações de cada palavra de L1 com cada palavra de
L2.
Formalmente:
L1L2 = {p1p2} para cada p1 ∈ L1 e p2 ∈ L2
Exemplos:
I L1 = {0}∗ e L2 = {1}∗, então
L1L2 = {λ, 1, 11, 111, . . . , 0, 01, 011, . . . , 00, 001, 0011, . . .}
“Sequência de zero ou mais 0s seguida de uma sequência de
zero ou mais 1s.”
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 17 / 34
Concatenação
Se uma das linguagens concatenadas for vazia, o resultado também
é um conjunto vazio.
Exemplos:
I L1 = ∅ e L2 = {a, b, c}, então L1L2 = ∅
I L1 = {λ} e L2 = ∅, então L1L2 = ∅
I L1 = ∅ e L2 = {0, 1}∗, então L1L2 = ∅
I L1 = ∅ e L2 = ∅, então L1L2 = ∅
Cuidado! A linguagem ∅ é diferente da linguagem {λ}.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 18 / 34
Concatenação
Se uma das linguagens concatenadas for vazia, o resultado também
é um conjunto vazio.
Exemplos:
I L1 = ∅ e L2 = {a, b, c}, então L1L2 = ∅
I L1 = {λ} e L2 = ∅, então L1L2 = ∅
I L1 = ∅ e L2 = {0, 1}∗, então L1L2 = ∅
I L1 = ∅ e L2 = ∅, então L1L2 = ∅
Cuidado! A linguagem ∅ é diferente da linguagem {λ}.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 18 / 34
Concatenação
Se uma das linguagens concatenadas for vazia, o resultado também
é um conjunto vazio.
Exemplos:
I L1 = ∅ e L2 = {a, b, c}, então L1L2 = ∅
I L1 = {λ} e L2 = ∅, então L1L2 = ∅
I L1 = ∅ e L2 = {0, 1}∗, então L1L2 = ∅
I L1 = ∅ e L2 = ∅, então L1L2 = ∅
Cuidado! A linguagem ∅ é diferente da linguagem {λ}.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 18 / 34
Agrupamento
O agrupamento é uma forma conveniente de especificar que uma
operação de repetição se aplica sobre uma sequência de outras
operações.
O agrupamento é representado por um par de parênteses em torno
da sequência de símbolos: (sequência).
Vilar da CamaraNeto Teoria da Computação — Linguagens Formais: Operações 19 / 34
Agrupamento
Exemplos:
I L1 = ({0}{1})3 é a linguagem formada por três vezes a
concatenação {0}{1}: L1 = {010101}
I L2 = ({x}{x, y})2 é a linguagem formada por duas vezes a
concatenação {x}{x, y}: L2 = {xxxx, xxxy, xyxx, xyxy}
I L3 = ({a}{b})0 é a linguagem formada por zero vezes a
concatenação {a}{b}: L3 = {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 20 / 34
Agrupamento
Exemplos:
I L1 = ({0}{1})3 é a linguagem formada por três vezes a
concatenação {0}{1}: L1 = {010101}
I L2 = ({x}{x, y})2 é a linguagem formada por duas vezes a
concatenação {x}{x, y}: L2 = {xxxx, xxxy, xyxx, xyxy}
I L3 = ({a}{b})0 é a linguagem formada por zero vezes a
concatenação {a}{b}: L3 = {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 20 / 34
Agrupamento
Exemplos:
I L1 = ({0}{1})3 é a linguagem formada por três vezes a
concatenação {0}{1}: L1 = {010101}
I L2 = ({x}{x, y})2 é a linguagem formada por duas vezes a
concatenação {x}{x, y}: L2 = {xxxx, xxxy, xyxx, xyxy}
I L3 = ({a}{b})0 é a linguagem formada por zero vezes a
concatenação {a}{b}: L3 = {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 20 / 34
Agrupamento
Exemplos:
I L1 = ({0}{1})3 é a linguagem formada por três vezes a
concatenação {0}{1}: L1 = {010101}
I L2 = ({x}{x, y})2 é a linguagem formada por duas vezes a
concatenação {x}{x, y}: L2 = {xxxx, xxxy, xyxx, xyxy}
I L3 = ({a}{b})0 é a linguagem formada por zero vezes a
concatenação {a}{b}: L3 = {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 20 / 34
Agrupamento
Exemplos:
I L1 = ({0}{1})3 é a linguagem formada por três vezes a
concatenação {0}{1}: L1 = {010101}
I L2 = ({x}{x, y})2 é a linguagem formada por duas vezes a
concatenação {x}{x, y}: L2 = {xxxx, xxxy, xyxx, xyxy}
I L3 = ({a}{b})0 é a linguagem formada por zero vezes a
concatenação {a}{b}: L3 = {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 20 / 34
Agrupamento
Exemplos:
I L1 = ({0}{1})3 é a linguagem formada por três vezes a
concatenação {0}{1}: L1 = {010101}
I L2 = ({x}{x, y})2 é a linguagem formada por duas vezes a
concatenação {x}{x, y}: L2 = {xxxx, xxxy, xyxx, xyxy}
I L3 = ({a}{b})0 é a linguagem formada por zero vezes a
concatenação {a}{b}: L3 = {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 20 / 34
Agrupamento
Exemplos:
I L4 = ({a, b}{c, d})∗ é a linguagem formada pelo fecho de
Kleene sobre a concatenação {a, b}{c, d}:
L4 = {λ, ac, ad, bc, bd, acac, acad, acbc, acbd, adac, . . .}
Neste caso, pode-se considerar que L4 = {ac, ad, bc, bd}∗.
I E L5 = ({a, b}{c, d}+)∗?
L5 = {λ, ac, ad, acc, acd, . . . ,
bc, bd, bcc, bcd, . . . ,
acac, acacc, acacd, acaccc, . . . ,
accac, accac, accad, accad, . . .}
Sempre há uma sequência de bs e/ou cs após cada a e cada b!
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 21 / 34
Agrupamento
Exemplos:
I L4 = ({a, b}{c, d})∗ é a linguagem formada pelo fecho de
Kleene sobre a concatenação {a, b}{c, d}:
L4 = {λ, ac, ad, bc, bd, acac, acad, acbc, acbd, adac, . . .}
Neste caso, pode-se considerar que L4 = {ac, ad, bc, bd}∗.
I E L5 = ({a, b}{c, d}+)∗?
L5 = {λ, ac, ad, acc, acd, . . . ,
bc, bd, bcc, bcd, . . . ,
acac, acacc, acacd, acaccc, . . . ,
accac, accac, accad, accad, . . .}
Sempre há uma sequência de bs e/ou cs após cada a e cada b!
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 21 / 34
Agrupamento
Exemplos:
I L4 = ({a, b}{c, d})∗ é a linguagem formada pelo fecho de
Kleene sobre a concatenação {a, b}{c, d}:
L4 = {λ, ac, ad, bc, bd, acac, acad, acbc, acbd, adac, . . .}
Neste caso, pode-se considerar que L4 = {ac, ad, bc, bd}∗.
I E L5 = ({a, b}{c, d}+)∗?
L5 = {λ, ac, ad, acc, acd, . . . ,
bc, bd, bcc, bcd, . . . ,
acac, acacc, acacd, acaccc, . . . ,
accac, accac, accad, accad, . . .}
Sempre há uma sequência de bs e/ou cs após cada a e cada b!
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 21 / 34
Agrupamento
Exemplos:
I L4 = ({a, b}{c, d})∗ é a linguagem formada pelo fecho de
Kleene sobre a concatenação {a, b}{c, d}:
L4 = {λ, ac, ad, bc, bd, acac, acad, acbc, acbd, adac, . . .}
Neste caso, pode-se considerar que L4 = {ac, ad, bc, bd}∗.
I E L5 = ({a, b}{c, d}+)∗?
L5 = {λ, ac, ad, acc, acd, . . . ,
bc, bd, bcc, bcd, . . . ,
acac, acacc, acacd, acaccc, . . . ,
accac, accac, accad, accad, . . .}
Sempre há uma sequência de bs e/ou cs após cada a e cada b!
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 21 / 34
Demonstrações
As operações vistas até agora (repetição, fecho de Kleene,
concatenação e agrupamento) permitem formalizar linguagens
relativamente complexas.
Alguns exemplos serão apresentados a seguir. . .
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 22 / 34
Demonstrações
Demonstração 1: “Conjunto de todos os números binários com
tamanho par e cujos dígitos nas posições pares (2o dígito, 4o dígito,
etc.) são obrigatoriamente 0.”
Por exemplo, 0010 ou 1000101000101010, mas não 100100.
Uma solução:
L = ({0, 1}{0})+
Outra solução:
L = {00, 10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 23 / 34
Demonstrações
Demonstração 1: “Conjunto de todos os números binários com
tamanho par e cujos dígitos nas posições pares (2o dígito, 4o dígito,
etc.) são obrigatoriamente 0.”
Por exemplo, 0010 ou 1000101000101010, mas não 100100.
Uma solução:
L = ({0, 1}{0})+
Outra solução:
L = {00, 10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 23 / 34
Demonstrações
Demonstração 1: “Conjunto de todos os números binários com
tamanho par e cujos dígitos nas posições pares (2o dígito, 4o dígito,
etc.) são obrigatoriamente 0.”
Por exemplo, 0010 ou 1000101000101010, mas não 100100.
Uma solução:
L = ({0, 1}{0})+
Outra solução:
L = {00, 10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 23 / 34
Demonstrações
E se quisermos permitir que o tamanho seja ímpar?
Demonstração 2: “Conjunto de todos os números binários cujos
dígitos nas posições pares (2o dígito, 4o dígito, etc.) são
obrigatoriamente 0.”
Uma solução:
L = ({0, 1}{0})∗{0, 1, 00, 10}
Outra solução:
L = {00, 10}∗{0, 1, 00, 10}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 24 / 34
Demonstrações
E se quisermos permitir que o tamanho seja ímpar?
Demonstração 2: “Conjunto de todos os números binários cujos
dígitos nas posições pares (2o dígito, 4o dígito, etc.) são
obrigatoriamente 0.”
Uma solução:
L = ({0, 1}{0})∗{0, 1, 00, 10}
Outra solução:
L = {00, 10}∗{0, 1, 00, 10}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 24 / 34
Demonstrações
E se quisermos permitir que o tamanho seja ímpar?
Demonstração 2: “Conjunto de todos os números binários cujos
dígitos nas posições pares (2o dígito, 4o dígito, etc.) são
obrigatoriamente 0.”
Uma solução:
L = ({0, 1}{0})∗{0, 1, 00, 10}
Outra solução:
L = {00, 10}∗{0, 1, 00, 10}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 24 / 34
Demonstrações
Demonstração 3: “Conjunto de todos os números binários que
contenham a sequência 0000.”
Uma solução:
L = {0, 1}∗{0000}{0, 1}∗
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 25 / 34
Demonstrações
Demonstração 3: “Conjunto de todos os números binários que
contenham a sequência 0000.”
Uma solução:
L = {0, 1}∗{0000}{0, 1}∗
Vilar da Camara NetoTeoria da Computação — Linguagens Formais: Operações 25 / 34
Demonstrações
Demonstração 4: “Conjunto de todos os números binários que
contenham a sequência 0000 pelo menos três vezes.”
Uma solução:
L = {0, 1}∗{0000}{0, 1}∗{0000}{0, 1}∗{0000}{0, 1}∗
Outra solução:
L = ({0, 1}∗{0000})3{0, 1}∗
Ainda outra solução:
L = {0, 1}∗({0000}{0, 1}∗)3
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 26 / 34
Demonstrações
Demonstração 4: “Conjunto de todos os números binários que
contenham a sequência 0000 pelo menos três vezes.”
Uma solução:
L = {0, 1}∗{0000}{0, 1}∗{0000}{0, 1}∗{0000}{0, 1}∗
Outra solução:
L = ({0, 1}∗{0000})3{0, 1}∗
Ainda outra solução:
L = {0, 1}∗({0000}{0, 1}∗)3
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 26 / 34
Demonstrações
Demonstração 4: “Conjunto de todos os números binários que
contenham a sequência 0000 pelo menos três vezes.”
Uma solução:
L = {0, 1}∗{0000}{0, 1}∗{0000}{0, 1}∗{0000}{0, 1}∗
Outra solução:
L = ({0, 1}∗{0000})3{0, 1}∗
Ainda outra solução:
L = {0, 1}∗({0000}{0, 1}∗)3
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 26 / 34
Demonstrações
Demonstração 4: “Conjunto de todos os números binários que
contenham a sequência 0000 pelo menos três vezes.”
Uma solução:
L = {0, 1}∗{0000}{0, 1}∗{0000}{0, 1}∗{0000}{0, 1}∗
Outra solução:
L = ({0, 1}∗{0000})3{0, 1}∗
Ainda outra solução:
L = {0, 1}∗({0000}{0, 1}∗)3
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 26 / 34
Demonstrações
Demonstração 5: “Conjunto de todos os números binários que não
contenham a sequência 0000.”
Se a palavra λ fizesse parte da linguagem, poderíamos escrever:
L = ({λ, 0, 00, 000}{1})∗{λ, 0, 00, 000}
Uma solução correta pode ser:
L = ({λ, 0, 00, 000}{1})∗{0, 1, 00, 01, 000, 001, 0001}
Ou:
L = {1, 01, 001, 0001}∗{0, 1, 00, 01, 000, 001, 0001}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 27 / 34
Demonstrações
Demonstração 5: “Conjunto de todos os números binários que não
contenham a sequência 0000.”
Se a palavra λ fizesse parte da linguagem, poderíamos escrever:
L = ({λ, 0, 00, 000}{1})∗{λ, 0, 00, 000}
Uma solução correta pode ser:
L = ({λ, 0, 00, 000}{1})∗{0, 1, 00, 01, 000, 001, 0001}
Ou:
L = {1, 01, 001, 0001}∗{0, 1, 00, 01, 000, 001, 0001}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 27 / 34
Demonstrações
Demonstração 5: “Conjunto de todos os números binários que não
contenham a sequência 0000.”
Se a palavra λ fizesse parte da linguagem, poderíamos escrever:
L = ({λ, 0, 00, 000}{1})∗{λ, 0, 00, 000}
Uma solução correta pode ser:
L = ({λ, 0, 00, 000}{1})∗{0, 1, 00, 01, 000, 001, 0001}
Ou:
L = {1, 01, 001, 0001}∗{0, 1, 00, 01, 000, 001, 0001}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 27 / 34
Demonstrações
Demonstração 5: “Conjunto de todos os números binários que não
contenham a sequência 0000.”
Se a palavra λ fizesse parte da linguagem, poderíamos escrever:
L = ({λ, 0, 00, 000}{1})∗{λ, 0, 00, 000}
Uma solução correta pode ser:
L = ({λ, 0, 00, 000}{1})∗{0, 1, 00, 01, 000, 001, 0001}
Ou:
L = {1, 01, 001, 0001}∗{0, 1, 00, 01, 000, 001, 0001}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 27 / 34
União
A união de duas linguagens L1 e L2 é a linguagem que contém todas
as palavras de L1 e L2.
A união é representada pelo operador ∪.
Exemplos:
I L1 = {0, 1, 01} e L2 = {λ, 0, 11}, então
L1 ∪ L2 = {λ, 0, 1, 01, 11}
I L1 = {x}+ e L2 = {λ}, então L1 ∪ L2 = {x}∗
I L1 = {0, 1}∗{0} e L2 = {0, 1}∗{1}, então L1 ∪ L2 = {0, 1}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 28 / 34
União
A união de duas linguagens L1 e L2 é a linguagem que contém todas
as palavras de L1 e L2.
A união é representada pelo operador ∪.
Exemplos:
I L1 = {0, 1, 01} e L2 = {λ, 0, 11}, então
L1 ∪ L2 = {λ, 0, 1, 01, 11}
I L1 = {x}+ e L2 = {λ}, então L1 ∪ L2 = {x}∗
I L1 = {0, 1}∗{0} e L2 = {0, 1}∗{1}, então L1 ∪ L2 = {0, 1}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 28 / 34
União
A união de duas linguagens L1 e L2 é a linguagem que contém todas
as palavras de L1 e L2.
A união é representada pelo operador ∪.
Exemplos:
I L1 = {0, 1, 01} e L2 = {λ, 0, 11}, então
L1 ∪ L2 = {λ, 0, 1, 01, 11}
I L1 = {x}+ e L2 = {λ}, então L1 ∪ L2 = {x}∗
I L1 = {0, 1}∗{0} e L2 = {0, 1}∗{1}, então L1 ∪ L2 = {0, 1}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 28 / 34
União
A união de duas linguagens L1 e L2 é a linguagem que contém todas
as palavras de L1 e L2.
A união é representada pelo operador ∪.
Exemplos:
I L1 = {0, 1, 01} e L2 = {λ, 0, 11}, então
L1 ∪ L2 = {λ, 0, 1, 01, 11}
I L1 = {x}+ e L2 = {λ}, então L1 ∪ L2 = {x}∗
I L1 = {0, 1}∗{0} e L2 = {0, 1}∗{1}, então L1 ∪ L2 = {0, 1}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 28 / 34
União
A união de duas linguagens L1 e L2 é a linguagem que contém todas
as palavras de L1 e L2.
A união é representada pelo operador ∪.
Exemplos:
I L1 = {0, 1, 01} e L2 = {λ, 0, 11}, então
L1 ∪ L2 = {λ, 0, 1, 01, 11}
I L1 = {x}+ e L2 = {λ}, então L1 ∪ L2 = {x}∗
I L1 = {0, 1}∗{0} e L2 = {0, 1}∗{1}, então L1 ∪ L2 = {0, 1}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 28 / 34
União
A união de duas linguagens L1 e L2 é a linguagem que contém todas
as palavras de L1 e L2.
A união é representada pelo operador ∪.
Exemplos:
I L1 = {0, 1, 01} e L2 = {λ, 0, 11}, então
L1 ∪ L2 = {λ, 0, 1, 01, 11}
I L1 = {x}+ e L2 = {λ}, então L1 ∪ L2 = {x}∗
I L1 = {0, 1}∗{0} e L2 = {0, 1}∗{1}, então L1 ∪ L2 = {0, 1}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 28 / 34
União
A união de duas linguagens L1 e L2 é a linguagem que contém todas
as palavras de L1 e L2.
A união é representada pelo operador ∪.
Exemplos:
I L1 = {0, 1, 01} e L2 = {λ, 0, 11}, então
L1 ∪ L2 = {λ, 0, 1, 01, 11}
I L1 = {x}+ e L2 = {λ}, então L1 ∪ L2 = {x}∗
I L1 = {0, 1}∗{0} e L2 = {0, 1}∗{1}, então L1 ∪ L2 = {0, 1}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 28 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
IL1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Interseção
A interseção de duas linguagens L1 e L2 é a linguagem que contém
apenas as palavras comuns a L1 e L2.
A interseção é representada pelo operador ∩.
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 ∩ L2 = {λ, 1}
I L1 = {0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = ∅
I L1 = {λ, 0, 00, 000} e L2 = {λ, 01, 101}, então L1 ∩ L2 = {λ}
I L1 = {aa}∗ e L2 = {an | n ≤ 5}, então L1 ∩ L2 = {λ, aa, aaaa}
I L1 = {01}∗ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {λ, 01}
I L1 = {01}+ e L2 = {0}∗{1}∗, então L1 ∩ L2 = {01}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 29 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
DiferençaA diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Diferença
A diferença entre as linguagens L1 e L2 é a linguagem que contém
apenas as palavras pertencentes a L1 e não pertencentes a L2.
A diferença é representada pelo operador − (“menos”).
Exemplos:
I L1 = {λ, 0, 1, 01} e L2 = {λ, 1, 111}, então L1 − L2 = {0, 01}
I L1 = {λ, 0, 1, 10, 11} e L2 = {1}+, então L1 − L2 = {λ, 0, 10}
I L1 = {z}∗ e L2 = {zn | n ≤ 5}, então L1 − L2 = {zn | n > 5}
I L1 = {0}∗ e L2 = {0n | n é par}, então
L1 − L2 = {zn | n é ímpar}
I L1 = {10}+ e L2 = {01}+, então L1 − L2 = L1
I L1 = {10}∗ e L2 = {01}∗, então L1 − L2 = {10}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 30 / 34
Complemento
O complemento de uma linguagem L é a linguagem que contém
todas as palavras que não pertencem a L.
Em outras palavras, o complemento de L é igual a Σ∗ − L.
O complemento é representado por uma barra sobre a linguagem: L¯.
Exemplos:
I Σ = {a, b} e L = {a}∗, então L¯ = {a, b}∗{b}{a, b}∗
I Σ = {a, b} e L = {a}+, então L¯ = {a, b}∗{b}{a, b}∗ ∪ {λ}
I Σ = {0, 1} e L = {0, 1}∗{1}, então L¯ = {0, 1}∗{0} ∪ {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 31 / 34
Complemento
O complemento de uma linguagem L é a linguagem que contém
todas as palavras que não pertencem a L.
Em outras palavras, o complemento de L é igual a Σ∗ − L.
O complemento é representadopor uma barra sobre a linguagem: L¯.
Exemplos:
I Σ = {a, b} e L = {a}∗, então L¯ = {a, b}∗{b}{a, b}∗
I Σ = {a, b} e L = {a}+, então L¯ = {a, b}∗{b}{a, b}∗ ∪ {λ}
I Σ = {0, 1} e L = {0, 1}∗{1}, então L¯ = {0, 1}∗{0} ∪ {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 31 / 34
Complemento
O complemento de uma linguagem L é a linguagem que contém
todas as palavras que não pertencem a L.
Em outras palavras, o complemento de L é igual a Σ∗ − L.
O complemento é representado por uma barra sobre a linguagem: L¯.
Exemplos:
I Σ = {a, b} e L = {a}∗, então L¯ = {a, b}∗{b}{a, b}∗
I Σ = {a, b} e L = {a}+, então L¯ = {a, b}∗{b}{a, b}∗ ∪ {λ}
I Σ = {0, 1} e L = {0, 1}∗{1}, então L¯ = {0, 1}∗{0} ∪ {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 31 / 34
Complemento
O complemento de uma linguagem L é a linguagem que contém
todas as palavras que não pertencem a L.
Em outras palavras, o complemento de L é igual a Σ∗ − L.
O complemento é representado por uma barra sobre a linguagem: L¯.
Exemplos:
I Σ = {a, b} e L = {a}∗, então L¯ = {a, b}∗{b}{a, b}∗
I Σ = {a, b} e L = {a}+, então L¯ = {a, b}∗{b}{a, b}∗ ∪ {λ}
I Σ = {0, 1} e L = {0, 1}∗{1}, então L¯ = {0, 1}∗{0} ∪ {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 31 / 34
Complemento
O complemento de uma linguagem L é a linguagem que contém
todas as palavras que não pertencem a L.
Em outras palavras, o complemento de L é igual a Σ∗ − L.
O complemento é representado por uma barra sobre a linguagem: L¯.
Exemplos:
I Σ = {a, b} e L = {a}∗, então L¯ = {a, b}∗{b}{a, b}∗
I Σ = {a, b} e L = {a}+, então L¯ = {a, b}∗{b}{a, b}∗ ∪ {λ}
I Σ = {0, 1} e L = {0, 1}∗{1}, então L¯ = {0, 1}∗{0} ∪ {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 31 / 34
Complemento
O complemento de uma linguagem L é a linguagem que contém
todas as palavras que não pertencem a L.
Em outras palavras, o complemento de L é igual a Σ∗ − L.
O complemento é representado por uma barra sobre a linguagem: L¯.
Exemplos:
I Σ = {a, b} e L = {a}∗, então L¯ = {a, b}∗{b}{a, b}∗
I Σ = {a, b} e L = {a}+, então L¯ = {a, b}∗{b}{a, b}∗ ∪ {λ}
I Σ = {0, 1} e L = {0, 1}∗{1}, então L¯ = {0, 1}∗{0} ∪ {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 31 / 34
Complemento
O complemento de uma linguagem L é a linguagem que contém
todas as palavras que não pertencem a L.
Em outras palavras, o complemento de L é igual a Σ∗ − L.
O complemento é representado por uma barra sobre a linguagem: L¯.
Exemplos:
I Σ = {a, b} e L = {a}∗, então L¯ = {a, b}∗{b}{a, b}∗
I Σ = {a, b} e L = {a}+, então L¯ = {a, b}∗{b}{a, b}∗ ∪ {λ}
I Σ = {0, 1} e L = {0, 1}∗{1}, então L¯ = {0, 1}∗{0} ∪ {λ}
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 31 / 34
Demonstrações
Demonstração 1: “A linguagem dos números inteiros é constituída
por todas as palavras sobre o alfabeto Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -}
que obedeçam às seguintes regras:
I Possuem pelo menos um dígito (0–9);
I Podem opcionalmente começar com um hífen (-).”
Uma solução:
L = {λ, -}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 32 / 34
Demonstrações
Demonstração 1: “A linguagem dos números inteiros é constituída
por todas as palavras sobre o alfabeto Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -}
que obedeçam às seguintes regras:
I Possuem pelo menos um dígito (0–9);
I Podem opcionalmente começar com um hífen (-).”
Uma solução:
L = {λ, -}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}+
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 32 / 34
Demonstrações
Demonstração 2: “A linguagem dos números é constituída por todas
as palavras sobre o alfabeto Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ,, -} que
obedeçam às seguintes regras:
I Possuem pelo menos um dígito (0–9);
I Podem opcionalmente começar com um hífen (-);
I Possuem no máximo uma vírgula (,), desde que seja precedida
e seguida por pelo menos um dígito.”
Uma solução:
L ={λ, -}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}+({λ} ∪ ({,}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}+))
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 33 / 34
Demonstrações
Demonstração 2: “A linguagem dos números é constituída por todas
as palavras sobre o alfabeto Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ,, -} que
obedeçam às seguintes regras:
I Possuem pelo menos um dígito (0–9);
I Podem opcionalmente começar com um hífen (-);
I Possuem no máximo uma vírgula (,), desde que seja precedida
e seguida por pelo menos um dígito.”
Uma solução:
L ={λ, -}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}+({λ} ∪ ({,}{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}+))
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 33 / 34
Demonstrações
Demonstração 2: “A linguagem dos números é constituída por todas
as palavras sobre o alfabeto Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ,, -} que
obedeçam às seguintes regras:
I Possuem pelo menos um dígito (0–9);
I Podem opcionalmente começar com um hífen (-);
I Possuem no máximo uma vírgula (,), desde que seja precedida
e seguida por pelo menos um dígito.”
Outra solução:
LD = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}+
L = {λ, -}LD
({λ} ∪ ({,}LD))
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 33 / 34
Licença de uso
cbnd CC BY-NC-ND 3.0
Este documento é disponibilizado sob a licença Creative Commons
Attribution-NonCommercial-NoDerivs, versão 3.0. Basicamente, esta licença permite
que este documento seja copiado, distribuído e transmitido livremente, desde que
sob as seguintes condições:
b Atribuição: É necessário fazer a atribuição da obra, da maneira estabelecida pelo
autor ou licenciante (mas sem sugerir que este o apoia, ou que subscreve o seu
uso da obra);
n Uso Não Comercial: Não se pode usar esta obra para fins comerciais;
d Obras Derivadas Proibidas: Não se pode alterar ou transformar esta obra, nem
adaptá-la ou utilizá-la noutras obras.
A atribuição desta obra deve fazer referência ao endereço do site de origem:
http://prof.vilarneto.com.
Detalhes sobre esta licença de uso podem ser obtidas em
http://creativecommons.org/licenses/by-nc-nd/3.0/deed.pt.
Vilar da Camara Neto Teoria da Computação — Linguagens Formais: Operações 34 / 34

Outros materiais