হোল্টিং সমস্যার অনিশ্চয়তার প্রমাণ


25

হোল্টিং সমস্যার অনিশ্চয়তার প্রমাণ বুঝতে আমার সমস্যা হচ্ছে।

http://computing.guide/wp-content/uploads/2014/12/HaltingProblem1.jpg

যদি হোক বা না হোক প্রোগ্রাম আয় ইনপুটের স্থগিত , আমরা কেন কোড পাস করতে হবে না উভয়ের জন্য এবং ?পি বিH(a,b)abPab

কেন নয় আমরা ভোজন পারেন সঙ্গে এবং কিছু নির্বিচারে ইনপুট, বলুন, ?পি xH()Px


মনে রাখবেন যে এখানে কম্পিউটার ব্যবহার করা হচ্ছে এমন মডেলটিতে যে কোনও (এনকোডড) ইনপুট অনুমোদিত। এখানে কোনও ধরণের চেকিং বা এর মতো কিছু নেই। আপনি সর্বদা একটি প্রোগ্রাম এনকোড করতে পারেন এবং এটিকে নিজের কাছে একটি ইনপুট হিসাবে পাস করতে পারেন।
asmeurer

2
আপনি পারে ভোজন যাই হোক না কেন ইনপুট আপনি চান। এই প্রমাণের কাঠামোর জন্য একটি নির্দিষ্ট ইনপুট বিবেচনা করা দরকার। H
ডেভিড রিচার্বি

1
আপনি প্রোগ্রামটিতে যে কোনও ইনপুট সরবরাহ করতে পারেন। লক্ষ্যটি হল দ্বন্দ্ব খুঁজে পাওয়া। তাত্ত্বিকভাবে মেশিন 'এইচ' সমস্ত ধরণের ইনপুটগুলির জন্য কাজ করা উচিত। সুতরাং আমরা সমস্ত সম্ভাব্য ইনপুটগুলির একটি বিবেচনা করি, যা দ্বন্দ্বের দিকে পরিচালিত করে।
Unesnes

এই প্রমাণটি মোটামুটি ত্রুটিযুক্ত। আমার যদি এইচ () থাকে যা নিজেই সমস্ত কিছুর জন্য কাজ করে তবে তা বিবেচনা করুন; এটি এখনও সমস্যা সমাধানের একটি সাধারণ সমাধান হতে পারে।
জোশুয়া

সম্পর্কিত, সম্ভবত সদৃশ: cs.stackexchange.com/questions/42819/…
ইলমারি করোনেন

উত্তর:


27

প্রমাণটির লক্ষ্য একটি দ্বন্দ্ব খুঁজে পাওয়া। নিজে কেন একটি ইনপুট হিসাবে ব্যবহৃত হয় তা বোঝার জন্য আপনাকে বুঝতে হবে যে উত্পন্ন দ্বন্দ্বটি কী । বৈপরীত্যটি হ'ল অনানুষ্ঠানিকভাবে: যদি আমাদের কাছে এমন কোনও মেশিন এইচ (এ, বি) থাকে যা "অ গ্রহণ করে খ" সিদ্ধান্ত নেয়, তবে আমরা এমন একটি মেশিন তৈরি করতে পারি যা এমন মেশিনগুলি গ্রহণ করে যা নিজেরাই গ্রহণ করে না। (যে পড়ুন যতক্ষণ কয়েক বার এটা পাবেন।) মেশিন চিত্রটিতে দেখানো - আসুন একে ডাকতে এম - এম ( পি ) = নেই পি গ্রহণ করে না পি ?PMM(P)=PP

অসঙ্গতি ঘটে যখন আপনাকে জিজ্ঞাসা: নেই গ্রহণ এম ? কীভাবে বৈপরীত্য রয়েছে তা দেখার জন্য দুটি বিকল্প নিয়ে কাজ করার চেষ্টা করুন।MM

গ্রহণএম যদি এবং কেবল যদি এম গ্রহণ করে নাএম ; এটি স্পষ্টতই একটি বৈপরীত্য।MMMM

এই কারণেই প্রুসের জন্য চালানো কোনও অনিয়মিত ইনপুট নয় এটি অপরিহার্য । এটি অসম্পূর্ণতার প্রমাণগুলির একটি সাধারণ থিম যা তির্যক যুক্তি হিসাবে পরিচিত।P


38

এক মুহুর্তের জন্য ছবিটি উপেক্ষা করুন; আমরা শীঘ্রই এটিতে পাবেন। প্রোগ্রাম একটি স্থগিত পরীক্ষক হতে অনুমিত হয়: যখন আমরা দিতে এইচ একটি প্রোগ্রাম এর একটি ইনপুট একটি (মনে একটি জন্য সব সময়ে একটি প্রোগ্রাম তালিকা) এবং কিছু , এইচ ( একটি , ) নিম্নলিখিত হিসাবে কাজ করেH(a,b)HaabH(a,b)

  1. যদি ইনপুট হিসাবে দেওয়া হয় তখন প্রোগ্রামটি যদি হল্ট দ্বারা প্রতিনিধিত্ব করে , এইচ ( , বি ) "হ্যাঁ" উত্তর দেবে। অন্যদিকে, যদি প্রোগ্রাম দ্বারা বর্ণিত একটি রান চিরকাল যখন ইনপুট দেওয়া তারপর এইচ ( একটি , ) "না" উত্তর দিতে হবে।abH(a,b)abH(a,b)
  2. গুরুত্বপূর্ণভাবে, প্রোগ্রাম সর্বদা থামবে এবং যে কোনও জোড়া ( , ) এর সঠিক উত্তর দেবে ।H(a,b)

