Creo que la respuesta correcta es negativa. Es necesario distinguir las siguientes preguntas:
- ¿Es posible escribir una especificación de software en un lenguaje natural que no contenga ambigüedades?
- ¿Es posible escribir software en un lenguaje natural que no contenga ambigüedades?
La diferencia entre la primera y la segunda pregunta se refiere al nivel de detalle involucrado, la cantidad de interpretación requerida y las reglas impuestas en la construcción de oraciones en el lenguaje natural con el propósito de escribir el software o la especificación del software.
La respuesta a la segunda pregunta es afirmativa. Dado un subconjunto adecuadamente restringido de un lenguaje natural con reglas acordadas para la construcción y el significado de oraciones, el código se puede escribir en oraciones gramaticales en inglés. Por ejemplo, el siguiente lenguaje sin ambigüedad permite escribir declaraciones de asignación:
Variables: x,y,z,...
Constants: 1,2,3,...
Rules: (1) if x is a variable and n a constant, then
"The variable x contains the number n" is a sentence.
(2) if x is a variable and n a constant, then
"Assign the number n to the variable x" is a sentence.
Es decir, podemos traducir sistemáticamente el código escrito en lenguajes de programación formales a lenguajes naturales describiendo cada procedimiento. Por otro lado, una especificación de software a menudo requiere interpretación. Por lo tanto, si una especificación de software se puede dar sin ambigüedades depende del nivel de detalle involucrado en la especificación. Sin embargo, dado un dominio seleccionado sobre el que varía la especificación, con operaciones particulares en este dominio seleccionado, se puede llevar a cabo un proceso de traducción similar. Por ejemplo:
Over the domain D supporting operations f,g,h over elements a,b,c in relations
P,R,Q with properties φ,ψ,θ, design a program that does X,Y,Z.
Cuando los estados X
, Y
, Z
sólo figuran los elementos mencionados en el prefacio de la especificación y se escriben en una forma adecuada formal y acordadas subconjunto de un lenguaje natural. Las ambigüedades se referirán a cómo implementar la especificación, pero esto será de esperar.