কোনও প্রোগ্রামিং ভাষার টুরিং সম্পূর্ণ হওয়ার জন্য কি সর্বনিম্ন মানদণ্ড রয়েছে?


55

ট্যুরিং কমপ্লিট হিসাবে বিবেচিত হওয়ার জন্য কোনও প্রোগ্রামিং ভাষায় প্রোগ্রামিং ল্যাঙ্গুয়েজ কনস্ট্রাক্টসের সেট রয়েছে কি?

আমি উইকিপিডিয়া থেকে যা বলতে পারি তা থেকে , ভাষাটির পুনরাবৃত্তি সমর্থন করা উচিত, বা সম্ভবত মনে হয়, থামানো ছাড়াই চলতে সক্ষম হতে হবে। এই সব কি এটা আছে?


6
সম্ভবত আপনার প্রশ্নটি জিজ্ঞাসা করা উচিত "প্রোগ্রামিং নির্মাণের একটি ন্যূনতম সেট আছে ...?", কারণ এটি বর্ণিত হিসাবে উত্তরটি হ'ল সমস্ত গণনাযোগ্য। "
ডেভ ক্লার্ক


@ ডেভ ক্লার্ক, ধন্যবাদ, আমি এটি আপডেট করেছি। আমি দেখতে পেয়েছি যে আপনার মন্তব্যটি কিছুটা প্রশ্ন উত্থাপন করেছে, যদিও আমি ধরে নিয়েছি এটি আমার ভাষা দুর্বল। আমি বলতে চাইছিলাম এমন কয়েকটি অপারেশন রয়েছে কিনা তা যদি জিজ্ঞাসা করা হয় যে কোনও ভাষা যদি গণনা করতে পারে, তবে এটি সমতুল্য হয়ে উঠবে।
খানজোর

উত্তর:


45

আমি সবসময় যদিও -recursive ফাংশনμ এটা পেরেক দিয়ে। এখানে কম্পিউটেবল ফাংশনগুলির পুরো সেটটি সংজ্ঞায়িত করা হয়েছে; এটি শ্রমের সমন্বিত ফাংশনগুলির মধ্যে সবচেয়ে ছোট সেট। বিরুদ্ধে বন্ধ:

  1. ধ্রুব ফাংশন0
  2. উত্তরসূরি ফাংশন
  3. পরামিতি নির্বাচন করা হচ্ছে
  4. ফাংশন রচনা
  5. আদিম পুনরাবৃত্তি
  6. -operator (জন্য ক্ষুদ্রতম চেহারা এক্স যেমন যে ...)μএক্স

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

আপনার জন্য মৌলিক সিনট্যাক্স উপাদানের মধ্যে বেশ আক্ষরিক ঐ অনুবাদ করতে পারেন যখন প্রোগ্রাম , যথা

  1. ধ্রুবক 0
  2. incrementation _ + 1
  3. পরিবর্তনশীল অ্যাক্সেস x
  4. প্রোগ্রাম / বিবৃতি উপসংহার _; _
  5. কাউন্টডাউন লুপস for ( x to 0 ) do _ end
  6. লুপ যখন while ( x != 0 ) do _ end

1
আমি মনে করি এটি সুস্পষ্ট যে আপনি ভাষাতে 5 তম নিয়ম বাদ দিতে পারবেন না । যেহেতু while6 এ লুপটি ধ্রুবক শূন্যের সাথে তুলনা করে, ভেরিয়েবলগুলি কেবল নিয়ম 2 দ্বারা বাড়ানো যেতে পারে এবং (নিয়ম 1) থেকে শুরু করার জন্য কোনও নেতিবাচক ধ্রুবক নেই, while6- এ লুপ হয় প্রবেশ করা হয়নি (x = 0) অথবা এটি অসীম ( x> 0, এবং লুপের বডি এটি হ্রাস করতে পারে না)।
এমসাল্টারস

1
@ এসএমএল্টাররা আমি মনে করি আপনি ঠিক বলেছেন; আমার মনে হয় যে সিমুলেশনটি মনে হয়, আমাদের প্রয়োজন _ - 1এবং আমি এটি ছাড়া বাস্তবায়নের কোনও উপায় ভাবতে পারি না for। এটি ধরার জন্য ধন্যবাদ! ("আরও ভাল" - সহ _ - 1বা for? হুম।)
রাফেল

20

ট্যুরিং কমপ্লিট হিসাবে বিবেচিত হওয়ার জন্য কোনও প্রোগ্রামিং ভাষায় পারফরম্যান্স হওয়া দরকার এমন একটি সংকলন কী রয়েছে?