এই যুক্তি যে করা অসম্ভব একটি নির্দিষ্ট "বিকৃত" প্রোগ্রাম, পি এর ক্রিয়াকলাপের উপর নির্ভর করে যা এইচকে সাব্রোটিন হিসাবে ব্যবহার করে । পি এর ইনপুট হিসাবে কোনও প্রোগ্রামের তালিকা হিসাবে গ্রহণ করে, এক্স , এবং নিম্নলিখিতগুলি করে:HPHPx

P(x) =
  run H(x, x)
  if H(x, x) answers "yes"
      loop forever
  else
      halt

এটি দেখতে কঠিন নয়

ইনপুট হিসাবে নিজস্ব বিবরণ দেওয়া হলেপ্রোগ্রাম এক্স চিরতরে চলতে পারেএবং কেবল তখনই পি ( এক্স ) থামবে।P(x)x

এতদূর এত ভাল: যতক্ষণ না তার সাবউরটিন এইচ একটি প্রোগ্রাম অবশ্যই থাকবে ।PH

এবার ছবিতে ফিরুন। ইনপুট হিসাবে এর নিজস্ব বিবরণ দেওয়া হলে কী হবে ? ছবিটি ঠিক সেই দৃশ্যের বর্ণনা দেয়: পি প্রোগ্রামটির বর্ণনাকরণ করা যাক , তারপরে উপরের হাইলাইট অংশটির পরিবর্তে আমাদের কাছে থাকবেPpP

এবং প্রোগ্রাম পি ( পি ) চিরকালের জন্য চলমান থাকলে কেবল থামবে।P(p)P(p)

স্পষ্টতই, এই বিপরীতমুখী আচরণটি অসম্ভব, সুতরাং আমরা এই সিদ্ধান্তে বাধ্য হয়েছি যে সাব্রোটিন একটি থামার পরীক্ষক হতে পারে না, যেহেতু এটি একটি ক্ষেত্রে ব্যর্থ হয়, যেখানে এটি ইনপুট হিসাবে দেওয়া হয় ( পি , পি ) । অন্যান্য ক্ষেত্রেও থাকতে পারে যেখানে এইচ যেমনটি কাজ করে ঠিক তেমন কাজ করে, তবে যেহেতু এইচ কমপক্ষে একটি পরিস্থিতিতে ব্যর্থ হয়, তাই এটি সম্পূর্ণভাবে থামানো পরীক্ষক হতে পারে না, প্রয়োজন অনুসারে।H(p,p)HH


আমি এই উত্তরটি পছন্দ করি। যদিও এখন আমি প্রমাণটি বুঝতে পেরেছি, এটি কেবল প্রমাণ করে যে H এইচ একটি পুনরাবৃত্তি সীমা ব্যতিক্রম ছুঁড়ে ফেলতে পারে।
ফ্যাক্স

2
@ Hফ্যাক্স একাধিকবার কল করা হচ্ছে না, যা কিছু আছে তার কোন পুনরাবৃত্তি Pনেই। H(P, P)কার্যকর করা হয় না P, এটি কেবল "জাদুকরী" নির্ধারণ করে যে Pনিজের পাস করার পরে থামবে কি না ।
আজেদি 32

@ আজেদী 32 কে কার্যকর H(P,P)করতে হবে না P, তবে এটি থামবে H(x ↦ H(x,x), P)কিনা তা নির্ধারণের অংশ হিসাবে এটি কার্যকর করতে হবে P। যা প্রসারিত হয় H(x ↦ H(y ↦ H(y,y), x), P)ইত্যাদি।
ফ্যাক্স

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

1
@ ফ্যাক্স আপনি কোনও প্রোগ্রামের অস্তিত্ব থাকতে পারে কিনা তা সম্পর্কে একটি ভাল বক্তব্য উত্থাপন করবেন না যা নিজে ডেকে আনা ব্যতীত স্থগিত সমস্যা স্থির করে। দেখুন স্বাবলম্বীকরণ বা তির্যককরণের উপর নির্ভর করে না যে থমকে থাকা সমস্যার অনস্বীকার্যতার কোনও প্রমাণ রয়েছে কি? যে সম্পর্কে একটি আকর্ষণীয় প্রশ্নের জন্য।
আজেদি 32

9

অ্যানিমেশন সহ একটি সুন্দর প্রমাণ চেষ্টা করুন । এবং যেহেতু আনসারগুলিতে কোনও সাইটের লিঙ্কের চেয়ে বেশি থাকা উচিত, তাই আপনার প্রশ্নের উত্তর এখানে।

প্রথমে আসুন আমরা স্মরণ করি যে হ্যালটিং ওরাকলটি অস্তিত্বের প্রমাণ কীভাবে কাজ করে। আমরা প্রমাণিত করেছি যে কোনও প্রার্থীকে 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)XH(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)আমাদের ধারণাটি কাজ করার জন্য আমাদের অবশ্যই বিবেচনা করতে হবে।


হা হা। অসাধারণ! :)
aelguindy

2

প্রুফের আপশটটি হ'ল এই সাদৃশ্যটি:

P(P)P(P)P(P)(P)(P)

(P)(P)

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