คุณสามารถระบุภาษาการเขียนโปรแกรมโดยไม่ใช้งานได้หรือไม่?


11

เป็นไปได้ในทางทฤษฎีหรือไม่ที่จะระบุภาษาการเขียนโปรแกรมที่ไม่มีการใช้งานอยู่? ภาษาการเขียนโปรแกรมเป็นวิธีการกำหนดฟังก์ชั่น การนำไปใช้หมายถึงวิธีดำเนินการโปรแกรมที่กำหนดในภาษานั้นในอินพุตที่กำหนดไปยังเอาต์พุตของฟังก์ชันที่สอดคล้องกับโปรแกรมในอินพุตนั้น

ข้อกำหนดขั้นต่ำของภาษาดังกล่าวคืออะไร


3
"การนำไปปฏิบัติ" ของภาษาคืออะไร
กราฟิลส์

@Raphael: เป็นคุณที่เปลี่ยน“ programming lang” เป็น“ language” ก่อนที่คุณจะแก้ไขมันชัดเจนว่าการใช้ภาษานั้นหมายถึงอะไร
Tsuyoshi Ito

@TsuyoshiIto: ไม่มาก; ฉันเพียงดัดแปลงชื่อเพื่อให้ตรงกับคำถามซึ่งมีการเปลี่ยนแปลงใน cstheory.SE ฉันเปลี่ยนมันกลับ แต่ก็ยังไม่ชัดเจนว่ามันหมายถึงอะไร คอมไพเลอร์? ล่าม? อย่างไรก็ตามการโยกย้ายคำถามที่นี่ซึ่งเกือบหนึ่งปีแล้วและโดยผู้ใช้ที่เห็นได้ชัดว่าไม่เคยกลับมาเยี่ยมชมคำถามที่ไม่ได้รับคำแนะนำที่ดีที่สุด
กราฟิลส์

@ ราฟาเอล: ถาม“ การใช้ภาษาคืออะไร” หลังจากลบปมทั้งหมดเป็นเพียงเกินความเข้าใจของฉัน แต่ฉันยอมรับว่าคำถามนั้นไม่ชัดเจนตั้งแต่ต้น
Tsuyoshi Ito

ฉันคิดว่าคำจำกัดความสมมุติของคุณของ "ภาษาการเขียนโปรแกรม" เป็นความรู้สึกที่ไม่ดี อย่างน้อยควรแก้ไขโดยแทนที่ "ฟังก์ชั่น" โดย "ฟังก์ชั่นที่คำนวณได้" มิฉะนั้นจะไม่ชัดเจนว่าทำไมคุณเลือกที่จะเรียกภาษาว่า "ภาษาโปรแกรม" เมื่อคุณแก้ไขคำถามจะไม่มีความหมายเนื่องจากไม่มี "ภาษาการเขียนโปรแกรมที่ไม่มีการใช้งาน"
Uday Reddy

คำตอบ:


7

โดยปกติแล้วการใช้ภาษาโปรแกรมอย่างน้อยที่สุดก็ให้ล่ามในภาษา (หรือคอมไพเลอร์กับภาษา) ที่ไม่เกินทัวริง

การใช้ "คำจำกัดความ" นี้เราสามารถระบุภาษาการเขียนโปรแกรมดังนี้:

  • มีเพียงหนึ่งโปรแกรมที่เป็นไปได้นั่นคือHALT;

  • ข้อมูลจำเพาะของHALT: มันเป็นฟังก์ชั่นที่แก้ปัญหาการหยุดพัก

การใช้ภาษาการเขียนโปรแกรมนี้ต้องมีการแก้ไขปัญหาการหยุดชะงักกับการใช้งาน (ซึ่งเป็นไปไม่ได้เนื่องจากการดำเนินการของเราไม่ควรมีประสิทธิภาพมากกว่าเครื่องทัวริง)

