Eu acredito que a resposta correta é negativa. É necessário distinguir as seguintes perguntas:
- É possível escrever uma especificação de software em uma linguagem natural que não contenha ambiguidades?
- É possível escrever software em uma linguagem natural que não contenha ambiguidades?
A diferença entre a primeira e a segunda pergunta diz respeito ao nível de detalhe envolvido, à quantidade de interpretação necessária e às regras impostas à construção de frases na linguagem natural para fins de redação do software ou especificação de software.
A resposta para a segunda pergunta é afirmativa. Dado um subconjunto adequadamente restrito de uma linguagem natural com regras acordadas para construção e significado de sentenças, o código pode ser escrito em sentenças gramaticais em inglês. Por exemplo, o idioma a seguir permite inequivocamente escrever instruções de atribuição:
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.
Ou seja, podemos traduzir sistematicamente o código escrito em linguagens de programação formais em linguagens naturais, descrevendo cada procedimento. Por outro lado, uma especificação de software geralmente requer interpretação. Portanto, se uma especificação de software pode ser fornecida sem ambiguidade, depende do nível de detalhe envolvido na especificação. No entanto, dado um domínio selecionado no qual a especificação varia, com operações específicas nesse domínio selecionadas, um processo de conversão semelhante pode ser realizado. Por exemplo:
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.
onde as declarações X
, Y
, Z
conter apenas os itens mencionados no prefácio do especificação e são escritos de forma formal adequadamente e acordados subconjunto de uma linguagem natural. As ambiguidades, então, dizem respeito a como implementar a especificação - mas isso será esperado.