Expansão do DCG: A firmeza é ignorada?

Suponha que eu tenha a seguinte regra do DCG:

 factor(X) --> "(", expr(X), ")".

Normalmente isso seria traduzido para:

 factor(X, A, B) :-
    [40|C] = A, expr(X, C, D), [41|B] = D.

Será permitido a um sistema Prolog traduzi-lo da seguinte forma, ou seja,
fundir as unificações na cabeça e no objetivo?

 factor(X, [40|A], B) :-
    expr(X, A, [41|B]). 

Se a expansão do DCG não fosse firme, não seria permitido
colocar [41 | B] no terceiro argumento da chamada expr.

Mas eu acho que a firmeza está no lugar, então tudo deve ficar bem?

Tchau

P.S .: Para uma definição informal de firmeza veja:
Richard O'Keefe, 2009:
"Como o inventor do termo" firme "na programação Prolog,
Eu deveria ser a favor disso. Firmeza basicamente
significa que você não pode forçar um predicado no caminho errado
preenchendo os argumentos de saída erroneamente. "
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301

P.S .: Para a outra tradução do DCG, veja, por exemplo, o mais novo
Proposta padrão do DCG. O apêndice contém um tradutor DCG
Código fonte:
ISO / IEC DTR 13211-3: 2006
Regras de gramática de cláusula definida
Klaus Daessler
20 de novembro de 2012
Projeto N238 DIN 2012-11-20

questionAnswers(1)

yourAnswerToTheQuestion