ข้อมูลจำเพาะจัดการกับตรรกะและทำให้สามารถขอมากขึ้น ข้อกำหนดอีกประการหนึ่งที่จะเป็นไปไม่ได้ที่จะนำไปใช้คือ "เท็จ" (หรือประโยคที่ขัดแย้งกันในสเปค) แต่นี่ไม่ได้รู้สึกเหมือนสเปคซึ่งเป็นเหตุผลที่ฉันใช้ตัวอย่างปัญหาการหยุดชะงัก


1
ทั่วไป: ภาษาใด ๆ ที่ระบุฟังก์ชั่นที่แก้ปัญหาไม่สามารถตัดสินใจได้
edA-qa mort-ora-y

@ edA-qamort-ora-y ในทางเทคนิคแล้วสามารถนำไปใช้ได้ คุณไม่สามารถตัดสินใจปัญหา Halting ได้ แต่ TM สามารถจำลองเครื่องอื่นและยอมรับว่าเครื่องนั้นหยุดทำงานหรือไม่ ภาษาที่ได้รับการยอมรับโดย TM ดังกล่าวเป็นว่าภาษาของ (การเข้ารหัสของ) เครื่องที่หยุด แต่เพื่อวัตถุประสงค์ในทางปฏิบัติเรามักจะชอบการปฏิบัติการดั้งเดิมของภาษาการเขียนโปรแกรมเพื่อรับประกันว่าจะยุติ! (อย่างน้อยในอินพุต "ที่เหมาะสม")
เบ็น

1
O()
edA-qa mort-ora-y

1/0 let loop = loop in loopΩ()

3

เป็นเพียงข้อสังเกตที่แปลกประหลาด: เอ็นจิ้นเท็มเพลต C ++ นั้นสมบูรณ์แบบที่ทัวริง

ทฤษฎีบทที่ 1: ในกรณีที่ไม่มีขอบเขตการสร้างอินสแตนซ์ C ++ เท็มเพลตจะถูกทำให้สมบูรณ์

ข้อสรุป 1: ในกรณีที่ไม่มีข้อ จำกัด ด้านอินสแตนซ์ว่าคอมไพเลอร์ C ++ จะหยุดทำงานเมื่อรวบรวมโปรแกรมที่ระบุหรือไม่

... ดังนั้น C ++ เองจึงถูกพิจารณาว่าเป็นภาษาการเขียนโปรแกรมซึ่งไม่มี "การนำไปใช้" อาจมีอยู่ ... :-D


ดังนั้นคอมไพเลอร์ C "สามารถใช้เป็นล่ามได้หรือไม่หากไม่มีใครสนใจรหัสที่สร้างขึ้น แต่เป็นเพียงการวินิจฉัยที่เกิดขึ้น?
supercat

ใช่ดังที่แสดงในกระดาษคอมไพเลอร์หยุดทำงานพร้อมรายการข้อผิดพลาดที่ตรงกับประวัติการคำนวณของเครื่องทัวริง (และการกำหนดค่าเทปขั้นสุดท้าย) เห็นได้ชัดว่าอินพุตไม่สามารถโต้ตอบได้ (ต้องเข้ารหัสในซอร์สโค้ดก่อนเรียกใช้คอมไพเลอร์)
Vor

2

มันไม่ชัดเจนในสิ่งที่คุณหมายถึงโดย "ภาษาการเขียนโปรแกรม" และ "การใช้งานของภาษา" คุณต้องให้คำจำกัดความที่เข้มงวดของทั้งสองนี้เพื่อรับคำตอบ

Σ* * * *2Σ* * * * *ตราบใดที่หนึ่งในฟังก์ชันที่ไม่สามารถคำนวณได้อยู่ในช่วงที่ไม่สามารถใช้ภาษาได้

MM0