হ্যাঁ, টিউরিং সম্পূর্ণরূপে বিবেচনা করার জন্য একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ কোনও ট্যুরিং মেশিন দ্বারা সম্পাদিত যে কোনও গণনা সম্পাদন করতে সক্ষম হওয়া প্রয়োজন। সুতরাং একটি ন্যূনতম প্রয়োজনীয়তা হিসাবে কেউ বলতে পারেন, আপনাকে একটি সর্বজনীন টুরিং মেশিন - বা অন্য কোনও টিউরিং সম্পূর্ণ ভাষার জন্য দোভাষী - এতে প্রয়োগ করতে সক্ষম হতে হবে।

আমি উইকিপিডিয়া থেকে যা বলতে পারি তা থেকে, ভাষাটির পুনরাবৃত্তি সমর্থন করা উচিত, বা সম্ভবত মনে হয় থামানো ছাড়াই চলতে সক্ষম হতে হবে। এই সব কি এটা আছে?

না। উদাহরণস্বরূপ এমন একটি ভাষা যেখানে কেবলমাত্র অনুমোদিত ক্রিয়াকলাপটি পুনরাবৃত্তি হয় (যেমন আপনি কেবল লিখতে পারেন এমন সম্ভাব্য ফাংশনটি f(x) = f(x)টুরিং সম্পূর্ণ নয়) কারণ এতে আপনি যা লিখতে পারেন তা এমন প্রোগ্রাম যা কখনও শেষ হয় না I যেমনটি আমি আগেই বলেছি, একটি টুরিং সম্পূর্ণ ভাষা টিউরিং মেশিন দ্বারা সম্পাদিত কোনও গণনা কার্যকর করতে সক্ষম হওয়া দরকার। সুতরাং স্পষ্টভাবে এটি যথেষ্ট নয়।

এছাড়াও কোনও ভাষা আপনাকে যেভাবে ভাবছে তা পুনরুক্তি সমর্থন করতে হবে না। লুপগুলি প্রকাশের কেবল একটি সীমাহীন উপায়। এটি পুনরাবৃত্তি হতে পারে, তবে এটি কিছুক্ষণের লুপ বা গোটোও হতে পারে। এমন একটি ভাষা যা ফাংশনগুলিতে একেবারেই না থাকে তবুও টিউরিং সম্পূর্ণ হতে পারে। এবং আবার লুপস বা পুনরাবৃত্ত ফাংশনগুলি পর্যাপ্ত শর্ত নয়। আপনার এখনও শর্তের উপর নির্ভর করে বিভিন্ন কোড কার্যকর করতে একটি উপায় এবং পুরানোগুলি থেকে নতুন মান গণনা করার উপায় প্রয়োজন (অন্যথায় সমস্ত লুপ / ​​পুনরাবৃত্তি হয় অসীম হবে বা এগুলি মোটেই চালিত হবে না)।


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

উদাহরণস্বরূপ যেমন আমি ইতিমধ্যে বলেছি, এখানে টুরিং সম্পূর্ণ ভাষা রয়েছে যা পুনরাবৃত্ত ফাংশন (বা কোনও ফাংশন মোটেই সমর্থন করে না)। এগুলি এখনও ট্যুরিং সম্পূর্ণ হতে পারে যদি তাদের কাছে gotoবিবৃতি বা whileলুপ থাকে (এবং নির্বিচারে ডেটা সংরক্ষণের উপায়)। তবে recursive ফাংশন সঙ্গে একটি ভাষা তন্ন তন্ন প্রয়োজন whileকিংবা gotoসম্পূর্ণ টুরিং হবে। সুতরাং gotoপ্রয়োজনীয় পর্যাপ্ত অপারেশনগুলির সেটগুলিতে নাও থাকতে পারে তবে এমন ভাষা রয়েছে যা সরিয়ে ফেললে আর টিউরিং সম্পূর্ণ হয় না goto। সুতরাং এই ধরনের কোন সেট নেই।


শুধুমাত্র যে অংশে আমি নিশ্চিত নই তা হ'ল প্রয়োজনীয় অপারেশনের ন্যূনতম সেটটির উত্তর to আপনি নিয়ন্ত্রণের কাঠামোগুলি সম্পর্কে আপনার অপারেশনগুলির সংজ্ঞা সীমাবদ্ধ বলে মনে করছেন যা জিজ্ঞাসা করা থেকে অনেক সংকীর্ণ সুযোগ বলে মনে হচ্ছে এবং এগুলি "এত অস্পষ্টভাবে, যাতে তারা [অর্থহীন] হয়ে যায়" এটিকে সংজ্ঞায়িত না করার নিজের প্রয়োজনের বাইরেও।
জোশুয়া ড্রাক

