ฉันเชื่อว่าคำตอบที่ถูกต้องเป็นลบ จำเป็นต้องแยกแยะคำถามต่อไปนี้:
- เป็นไปได้หรือไม่ที่จะเขียนข้อกำหนดซอฟต์แวร์ในภาษาธรรมชาติที่ไม่มีความคลุมเครือ?
- เป็นไปได้หรือไม่ที่จะเขียนซอฟต์แวร์ด้วยภาษาธรรมชาติที่ไม่มีความคลุมเครือ?
ความแตกต่างระหว่างคำถามที่หนึ่งและคำถามที่สองเกี่ยวข้องกับระดับของรายละเอียดที่เกี่ยวข้องจำนวนของการตีความที่จำเป็นและกฎที่กำหนดในการสร้างประโยคในภาษาธรรมชาติเพื่อวัตถุประสงค์ในการเขียนซอฟต์แวร์หรือซอฟต์แวร์สเปค
คำตอบสำหรับคำถามที่สองคือการยืนยัน ให้เซตย่อยที่เหมาะสมของภาษาธรรมชาติกับกฎที่ตกลงกันไว้สำหรับการสร้างประโยคและความหมายรหัสสามารถเขียนในประโยคไวยากรณ์ภาษาอังกฤษ ตัวอย่างเช่นภาษาต่อไปนี้อนุญาตให้เขียนคำสั่งการมอบหมายอย่างไม่น่าสงสัย:
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.
นั่นคือเราสามารถแปลโค้ดที่เขียนด้วยภาษาทางการที่เป็นทางการเป็นภาษาธรรมชาติโดยการอธิบายแต่ละขั้นตอน ในทางกลับกันข้อกำหนดซอฟต์แวร์มักจะต้องมีการตีความ ดังนั้นไม่ว่าจะเป็นข้อกำหนดซอฟต์แวร์ที่สามารถให้ได้อย่างชัดเจนขึ้นอยู่กับระดับของรายละเอียดที่เกี่ยวข้องในข้อกำหนด อย่างไรก็ตามเนื่องจากโดเมนที่เลือกซึ่งมีข้อกำหนดอยู่ในช่วงโดยมีการดำเนินการเฉพาะในโดเมนนี้ที่เลือกไว้จึงสามารถดำเนินการกระบวนการแปลที่คล้ายกันได้ ตัวอย่างเช่น
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.
ที่งบX
, Y
, Z
มีเฉพาะรายการที่ระบุไว้ในคำนำข้อกำหนดและเขียนในอย่างเป็นทางการและเหมาะสมตามที่ตกลงย่อยของภาษาธรรมชาติ ความคลุมเครือนั้นจะเกี่ยวข้องกับวิธีการใช้ข้อมูลจำเพาะ - แต่สิ่งนี้จะเกิดขึ้น