ট্যুরিংয়ের সম্পূর্ণতা ত্যাগ করে ইদ্রিস কী করতে পারবেন না?


35

আমি জানি যে ইদ্রিসের নির্ভরশীল প্রকার রয়েছে তবে টিউরিং সম্পূর্ণ নয়। টুরিংয়ের সম্পূর্ণতা ত্যাগ করে এটি কী করতে পারে না এবং এটি নির্ভরশীল ধরণেরগুলির সাথে সম্পর্কিত?

আমি অনুমান করি এটি বেশ একটি নির্দিষ্ট প্রশ্ন, তবে নির্ভরশীল ধরণের এবং সম্পর্কিত ধরণের সিস্টেমগুলি সম্পর্কে আমি বিপুল পরিমাণে জানি না।


2
আমার ধারণা আপনি কোন কংক্রিটের উদাহরণ খুঁজছেন? আমি ইদ্রিসের সাথে পরিচিত নই, তবে ইসাবেল / এইচএল-তে আপনি ফাংশন লিখতে পারবেন না (বা বরং সংকলন করুন) যা সর্বদা শেষ হয় না (আরও খারাপ, আপনাকে একটি সমাপ্তির প্রমাণ দিতে হবে )।
রাফেল

এই রেখাগুলির পাশাপাশি কিছু - হ্যাঁ - আমি পুরোপুরি নিশ্চিত ছিলাম না যে এখানে বেশ কিছু বিশেষ ক্ষেত্রে রয়েছে যেমন আপনি টাইপ সিস্টেমে নির্দিষ্ট বৈশিষ্ট্যযুক্ত কোনও ভাষা এনকোড করতে পারবেন না, বা এটি কিছুটা সাধারণ হবে কিনা (যেমন আপনি যেমন বলেছিলেন) , সমস্ত ফাংশন অবশ্যই শেষ করতে প্রমাণিত হতে হবে)
স্কুইডলি

1
অনুমান করুন যে এই ভুল ধারণাটি এডউইন ব্র্যাডি এসে বলেছিল যে ইদ্রিস "প্যাকম্যান সম্পূর্ণ"। আমি মনে করি "ট্যুরিং কমপ্লিট" এর পরিবর্তে "প্যাকম্যান সম্পূর্ণ" বলে তাঁর মূল বক্তব্যটি হ'ল তিনি কেবল মেশিনই নয়, সহজেই মস্তিষ্কের দ্বারা ভাষাগুলি সংকলন-সক্ষম হওয়ার ভাষাগুলির গুরুত্বকেও আন্ডার করে তুলতে চান! .. ব্রেইনফকের মতো নির্বোধ ভাষা অবশ্যই টিউরিং সম্পূর্ণ, তবে ব্রেইনফাকের লিখিত কোড বোঝার জন্য এটি একটি মানব মস্তিষ্ককে বেশ খানিকটা সময় নিতে পারে, এইভাবে বিকাশ ঘটায় এবং আরও গুরুত্বপূর্ণ রক্ষণাবেক্ষণের জন্য , ব্রেইনফাকের একটি প্যাকম্যান প্রোগ্রাম বেশ প্রচেষ্টা গ্রহণ করে ..
মিশেলানদাহল

@ মিটজ সত্যই নয় আমি মনে করি এটি কারণ যা আমি তাকে একটি বক্তৃতায় বলতে শুনে কিছু ভুল বুঝেছিলাম।
স্কুয়েলি

উত্তর:


50

ইদ্রিস টুরিং সম্পূর্ণ! এটি সামগ্রিকতার জন্য পরীক্ষা করে (ডেটা সহ প্রোগ্রামিংয়ের সময় সমাপ্তি, কোডাটির সাথে প্রোগ্রামিং করার সময় উত্পাদনশীলতা) তবে সবকিছু মোটের প্রয়োজনের প্রয়োজন হয় না।

মজার বিষয় হচ্ছে, ট্যুরিং কমপ্লিটেন্সি মডেল করার জন্য ডেটা এবং কোডাটা যথেষ্ট কারণ আপনি আংশিক ফাংশনগুলির জন্য একটি মোনাড লিখতে পারেন। আমি বহু বছর আগে কাক-এ এটি করেছি - সম্ভবত এটি এখনই ব্রেট্রোড হয়েছে তবে এখানে তা সত্ত্বেও: http://eb.host.cs.st-andrews.ac.uk/Partial/partial.v

আসলে এই জাতীয় জিনিসগুলি চালানোর জন্য আপনার একটি পালাতে হবে তবে ইদ্রিস আপনাকে এটি করতে দেয়।

টাইপ চেকিংকে সিদ্ধান্ত গ্রহণযোগ্য করে তোলার জন্য ইদ্রিস প্রকার স্তরে আংশিক ফাংশন হ্রাস করবে না। এছাড়াও, কেবলমাত্র মোট প্রোগ্রামগুলি প্রমাণ হিসাবে বিশ্বাসযোগ্য হতে পারে।


4
লোকটি নিজেই। এই প্রসঙ্গে উত্পাদনশীলতা কী?
স্কুডলি

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

14

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

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

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

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

