Alfabeto: Σ conjunto finito não vazio de símbolos.
String: w sequencia finita de símbolos de um Σ . representa-se ∣w∣ o tamanho da string e λ strings vazias/sem símbolos (∣λ∣=0). É uma tupla de símbolos.
Fecho: Σ∗=⋃n=0∞Σn fechamento de Kleene é o conjunto com todas w existentes em um Σ.
Concatenação: operação que forma uma nova palavra a partir da justaposição de duas palavras.
Substring: uma palavra que aparece em outra. se aparecerem no final é sufixo e se aparecerem no inicio é prefixo.
Auto-contatenação: wi recursivamente definida por:
- w0=λ;
- wi=w(i−1)w ;
Reverso: wR recursivamente definido por:
- se ∣w∣=0, wR=λ;
- se ∣w∣>0, wR=ayR sendo w=ya para algum a∈Σ e y∈Σ∗;
Linguagem: L⊆Σ∗, exemplo de Li linguagens formadas a partir do alfabeto binário Σ=0,1 e do fecho Σ∗={λ,0,1,00,01,11,000,001,010,011,...}
- L0=∅
- L1=λ
- L2={0,1,00}
- L3= {w∈Σ∗ | w é um binário múltiplo de 3}
- L4={w∈Σ∗∣w=01i,i>=0} // 01, 011, 0111,...
como linguagens são string sets podemos aplicar as mesmas operações de strings (concatenação, substring, reverso, auto-concatenação e etc) nas linguagens como um todo. Sejam as languages L1={ab,1} e L2={λ,b,bb}.
- L1L2={ab,abb,abbb,1,1b,1bb}
- (L1)2={abab,ab1,1ab,11}
- (L1)∗={λ,ab,abab,ab1,1ab,11,ababab,abab1,...}
- (L1)+={ab,abab,ab1,1ab,11,ababab,abab1,...}
Conjunto Regular: (ou linguagem regular), dado um Σ, o conjunto que pode ser gerado a partir das operações: união, concatenação e fechamento.
Regular Expressions: são uma forma simbólica de especificar conjuntos regulares. Conjunto Regular -> Expressão Regular
- {b} -> b
- {a,b} -> a∪b
- {ab} -> ab
- {a,b}{a,b}={aa,ab,ba,bb} -> (a∪b)(a∪b)
- {a}∗={λ,a,aa,aaa,...} -> a∗
- {λ,a,b,aa,ab,ba,bb,aaa,aab...} -> (a∪b)∗
Um AF (ou máquina de estados finito) é um modelo matemático de computação que descreve um máquina abstrata que processa strings de forma sequencial (símbolo a símbolo) e unidirecional (como uma fita de leitura).
ela é composta por:
- Fita de Leitura Unidirecional
- Controle + Função de Transição
- Registrador de Estado Atual
Um autômato reconhece uma linguagem se a última transição resultar em um estado final.
M=(E,Σ,δ,i,F).
- M: AFD.
- E: conjunto finito de estados.
- δ:E×Σ→E: função de transição. (δ é uma função total).
- i∈E: é o estado inicial.
- F⊆E: são os estados finais.
Para toda linguagem finita existe um AFD.
- Cada (e,s)∈E×Σ leva a um único outro E, não há "escolha própria" (se tiver em um estado e lendo um certo símbolo SEMPRE levará ao mesmo estado). É um autômato determinista.
- Todos os pares (e,s)∈E×Σ são mapeados para um outro estado. A função δ é total.
- Existe apenas um único estado inicial i. E exitem um conjunto F finito de estados finais.
L(M)={w∈Σ∗∣[i,w]⊢∗[f,λ], ∃f∈F}. Ou seja, L é um conjunto de palavras w que a partir de uma sequência de transições de estados chega-se na configuração [f,λ], ou seja, todos os símbolos são processados e o estado atual é um dos finais. Em resumo, um conjunto de palavras que o autômato aceita/reconhece. Dizemos que dois AFDs são equivalentes quando ambos reconhecem a mesma linguagem.
Se δ é total, dizemos que o determinismo é completo. Se δ é parcial, dizemos que o determinismo é parcial.
No exemplo acima, M1≡M2 pois ambos reconhecem a mesma linguagem (ab)∗c. No entanto, a diferença entre eles é que dada uma palavra inválida (como, aaaaaaaaa) M1 iria ler todos os a′s até chegar na configuração [e,λ]∣e∈/F (mais precisamente e=Error), rejeitando a string. Já M2 determinista incompleto iria produzia uma parada HALT imediatamente ao ler o segundo a da palavra, rejeitando naquele momento mesmo.
É a simulação de dois AFDs em paralelo.
Seja M1=(E1,Σ,δ1,i1,F1) e M2=(E2,Σ,δ2,i2,F2) pode-se construir M3=(E3,Σ,δ3,i3,F3) em que:
- E3=E1×E2
- i3=(i1,i2)
- δ3((e1,e2),a)=(δ1(e1,a),δ2(e2,a)),∀e1∈E1,e2∈E2,a∈Σ
F3={F1×F2(F1×E2)∪(E1×F2)L(M3)=L(M1)∩L(M2)L(M3)=L(M1)∪L(M2)
Dessa forma, ao executar-se dois AFDs os estados finais que definem se a linguagem L(M3) do AFD produzido será:
- INTERSECÇÃO, L(M3)=L(M1)∩L(M2), se F3=F1×F2={(pz,pu)}. (Ou seja, L(M3) seria as palavras que possuem # pares de 1 E # pares de 0).
- UNIÃO, L(M3)=L(M1)∪L(M2), se F3=(F1×E2)∪(E1×F2)={(pz,pu),(pz,iu),(iz,pu)}. (Ou seja, L(M3) seria as palavras que possuem # pares de 1 OU # pares de 0).
M=(E,Σ,δ,i,F).
- δ:E×Σ→P(E): função de transição. (P(E) é o power set de E).
Uma palavra pode gerar diferentes computações.
Se existir alguma computação de w que resulta na configuração [e,λ]∣e∈F significa que w∈L(M).
M=(E,Σ,δ,i,F).
- δ:E×(Σ∪{λ})→P(E): função de transição. A transição λ (ou vazia) é aquela realizada sem a necessidade de nenhum símbolo de entrada.
Autômatos são equivalentes se reconhecem a mesma linguagem.

Conjunto de todos os estados que podem ser alcançados a partir do mesmo sem a leitura de nenhum símbolo de entrada.
Converter um AF em outro equivalente é mudar a computação mas manter a linguagem aceita.
- AFN-λ: M=(E,Σ,δ,i,F);
- AFN: M′=(E,Σ,δ′,i,F′);
δ′(ei,a)=r∈fλ(ei)⋃fλ(δ(r,a)),∀ei∈E,∀a∈Σ
F′={F∪{i}F, if fλ(i)∩F=∅, else
- AFN: M=(E,Σ,δ,i,F);
- AFD: M′=(E′,Σ,δ′,i′,F′);
E′=P(E)
i′={i}
F′={R∈E′∣R∩F=∅}
δ′(R,a)=r∈R⋃δ(r,a),∀R∈E′,∀a∈Σ