ट्यूरिंग को पूरा करने के लिए अनिवार्य भाषा होना चाहिए:
- सशर्त लूप
- चर की संख्या के विपरीत
FRACTRAN एक ऐसी भाषा है, जो उन अंशों से बनी होती है, जो अपने डेटा को primes के विस्तार में संग्रहीत करते हैं।
कहते हैं कि आप दो संख्याओं को जोड़ना चाहते हैं: 2 a 3 b 5 ab बन जाता है
४५५ ११ १ ३ ३ १ १
---, -, -, -, -, -
३३ १३ ११ 7 २ ३ ३
यह उपरोक्त परिवर्तन करने के लिए एक FRACTRAN कार्यक्रम है।
आप 72 (2 3 3 2 ) जैसी संख्या के साथ शुरू करते हैं । कार्यक्रम तब तक 'आगे' चला जाता है जब तक कि यह एक संख्या नहीं पाता है जब निर्देश से गुणा किया जाता है एक अन्य पूर्णांक (कोई अनुमति नहीं है)।
72
जब तक यह आगे नहीं बढ़ेगा 11/2
। यह तब संख्या को विभाजित करेगा 2
और इसे गुणा करेगा 11
(11 में शक्ति एक चर है)। यह देता है 396
। 396
33 से विभाज्य है (3 शक्ति और 11 को कम करके) और 455 से गुणा करें (5, 7 और 13 चर बढ़ाकर)। और इसी तरह। इस कार्यक्रम का पूरा विवरण और इसकी राज्य तालिका FRACTRAN विकिपीडिया पृष्ठ पर पढ़ी जा सकती है , जिसमें उपरोक्त कार्यक्रम का बहुत अच्छा एनिमेटेड GIF भी शामिल है।
स्टैक एक्सचेंज पर अन्य FRACTRAN सामग्री जो ट्यूरिंग की पूर्णता को छूती है, उस पर पाया जा सकता है: फ्रैट्रन को ब्रेनफॉक में परिवर्तित करें (ठीक है, यह किसी के समय का वास्तव में उत्पादक उपयोग है)
फ्रैक्चरन ट्यूरिंग-पूर्ण होने का कारण यह है कि यह एक रजिस्टर मशीन का अनुकरण करता है। संख्या का प्रधान गुणनखंडन रजिस्टरों की सामग्री को संग्रहीत करता है, जबकि विभाजन और गुणन को रजिस्टरों से सशर्त रूप से जोड़ने और घटाने का एक तरीका है।
यहाँ चाल का हिस्सा (और यह सिद्धांत में भटकना शुरू होता है) यह है कि पर्दे के पीछे, यह एक Minsky रजिस्टर मशीन है जिसके लिए यह साबित हो गया था कि कुछ टेप (प्रोग्राम) ट्यूरिंग मशीन हैं यदि टेप को Gödel नंबर के रूप में दर्शाया गया है जो वास्तव में FRACTRAN संख्या क्या है (लिंक विकिपीडिया पृष्ठ से):
गोडेल ने प्राइम फैक्टराइज़ेशन पर आधारित एक प्रणाली का इस्तेमाल किया। उन्होंने पहले अंकगणित की औपचारिक भाषा में प्रत्येक मूल प्रतीक को एक अद्वितीय प्राकृतिक संख्या सौंपी, जिसके साथ वह काम कर रहे थे।
तो, हम सशर्त छोरों, Gödel संख्या के रूप में संग्रहीत मनमाने ढंग से चर, हम एक ट्यूरिंग मशीन मिल गया है।
कुछ अन्य मजेदार पढ़ने जो कि कोलाज़ पर छूते हैं जैसे कि FRACTRAN की प्रकृति को कैनडे डिसाइड पर पढ़ा जा सकता है ? Undecide! कि Collatz अनुमान FRACTRAN और रुकने की समस्या से संबंधित है।
FRACTRAN का किसी के सिर के आसपास होना थोड़ा मुश्किल है।
कार्यक्रम की तरह कुछ पर विचार करें:
LABEL: start
block1
block2
block3
...
END
इसमें प्रत्येक ब्लॉक फॉर्म का है:
IF(registers X >= a, Y >= b) # or any combination of registers
THEN
X -= a
Y -= b
I += n
J += m
goto start
ऊपर गुणन कार्यक्रम से पहला बयान:
455
---
33
इस रूप में लिखा जाएगा:
IF(register `3` >= 1 && `11` >= 1)
THEN
`3` -= 1
`11` -= 1
`5` += 1
`7` += 1
`13` += 1
goto start
और इस प्रकार आप स्पष्ट रूप से ट्यूरिंग पूर्णता के लिए आवश्यक डेटा स्टोरेज और लूपिंग निर्माण को देख सकते हैं। इसकी बहुत अल्पविकसितता है, लेकिन यह मौजूद है और एक साधारण रजिस्टर मशीन के रूप में चलता है - लेकिन फिर वह सब जो आपको वास्तव में करने में सक्षम होना चाहिए।
अभी भी यकीन नहीं हुआ?
यह काफी हद तक मॉडल के कम्प्यूटेशन पर दिमित्री हेंड्रिक्स के एक व्याख्यान से उधार लेता है
यह बहुत ही सरल प्रोग्राम है (2/3)
जो एक योजक (2 a 3 b -> 3 a + b ) है, लेकिन यह विनाशकारी है - 2 में मान प्रक्रिया के भाग के रूप में साफ किया जाता है।
एक उच्च स्तरीय FRACTRAN लिखते हैं जो इस तरह के विनाश को न करने में आसान बनाता है।
मूल कार्यक्रम के बारे में सोचा जा सकता है:
2
α: - → α
3
F 2 में , कोई एक प्रकार के 'फ़ंक्शंस' को निर्दिष्ट कर सकता है।
१० १
α: - → α, - →
३ १
3
β: - → β
5
एफ 2 प्रोग्राम (पी) को एक मानक FRACTRAN प्रोग्राम में बदलने के लिए, एक करता है:
- लंबाई 1 के छोरों का स्पष्ट पी
- ताज़े अभाज्य संख्याओं के साथ ग्रीक अक्षर (फ़ंक्शन) बदलें
- संक्रमण बदलें:
इक्का
p: - → q, - → r, - -> s, ...
bdf
हो जाता है:
अक क्र
-, -, -, ...
bp dp fp
यह क्या किया है कार्यक्रम की स्थिति को स्टोर करने के लिए primes p, q, r, और s का उपयोग किया जाता है।
और फिर हमें रजिस्टर मशीन मिल गई है ... इसमें रजिस्टर की एक सीमित संख्या है जो बड़ी संख्या में और दो निर्देशों को स्टोर करती है:
- inc (x i , m) - वेतन वृद्धि रजिस्टर i और लाइन m पर जाएं
- jzdec (x i , m 1 , m 2 ) - यदि रजिस्टर i है, तो लाइन m पर जाना है, अन्यथा डिक्रीमेंट i है, और लाइन m2 में जाएं।
इस रजिस्टर मशीन को ट्यूरिंग पूर्ण दिखाया गया है।
फिर यह एक यांत्रिक प्रक्रिया के हिस्से के रूप में एक FRACTRAN कार्यक्रम में एक रजिस्टर मशीन प्रोग्राम को संकलित करने के कई स्लाइड्स पर प्रक्रिया को दिखाने के लिए जाता है ।
मूल रूप से:
पी (i)
inc (x (i), m) = ---- → m
1
1 1
jzdec (x (i), m1, m2) = ---- → एम 2, - → m1
p (i) 1
और इस तरह कंप्यूटिंग के इन दो मॉडलों के बीच समानता के कारण, FRACTRAN ट्यूरिंग पूरा हो गया है।
Btw, यदि आप वास्तव में अपने दिमाग को उड़ाना चाहते हैं, तो कोड गोल्फ पढ़ें : फ्रैक्ट्रन जिसमें कुछ लोगों ने एक और FRACTRAN कार्यक्रम चलाने के लिए एक FRACTRAN कार्यक्रम लिखा था।