ইদ্রিস দৃda়ভাবে আগদার দ্বারা অনুপ্রাণিত । আগদা উপমা প্রমাণের জন্য ডিজাইন করা একটি ভাষা । এখন প্রমাণিত হচ্ছে উপপাদ্য এবং চলমান প্রোগ্রামগুলি খুব ঘনিষ্ঠভাবে সম্পর্কিত , সুতরাং আপনি কোনও উপপাদ্য প্রমাণ করার মতোই আপনি আগডায় প্রোগ্রাম লিখতে পারেন। স্বজ্ঞাতভাবে, উপপাদকের প্রমাণ "এ ইম্প্লিস বি" এমন একটি ফাংশন যা তাত্ত্বিক এ এর ​​প্রমাণকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং উপপাদ্য বিয়ের প্রমাণ ফেরত দেয় is

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

oops : A -> B
oops x = oops x

আপনি এ জাতীয় ফাংশনটির অস্তিত্ব আপনাকে বোঝাতে দিতে পারবেন না যে এ-কে বি বোঝায়, অন্যথায় আপনি কিছু প্রমাণ করতে সক্ষম হবেন এবং কেবল সত্য উপপাদ্যই নয়! সুতরাং আগদা (এবং অনুরূপ উপপাদ্য প্রবাদগুলি) স্বেচ্ছাচারিত পুনরাবৃত্তি নিষেধ করে। আপনি যখন একটি পুনরাবৃত্ত ফাংশন লিখেন, আপনাকে অবশ্যই প্রমাণ করতে হবে যে এটি সর্বদা শেষ হয় , যাতে আপনি যখনই এটিকে উপপাদ্য এ এর ​​প্রমাণ হিসাবে চালান আপনি জানেন যে এটি উপপাদ্য বিয়ের প্রমাণ তৈরি করবে know

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

প্রুফ সিস্টেমগুলিকে আরও প্রোগ্রামিং-ভাষা-তৈরির বিষয়ে তাদের গ্যারান্টি নিয়ে আপস না করে অনেকগুলি গবেষণা চলছে যে আপনার যদি A থেকে B পর্যন্ত কোনও ফাংশন থাকে তবে এটি গাণিতিক প্রমাণের মতোই ভাল good যে বি বোঝায় সিস্টেমটিকে আরও গ্রহণ করার জন্য প্রসারিত করা সমাপ্তি কার্যাদি গবেষণা বিষয়গুলির একটি। অন্যান্য বর্ধনের দিকনির্দেশগুলির মধ্যে ইনপুট / আউটপুট এবং সম্মতি হিসাবে যেমন "বাস্তব-বিশ্বের" উদ্বেগগুলির সাথে লড়াই করা অন্তর্ভুক্ত। আর একটি চ্যালেঞ্জ হ'ল এই সিস্টেমগুলিকে নিখুঁত প্রাণীদের কাছে অ্যাক্সেসযোগ্য করে তোলা (বা সম্ভবত নিছক নশ্বরকে বোঝাতে হবে যে তারা বাস্তবে অ্যাক্সেসযোগ্য)।

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

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


3
"কোন দরকারী প্রোগ্রাম টিউরিং-অসম্পূর্ণ ভাষায় লেখা যায় না?" একটি জাভা ভার্চুয়াল মেশিন।
ডেভিড রিচার্বি

@ ডেভিডরিচার্বি আপনি কি পারছেন না? জেভিএম কি আসলেই টুরিং-সম্পূর্ণ? একটি পৃথক বস্তুর আকারের একটি সীমা রয়েছে, আপনি কি একটি সীমাহীন সংখ্যা অবজেক্টের বরাদ্দ এবং অ্যাক্সেসের ব্যবস্থা করতে পারেন? উদাহরণস্বরূপ, সি-তে, উত্তরটি হ'ল বলে মনে হচ্ছে না কারণ কেবলমাত্র চূড়ান্তভাবে অনেকগুলি পয়েন্টার মান রয়েছে।
গিলস 21:52-তে

সেই অংশে আগ্রহী পাঠকদের জন্য, আমাদের কেন সর্বদা সমাপ্তকারী ভাষাগুলির জন্য প্রোগ্রামিং ভাষা হতে পারে না সে সম্পর্কে একটি আর পোস্ট রয়েছে।
রাফায়েল

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

3
@ ডেভিডরিচার্বি আমার মন্তব্যগুলি (তবে আমার উত্তর নয়) প্রোগ্রামিং ভাষা তত্ত্ব গীকের মোডে রয়েছে। আপনি যদি এসএমএলের আনুষ্ঠানিক স্পেসিফিকেশন গ্রহণ করেন (উদাহরণস্বরূপ), এটি নকশা করা সম্ভব (তবে অবশ্যই শারীরিক জগতে প্রয়োগ করা হয়নি) এমন ভাষার একটি বাস্তবায়ন যা সমস্ত গণনীয় প্রোগ্রামকে অনুকরণ করতে পারে। এটি সি তে হয় না, কারণ মেমরির সুনির্দিষ্টতা ভাষায় অন্তর্নির্মিত হয় ( sizeof(void*))। আমার উত্তরে আমি ভাষাগুলিকে একটি আদর্শিক উপায়ে আচরণ করি, সুতরাং এসএমএল বা সি টিউরিং-সম্পূর্ণ বলে বিবেচিত হবে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.