Les tests peuvent-ils montrer l'absence de bogues?


18

n(n+1) points sont nécessaires pour déterminer de façon unique un polynôme de degré ; par exemple, deux points dans un plan déterminent exactement une ligne.n

Combien de points sont nécessaires pour déterminer de manière unique une fonction calculable , étant donné la longueur d'un programme qui calcule dans un langage fixe? (ie une borne sur la complexité de Kolmogorov de ).f ff:NNff

L'idée est que, du moins théoriquement, on pourrait prouver l'exactitude d'un programme en faisant suffisamment de tests.

Si l' on dispose d' un programme d' une longueur qui calcule , il y a une limite sur le nombre de fonctions qui peuvent être calculées avec une longueur de source d'au plus .L f LPLfL

Il suffirait donc "seulement" de prouver que:

  • Lf peut être calculé avec une longueur sourceL
  • LP ne calcule aucune autre fonction calculable en octets ou moins (en testant)L

Cette idée n'a probablement aucune conséquence pratique (les bornes sont sûrement forcément exponentielles).


4
Supposons que vos descriptions de fonctions sont données en binaire, alors il y a au plus de longueur Description au plus . Mais maintenant, le problème est que, contrairement aux polynômes, deux fonctions calculables distinctes peuvent facilement prendre les mêmes valeurs sur un nombre infini d'entrées. Votre problème me semble donc impossible. L2L+11L
Bruno

Je comprends ton idée. Mais deux fonctions calculables distinctes de longueur de description <= L devraient différer à un moment donné (pour certains n0). Pourrait-on trouver la valeur de n0 donnée L?
pbaren

4
vous pouvez trouver un tel point s'il en existe un, calculez simplement les fonctions sur toutes les valeurs en utilisant la queue d'aronde, mais s'il n'y en a pas, vous ne le saurez jamais, c'est indécidable, avoir une longueur supérieure sur la taille du programme ne change rien.
Kaveh

7
En fait, @Kaveh, selon votre propre argument, une borne supérieure sur vous dit quelque chose sur où ils diffèrent, mais pas quelque chose de calculable. Si et , alors où est la longueur de l'algorithme que vous (@Kaveh) avez décrit et est la première chaîne sur laquelle et différer. En particulier, est délimité par une fonction de type Castor occupé de . Cependant, trouver tout tel queK ( f ) L f g K ( x ) 2 L + c c x f g x 2 L + c x K ( x ) 2 L + cK(f)K(f)LfgK(x)2L+ccxfgx2L+cxK(x)2L+cou calculer BB n'est toujours pas calculable. Donc @pbaren: il y a une limite, mais c'est beaucoup plus que juste exponentiel, c'est non calculable.
Joshua Grochow

6
@Kaveh: C'est ce que je voulais dire par une fonction "de type castor occupé": soit la longueur de la plus longue chaîne dont la complexité de Kolmogorov (réparer une machine universelle) est au plus . Il n'y a qu'un nombre infini de cordes de ce type, donc cela est bien défini jusqu'au choix de la machine universelle. Alors est une borne supérieure: si deux fonctions (totales calculables) de complexité de Kolmogorov au plus sont d'accord sur tous les points jusqu'à la longueur , alors elles sont égales. n B B ( 2 L + c ) L B B ( 2 L + c )BB(n)nBB(2L+c)LBB(2L+c)
Joshua Grochow

Réponses:


9