@ জোশুয়া ড্রেক আপনার নিশ্চিত অর্থ আমি নিশ্চিত নই। আমি কাঠামো নিয়ন্ত্রণের জন্য অপারেশন সীমাবদ্ধ করছি না। এটা ঠিক যে আমি এমন কোনও অপারেশন সম্পর্কে কথা বলি না যা আমার কাউন্টার উদাহরণে কাঠামো নিয়ন্ত্রণ করে না কারণ তারা উদাহরণের সাথে প্রাসঙ্গিক নয়। আসলে আমি "স্বেচ্ছাসেবী তথ্য সংরক্ষণের একটি উপায়" উল্লেখ করি - এটি খুব কমই একটি নিয়ন্ত্রণ কাঠামো।
sepp2k

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

@ জোশুয়া ড্রেক, আমি মনে করি না যে গোটোর পরিবর্তে "জাম্প" ব্যবহার করা আমাদের এমন পর্যায়ে নিয়ে যায় যেখানে আমরা পর্যাপ্ত এবং প্রয়োজনীয় অপারেশনের সংজ্ঞা দিতে পারি। এটি সম্ভবত সত্য যে প্রতিটি ভাষার কোনও না কোনও ঝাঁপ অপারেশন প্রয়োজন হবে (এবং যদি এটি কেবল ফাংশন কল হয়) তবে আমি মনে করি না যে আপনি এটি পর্যাপ্ত করার জন্য আরও ক্রিয়াকলাপ নিয়ে আসতে সক্ষম হবেন। উদাহরণস্বরূপ ল্যাম্বডা ক্যালকুলাসের দুটি অপারেশন রয়েছে: অ্যাপ্লিকেশন (যেমন আমাদের জাম্প অপারেশন) এবং বিমূর্ততা (অর্থাত্ ফাংশন তৈরি করা) ...
sepp2k

1
@ জোশুয়াড্রাক আমার মনে হয় না যে নিবন্ধটি দাবি করার চেষ্টা করছে যে কোনও টিউরিং-সম্পূর্ণ ভাষায় এই ক্রিয়াকলাপগুলি হওয়া দরকার। বিশেষত যেহেতু এটি নির্দিষ্টভাবে প্রক্রিয়াভিত্তিক ভাষাগুলিতে সীমাবদ্ধ করে। গোটো (যেমন ফাংশন অ্যাপ্লিকেশন) এর একটি ফর্ম ব্যতীত ল্যাম্বডা ক্যালকুলাসের সেই জিনিসগুলির মধ্যে একটিও নেই। আমি মনে করি এখানে "সর্বনিম্ন" এর অর্থ কেবল সেই ভাষায় যে কেবল সেই বৈশিষ্ট্যগুলি রয়েছে, আপনি ট্যুরিং সম্পূর্ণতা হারানো ছাড়া সেগুলির কোনওটিই সরাতে পারবেন না। এমন নয় যে অপারেশনগুলির কোনও ন্যূনতম সেট নেই যা টুরিং সম্পূর্ণতার জন্যও যথেষ্ট।
sepp2k

14

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

এটি একটি বৈশিষ্ট্যটির দিকে নিয়ে যায়: একটি ভাষা ট্যুরিং সম্পূর্ণ হয় কেবল এবং যদি এটি মেমরিতে পূর্ণসংখ্যার সংগ্রহ এবং সংরক্ষণের ক্রিয়াকলাপ অনুকরণ করতে সক্ষম হয় এবং তাদের উপর "বিয়োগ এবং শাখা হয়" অপারেশন সম্পাদন করতে সক্ষম হয়।


13

এটি আপনার প্রশ্নের সাধারণ উত্তর নয়, তবে কাঠামোগত প্রোগ্রামিং উপপাদ্য অনুসারে যা যা প্রয়োজন তা হল নির্বাচন করার দক্ষতা (যেমন, ifসি / সি ++ তে) এবং পুনরাবৃত্তি (যেমন, whileসি / সি ++ তে)। সম্পাদনা করুন: মন্তব্যগুলিতে ডেভ ক্লার্কের নির্দেশ অনুসারে, কাঠামোগত প্রোগ্রামিং উপপাদ্যেরও ক্রম প্রয়োজন। আমি প্রাথমিকভাবে এটি তালিকাবদ্ধ করিনি যেহেতু আমি পাঠককে মঞ্জুর করার জন্য গ্রহণ করেছি তা বুঝতে পারে যে অন্যান্য নির্দেশাবলীর বুনিয়াদি ব্লকগুলি যেমন মেমোরি স্টোর থেকে পড়ার জন্য এবং পরে লেখার জন্য পরে বর্ণিত, ইত্যাদিও প্রয়োজনীয় ছিল)। এটি অবশ্যই স্পষ্ট করে বলা ভাল; আপনারও এই জিনিসগুলি করতে সক্ষম হবেন।