แต่นี่ไม่ใช่ภาษาสเปคที่ผู้คนหมายถึงเมื่อพวกเขาใช้วลี "ภาษาโปรแกรม" ภาษาการเขียนโปรแกรมที่มีความหมายโดยทั่วไปแล้วจะเป็นภาษาในการแสดงฟังก์ชั่นคำนวณ (กระบวนการ, ... ) และการติดต่อสื่อสารคำแนะนำไปยังเครื่องและดังนั้นจึงมีความเป็น TM ที่สามารถจำลองโปรแกรมเหล่านั้นและการส่งออกผลของพวกเขา ดังนั้นในความรู้สึกที่มีภาษาการเขียนโปรแกรมซึ่งไม่สามารถใช้งานได้นั้นไม่มีความหมาย

(ฉันเดาว่าคุณอาจสับสนภาษาการเขียนโปรแกรมด้วยภาษาสเปคหรือภาษาทางการในกรณีใด ๆ เราสามารถกำหนดภาษาที่ไม่สามารถคำนวณได้)


ฉันค่อนข้างแน่ใจว่า "ภาษาการเขียนโปรแกรม" หมายถึงภาษาการเขียนโปรแกรมตามปกติแล้วเราจะพูดถึงมันและ "การใช้ภาษา" หมายถึงสภาพแวดล้อมสำหรับการใช้งานโปรแกรมในภาษานั้นบนคอมพิวเตอร์จริง คำถามไม่เป็นทางการแต่แน่นอนว่ายังไม่ชัดเจน? ฉันสามารถเขียน spec สำหรับภาษาการเขียนโปรแกรมใหม่ได้อย่างง่ายดายโดยไม่ต้องสนใจที่จะใช้มัน คำถามก็แค่ถามว่าเป็นไปได้ที่จะทำเช่นนั้นในลักษณะที่ไม่สามารถใช้ภาษา
Ben

@Ben ถ้าคุณดูคำถามต้นฉบับใน cstheory คุณจะเห็นว่าไม่มีการเขียนโปรแกรมคำในคำถามเฉพาะในชื่อ คำถามที่โพสต์โดย OP ชัดเจนแน่นอน ป.ล. : ฉันจะสนใจคำจำกัดความที่เข้มงวด (ไม่จำเป็นต้องเป็นทางการ) ของภาษาโปรแกรม เราไม่สามารถพิสูจน์ผลลัพธ์เชิงลบเกี่ยวกับภาษาการเขียนโปรแกรมโดยยึดตามสัญชาติญาณและตัวอย่างเท่านั้น หากคุณมีการอ้างอิงถึงคำจำกัดความที่คุณกรุณาโพสต์มันเป็นการแก้ไขหรือแสดงความคิดเห็นกับคำถาม
Kaveh

ยุติธรรมเพียงพอแม้ว่า SE จะอ้างว่าคุณตอบเมื่อ 9 ชั่วโมงที่ผ่านมานานหลังจากที่ถูกโยกย้ายและแก้ไข ฉันยังคงตีความตามคำถามเดิมอยู่ดี เท่าที่ความหมายของภาษาการเขียนโปรแกรมฉันจะบอกว่าชัดเจน - ish หนึ่งเป็นไวยากรณ์อย่างเป็นทางการรวมทั้งการลดรูปแบบการคำนวณอื่น ๆ ที่เข้าใจกันดี (แลมบ์ดาแคลคูลัสทัวริงเครื่อง ฯลฯ ) หรือความหมายปฏิบัติการอย่างเข้มงวด แบบจำลองการลดจะทำให้คำตอบสำหรับคำถามนี้เป็นเรื่องไม่สำคัญ "ไม่" อย่างชัดเจน
Ben

1

มีภาษามากมายที่ระบุโดยไม่มีการใช้งานเช่น Algol 60 ควรเป็นภาษาสำหรับเขียนอัลกอริธึมไม่ใช่เพื่อนำไปใช้ ภาษา "ที่เพิ่งทำเพื่อความสนุกสนาน" หลายภาษาได้ถูกระบุไว้นานก่อนที่จะมีการนำมาใช้งาน Intercal มาถึงใจ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.