ভাষার বৈশিষ্ট্য / কাঠামোর ন্যূনতম সেট কী এটি এটিকে টুরিং-সম্পূর্ণ করে তুলেছে?
ভাষার বৈশিষ্ট্য / কাঠামোর ন্যূনতম সেট কী এটি এটিকে টুরিং-সম্পূর্ণ করে তুলেছে?
উত্তর:
একটি টুরিং তরপিট হ'ল একধরনের গৌরবময় প্রোগ্রামিং ল্যাঙ্গুয়েজ যা সম্ভব হিসাবে কয়েকটি উপাদান ব্যবহার করে টুরিং-সম্পূর্ণ হওয়ার চেষ্টা করে। ব্রেইনফাক সম্ভবত সর্বাধিক পরিচিত তরপিট, তবে অনেকগুলি রয়েছে।
ফোঁটা এবং Jot দুই এবং তিন প্রতীক, যথাক্রমে, উপর ভিত্তি করে সঙ্গে কার্মিক ভাষা এস কে (ই) combinator ক্যালকুলাস ।
ওআইএসসি ( এক নির্দেশ সেট কম্পিউটার ) এমন এক প্রকার বাধ্যতামূলক গণনা বোঝায় যা সাধারণত এক বা একাধিক যুক্তির এক নির্দেশ প্রয়োজন, সাধারণত "শূন্যের চেয়ে কম বা সমান হলে বিয়োগ ও শাখা", বা "বিপরীত বিয়োগ এবং .ণ নেওয়া হলে এড়িয়ে যান"। X86 এমএমইউ পূর্ব নির্দেশটি কার্যকর করে এবং তাই টুরিং-সম্পূর্ণ।
সাধারণত, একটি অত্যাবশ্যক ভাষা টিউরিং-সম্পূর্ণ হওয়ার জন্য, এটির প্রয়োজন:
শর্তসাপেক্ষ পুনরাবৃত্তি বা শর্তাধীন জাম্পের একটি ফর্ম (যেমন while
,, if
+ goto
)
কিছু ফর্ম স্টোরেজ পড়ার এবং লেখার একটি উপায় (যেমন, ভেরিয়েবল, টেপ)
জন্য ল্যামডা-ক্যালকুলাস কার্মিক ভাষা ভিত্তিক হতে টিসি, এটা দরকার:
আর্গুমেন্টের মাধ্যমে বিমূর্ত ফাংশনগুলির ক্ষমতা (যেমন, ল্যাম্বদা বিমূর্তি, উদ্ধৃতি)
যুক্তিগুলিতে ফাংশন প্রয়োগ করার ক্ষমতা (যেমন হ্রাস)
গণনা দেখার অন্যান্য উপায় অবশ্যই আছে, তবে এগুলি ট্যুরিং টারপিটের সাধারণ মডেল। মনে রাখবেন যে, বাস্তব কম্পিউটারের হয় না সার্বজনীন টুরিং মেশিন কারণ তারা সীমাবদ্ধ স্টোরেজ হবে না। কড়া কথায় বলতে গেলে এগুলি হ'ল "সীমাবদ্ধ স্টোরেজ মেশিন"। আপনি যদি তাদের সাথে স্মৃতি যুক্ত করে রাখেন তবে তারা ক্ষমতায় টুরিং মেশিনের প্রতি সংবেদনশীলভাবে যোগাযোগ করবে। যাইহোক, এমনকি সীমাবদ্ধ স্টোরেজ মেশিন এবং সীমাবদ্ধ রাষ্ট্রীয় মেশিনগুলি গণনার জন্য দরকারী; এগুলি কেবল সর্বজনীন নয় ।
কঠোরভাবে বলতে গেলে, টুরিং-সম্পূর্ণতার জন্য I / O প্রয়োজন হয় না; টিসি কেবলমাত্র দাবি করে যে কোনও ভাষা আপনার পছন্দসই ফাংশনটি গণনা করতে পারে, এটি আপনাকে ফলাফলটি প্রদর্শন করতে পারে না। অনুশীলনে, প্রতিটি দরকারী ভাষার একরকম বিশ্বের সাথে যোগাযোগের একটি উপায় রয়েছে।
আরও ব্যবহারিক দৃষ্টিকোণ থেকে: আপনি যদি টিউরিং-সম্পূর্ণ ভাষায় সমস্ত প্রোগ্রামগুলি আপনার ভাষায় অনুবাদ করতে পারেন, তবে (যতদূর আমি জানি), আপনার ভাষা অবশ্যই টিউরিং-সম্পূর্ণ হতে হবে। অতএব, আপনি যদি ডিজাইন করেছেন কোন ভাষা টিউরিং-সম্পূর্ণ কিনা তা আপনি যদি পরীক্ষা করতে চান তবে আপনি কেবল আপনার ভাষাভাষার সংকলকটিতে একটি ব্রেইনফ *** লিখতে পারেন এবং প্রমাণ করতে পারেন / প্রমাণ করতে পারেন যে এটি সমস্ত আইনী বিএফ প্রোগ্রাম সংকলন করতে পারে।
স্পষ্ট করার জন্য, আমার অর্থ হ'ল আপনার ভাষাগুলির জন্য একজন অনুবাদক ছাড়াও, আপনি একটি সংকলক (যে কোনও ভাষায়) লিখেছেন যা আপনার বিএফ প্রোগ্রামটি আপনার ভাষাতে সংকলন করতে পারে (অবশ্যই একই শব্দার্থিক শব্দ রেখে)।
</sarcasm>
কোনও সিস্টেমকে কেবলমাত্র ট্যুরিং সম্পূর্ণ বলে বিবেচনা করা যেতে পারে যদি এটি কোনও সার্বজনীন টিউরিং মেশিন পারে এমন কিছু করতে পারে। যেহেতু সর্বজনীন ট্যুরিং মেশিনটি বলা হয় যে কোনও সময় নির্ধারণযোগ্য কোনও কার্য সমাধান করতে সক্ষম হবে, তাই ট্যুরিংয়ের সম্পূর্ণ সিস্টেমগুলি এক্সটেনশনের মাধ্যমেও এটি করতে পারে।
কোনও কিছু টুরিং সম্পূর্ণ হয়েছে কিনা তা পরীক্ষা করে দেখুন, আপনি এর ভিতরে কোনও টুরিং মেশিন প্রয়োগ করতে পারেন কিনা তা দেখুন। অন্য কথায়, এটি নিম্নলিখিত অনুকরণ করতে পারে কিনা তা পরীক্ষা করে দেখুন:
এগুলি হ'ল ট্যুরিং সম্পূর্ণ হিসাবে বিবেচিত হওয়ার কোনও সিস্টেমের জন্য ন্যূনতম প্রয়োজনীয়তা। বেশিও না কমও না. যদি এটি কোনও ফ্যাশনে এর কোনওটি অনুকরণ করতে না পারে তবে এটি টুরিং সম্পূর্ণ নয়। অন্যান্য লোকেদের প্রস্তাবিত পদ্ধতিগুলি কেবলমাত্র শেষ হওয়ার উপায় হিসাবে রয়েছে কারণ বেশ কয়েকটি টুরিং সম্পূর্ণ সিস্টেম রয়েছে যাতে এই বৈশিষ্ট্যগুলি নেই।
মনে রাখবেন যে সত্যিকারের টুরিংয়ের সম্পূর্ণ ব্যবস্থা গড়ে তোলার কোনও উপায় নেই। এটি কারণ প্রকৃতপক্ষে শারীরিক স্থানের মধ্যে টুরিং মেশিনের টেপের সীমাহীনতা অনুকরণ করার কোনও জ্ঞাত উপায় নেই।
আপনি যদি এর সাথে কোনও গণনা করতে পারেন তবে একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ সম্পূর্ণ টুরিং করে। বৈশিষ্ট্যগুলির একটি মাত্র সেট নেই যা একটি ভাষা টিউরিংকে সম্পূর্ণ করে তোলে তাই উত্তর দেয় যে আপনার লুপের প্রয়োজন বা আপনার ভেরিয়েবলগুলি দরকার কারণ ভুল রয়েছে কারণ ভাষা আছে যা দুটি না থাকলেও সম্পূর্ণ টিউরিং রয়েছে।
অ্যালান টুরিং সর্বজনীন টুরিং মেশিন তৈরি করেছিলেন এবং আপনি যদি আপনার ভাষাতে চালানোর জন্য সার্বজনীন মেশিনে কাজ করার জন্য ডিজাইন করা কোনও প্রোগ্রাম অনুবাদ করতে পারেন তবে এটিও টুরিং সম্পূর্ণ। এটিও পরোক্ষভাবে কাজ করে যাতে আপনি বলতে পারেন এক্স ট্যুরিজ সম্পূর্ণ হয় যদি ভাষাটি সম্পূর্ণ ভাষা শেখার জন্য সমস্ত প্রোগ্রাম এক্স এর জন্য অনুবাদ করা যায় যেহেতু সমস্ত সার্বজনীন টিউরিং মেশিন প্রোগ্রামগুলি একটি ওয়াই প্রোগ্রামে অনুবাদ করা যায়।
সময় জটিলতা, স্পেস জটিলতা, সহজ ইনপুট / আউটপুট ফর্ম্যাট এবং কোনও প্রোগ্রাম লেখার সহজ সমীকরণের অন্তর্ভুক্ত নয় সুতরাং এই জাতীয় মেশিন তাত্ত্বিকভাবে সমস্ত গণনা করতে পারে যদি গণনাটি বিদ্যুৎ হ্রাস বা পৃথিবী সূর্যের দ্বারা গ্রাস করা না থামায়।
সম্পূর্ণরূপে টুরিংয়ের সম্পূর্ণতা প্রমাণ করার জন্য তারা সম্পূর্ণ ভাষায় টুরিং প্রমাণিত হওয়ার জন্য একটি দোভাষী তৈরি করে তবে এটি কাজ করার জন্য আপনার প্রয়োজন ইনপুট এবং আউটপুট, দুটি ভাষা যা সত্যিকারের কোনও ভাষা সম্পূর্ণরূপে টুরিংয়ের প্রয়োজন হয় না। এটি পর্যাপ্ত যে আপনার প্রোগ্রামটি প্রারম্ভকালে তার অবস্থার পরিবর্তন করতে পারে এবং প্রোগ্রামটি থামার পরে আপনি মেমরিটি পরীক্ষা করতে পারবেন।
একটি সফল ভাষা তৈরি করার জন্য এটি সম্পূর্ণরূপে টুরিংয়ের চেয়ে বেশি প্রয়োজন এবং এমনকি ট্যারিপিটকে ট্যুর করার জন্য এটি সত্য। আমার মনে হয় না এবং ছাড়াই ব্রেইনফাক জনপ্রিয় হত ।,
.
এটি অসীমভাবে লুপ করবেন বা বন্ধ হবে কিনা তা আপনি বলতে পারবেন না।
ব্যাখ্যা: কিছু ইনপুট দেওয়া হয়েছে, প্রতিটি ক্ষেত্রে (অন্য টিউরিং মেশিন ব্যবহার করে) এটি বলা অসম্ভব যে জিনিসটি অসীমভাবে লুপ হয়ে যাচ্ছে বা শেষ পর্যন্ত থামতে চলেছে, এটি চালানো বাদ দিয়ে (যা আপনাকে যদি উত্তর থামিয়ে দেয় তবে তা থামিয়ে দেয় তবে তা নয়) যদি এটি লুপ হয়!)।
এর অর্থ হল যে আপনি কোনওভাবেই সম্ভাব্য সীমাহীন পরিমাণের ডেটা সঞ্চয় করতে সক্ষম হবেন - অসীম টেপের সমতুল্য থাকতে হবে, যতই সঙ্কলিত হোক না কেন! (অন্যথায় কেবলমাত্র সীমাবদ্ধ সংখ্যক রাজ্য রয়েছে এবং তারপরে আপনি আগে এই অবস্থার মধ্য দিয়ে এসেছিলেন এবং শেষ পর্যন্ত থামছেন কিনা তা আপনি পরীক্ষা করতে পারেন)। সাধারণত, ট্যুরিং মেশিনগুলি কিছু নিয়ন্ত্রণযোগ্য উপায়ে তাদের রাজ্যের আকার বাড়াতে বা সঙ্কুচিত করতে পারে।
যেহেতু টিউরিংয়ের আসল সর্বজনীন ট্যুরিং মেশিনে একটি অবিশ্বাস্য থামার সমস্যা রয়েছে, আপনার নিজের টিউরিং সম্পূর্ণ মেশিনেও একটি অবিশ্বাস্য থামার সমস্যা থাকতে হবে।
টিউরিং সম্পূর্ণ সিস্টেমগুলি অন্য কোনও টিউরিং সম্পূর্ণ সিস্টেমকে অনুকরণ করতে পারে, সুতরাং আপনি যদি আপনার সিস্টেমে কিছু সুপরিচিত টুরিং সম্পূর্ণ সিস্টেমের জন্য একটি এমুলেটর তৈরি করতে পারেন তবে এটি প্রমাণ করে যে আপনার সিস্টেমটিও টুরিং সম্পূর্ণ।
উদাহরণস্বরূপ, ধরুন আপনি প্রমাণ করতে চান যে সাপ ও মই টিউরিং সম্পূর্ণ, একটি বোর্ড দেওয়া হয়েছে অসীম পুনরাবৃত্তি গ্রিড প্যাটার্ন (উপরে এবং বাম পাশে একটি আলাদা সংস্করণ সহ)। 2-কাউন্টার মিনস্কি মেশিনটি টিউরিং সম্পূর্ণ বলে জেনে গিয়েছে (এতে 2 টি সীমিত সংখ্যার বাইরে 2 সীমাহীন কাউন্টার রয়েছে এবং 1 টি রাষ্ট্র রয়েছে), আপনি একটি সমমানের বোর্ড তৈরি করতে পারেন যেখানে গ্রিডে এক্স এবং ওয়াই অবস্থানটি 2 কাউন্টারগুলির বর্তমান মান এবং বর্তমান পথটি বর্তমান অবস্থা state ব্যাং! আপনি কেবল প্রমাণ করেছেন যে সাপ এবং মই টিউরিং সম্পূর্ণ।
একটি প্রয়োজনীয় শর্ত হ'ল সর্বাধিক পুনরাবৃত্তি গণনা সহ একটি লুপ যা পুনরাবৃত্তির আগে নির্ধারিত হয় না বা পুনরাবৃত্তি যেখানে সর্বাধিক পুনরাবৃত্তির গভীরতা নির্ধারিত হয় না। উদাহরণ হিসাবে, ... ইন ... লুপগুলির জন্য যেহেতু আপনি তাদের আরও অনেক নতুন ভাষায় খুঁজে পান তা ভাষা টিউরিংকে সম্পূর্ণ করার জন্য যথেষ্ট নয় (তবে তাদের অন্য উপায় থাকবে)। নোট করুন যে এর অর্থ সীমিত সংখ্যক পুনরাবৃত্তি বা সীমাবদ্ধ পুনরাবৃত্তির গভীরতা নয়, তবে সর্বাধিক পুনরাবৃত্তি এবং পুনরাবৃত্তির গভীরতা অবশ্যই গণনা করতে হবে।
উদাহরণস্বরূপ, অ্যাকারম্যান ফাংশন এই বৈশিষ্ট্যগুলি ছাড়া কোনও ভাষায় গণনা করা যায় না। অন্যদিকে, এই বৈশিষ্ট্যগুলির প্রয়োজনীয়তা ছাড়াই প্রচুর জটিল এবং অত্যন্ত দরকারী সফ্টওয়্যার লেখা যেতে পারে।
অন্যদিকে, প্রতিটি পুনরাবৃত্তি গণনা এবং প্রতিটি পুনরাবৃত্তির গভীরতার সাথে গণনা করা, কেবল কোনও প্রোগ্রাম থামবে কি না তা স্থির করা যায় না, তবে এটি বন্ধ হয়ে যায়।
আমি জানি এটি আনুষ্ঠানিকভাবে সঠিক উত্তর নয়, তবে একবার আপনি 'টিউরিং-সম্পূর্ণ' এর বাইরে 'ন্যূনতম' নিয়ে যান এবং এটি যেখানে ব্যবহার করেন সেখানে 'ব্যবহারিক' ফিরিয়ে রাখলে আপনি একটি গুরুত্বপূর্ণ প্রোগ্রাম যা কোনও প্রোগ্রামিং ভাষার সাথে আলাদা করতে পারেন তা দেখতে পাবেন মার্কআপ ল্যাঙ্গুয়েজ হয়
পরের দিন
এই দাবিগুলি পরীক্ষা করতে, একটি মার্কআপ ভাষা দিয়ে শুরু করুন, বলুন, এইচটিএমএল। আমরা কেবলমাত্র ভেরিয়েবলগুলির সাথে একটি এইচটিএমএল + উদ্ভাবন করতে পারি, বা কেবল শর্তসাপেক্ষে (এমএস শর্তাধীন মন্তব্য সহ এটি করেছিলেন), বা কোনও ধরণের লুপ তৈরি করেছিলেন (যা শর্তসাপের অনুপস্থিতিতে সম্ভবত এর মতো কিছু হতে পারে <repeat n='4'>...</repeat>
)। এর মধ্যে যে কোনওটি করার ফলে এইচটিএমএলকে প্লেইন এইচটিএমএল থেকে উল্লেখযোগ্যভাবে (?) আরও শক্তিশালী করা হবে, তবে এটি প্রোগ্রামিং ভাষার চেয়ে আরও বেশি মার্কআপ হতে পারে; প্রতিটি নতুন বৈশিষ্ট্য সহ, আপনি এটিকে একটি ঘোষণামূলক কম এবং একটি অত্যাবশ্যক ভাষা কম করেন।
যুক্তি এবং প্রোগ্রামিংয়ে ন্যূনতমতার সন্ধান অবশ্যই গুরুত্বপূর্ণ এবং আকর্ষণীয়, তবে যদি আমাকে n00bies তরুণ বা বৃদ্ধ 'প্রোগ্রামিং কী' এবং 'কীভাবে প্রোগ্রাম শিখতে হয়' শেখাতে হয়, আমি খুব কমই প্রস্থ এবং প্রস্থ দিয়ে শুরু করতে চাই টুরিং সম্পূর্ণতার তাত্ত্বিক ভিত্তি। রান্না এবং প্রোগ্রামিংয়ের পুরো উপাদানটি আপনার মা যেমন করেছেন ঠিক ততক্ষণ পর্যন্ত পুনরুক্তি করা, সঠিক ক্রমে স্টাফগুলি করছে। এটি আমার জন্য যথেষ্ট পরিমাণে।
তারপরে আবার, আমি কখনই আমার সিএস শেষ করিনি।