যেহেতু উভয়কে শর্তসাপেক্ষ জাম্প নির্দেশ ব্যবহার করে প্রয়োগ করা যেতে পারে (উদাহরণস্বরূপ, JNZx86 এ), এটিও ট্যুরিং-সমতুল্যতার পক্ষে যথেষ্ট।

নোট করুন যে অন্যান্য জিনিসগুলি প্রয়োজন, অর্থাত্, কিছু প্রকারের বাহ্যিক মেমরি স্টোরগুলিতে একটি সীমাহীন সংকেত (উদাহরণস্বরূপ, বিট ... 0 বা 1) লেখার ক্ষমতা। সেই অর্থে, প্রকৃত কম্পিউটারগুলি টুরিং সমতুল্য নয়, যেহেতু তাদের কারও কাছেই অসীম পরিমাণে সঞ্চয়স্থান নেই। ট্যুরিং মডেলটি এখনও কার্যকর, যেহেতু মেমরির পরিমাণটি সাধারণত প্রচুর পরিমাণে বিশাল এবং এমনকি কোনও বাস্তব কম্পিউটার সমাধান করতে পারে এমন কোনও সমস্যা একটি ডিটারমিনিস্টিক সসীম অটোমেটনের মাধ্যমে সমাধান করা যায়, সেই মডেলটি গণনা বিশেষভাবে কার্যকর নয় (যেহেতু রাজ্যের সংখ্যা নিখরচায় বিশাল হবে)।

দ্রষ্টব্য যে এটি অগত্যা sepp2k এর উত্তরের সাথে মতবিরোধ নয়; এটি একই প্রশ্নটি সম্পর্কে চিন্তা করার এক অন্যরকম উপায়।

সম্পাদনা করুন:

এছাড়াও লক্ষ করুন যে আপনার সত্যিকারের ifএবং whileসি / সি ++ উভয়ই দরকার নেই । আপনি নিম্নলিখিত ifব্যবহার করে অনুকরণ করতে পারেন while:

bool C;
// some code that sets C
if(C) { /* some other code /* }
// rest of the program

নিম্নলিখিত কোডটি সর্বদা সমতুল্য:

bool C;
// some code that sets C
bool C2 = C;
while(C2) { /* some other code /* C2 = false; }
// rest of the program

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

সম্পাদনা করুন:

এছাড়াও, আপনার প্রশ্নটি সম্পর্কে যে প্রোগ্রামটি থামছে না তা লেখার ক্ষমতাটি টুরিং সমতুল্যের পক্ষে যথেষ্ট কিনা, উত্তরটি নেই; এটি প্রয়োজনীয়, তবে পর্যাপ্ত নয়। আমরা এমন ভাষায় লিখিত প্রোগ্রামগুলির থামার সমস্যার সমাধান করতে পারি যা থামাতে ব্যর্থ এমন প্রোগ্রামগুলিকে প্রকাশ করতে পারে না; উত্তরটি হ'ল সমস্ত প্রোগ্রামের জন্য "প্রোগ্রামটি থামবে"। তবে, আমরা এমন একটি ভাষা নির্ধারণ করতে পারি যেখানে কেবলমাত্র নির্দেশনা মেশিনকে একটি অসীম লুপে প্রবেশ করে ... এই জাতীয় ভাষা টুরিং-সমতুল্য নয়।


13

এসকে(এস এক্স Y z- র)=(এক্স z- র (Y z- র))(কে এক্স Y)=এক্স

এক্স=λএক্স((এক্স এস) কে)


5

ভাষার গঠনগুলি বিনিময়যোগ্য

কোন কনস্ট্রাক্টগুলি স্থানীয়ভাবে কোনও প্রোগ্রামিং ভাষার দ্বারা সরবরাহ করতে হবে সে সম্পর্কে কোনও ন্যূনতম ন্যূনতম মানদণ্ড নেই । যদি এটি এমন কিছু অদ্ভুত কনস্ট্রাক্টস সরবরাহ করে যা কোনওরকমে টুরিং-সম্পূর্ণ সিস্টেমটি প্রকাশ করার জন্য সংশ্লেষিত হতে পারে, তবে দৃশ্যত those নির্মাণগুলি অন্যগুলির মতো "যথাযথ উপযুক্ত"।

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

যে কোনও টিপি-সম্পূর্ণ ভাষা নির্মাণের প্রভাবগুলি অন্য কোনও টিপি-সম্পূর্ণ ভাষার নির্মাণের দ্বারা অনুকরণ করা যায়।

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