Na verdade, você ainda pode derivar fórmulas de contagem para inequívocos expressões regulares com estrelas Kleene.
Dada a definição indutiva de uma expressão regular como:
e ∈ R e : = x ∈ Σ ∣e0 0 e1∣e0 0+e1∣e∗
Considere a seguinte tradução [[ ⋅ ]] : R e → C (Z) que pega uma expressão regular e a traduz em uma função racional de valor complexo:
[[x∈Σ]][[e0 e1]][[e0+e1]][[e∗]]=z=[[e0]]×[[e1]]=[[e0]]+[[e1]]=11−[[e]]
Podemos mostrar que essa tradução retorna uma expressão racional fazendo indução estrutural em e, e observando que todas as operações usadas no lado direito preservam a racionalidade.
Suponha que a expressão regular e que colocamos é inequívoco, então descobriríamos que a função racional denotada por [[e]]∈C(z) é, na verdade, a função geradora da família de palavras aceitas pelo idioma subjacente e, classificados por seu comprimento.
Por exemplo, considere o idioma (a∗b)∗, que define o idioma das execuções de a delimitado por b. Agora, essa expressão regular é inequívoca, para que possamos executar nosso truque de tradução:
[[(a∗b)∗]]=11−[[a∗b]]=11−([[a∗]]×[[b]])=11−(11−[[a]]×z)=11−z1−z=12+12−4z
As it turns out, given the above generating function, its coefficient extraction will be
[zn][[(a∗b)∗]]=2n−1+δ(n)2
where
δ(n)={10if n=0otherwise
In fact, since our translation [[⋅]] generates rational functions, we can use a partial fraction decomposition to create an enumeration formula for any unambiguous regular expression.
Suppose you have a irreducible rational function
r(z)+p(z)q(z)
where
r,p,q are polynomials, then you can decompose this into
r(z)+C0z−q∗0+⋯+Cnz−q∗n
where
q∗k are the roots of
q(z). There's a bit of technical corner-cases (like multiplicity of roots, etc), but it's relatively easy to do coefficient extraction on the expression above:
[zn]Cz−q∗=C×q∗−n
In fact, the partial fraction decomposition generalize to multivariate rational functions, so you can actually construct counting formulas for queries such as "How many words are there where there are n a
s and m b
s?"
Unfortunately, the extent to which this method will be useful ends when you have an ambiguous expression.