হোল্টিং সমস্যার অনিশ্চয়তার প্রমাণ বুঝতে আমার সমস্যা হচ্ছে।
যদি হোক বা না হোক প্রোগ্রাম আয় ইনপুটের স্থগিত , আমরা কেন কোড পাস করতে হবে না উভয়ের জন্য এবং ?ক খ পি এ বি
কেন নয় আমরা ভোজন পারেন সঙ্গে এবং কিছু নির্বিচারে ইনপুট, বলুন, ?পি x
হোল্টিং সমস্যার অনিশ্চয়তার প্রমাণ বুঝতে আমার সমস্যা হচ্ছে।
যদি হোক বা না হোক প্রোগ্রাম আয় ইনপুটের স্থগিত , আমরা কেন কোড পাস করতে হবে না উভয়ের জন্য এবং ?ক খ পি এ বি
কেন নয় আমরা ভোজন পারেন সঙ্গে এবং কিছু নির্বিচারে ইনপুট, বলুন, ?পি x
উত্তর:
প্রমাণটির লক্ষ্য একটি দ্বন্দ্ব খুঁজে পাওয়া। নিজে কেন একটি ইনপুট হিসাবে ব্যবহৃত হয় তা বোঝার জন্য আপনাকে বুঝতে হবে যে উত্পন্ন দ্বন্দ্বটি কী । বৈপরীত্যটি হ'ল অনানুষ্ঠানিকভাবে: যদি আমাদের কাছে এমন কোনও মেশিন এইচ (এ, বি) থাকে যা "অ গ্রহণ করে খ" সিদ্ধান্ত নেয়, তবে আমরা এমন একটি মেশিন তৈরি করতে পারি যা এমন মেশিনগুলি গ্রহণ করে যা নিজেরাই গ্রহণ করে না। (যে পড়ুন যতক্ষণ কয়েক বার এটা পাবেন।) মেশিন চিত্রটিতে দেখানো - আসুন একে ডাকতে এম - এম ( পি ) = নেই পি গ্রহণ করে না ⟨ পি ⟩ ?
অসঙ্গতি ঘটে যখন আপনাকে জিজ্ঞাসা: নেই গ্রহণ ⟨ এম ⟩ ? কীভাবে বৈপরীত্য রয়েছে তা দেখার জন্য দুটি বিকল্প নিয়ে কাজ করার চেষ্টা করুন।
গ্রহণ ⟨ এম ⟩ যদি এবং কেবল যদি এম গ্রহণ করে না ⟨ এম ⟩ ; এটি স্পষ্টতই একটি বৈপরীত্য।
এই কারণেই প্রুসের জন্য চালানো কোনও অনিয়মিত ইনপুট নয় এটি অপরিহার্য । এটি অসম্পূর্ণতার প্রমাণগুলির একটি সাধারণ থিম যা তির্যক যুক্তি হিসাবে পরিচিত।
এক মুহুর্তের জন্য ছবিটি উপেক্ষা করুন; আমরা শীঘ্রই এটিতে পাবেন। প্রোগ্রাম একটি স্থগিত পরীক্ষক হতে অনুমিত হয়: যখন আমরা দিতে এইচ একটি প্রোগ্রাম এর একটি ইনপুট একটি (মনে একটি জন্য সব সময়ে একটি প্রোগ্রাম তালিকা) এবং কিছু খ , এইচ ( একটি , খ ) নিম্নলিখিত হিসাবে কাজ করে
এই যুক্তি যে করা অসম্ভব একটি নির্দিষ্ট "বিকৃত" প্রোগ্রাম, পি এর ক্রিয়াকলাপের উপর নির্ভর করে যা এইচকে সাব্রোটিন হিসাবে ব্যবহার করে । পি এর ইনপুট হিসাবে কোনও প্রোগ্রামের তালিকা হিসাবে গ্রহণ করে, এক্স , এবং নিম্নলিখিতগুলি করে:
P(x) =
run H(x, x)
if H(x, x) answers "yes"
loop forever
else
halt
এটি দেখতে কঠিন নয়
ইনপুট হিসাবে নিজস্ব বিবরণ দেওয়া হলেপ্রোগ্রাম এক্স চিরতরে চলতে পারেএবং কেবল তখনই পি ( এক্স ) থামবে।
এতদূর এত ভাল: যতক্ষণ না তার সাবউরটিন এইচ একটি প্রোগ্রাম অবশ্যই থাকবে ।
এবার ছবিতে ফিরুন। ইনপুট হিসাবে এর নিজস্ব বিবরণ দেওয়া হলে কী হবে ? ছবিটি ঠিক সেই দৃশ্যের বর্ণনা দেয়: পি প্রোগ্রামটির বর্ণনাকরণ করা যাক , তারপরে উপরের হাইলাইট অংশটির পরিবর্তে আমাদের কাছে থাকবে
এবং প্রোগ্রাম পি ( পি ) চিরকালের জন্য চলমান থাকলে কেবল থামবে।
স্পষ্টতই, এই বিপরীতমুখী আচরণটি অসম্ভব, সুতরাং আমরা এই সিদ্ধান্তে বাধ্য হয়েছি যে সাব্রোটিন একটি থামার পরীক্ষক হতে পারে না, যেহেতু এটি একটি ক্ষেত্রে ব্যর্থ হয়, যেখানে এটি ইনপুট হিসাবে দেওয়া হয় ( পি , পি ) । অন্যান্য ক্ষেত্রেও থাকতে পারে যেখানে এইচ যেমনটি কাজ করে ঠিক তেমন কাজ করে, তবে যেহেতু এইচ কমপক্ষে একটি পরিস্থিতিতে ব্যর্থ হয়, তাই এটি সম্পূর্ণভাবে থামানো পরীক্ষক হতে পারে না, প্রয়োজন অনুসারে।
H
ফ্যাক্স একাধিকবার কল করা হচ্ছে না, যা কিছু আছে তার কোন পুনরাবৃত্তি P
নেই। H(P, P)
কার্যকর করা হয় না P
, এটি কেবল "জাদুকরী" নির্ধারণ করে যে P
নিজের পাস করার পরে থামবে কি না ।
H(P,P)
করতে হবে না P
, তবে এটি থামবে H(x ↦ H(x,x), P)
কিনা তা নির্ধারণের অংশ হিসাবে এটি কার্যকর করতে হবে P
। যা প্রসারিত হয় H(x ↦ H(y ↦ H(y,y), x), P)
ইত্যাদি।
H
এই প্রমাণে নির্দিষ্ট করা হয়নি। তাই না, এটা না আছে যে হতে কিনা কিছু চালানো, P
বা নিজেই। প্রমাণটি এই অনুমানের সাথে শুরু হয় যে কোনও ধরণের প্রোগ্রাম H
উপস্থিত রয়েছে যা যাদুকরীভাবে থামানো সমস্যাটিকে স্থির করে, তারপরে প্রমাণ করে যে এই জাতীয় প্রোগ্রামের অস্তিত্বই একটি দ্বন্দ্ব হতে পারে, এবং এই জাতীয় কোনও প্রোগ্রামের অস্তিত্ব নেই।
অ্যানিমেশন সহ একটি সুন্দর প্রমাণ চেষ্টা করুন । এবং যেহেতু আনসারগুলিতে কোনও সাইটের লিঙ্কের চেয়ে বেশি থাকা উচিত, তাই আপনার প্রশ্নের উত্তর এখানে।
প্রথমে আসুন আমরা স্মরণ করি যে হ্যালটিং ওরাকলটি অস্তিত্বের প্রমাণ কীভাবে কাজ করে। আমরা প্রমাণিত করেছি যে কোনও প্রার্থীকে H
হ্যালটিং ওরাকল দেওয়া হয়েছে, একটি প্রোগ্রাম P
এবং একটি ইনপুট রয়েছে a
যার জন্য H
সঠিকভাবে পূর্বাভাস দিতে ব্যর্থ হয় যা কী P(a)
করে।
উপপাদ্য: যাক H
এমন কোনও প্রোগ্রাম হোক যা দুটি ইনপুট নেয় এবং সর্বদা হয় হয় হয় halt
বা হয় loop
। তারপরে একটি প্রোগ্রাম Q
এবং একটি ইনপুট a
রয়েছে যা Q(a)
যদি থামায় এবং যদি কেবল H(Q,a)
ফিরে আসে তবে উপস্থিত রয়েছে loop
।
প্রুফ। প্রোগ্রাম বিবেচনা করুন
program P(y):
if H(y,y) = halt then
loop forever
else:
return
যাক Q = P
এবং a = P
। হয় H(Q,a) = halt
বা H(Q,a) = loop
:
H(Q,a) = halt
তারপর Q(a)
(যা ঠিক হয় P(P)
) এর সংজ্ঞা দ্বারা চিরকাল রান P
।H(Q,a) = loop
তখন এর সংজ্ঞা দিয়ে Q(a)
থামান P
।Qed
আপনি জিজ্ঞাসা করেছিলেন আমরা কেন অন্য কারও H(P,P)
পরিবর্তে বিবেচনা করেছি । এর সুস্পষ্ট উত্তর হ'ল "কারণ যা প্রমাণকে কাজ করে"! আপনি যদি কিছু নির্বিচারে ব্যবহার করেন তবে আপনি আটকে যাবেন। প্রকৃতপক্ষে, প্রমাণটি তখন এর মতো দেখাবে:H(P,X)
X
H(P,P)
H(P,X)
X
ভাঙা প্রমাণ প্রোগ্রাম বিবেচনা করুন
program P(y):
if H(y,y) = halt then
loop forever
else:
return
আসুন Q = P
এবং a = X
কিছু নির্বিচারে জন্য X
। হয় H(Q,X) = halt
বা H(Q,X) = loop
:
H(Q,X) = halt
তাহলে আমরা কী করতে পারি তা বলতে পারছি P(X)
না, কারণ থামানো কী দেয় তার P(X)
উপর নির্ভর করে H(X,X)
। আমরা আটকে আছি. তবে, আমরা যদি তা জানতাম P(X)
এবং X(X)
একইরকম থাকতাম তবে আমরা অগ্রগতি করতে পারতাম। (সুতরাং, আমাদের সত্যই নেওয়া উচিত X = P
)।H(Q,a) = loop
আমরা আবার আটকে থাকি, এবং আমরা যদি আনস্টকে থাকি X = P
।কিউইডি না।
আমি আশা করি এটি দেখায় যে H(P,P)
আমাদের ধারণাটি কাজ করার জন্য আমাদের অবশ্যই বিবেচনা করতে হবে।
প্রুফের আপশটটি হ'ল এই সাদৃশ্যটি: