Expansión DCG: ¿Se ignora la firmeza?

Supongamos que tengo la siguiente regla DCG:

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

Normalmente esto se traduciría a:

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

¿Se permitiría a un sistema Prolog traducirlo de la siguiente manera, es decir,
¿Para unir las unificaciones en la cabeza y la meta?

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

Si la expansión de DCG no fuera firme, no se permitiría
para poner [41 | B] en el tercer argumento de la llamada expr.

Pero supongo que la firmeza está en su lugar, ¿entonces todo debería estar bien?

Adiós

P.S .: Para una definición informal de firmeza ver:
Richard O'Keefe, 2009:
"Como el inventor del término" firme "en la programación de Prolog,
Debería estar a favor de ello. Firmeza básicamente
significa que no puedes forzar un predicado por el camino equivocado
rellenando los argumentos de salida erróneamente ".
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301

P.S.S .: Para la otra traducción de DCG, vea, por ejemplo, la más reciente
Propuesta estándar DCG. El apéndice contiene un traductor DCG
código fuente:
ISO / IEC DTR 13211-3: 2006
Reglas gramaticales de la cláusula definida
Klaus Daessler
20 de noviembre de 2012
N238 DIN Draft 2012-11-20

Respuestas a la pregunta(1)

Su respuesta a la pregunta