Seja
Estou procurando uma compilação NFA pequena para a linguagem de concatenação de duas palavras do comprimento que são diferentes em termos de índice, ou seja,
Observe que, como é fixo, , e é regular como idioma finito.
O DFA trivial para o idioma contém estados +1 e apenas "lembra" quais letras foram exibidas durante as primeiras k letras; no entanto, se k = o (| \ Sigma |) , podemos criar um NFA significativamente menor.
Um NFA "simples", pois seria do tamanho (mais precisamente, ):
Tome um conjunto universal (isto é, um conjunto de vetores modo que, para cada vetor e índices, existe um vetor tal que , ou seja, se olharmos apenas para esses índices em , encontraremos ). Tais famílias de tamanho são conhecidas.
Pensamos em cada vetor como uma função , onde .
Crie um NFA da seguinte maneira:
A partir do estado inicial criar um -transition para um novo estado para qualquer . Denote esse estado por .
A partir de cada construa um caminho de estados que aceite todas as palavras cujas primeiras letras sejam mapeadas por a 0 e as últimas letras serão mapeadas por a 1.
Basicamente, a idéia é que o conjunto universal nos permita particionar as letras que podem aparecer nos primeiros símbolos do resto, e obtemos todas as palavras no idioma, pois deve haver um vetor correspondente que particiona corretamente.
Então, as perguntas são:
Qual é o tamanho do menor NFA para ?
Essa construção é ideal?
Qual limite inferior podemos provar para esse tamanho de autômato?