¿Las pruebas pueden mostrar la ausencia de errores?

18

(n+1) se requieren puntos para determinar unívocamente un polinomio de grado n ; Por ejemplo, dos puntos en un plano determinan exactamente una línea.

¿Cuántos puntos se requieren para determinar de manera única una función computable f:NN , dada la longitud de un programa que computa f en un lenguaje fijo? (es decir, un límite en la complejidad de Kolmogorov de f ).

La idea es que, al menos teóricamente, uno podría probar la corrección de un programa haciendo suficientes pruebas.

Si uno tiene un programa P de longitud L que calcula f , hay un límite en el número de funciones que pueden calcularse con una longitud de fuente de máximo L.

Por lo tanto, "solo" sería necesario demostrar que:

  • f sepuede calcular con una longitud de fuenteL
  • P no calcula ninguna otra función computable enL bytes o menos (mediante prueba)

Esta idea probablemente no tiene consecuencias prácticas (los límites seguramente serán exponenciales).

pbaren
fuente
44
Supongamos que su descripciones de funciones se dan en binario, entonces hay a lo sumo de la descripción longitud como máximo L . Pero ahora el problema es que, a diferencia de los polinomios, dos funciones computables distintas pueden tomar fácilmente los mismos valores en un número infinito de entradas. Por lo tanto, tu problema me parece imposible. 2L+1-1L
Bruno
Entiendo tu idea. Pero dos funciones computables distintas de longitud de descripción <= L deberían diferir en algún punto (para algunos n0). ¿Se podría encontrar el valor de n0 dado L?
pbaren
44
puede encontrar ese punto si existe uno, solo calcule las funciones en todos los valores utilizando la combinación, pero si no existe, nunca lo sabrá, es indecidible, tener una longitud superior en el tamaño del programa no cambia nada.
Kaveh
77
En realidad, @Kaveh, según su propio argumento, un límite superior en le dice algo sobre dónde difieren, pero no algo computable. Si K ( f ) L y f g , entonces K ( x ) 2 L + c donde c es la longitud del algoritmo que usted (@Kaveh) describió yx es la primera cadena en la que f y g difieren. En particular, xK(F)K(F)LFsolK(X)2L+CCXFsolXestá delimitado por alguna función tipo Busy-beaver de . Sin embargo, encontrar todo x tal que K ( x ) 2 L + c o calcular BB sea aún incuestionable. Entonces @pbaren: hay un límite, pero es mucho más que exponencial, es indiscutible. 2L+CXK(X)2L+C
Joshua Grochow
66
@Kaveh: Eso es lo que quise decir con una función "Busy-beaver-like": que sea ​​la longitud de la cadena más larga cuya complejidad de Kolmogorov (arreglar una máquina universal) es como máximo n . Solo hay muchas cadenas de este tipo, por lo que está bien definido hasta la elección de la máquina universal. Entonces B B ( 2 L + c ) es un límite superior: si dos funciones (computables totales) de complejidad de Kolmogorov como máximo L coinciden en todos los puntos hasta la longitud B B ( 2 L + c )BB(n)nBB(2L+c)LBB(2L+c), entonces son iguales.
Joshua Grochow

Respuestas:

9

(Esto fue un comentario, pero fue largo). Pregunta muy interesante Si está dispuesto a pensar en otras medidas de complejidad además de las de Kolmogorov, entonces hay algunas respuestas en la teoría del aprendizaje que podrían satisfacerlo. Lo dejo para los expertos en el área.

Por ejemplo, si no me equivoco, en "Una teoría de lo que se puede aprender", Valiant demostró que una función booleana se puede reconstruir dado un número polinómico de "puntos positivos" en el tamaño de su fórmula k-CNF (para cualquier k fijo , y quiero decir con "puntos positivos" los de la forma ).(x1,,xn,1)

En el TAOCP 7.2.1.6 de Knuth se muestra de una manera sorprendente (usando el patrón del árbol de Navidad) que para reconstruir una función booleana monote (es decir, no decreciente en cada variable) necesita exactamente puntos.(n+1n/2+1)

Diego de Estrada
fuente
7