(Cela était censé être un commentaire, mais s'est prolongé). Question très intéressante. Si vous êtes prêt à penser à d'autres mesures de complexité en plus de celles de Kolmogorov, alors il y a quelques réponses dans la théorie de l'apprentissage qui pourraient vous satisfaire. Je laisse cela aux experts du domaine.

Par exemple, si je ne me trompe pas, dans "Une théorie de l'apprentissage", Valiant a prouvé qu'une fonction booléenne peut être reconstruite étant donné un nombre polynomial de "points positifs" sur la taille de sa formule k-CNF (pour tout k fixe , et je veux dire avec "points positifs" ceux de la forme ).(x1,,xn,1)

Dans le TAOCP 7.2.1.6 de Knuth, il est montré de manière étonnante (en utilisant le modèle d'arbre de Noël) que pour reconstruire une fonction booléenne monote (c'est-à-dire non décroissante dans chaque variable), vous avez besoin exactement de points.(n+1n/2+1)


7

Pour continuer dans le sens de la réponse de Deigo, les limites standard de complexité des échantillons de la théorie de l'apprentissage vous disent que si vous êtes satisfait de trouver un programme qui est "approximativement correct", vous n'avez pas besoin d'essayer beaucoup de points. Disons que nous encodons des programmes en binaire, de sorte qu'il n'y a que programmes de longueur d. Laisse supposer également qu'il ya une certaine distribution sur des exemples d'entrée . Peut-être que votre objectif est de trouver un programme dont vous êtes presque sûr qu'il a presque raison («Probablement approximativement correct», c'est-à-dire comme dans le modèle d'apprentissage PAC de Valiants). Autrement dit, vous voulez exécuter un algorithme qui prendra un petit nombre d'échantillons avec , et avec probabilité au moins D x D f ( x ) ( 1 - δ ) P f ( 1 - ϵ ) D2dDxDf(x)(1δ)sortie un certain programme qui est en accord avec sur au moins une fraction d'entrées provenant de . Pf(1ϵ)D

Nous allons simplement dessiner exemples , et sortir tout programme de longueur qui est d'accord avec sur tous les exemples. (Un est garanti d'exister puisque nous supposons que a une complexité de Kolmogorov au plus ) ...x D P d f f dmxDPdffd

Quelle est la probabilité qu'un programme particulier désaccord avec sur plus d'une fraction d'exemples soit cohérent avec les exemples que nous avons sélectionnés? C'est tout au plus . Nous aimerions prendre cette probabilité pour être au plus afin que nous puissions prendre une union liée sur tous les programmes et dire qu'avec une probabilité d'au moins , aucun "mauvais" programme n'est cohérent avec nos exemples dessinés. En résolvant, nous voyons qu'il suffit de prendre uniquement des exemples . (c.-à-d. seulement linéairement nombreux dans la complexité de Kolmogorov def ϵ m ( 1 - ϵ ) m δ / 2 d 2 d 1 - δ m 1Pfϵm(1ϵ)mδ/2d2d1δf

m1ϵ(d+log1/δ)
f...)

BTW, des arguments comme celui-ci peuvent être utilisés pour justifier "le rasoir d'Occam": étant donné un nombre fixe d'observations, parmi toutes les théories qui les expliquent, vous devez choisir celle avec la complexité de Kolmogorov la plus faible, car il y a le moins de chance de sur-ajustement.

Bien sûr, si vous ne voulez vérifier qu'un seul programme fixe de cette manière, vous n'avez besoin que d' exemples ...O(log(1/δ)/ϵ)


3

Voici une réponse triviale: en supposant que, alors vous devez connaître la valeur de du toutindique une détermination unique . Par conséquent, l'approche que vous esquissez ne vous aide pas du tout, sauf si vous savez en quelque sorte que la longueur du programme est extrêmement courte: beaucoup plus courte quemorceaux.f | N | f L lg | N |Llg|N|f|N|fLlg|N|

Considérons la famille de fonctions , où est définie comme étant la fonction si et si . Notez que la complexité de Kolmogorov dans le calcul de est d'environbits, car vous pouvez coder en dur la valeur de dans le code source, puis tout ce dont vous avez besoin est une simple déclaration conditionnelle ( supplémentaire).f i f i ( x ) = 1 i = x f i ( x ) = 0 i x f i lg | N | i O ( 1 )F={fi:iN}fifi(x)=1i=xfi(x)=0ixfilg|N|iO(1)

Cependant, vous ne pouvez pas distinguer de la fonction tous les zéros à moins de le tester à l'entrée . Vous ne pouvez pas distinguer de moins de tester à l'entrée ou . Par conséquent, vous devrez évaluer du toutentrées, pour déterminer de manière unique à quel nous avons affaire. (OK, techniquement, vous devez l'évaluer aux entrées , mais peu importe.) i f i f j i j f | N | f i | N | - 1fiififjijf|N|fi|N|1


0

Vous pouvez rendre le programme arbitrairement long. Donc, étant donné n'importe quel programme, vous pouvez décider si sa langue est équivalente à celle de ce programme. Vous ne pouvez pas faire cela par le théorème de Rice.


1
Vous avez un point valable que l'idée de vérifier le programme en l'exécutant sur plusieurs instances ne fonctionnera pas en général.
Tsuyoshi Ito
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.