ภาษาทั้งหมดที่มีเพียงภาษาทัวริงที่สมบูรณ์เท่านั้นที่สามารถตีความได้


16

ภาษาใดที่ไม่ทัวริงสมบูรณ์ไม่สามารถเขียนล่ามได้ด้วยตนเอง ฉันไม่มีเงื่อนงำที่ฉันอ่าน แต่ฉันเห็นมันใช้มาหลายครั้ง ดูเหมือนว่าสิ่งนี้ก่อให้เกิดภาษาที่สมบูรณ์แบบที่สุด "ไม่ใช่" ทัวริง; หนึ่งที่สามารถเท่านั้นถูกตีความโดยเครื่องทัวริง ภาษาเหล่านี้ไม่จำเป็นต้องคำนวณฟังก์ชั่นทั้งหมดจากธรรมชาติถึงธรรมชาติและไม่จำเป็นต้องเป็น isomorphic (นั่นอาจเป็นภาษาที่สุด A และ B มีอยู่เช่นว่ามีฟังก์ชัน F ที่ A สามารถคำนวณ แต่ B ไม่สามารถ) Agda สามารถแปลความหมายของระบบ Godel T และ Agda นั้นเป็นภาษาที่รวมกันดังนั้นภาษาที่ดีที่สุดควรจะมีพลังมากกว่าที่ระบบ T ของ Godel จะดูเหมือน สำหรับฉันแล้วดูเหมือนว่าภาษาดังกล่าวจะมีประสิทธิภาพเท่ากับ agda อย่างน้อย (แม้ว่าฉันจะไม่มีหลักฐาน แต่เป็นลางสังหรณ์)

มีงานวิจัยใดที่ทำในหลอดเลือดดำนี้หรือไม่? ผลลัพธ์ใดบ้างที่ทราบ (คือภาษาที่รู้จักกันดีที่สุด)

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


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

1
การเดาของฉันเกี่ยวกับสิ่งที่คุณอ่าน: ถ้าภาษามีความแข็งแรงเพียงพอและมีฟังก์ชั่นสากลของฟังก์ชั่นอื่นของคลาสนั้นมันสามารถกำหนดฟังก์ชั่นทแยงมุมสำหรับคลาสนั้น ถ้ามันเป็นคลาสของฟังก์ชั่นรวมแล้วฟังก์ชั่นในแนวทแยงไม่สามารถอยู่ในชั้นเรียน
Kaveh

มีการระบุอย่างไม่เป็นทางการว่าฉันพบที่ใด บางสิ่งบางอย่างตามแนวของสิ่งที่ฉันให้ที่นี่ ฉันไม่ทราบวิธีที่จะระบุสิ่งนี้ในวิธีการทางคณิตศาสตร์เช่นกัน หลังจากอ่านบางอย่างฉันไม่แน่ใจว่า "ฟังก์ชัน diagonal ของคลาสของฟังก์ชัน" คืออะไร ฉันคิดว่าในแง่ของคุณสิ่งที่ฉันหมายถึงคือ "คลาสของฟังก์ชั่นรวมไม่สามารถมีฟังก์ชั่นสากลของตัวเอง" และดังนั้นฉันคิดว่าฉันถาม "สิ่งที่คลาสของฟังก์ชั่นรวม C คือกรณีที่ไม่มีคลาส ฟังก์ชั่นสากลสำหรับ C " ถ้าฉันเข้าใจว่า "ฟังก์ชันสากล" คืออะไรฉันคิดว่าถูกต้อง
Jake

1
พูดอย่างเคร่งครัดนี่ไม่ใช่คำถามระดับการวิจัย ทำไมนี่เป็นวิกิชุมชน หรือมันคืออะไร?
Andrej Bauer

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

คำตอบ:


42

นี่เป็นคำถามที่พูดไม่ดีดังนั้นมาทำความเข้าใจก่อนกัน ฉันจะทำมันในรูปแบบของทฤษฎีการคำนวณ ดังนั้นฉันจะใช้ตัวเลขแทนสตริง: ชิ้นส่วนของซอร์สโค้ดคือตัวเลขแทนที่จะเป็นสตริงของสัญลักษณ์ มันไม่สำคัญหรอกคุณอาจแทนที่ด้วยs t r i n gด้านล่างNstring

ให้จะเป็นฟังก์ชั่นการจับคู่m,n

ให้เราบอกว่าภาษาการเขียนโปรแกรมได้รับจากข้อมูลต่อไปนี้:L=(P,ev)

  1. decidableชุดของ "โปรแกรมที่ถูกต้อง" และPN
  2. คำนวณและบางส่วนฟังก์ชั่น Nev:P×NN

ความจริงที่ว่าสามารถถอดรหัสได้หมายความว่ามีแผนที่ที่คำนวณได้ทั้งหมดv a l i d : N{ 0 , 1 }เช่นนั้นv a l i d ( n ) = 1Pvalid:N{0,1} P อย่างไม่เป็นทางการเรากำลังบอกว่าเป็นไปได้ที่จะบอกได้ว่าสตริงที่กำหนดเป็นโค้ดที่ถูกต้องหรือไม่ ฟังก์ชั่น e vเป็นสิ่งจำเป็นสำหรับนักแปลสำหรับภาษาของเรา: e v ( m , n ) ใช้งานโค้ด mในอินพุต n - ผลลัพธ์อาจไม่ได้กำหนดvalid(n)=1nPevev(m,n)mn