Para continuar en la línea de la respuesta de Deigo, los límites de complejidad de la muestra estándar de la teoría del aprendizaje le dicen que si está satisfecho con encontrar un programa que sea "aproximadamente correcto", no necesita probar muchos puntos. Digamos que estamos codificando programas en binario, por lo que solo hay programas d de longitud d. Lets Supongamos también que hay una cierta distribución sobre ejemplos de entrada D . Quizás su objetivo es encontrar un programa que esté bastante seguro de que es casi correcto ("Probablemente aproximadamente correcto", es decir, como en el modelo de aprendizaje Valiants PAC). Es decir, desea ejecutar un algoritmo que tomará una pequeña cantidad de muestras x D junto con f ( x )2dDxDf(x), Y la voluntad con una probabilidad de al menos de salida de un programa P que está de acuerdo con f sobre al menos una ( 1 - ε ) fracción de entradas procedentes de D . (1δ)Pf(1ϵ)D

Simplemente dibujaremos ejemplos x D , y sacaremos cualquier programa P de longitud d que coincida con f en todos los ejemplos. (Se garantiza que existe uno dado que suponemos que f tiene complejidad de Kolmogorov como máximo d ) ...mxDPdffd

¿Cuál es la probabilidad de que un programa particular que no está de acuerdo con f en más de una fracción ϵ de ejemplos sea consistente con los m ejemplos que seleccionamos? Es como máximo ( 1 - ϵ ) m . Nos gustaría considerar que esta probabilidad es como máximo δ / 2 d para que podamos tomar una unión unida a todos los programas 2 d y decir que con una probabilidad de al menos 1 - δ , ningún programa "malo" es consistente con nuestros ejemplos dibujados . Resolviendo, vemos que es suficiente tomar solo m 1Pfϵm(1ϵ)mδ/2d2d1δ ejemplos. (es decir, solo linealmente muchos en la complejidad de Kolmogorov def...)

m1ϵ(re+Iniciar sesión1/ /δ)
F

Por cierto, argumentos como este se pueden usar para justificar "Navaja de Occam": dado un número fijo de observaciones, entre todas las teorías que las explican, debe elegir la que tenga la menor complejidad de Kolmogorov, porque hay menos posibilidades de sobreajuste.

Por supuesto, si solo desea verificar un solo programa fijo de esta manera, solo necesita ejemplos ...O(Iniciar sesión(1/ /δ)/ /ϵ)

Aaron Roth
fuente
3

Aquí hay una respuesta trivial: suponiendo que , entonces necesita saber el valor de f en absoluto | N | puntos para determinar de manera única f . Por lo tanto, el enfoque que bosqueje no le ayuda en absoluto, a menos que sepa de alguna manera que la longitud L del programa es extremadamente corta: mucho más corta que lg | N | bitsLlgEl |norteEl |FEl |norteEl |FLlgEl |norteEl |

Considere la familia de funciones , donde f i se define como la función f i ( x ) = 1 si i = x y f i ( x ) = 0 si i x . Observe que la complejidad de Kolmogorov de la computación f i se trata de lg | N | bits, ya que puede codificar el valor de iF={Fyo:yonorte}FyoFyo(X)=1yo=XFyo(X)=0 0yoXFyolgEl |norteEl |yoen el código fuente y luego todo lo que necesita es una simple declaración condicional ( extra).O(1)

Sin embargo, no puede distinguir de la función todos ceros a menos que lo pruebe en la entrada i . No puede distinguir f i de f j a menos que pruebe en la entrada i o j . Por lo tanto, deberá evaluar f en absoluto | N | entradas, para determinar de forma única con qué f i estamos tratando. (OK, técnicamente, debe evaluarlo en las entradas | N | - 1 , pero lo que sea).FyoyoFyoFjyojFEl |norteEl |FyoEl |norteEl |-1

DW
fuente
0

Puede hacer que el programa sea arbitrariamente largo. Entonces, dado cualquier programa, puede decidir si su idioma es equivalente al de este programa. No se puede hacer eso por el teorema de Rice.

Zirui Wang
fuente
1
Tiene un punto válido de que la idea de verificar el programa ejecutándolo en varias instancias no funcionará en general.
Tsuyoshi Ito