แรงบันดาลใจสำหรับคำถามนี้คือคำถามต่อไปนี้ (คลุมเครือ): อะไรคือภาษาการเขียนโปรแกรม / รากฐานที่เป็นตรรกะสำหรับการมี AI ซึ่งอาจมีเหตุผลเกี่ยวกับรหัสที่มาของตัวเองและแก้ไขได้หรือไม่
นี่ไม่ใช่ทั้งหมดที่เข้มงวดดังนั้นนี่คือความพยายามของฉันที่จะดึงคำถามที่เป็นรูปธรรมออกมา มีสองสิ่งที่ฉันสนใจ:
(A) ภาษาการเขียนโปรแกรม P ที่สามารถเป็นตัวแทนและจัดการโปรแกรมของตัวเองเป็นโปรแกรมประเภทข้อมูล (เช่น AST) (หากต้องการวัตถุชนิดโปรแกรมสามารถแปลงเป็นสตริงซึ่งเป็นข้อความของโปรแกรมที่ถูกต้องในภาษานั้นจะเป็นสิ่งที่ตรงกันข้ามกับสิ่งที่คอมไพเลอร์ทำ)
(B) วิธีการให้เหตุผลเกี่ยวกับสิ่งที่โปรแกรมในภาษา P ทำ นี่คือสองระดับฉันคิดเกี่ยวกับมัน:
- ภาษาอื่น Q (พร้อมความสามารถในการพิสูจน์ทฤษฎี) ซึ่งเป็นแบบจำลองสิ่งที่โปรแกรม P ทำ ควรสามารถแสดงและพิสูจน์ข้อความเช่น "ผลลัพธ์ของการรันโปรแกรม p คือ foo"
- วิธีให้เหตุผลเกี่ยวกับสิ่งที่โปรแกรม p: โปรแกรมทำในภาษา P เอง (ดังนั้นเราจึงใช้ P = Q ด้านบน)
ระดับนี้มีการดำเนินการในระดับใดหรือความก้าวหน้าในทิศทางนี้คืออะไร? อะไรคืออุปสรรคในทางปฏิบัติ ในแง่ของความตั้งใจดั้งเดิมของคำถามวิธีที่ดีที่สุดในการทำให้เป็นปัญหาคืออะไร?
* * * *
เป็นคำตอบที่แสดง (ขอบคุณ!) คุณสามารถทำทั้งสองอย่าง (A) และ (B1) แยกกันได้ แต่ดูเหมือนว่าการทำด้วยกันเป็นคำถามวิจัยมากกว่า
นี่เป็นความคิดแรกของฉันสำหรับคำถาม (คำเตือน: ค่อนข้างคลุมเครือ) ดูความเห็นของฉันเกี่ยวกับคำตอบของ Martin Berger
ฉันสนใจในการสร้างแบบจำลองภาษาโปรแกรมภาษาโปรแกรมเดียวกันมากกว่าภาษาที่ง่ายกว่า (ดังนั้น P = Q ด้านบน) นี่จะเป็น "การพิสูจน์แนวคิด" ของโปรแกรมที่สามารถ "เหตุผลเกี่ยวกับซอร์สโค้ดของมันเอง" ภาษาการเขียนโปรแกรมที่พิมพ์ออกมาอย่างสม่ำเสมอสามารถให้การรับประกันเกี่ยวกับผลลัพธ์ของฟังก์ชั่นได้ แต่สิ่งนี้ไม่นับว่าเป็น "การให้เหตุผลเกี่ยวกับซอร์สโค้ดของตัวเอง" มากกว่า "Hello world!" นับเป็นควินในภาษาที่จะพิมพ์สตริงเปล่าโดยอัตโนมัติ --- จำเป็นต้องมีการอ้างอิง / การอ้างอิงตนเอง อะนาล็อกที่นี่มีประเภทข้อมูลที่เป็นตัวแทนของโปรแกรม
ดูเหมือนว่าเป็นโครงการที่ค่อนข้างใหญ่ - ภาษาที่ง่ายกว่ายิ่งยากที่จะแสดงทุกอย่างภายในมัน ยิ่งภาษามีความซับซ้อนยิ่งต้องทำงานให้มากขึ้นเพื่อจำลองภาษา
ด้วยจิตวิญญาณของทฤษฎีการเรียกซ้ำ (Recursion Theorem) โปรแกรมสามารถ "รับ" ซอร์สโค้ดของตัวเองและแก้ไขมันได้ (B2) บอกเราว่าโปรแกรมควรจะสามารถแสดงการรับประกันเกี่ยวกับโปรแกรมที่ปรับเปลี่ยนได้ (สิ่งนี้ควรจะสามารถเรียกคืนได้คือควรจะสามารถแสดงบางสิ่งเกี่ยวกับการดัดแปลงในอนาคตทั้งหมดได้หรือไม่)