इसलिए लोग मुझे इसे पोस्ट करने के लिए परेशान करते रहते हैं भले ही यह समस्या का एक सरल संस्करण हल करता हो। ठीक है फिर :)
इसके अंत में, मैंने जो कुछ सीखा, वह मैंने इबारा और ट्रिज्म के पेपर से लिया था, और यह तरीका हमारी सामान्य समस्या पर क्यों टूटता है, लेकिन शायद अभी भी कुछ उपयोगी जानकारी देता है।
लेकिन पहले, हम सेट को तय करने की कोशिश की सरल समस्या पर ध्यान देंगे
2 n }L={2n∣ त्रिगुट और की बाइनरी अभ्यावेदन दोनों भी लंबाई या विषम लंबाई है2n}
नोट यह कैसे है बजाय मूल समस्या के रूप में। विशेष रूप से यदि इनपुट नंबर 2 की शक्ति नहीं है, तो हम किसी भी आधार में इसकी लंबाई की गणना करने के प्रयास के बजाय इसे अस्वीकार करना चाहते हैं। एन2nn
यह बहुत मायने रखती है सरल: मूल संख्या लिखी गई है तो प्रधानमंत्री के रूप में factorized , तो सभी के लिए छोड़कर हम सिर्फ जांच करने की जरूरत है कि वे सभी ।v i v २ ०2v23v35v57v7...viv20
यह हमें एक सरलीकृत स्थिति के एकल चर के प्रमुख गुणन के प्रमुख कारकों में मुठभेड़ आटोमैटोन की स्थिति को कूटने की पुरानी विधि (Minsky I मानकर) के चारों ओर एक आवरण का उपयोग करके इस सरलीकृत समस्या को हल करने की अनुमति देता है । जैसा कि ऊपर ओपी में उल्लेख किया गया है वह 2-काउंटर ऑटोमेटन के बराबर है।k
सबसे पहले, हम एक की जरूरत -counter आटोमैटिक मशीन रैप करने के लिए। हम 3 काउंटर, नामित उपयोग करेगा , और ।v 2 v 3 v 5kv2v3v5
ऑटोमेटन प्रारंभिक काउंटर मानों के लिए iff को स्वीकार करेगा, के टर्नरी और बाइनरी प्रतिनिधित्व दोनों की लंबाई या विषम लंबाई है, और और दोनों शून्य हैं। जब यह स्वीकार करेगा तो यह पहले अपने सभी काउंटरों को शून्य कर देगा। वी 3 वी 52v2v3v5
यहां ओपी के समान एक विधानसभा प्रारूप में, इसके लिए कुछ कोड है (मैंने निर्देशों में केवल चर जोड़ा है)। मैंने वास्तव में इसका परीक्षण नहीं किया है, क्योंकि मेरे पास इसे चलाने के लिए कुछ भी नहीं है, लेकिन मैं इसे एक औपचारिकता मानता हूं: 3-काउंटर ऑटोमेटा अच्छी तरह से ट्यूरिंग-पूर्ण होने के लिए जाना जाता है, और उनमें से किसी एक के किसी भी कम्प्यूटेशनल फ़ंक्शन का निर्माण करने में सक्षम होने के लिए प्रारंभिक मूल्य।
// Check that v3 and v5 are both zero.
JZ v3, check5
GOTO reject
check5: JZ v5, init3
GOTO reject
// Decrement v2 until it is zero, constructing 2^n in the process. If 2^n
// was even, we will then pass to even2 with 2^n in v3; If 2^n was odd, we
// will pass to odd2 with 2^n in v5.
init3: INC v3 // Set v3 to 1 = 2^0 to start with.
even1: // We have decremented v2 an even number of times so far.
// 2^decremented amount is in v3.
JZ v2, odd2
DEC v2
dup3to5: JZ v3, odd1
DEC v3
INC v5
INC v5
GOTO dup3to5
odd1: // We have decremented v2 an odd number of times so far.
// 2^decremented amount is in v5.
JZ v2, even2
DEC v2
dup5to3: JZ v5, even1
DEC v5
INC v3
INC v3
GOTO dup5to3
// The second part checks the ternary length of 2^n, which starts out in v3
// or v5 according to whether the *binary* length of 2^n (i.e. n+1) was odd
// or even.
odd2: // v3 needs to have odd ternary length to accept.
// It is simplest to consider 0 to have even length in both
// binary and ternary. This works out as long as we're
// consistent.
JZ v3, reject
trisect3to5: DEC v3
DEC v3
JZ v3, even2
DEC v3
INC v5
GOTO trisect3to5
even2: // v5 needs to have even ternary length to accept
JZ v5, accept
trisect5to3: DEC v5
DEC v5
JZ v5, odd2
DEC v5
INC v3
GOTO trisect5to3
accept: HALT Accept
reject: HALT Reject
अगला चरण एक एकल चर ऑटोमोबेटन के घातांक में उपरोक्त को फिर से एनकोड करना है। जैसा कि परिणाम बहुत लंबा है, मैं सिर्फ सामान्य विधि का वर्णन करूंगा, लेकिन एक पूर्ण संस्करण (स्पॉट में थोड़ा "अनुकूलित") मेरी वेबसाइट पर है।
JZ vp, label
DEC vp
next: ...
बन जाता है (मूल रूप से p से विभाजित होता है, और तब विभाजन पूर्ववत नहीं होता है तो पूर्ववत करें):
DIV p, next, ..., newlabel.fp-1
newlabel.f1: MUL p
GOTO newlabel.i1
...
newlabel.fp-1: MUL p
INC
newlabel.ip-2: INC
...
newlabel.i1: INC
GOTO label
next: ...
INC vp
बन जाता है MUL p
। व्यक्तिगत JZ
और DEC
सबसे पहले संयुक्त रूप में बदला जा सकता है। GOTO label
और HALT Reject
अपरिवर्तित हैं।
HALT Accept
अपरिवर्तित होगा, इसके अलावा कि हमारे मामले में हम अभी भी करने के लिए एक अंतिम जाँच की है: हम यह सुनिश्चित करने की संख्या में कोई प्रधानमंत्री कारक हैं कि जरूरत अन्य 2,3 और 5 हमारे विशेष 3-काउंटर automaton शून्य चूंकि यह काउंटर से जब यह स्वीकार करता है तो इसका उपयोग किया जाता है, यह सरल है: बस परीक्षण करें कि अंतिम चर 1 है, जो कोड पर कूदकर किया जा सकता है
DEC // BTW it cannot be zero before this.
JZ accept
HALT Reject
accept: HALT Accept
मेरी वेबसाइट के कोड में एक प्रारंभिक जांच भी है कि संख्या शून्य नहीं है, जो मुझे अभी पता चला है कि v3, v5 शून्य चेक, ओह अच्छी तरह से बेमानी है।
जैसा कि मैंने उल्लेख किया है, उपरोक्त विधि सरलीकृत समस्या के लिए काम करती है, लेकिन इसमें वास्तव में सामान्य व्यक्ति के लिए काम करने का कोई मौका नहीं है , क्योंकि: सामान्य समस्या में प्रत्येक सामान्य प्रतिपादक का सटीक मूल्य उसके सामान्य आकार को तय करने के लिए मायने रखता है और इस प्रकार जो इसे लंबा करता है विभिन्न ठिकानों में है। इस का मतलब है कि:
- हमारे पास काउंटरों के लिए उपयोग करने के लिए कोई "निशुल्क" प्राइम नहीं है।
- यहां तक कि अगर हम किया था काउंटरों के लिए मुफ्त अभाज्य संख्या है, हम वास्तव में सभी असीम कई अन्य अभाज्य जिसका प्रतिपादक मूल्यों से आवश्यक जानकारी निकालने के लिए एक तरीका मौजूद नहीं है कर बात।
तो आइये उपरोक्त लिंक किए गए कागज से इबारा और ट्रिम् (सामान्य रूप से डाउनलोड करने योग्य संस्करण ) से सामान्य पद्धति के सार की व्याख्या करते हैं कि कैसे साबित किया जाए कि कुछ समस्याएँ 2CA द्वारा हल नहीं की जा सकती हैं, और यह हमारे अंदर कैसे टूट जाती है। मामला।
s
फिर, वे इस ऑटोमेटन का विश्लेषण करते हैं ताकि यह निष्कर्ष निकाला जा सके कि वे संख्याओं के कुछ अंकगणितीय अनुक्रमों का निर्माण कर सकते हैं जिनका व्यवहार जुड़ा हुआ है। सटीक होना (इनमें से कुछ को प्रमेय के रूप में नहीं बताया गया है, लेकिन उनके दो मुख्य उदाहरणों के प्रमाण में निहित है):
- vxii ≤sD>0x+nDn≥0
Xs2+1x∈Xivxi≤sp,r∈XK1,K2
- n≥0p+nK1r+nK2
(विचार:
- x>sx∈X
- इसमें से अधिकांश को अस्वीकार किए गए नंबरों के लिए भी पकड़ना चाहिए , जब तक कि अस्वीकृति नॉनटर्म के बजाय स्पष्ट रूप से रुक रही है))।
D,K1,K2>s
K1=K2=6kkpr2k3kp+6knq+6kn
K1≠K2