คำถามค่อนข้างกว้าง เพื่อตอบในพื้นที่ที่เหมาะสมฉันจะทำให้ oversimplifications มากมาย
ให้เราเห็นด้วยกับคำศัพท์ โปรแกรมนั้นถูกต้องเมื่อมันหมายถึงข้อกำหนดของมัน ข้อความที่คลุมเครือนี้สร้างขึ้นอย่างแม่นยำในหลาย ๆ ด้านโดยการกำหนดว่าโปรแกรมคืออะไรและอะไรคือข้อกำหนด ตัวอย่างเช่นในการตรวจสอบรูปแบบโปรแกรมเป็นโครงสร้าง Kripkeและข้อกำหนดมักเป็นสูตรLTL หรือโปรแกรมอาจเป็นรายการของคำสั่ง PowerPC และสเปคอาจเป็นชุดของการยืนยัน Hoare-Floyd ที่เขียนด้วยคำพูดตรรกะอันดับหนึ่ง. มีรูปแบบที่เป็นไปได้มากมาย มันเป็นการดึงดูดที่จะสรุปว่าในกรณีหนึ่ง (โครงสร้าง Kripke) เราไม่ได้ตรวจสอบโปรแกรมจริงในขณะที่ในกรณีที่สอง (รายการคำสั่ง PowerPC) ที่เราทำ อย่างไรก็ตามสิ่งสำคัญคือต้องตระหนักว่าเรากำลังมองหาแบบจำลองทางคณิตศาสตร์ในทั้งสองกรณีและนี่คือสิ่งที่ดีอย่างสมบูรณ์ (สถานการณ์ค่อนข้างคล้ายกับฟิสิกส์ที่ยกตัวอย่างเช่นกลศาสตร์คลาสสิกเป็นแบบจำลองทางคณิตศาสตร์ของความเป็นจริง)
ความเป็นทางการส่วนใหญ่แยกความแตกต่างระหว่างไวยากรณ์และความหมายของโปรแกรม นั่นคือวิธีการที่มันเป็นตัวแทนและมันหมายความว่าอะไร ความหมายของโปรแกรมคือสิ่งที่นับจากมุมมองของการตรวจสอบโปรแกรม แต่เป็นเรื่องสำคัญที่จะต้องมีวิธีการที่ชัดเจนในการกำหนดความหมายให้กับ สองวิธีที่ได้รับความนิยมมีดังนี้:
- (ขั้นตอนเล็ก ๆ ) ความหมายในการปฏิบัติงาน : นี่เป็นเหมือนการกำหนดภาษาโปรแกรมด้วยการเขียนล่ามให้ สำหรับสิ่งนี้คุณต้องพูดว่ารัฐคืออะไรและมันได้รับผลกระทบจากแต่ละคำสั่งในภาษา (คุณอาจสงสัยในภาษาที่คุณเขียนล่าม แต่ฉันจะแกล้งคุณไม่ได้)
- สัจพจน์เชิงสัจพจน์ : ที่นี่แต่ละประเภทคำสั่งมาพร้อมกับสคีสัจพจน์ ดังนั้นเมื่อใดก็ตามที่มีการใช้ข้อความเฉพาะประเภทนั้นจะแปลว่าสามารถใช้สัจพจน์บางอย่างได้ ตัวอย่างเช่นการกำหนดมาพร้อมกับสคี{ P [ x / e ] }x : = e ; การมอบหมายโดยเฉพาะ x : = x + 1มาพร้อมกับสัจพจน์ { x + 1 = 1 }{ P[ x / e ] }x : = e{ P}x : = x + 1ถ้าเรายกตัวอย่างสคีกับ P = ( x = 1 ){ x + 1 = 1 }x : = x + 1{ x = 1 }P=(x=1)
(มีคนอื่น ๆ ฉันรู้สึกไม่ดีเป็นพิเศษสำหรับการละเว้นความหมายเชิง Denotational แต่คำตอบนี้ยาวไปแล้ว) รหัสเครื่องบวกกับความหมายในการปฏิบัติการค่อนข้างใกล้เคียงกับสิ่งที่คนส่วนใหญ่เรียกว่า 'โปรแกรมจริง' นี่คือกระดาษเชื้อซึ่งเกิดขึ้นกับการใช้ความหมายการดำเนินงานสำหรับส่วนย่อยของรหัสเครื่อง DEC Alpha:
ทำไมคุณถึงใช้ความหมายระดับสูงกว่าเช่นสัจพจน์ เมื่อคุณไม่ต้องการให้หลักฐานการถูกต้องขึ้นอยู่กับฮาร์ดแวร์ที่คุณใช้งาน วิธีการคือการพิสูจน์ความถูกต้องของอัลกอริทึมที่เกี่ยวกับซีแมนทิกส์ระดับสูงที่สะดวกสบายบางอย่างและจากนั้นพิสูจน์ให้เห็นว่าความหมายของเสียงนั้นเกี่ยวกับซีแมนติกระดับต่ำกว่าซึ่งใกล้กับเครื่องจักรจริง
โดยสรุปฉันคิดได้สามเหตุผลที่นำไปสู่คำถามของคุณ:
- คุณเห็นความหมายระดับสูงเท่านั้นที่ดูไม่เหมือนที่คุณเคยใช้เรียกโปรแกรมและคุณสงสัยว่ามีคนระดับต่ำ คำตอบคือใช่
- คุณสงสัยว่าคุณพิสูจน์ได้อย่างไรว่าแบบจำลองสอดคล้องกับความเป็นจริง เช่นเดียวกับในฟิสิกส์คุณทำไม่ได้ คุณเพียงแค่สร้างโมเดลที่ดีกว่าและตรวจสอบกับความเป็นจริง
- คุณไม่ได้เห็นความแตกต่างระหว่างไวยากรณ์และความหมายและวิธีต่าง ๆ ในการกำหนดความหมายให้กับโปรแกรม คำถามสองข้อก่อนหน้า แสดงรายการหนังสือบางเล่ม
คำตอบนี้เป็นเพียงการพยายามระบุวิธีต่าง ๆ สามวิธีที่ฉันเข้าใจคำถาม การลงลึกในจุดใด ๆเหล่านี้จะต้องใช้พื้นที่จำนวนมาก