ตอนนี้เราสามารถแนะนำคำศัพท์บางคำ:

  1. ภาษาคือผลรวมถ้าเป็นฟังก์ชั่นรวมสำหรับm Pทั้งหมดnev(m,n)mP
  2. ภาษาตีความภาษาL 2 = ( P 2 , e v 2 )หากมีu P 1เช่นนั้นe v 1 ( u , n , m ) e v 2 ( n , m )สำหรับทุกคนn PL1=(P1,ev1) L2=(P2,ev2)uP1ev1(u,n,m)ev2(n,m)nPและ N นี่มึงเป็นแบบจำลองสำหรับL 2ดำเนินการในL 1 นอกจากนี้ยังเป็นที่รู้จักกันเป็นโปรแกรมสากลสำหรับL 2mNuL2L1L2

คำจำกัดความอื่น ๆ ของ " interprets L 2 " นั้นเป็นไปได้ แต่ขออย่าให้ฉันเข้าใจL1L2

เราบอกว่าและL 2เทียบเท่ากันหากพวกเขาตีความซึ่งกันและกันL1L2

มี "ภาษาที่มีประสิทธิภาพมากที่สุด" ของทัวริงเครื่องจักร (ซึ่งคุณเรียกว่า "เครื่องทัวริง") ซึ่งn Nเป็นการเข้ารหัสของเครื่องทัวริงและφ ( n , m )คือ ฟังก์ชันที่คำนวณได้บางส่วนที่ "รันเครื่องทัวริงเข้ารหัสโดยnบนอินพุตm " ภาษานี้สามารถขัดจังหวะภาษาอื่น ๆ ทั้งหมดเนื่องจากเราต้องการให้e vคำนวณได้T=(N,φ)nNφ(n,m)nmev

คำจำกัดความของภาษาการเขียนโปรแกรมของเรานั้นผ่อนคลายมาก เพื่อให้สิ่งต่อไปนี้ผ่านไปให้เราต้องการอีกสามเงื่อนไข:

  • L implements the successor function: there is succP such that ev(succ,m)=m+1 for all mN,
  • L implements the diagonal function: there is diagP such that ev(diag,m)=m,m for all mN,
  • L is closed under composition of functions: if L implements f and g then it also implements fg,

A classic result is this:

Theorem: If a language can interpret itself then it is not total.

Proof. Suppose u is the universal program for a total langauge L implemented in L, i.e., for all mP and nN,

ev(u,m,n)ev(m,n).
As successor, diagonal, and ev(u,) are implemented in L, so is their composition kev(u,k,k)+1. There exists n0P such that ev(n0,k)ev(u,k,k)+1, but then
ev(u,n0,n0)ev(n0,n0)ev(u,n0,n0)+1
As there is no number equal its own successor, it follows that L is not total or that L does not interpret itself. QED.

Observe that we could replace the successor map with any other fixpoint-free map.

Here is a little theorem which I think will clean up a misunderstanding.

Theorem: Every total language can be interpreted by another total language.

Proof. Let L be a total language. We get a total L which interprets L by adjoining to L its evaluator ev. More precisely, let P={0,nnP}{1,0} and define ev as

ev(b,n,m)={ev(n,m)if b=0,ev(m0,m1)if b=1 and m=m0,m1
Obviously, L is total because L is total. To see that L can simulate L just take u=1,0, since then ev(u,m,n)ev(m,n), as required. QED.

Exercise: [added 2014-06-27] The language L constructed above is not closed under composition. Fix the proof of the theorem so that L satisfies the extra requirements if L does.

In other words, you never need the full power of Turing machines to interpret a total language L – a slightly more powerful total language L suffices. The language L is strictly more powerful than L because it interprets L, but L does not interpret itself.


If I checked the wiki checkbox it was unintentional.
Andrej Bauer

2
Is there any extra power in languages where you can't tell whether or not a given program is valid?
Phylliida

3
@DaniPhye: If the language syntax is not semidecidable then you can "hide" computational power in the syntax. For instance, the language rules could require that each function be equipped with a bit which tells whether the function is total. We could then implement is_total, which is otherwise non-cmputable, but couldn't implement evaluation (because you'd have to also compute the bit of the resulting function). In general I would say it's not a programming language if you can't even implement a parser for it.
Andrej Bauer

3
How does "If a language can interpret itself then it is not total" gel with this result: A Self-Interpreter for F-omega?
Cactus


18

Any language which is not Turing complete can not write an interpreter for it self.

This statement is incorrect. Consider the programming language in which the semantics of every string is "Ignore your input and halt immediately". This programming language is not Turing complete but every program is an interpreter for the language.


Ah! That is a good point. So there has to be certain requirements on what the language computes. It seems that some minimum requirement must be made on the power of the language to make that statement true. It seems like if we demand it be able to solve basic arithmetic problems then it might hold.
Jake

@Jake You might actually be able to get away with something incredibly weak like "the language defines at least one non-constant function" or "the language defines more than one function". My counterexample is clearly trivial for any reasonable definition of "trivial".
David Richerby

Sounds like an interesting problem for me to think about. If I find anything I'll reply back.
Jake
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.