পরীক্ষা কি বাগের অনুপস্থিতি প্রদর্শন করতে পারে?


18

(n+1) পয়েন্টগুলি ডিগ্রি এর একটি বহুপদী নির্ধারণের জন্য স্বতন্ত্রভাবে আবশ্যকn; উদাহরণস্বরূপ, একটি প্লেনে দুটি পয়েন্ট হুবহু একটি লাইন নির্ধারণ করে।

কিভাবে অনেক পয়েন্ট স্বতন্ত্র করার প্রয়োজন হয় তা নির্ধারণ একটি গণনীয় ফাংশন , একটি প্রোগ্রাম এর দৈর্ঘ্য দেওয়া যে নির্ণয় একটি নির্দিষ্ট ভাষায়? (অর্থাত্ চ এর কোলমোগোরভ জটিলতার উপর আবদ্ধ )।f:NNff

ধারণাটি হ'ল, অন্তত তাত্ত্বিকভাবে, কেউ পর্যাপ্ত পরীক্ষা করে কোনও প্রোগ্রামের সঠিকতা প্রমাণ করতে পারে।

যদি একটিতে দৈর্ঘ্যের এল এর একটি প্রোগ্রাম যা চ এর গণনা করে , তবে বেশিরভাগ এল এর উত্স দৈর্ঘ্যের সাথে গণনা করা যায় এমন ফাংশনের সংখ্যার উপর একটি সীমাবদ্ধতা রয়েছে ।PLfL

সুতরাং একজনকে "কেবল" প্রমাণ করতে হবে:

  • উত্সের দৈর্ঘ্যএল দিয়ে গণনা করাযেতেপারেf L
  • অন্য কোনও ফাংশনকে এল বাইট বা তার চেয়ে কম হিসাবেগণনা করতে পারে না(পরীক্ষার মাধ্যমে)PL

এই ধারণার সম্ভবত কোনও ব্যবহারিক পরিণতি নেই (সীমানা অবশ্যই ঘৃণ্য হতে বাধ্য)।


4
ধরুন ফাংশন আপনার বিবরণ বাইনারি দেওয়া হয়, তারপর আছে সর্বাধিক সর্বাধিক বিবরণ দৈর্ঘ্য এল । তবে এখন সমস্যাটি হ'ল বহুবর্ষের বিপরীতে দুটি স্বতন্ত্র গণনাযোগ্য ফাংশন সহজেই অসীম সংখ্যার ইনপুটগুলিতে একই মানগুলি নিতে পারে। এইভাবে আপনার সমস্যা আমার পক্ষে অসম্ভব বলে মনে হচ্ছে। 2L+11L
ব্রুনো

আমি আপনার ধারণা বুঝতে পেরেছি। তবে বর্ণন দৈর্ঘ্যের দুটি স্বতন্ত্র গণনাযোগ্য ফাংশন <= এল কিছু সময়ে পৃথক হওয়া উচিত (কিছু n0 এর জন্য)। একটি প্রদত্ত এল এর n0 এর মান খুঁজে পেতে পারে?
pbaren

4
আপনি যদি এইরকম একটি পয়েন্ট পেতে পারেন তবে কেবল ডোভেলটেলিং ব্যবহার করে সমস্ত মানগুলিতে ফাংশনগুলি গণনা করুন, তবে যদি তা না থাকে তবে আপনি কখনই জানতে পারবেন না, প্রোগ্রামের আকারের উপরের দৈর্ঘ্যের উপরের দিকে থাকা কোনও কিছুই পরিবর্তন করে না।
কাভেহ

7
আসলে, @ কাভেহ, আপনার নিজের যুক্তি অনুসারে উপরের একটি বাঁধাই আপনাকে কেবল কোনও গণনাযোগ্য কিছু নয়, যেখানে সেগুলির পার্থক্য সম্পর্কে কিছু বলবে tell যদি কে ( ) এল , এবং এফ জি , তবে কে ( এক্স ) 2 এল + সি যেখানে সি বর্ণিত অ্যালগরিদমের দৈর্ঘ্য আপনি (@ কাভেঃ) এবং x হল প্রথম স্ট্রিং যার উপর এবং জি পার্থক্য রয়েছে। বিশেষত, এক্সK(f)K(f)LfgK(x)2L+ccxfgx কিছু ব্যাসি-বিভার-মতো ফাংশন দ্বারা আবদ্ধ । যাইহোক, সমস্ত এক্স2L+cx যেমন যে বা কম্পিউটিং বিবি এখনও uncomputable হয়। সুতরাং @ পেবারেন: একটি সীমাবদ্ধ রয়েছে, তবে এটি কেবল তাত্পর্যপূর্ণর চেয়ে অনেক বেশি, এটি আপত্তিজনক নয়। K(x)2L+c
জোশুয়া গ্রাচো

