কেন ফ্র্যাক্টরান টিউরিং সম্পূর্ণ?


10

আমি ব্যাখ্যার জন্য গুগল চেষ্টা করেছি কিন্তু বেশিরভাগ লিঙ্কগুলি কেবল "ফ্র্যাক্ট্রান সম্পূর্ণরূপে নিরাময় হচ্ছে" এর মতো জিনিস বলে। উদাহরণস্বরূপ, আসুন গুণ করা যাক।

আমার মনে আছে একটি xkcd ফোরামের পোস্টটি দেখেছি যে FRACTRAN পোস্টারটিকে টিউরিংয়ের সম্পূর্ণতা বুঝতে সহায়তা করেছিল। আমি কেন এই এসোলাং টিউরিং সম্পূর্ণ, সে সম্পর্কে একটি স্বজ্ঞাত ব্যাখ্যা খুঁজছি কারণ এটি ভাষা মেকানিক্সের দিকে ততটা সুস্পষ্ট নয় looking


: FRACTRAN অপরিচিত তাদের জন্য en.wikipedia.org/wiki/FRACTRAN
FrustratedWithFormsDesigner

2
গুণটি সম্পূর্ণরূপে টুরিংয়ের একটি ভাল উদাহরণ কারণ এর জন্য লুপিং এবং স্টোরেজ উভয়ই প্রয়োজন। যদিও এটি কোনও সম্পূর্ণ পরীক্ষা নিরীক্ষণ করছে কিনা তা সম্পূর্ণ পরীক্ষা নয়। সেরা "প্রমাণ" হ'ল এতে একটি ব্রেইনফাক এমুলেটর
লিখেছেন

উত্তর:


12

একটি অত্যাবশ্যক ভাষা টিউরিং সম্পূর্ণ হওয়ার জন্য এটি অবশ্যই থাকতে হবে:

  1. শর্তাধীন লুপ
  2. ভেরিয়েবলের নির্বিচারে সংখ্যা

ফ্র্যাক্ট্রান এমন একটি ভাষা যা ভঙ্গুর একটি সিরিজ দিয়ে তৈরি যা প্রাইমসের খাতায় এটির ডেটা সংরক্ষণ করে।

বলুন আপনি দুটি সংখ্যা যুক্ত করতে চান: 2 3 বি 5 অ্যাবি হয়ে যায়

455 11 1 3 11 1
---, -, -, -, -, - -
 33 13 11 7 2 3

এটি উপরের পরিবর্তনটি করার জন্য একটি ফ্র্যাক্ট্রান প্রোগ্রাম

আপনি 72 (2 3 3 2 ) এর মতো একটি সংখ্যা দিয়ে শুরু করেন । প্রোগ্রামটি 'এগিয়ে' যায় যতক্ষণ না এটি কোনও সংখ্যার সন্ধান করে যে নির্দেশের দ্বারা যখন গুণিত করা হয় তখন অন্য পূর্ণসংখ্যা হয় (কোনও অবশিষ্টের অনুমতি নেই)।

72এটি না হওয়া পর্যন্ত এগিয়ে চলবে 11/2। এরপরে এটি সংখ্যাকে ভাগ করে 2এবং এটি দিয়ে গুন করবে 11(১১ এর শক্তিটি একটি ভেরিয়েবল)। এই দেয় 39639633 দ্বারা বিভাজ্য (3 শক্তি এবং 11 হ্রাস করা) এবং 455 দ্বারা বৃদ্ধি (5, 7 এবং 13 ভেরিয়েবলগুলি বৃদ্ধি করা)। ইত্যাদি। এই প্রোগ্রামটির সম্পূর্ণ বিবরণ এবং এর রাষ্ট্রীয় সারণি উপরের প্রোগ্রামটির সত্যিই দুর্দান্ত অ্যানিমেটেড জিএফ সহ ফ্রেট্রান উইকিপিডিয়া পৃষ্ঠায় পড়তে পারে ।

স্ট্যাক এক্সচেঞ্জের অন্যান্য ফ্র্যাক্ট্রান উপাদান যা ট্যুরিংয়ের সম্পূর্ণতার সাথে স্পর্শ করে তা পাওয়া যাবে: ফ্র্যাক্ট্রানকে ব্রেইনফাকে রূপান্তর করুন (ঠিক আছে, এটি একটি সময়ের সত্যিকারের উত্পাদনশীল ব্যবহার)

ফ্র্যাক্ট্রান টিউরিং-সম্পূর্ণ হওয়ার কারণ এটি একটি রেজিস্টার মেশিনের অনুকরণ করে। সংখ্যার প্রধান গুণনীয়করণ নিবন্ধগুলির বিষয়বস্তু সংরক্ষণ করে, যখন বিভাগ এবং গুণনটি শর্তাধীনভাবে নিবন্ধগুলি থেকে যোগ এবং বিয়োগের একটি উপায়।

কৌতূহলের একটি অংশ (এবং এটি তত্ত্বের দিকে বিভ্রান্তি শুরু করে) হ'ল পর্দার আড়ালে এটি একটি মিনস্কি রেজিস্ট্রার মেশিন যার জন্য প্রমাণিত হয়েছিল যে নির্দিষ্ট টেপগুলি (প্রোগ্রামগুলি) ট্যুরিং মেশিনগুলি রয়েছে যদি টেপটি গডেল নম্বর হিসাবে প্রতিনিধিত্ব করা হয় যা ফ্র্যাক্ট্রান নম্বরটি হ'ল (লিঙ্কযুক্ত উইকিপিডিয়া পৃষ্ঠা থেকে):