6
@Kaveh: যে আমি একটি "ব্যস্ত-বীবর-মত" ফাংশন দ্বারা কি বোঝানো: দিন দীর্ঘতম স্ট্রিংটির Kolmogorov জটিলতা (ক সার্বজনীন মেশিন ঠিক) সবচেয়ে হয় দৈর্ঘ্য হতে এন । কেবলমাত্র চূড়ান্তভাবে অনেকগুলি স্ট্রিং রয়েছে তাই এটি সর্বজনীন মেশিনের পছন্দ পর্যন্ত সঠিকভাবে সংজ্ঞায়িত। তারপরে বি বি ( এল + সি ) একটি উপরের বাউন্ড: যদি কোলমোগোরভ জটিলতার দুটি (সম্পূর্ণ গণনাযোগ্য) ফাংশন সর্বাধিক এল এর দৈর্ঘ্য বি বি ( এল + সি ) পর্যন্ত সমস্ত পয়েন্টগুলিতে সম্মত হনBB(n)nBB(2L+c)LBB(2L+c) তারপর, তারা সমান।
জশুয়া Grochow

উত্তর:


9

(এটি একটি মন্তব্য হিসাবে বোঝানো হয়েছিল, তবে অনেক দিন গেছে)। খুব মজার প্রশ্ন। যদি আপনি কোলমোগোরভের পাশাপাশি অন্যান্য জটিলতার ব্যবস্থা সম্পর্কে ভাবতে আগ্রহী হন, তবে শিখন তত্ত্বের কিছু উত্তর রয়েছে যা আপনাকে সন্তুষ্ট করতে পারে। আমি এটি এলাকার বিশেষজ্ঞদের জন্য রেখেছি।

উদাহরণস্বরূপ, যদি আমি ভুল না হয়ে থাকি তবে "জ্ঞানার্জনের একটি তত্ত্ব" ভ্যালেন্টে প্রমাণিত হয়েছিল যে একটি বুলিয়ান ফাংশনটি তার কে-সিএনএফ সূত্রের আকারের "পজিটিভ পয়েন্টগুলি" এর বহুবচনীয় সংখ্যার ভিত্তিতে পুনর্গঠন করা যেতে পারে (কোনও স্থির কে জন্য , এবং আমি ফর্মের "ধনাত্মক পয়েন্টগুলি" দিয়ে বোঝাতে চাই (x1,,xn,1)).

নুথের টিএওসিপি 7.2.1.6 এ এটি একটি আশ্চর্যজনক উপায়ে দেখানো হয়েছে (ক্রিসমাস ট্রি প্যাটার্ন ব্যবহার করে) যে কোনও মনোোট বুলিয়ান ফাংশনটি পুনর্গঠন করতে (অর্থাত প্রতিটি ভেরিয়েবলের অ-হ্রাস না হওয়া) আপনার ঠিক প্রয়োজন পয়েন্ট।(n+1n/2+1)


7

To continue along the lines of Deigo's answer, standard sample complexity bounds from learning theory tell you that if you are satisfied with finding a program which is "approximately correct", you don't need to try very many points at all. Lets say we are encoding programs in binary, so that there are only 2d programs of length d. Lets suppose also that there is some distribution over input examples D. Perhaps your goal is to find a program which you are pretty sure is almost right ("Probably Approximately Correct" i.e. as in Valiants PAC learning model). That is, you want to run an algorithm that will take in a small number of samples xD together with f(x), and will with probability at least (1δ) output some program P which agrees with f on at least a (1ϵ) fraction of inputs drawn from D.

We will simply draw m examples xD, and output any program P of length d that agrees with f on all of the examples. (One is guaranteed to exist since we assume f has Kolmogorov complexity at most d)...

What is the probability that a particular program P that disagrees with f on more than a n ϵ fraction of examples is consistent with the m examples we selected? It is at most (1ϵ)m. We would like to take this probability to be at most δ/2d so that we can take a union bound over all 2d programs and say that with probability at least 1δ, no "bad" program is consistent with our drawn examples. Solving, we see that it is sufficient to take only

m1ϵ(d+log1/δ)
examples. (i.e. only linearly many in the Kolmogorov complexity of f...)

BTW, arguments like this can be used to justify "Occam's Razor": given a fixed number of observations, among all of the theories that explain them, you should choose the one with lowest Kolmogorov complexity, because there is the least chance of overfitting.

Of course, if you only want to check a single fixed program in this way, you only need O(log(1/δ)/ϵ) examples...


3

Here's a trivial answer: assuming Llg|N|, then you need to know the value of f at all |N| points to uniquely determine f. Therefore, the approach you sketch doesn't help you at all, unless you somehow know that the length L of the program is extremely short: much shorter than lg|N| bits.

Consider the family of functions F={fi:iN}, where fi is defined to be the function fi(x)=1 if i=x and fi(x)=0 if ix. Notice that the Kolmogorov complexity of computing fi is about lg|N| bits, since you can hardcode the value of i in the source code and then all you need is a simple conditional statement (O(1) extra).

However, you cannot distinguish fi from the all-zeros function unless you test it at the input i. You cannot distinguish fi from fj unless you test at the input i or j. Therefore, you'll need to evaluate f at all |N| inputs, to uniquely determine which fi we are dealing with. (OK, technically, you need to evaluate it at |N|1 inputs, but whatever.)


0

You can make the program arbitrarily long. So given any program, you can decide whether its language is equivalent to that of this program. You can't do that by Rice's theorem.


1
You have a valid point that the idea of checking the program by running it on several instances will not work in general.
Tsuyoshi Ito
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.