গডেল প্রাইম ফ্যাক্টেরাইজেশন ভিত্তিক একটি সিস্টেম ব্যবহার করেছিলেন। তিনি প্রথমে পাটিগণিতের আনুষ্ঠানিক ভাষায় প্রতিটি বুনিয়াদি প্রতীকে একটি অনন্য প্রাকৃতিক সংখ্যা নির্ধারণ করেছিলেন যার সাথে তিনি আচরণ করছেন।

সুতরাং, আমরা শর্তসাপেক্ষ লুপগুলি পেয়েছি, গাদেল নম্বর হিসাবে স্বেচ্ছাচারিত ভেরিয়েবলগুলি পেয়েছি, আমরা একটি টুরিং মেশিন পেয়েছি।

অন্য কিছু মজাদার পড়া যা ফ্রেট্র্যানের প্রকৃতির মতো কোল্টজকে স্পর্শ করে তা কি সিদ্ধান্ত নিতে পারি না? Undecide! যা ফ্র্যাকট্রান এবং বন্ধ হওয়া সমস্যার সাথে কোলাটজ অনুমান সম্পর্কিত।


ফ্রেট্রান আপনার মাথা ঘুরিয়ে নেওয়া কিছুটা কঠিন।

প্রোগ্রামটি কিছু বিবেচনা করুন:

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

এফ 2 এ , কোনও বাছাইয়ের 'ফাংশন' নির্দিষ্ট করতে পারে।

   10 1
α: - → α, - → β β
    3 1

   3
β: - → β
   5 

এফ 2 প্রোগ্রাম (পি) কে একটি স্ট্যান্ডার্ড ফ্র্যাক্ট্রান প্রোগ্রামে রূপান্তর করতে , একজন করে:

  1. দৈর্ঘ্যের লুপ 1 সাফ করুন
  2. গ্রীক অক্ষর (ফাংশন) তাজা মূল সংখ্যাগুলির সাথে প্রতিস্থাপন করুন
  3. স্থানান্তরগুলি প্রতিস্থাপন করুন:
   টেক্কা
পি: - → কিউ, - → আর, - - এস, ...
   bdf

হয়ে:

aq cr এস
-, -, -, ...
বিপি ডিপি এফপি

এটি যা করেছে তা প্রোগ্রামের স্থিতি সংরক্ষণের জন্য প্রাইমগুলি পি, কিউ, আর এবং এস ব্যবহার করা হয়।

এবং তারপরে আমরা রেজিস্টার মেশিনটি পেয়েছি ... এটিতে সীমাবদ্ধ সংখ্যক নিবন্ধ রয়েছে যা স্বেচ্ছাসেবী সংখ্যায় এবং দুটি নির্দেশ সংরক্ষণ করে:

  • ইনক (এক্স আই , এম) - ইনক্রিমেন্ট রেজিস্টার i এবং লাইন এম এ যান
  • জেজেডেক (এক্স আই , এম 1 , এম 2 ) - নিবন্ধিত হলে আমি 0 হয় লাইন এম, অন্যথায় হ্রাস i, এবং লাইন এম 2 এ যান।

এই রেজিস্টার মেশিনটি টুরিং সম্পূর্ণরূপে দেখানো হয়েছে।

এরপরে এটি একটি যান্ত্রিক প্রক্রিয়ার অংশ হিসাবে একটি ফ্র্যাক্ট্রান প্রোগ্রামে একটি রেজিস্টার মেশিন প্রোগ্রাম সংকলনের বিভিন্ন স্লাইডে প্রক্রিয়াটি দেখায় ।

মূলত:

                       পি (ঝ)
inc (x (i), m) = ---- → m
                        1

                        1 1
জজেডেক (এক্স (আই), এম 1, এম 2) = ---- → এম 2, - → এম 1
                       p (i) 1

এবং এইভাবে কম্পিউটিংয়ের এই দুটি মডেলের মধ্যে সমতা থাকার কারণে, ফ্র্যাক্ট্রান সম্পূর্ণরূপে টুরিং হয়।

বিটিডব্লিউ, আপনি যদি সত্যিই নিজের মনকে ফুটিয়ে তুলতে চান তবে কোড গল্ফ পড়ুন: ফ্র্যাক্ট্রান যাতে কিছু লোক একটি ফ্র্যাক্ট্রান প্রোগ্রাম লিখেছিল অন্য একটি ফ্র্যাক্ট্রান প্রোগ্রাম চালানোর জন্য।


2
এবং আমি ভেবেছিলাম ব্রেইনফ * সি কে অদ্ভুত ছিল।
রবার্ট হার্ভে

নোট করুন যে ভেক্টর সংযোজন সিস্টেমগুলি সম্পর্কিত যা কোনও ফ্র্যাক্ট্রান প্রোগ্রামকে ভ্যাস হিসাবে লেখা যেতে পারে। এবং পেট্রি নেটও।
ড্যান ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.