Es fácil confundirse acerca de lo que significa "representar" o "implementar" un número real. De hecho, estamos presenciando una discusión en los comentarios donde la representación es contenciosa. Así que déjame abordar esto primero.
¿Cómo sabemos que una implementación es correcta?
La teoría que explica cómo representar cosas en una computadora es la realizabilidad . La idea básica es que, dado un conjunto , elegimos un tipo de datos τ y para cada x ∈ X un conjunto de valores de tipo τ que lo dan cuenta. Escribimos v ⊢ x ∈ X cuando v es un valor que realiza x . Por ejemplo (usaré Haskell sin una buena razón), una implementación sensata de N podría ser el tipo de datos donde v ⊢ k ∈ N cuando vXτx∈Xτv⊢x∈XvxNInteger
v⊢k∈Nvevalúa el número (por lo tanto, en particular , no representa un número natural, y tampoco lo hace un programa divergente). Pero algún bromista podría pasar y sugerir que usemos para representar números naturales con T r u e F a l s e ⊢ n ∈ N para n ≠ 42 . ¿Por qué es esto incorrecto? Necesitamos un criterio .k¯¯¯-42
Bool
yTrue⊢42∈NFalse⊢n∈Nn≠42
En el caso de los "números comodín", la observación fácil es que no se puede implementar la suma. Supongamos que le digo que tengo dos números, ambos representados por . ¿Puedes dar un realizador por su suma? Bueno, eso depende de si la suma es 42, pero no se puede saber. Dado que la suma es una "parte esencial de lo que son los números naturales", esto es inaceptable. En otras palabras, la implementación no se trata de conjuntos, sino de estructuras , es decir, tenemos que representar conjuntos de tal manera que sea posible implementar también la estructura relevante. Déjame enfatizar esto:False
Implementamos estructuras, no conjuntos desnudos. Por lo tanto, debemos poder implementar toda la estructura, junto con las operaciones y todos los axiomas, para que la implementación sea correcta.
Si no cumple con este principio, debe sugerir un criterio matemático alternativo de corrección. No se de uno.
Ejemplo: representación de números naturales.
Para los números naturales, la estructura relevante es descrita por los axiomas de Peano, y el axioma crucial que debe implementarse es la inducción (pero también , sucesor, + y × ). Podemos calcular, utilizando la realizabilidad, lo que hace la implementación de la inducción. Resulta ser un mapa (dondeestá el tipo de datos aún desconocido que representa los números naturales)0+×nat
induction : 'a -> (nat -> 'a -> 'a) -> 'nat -> 'a
satisfactorio induction x f zero = x
y induction x f (succ n) = f n (induction x f n)
. Todo esto surge de la realizabilidad. Tenemos un criterio: una implementación de números naturales es correcta cuando permite una implementación de axiomas de Peano. Un resultado similar se obtendría si se utilizó la caracterización de los números como el álgebra inicial para el funtor .X↦1+X
Correcta implementación de números reales
Volvamos la atención a los números reales y la pregunta en cuestión. La primera pregunta es "¿cuál es la estructura relevante de los números reales?" La respuesta es: Archimedean Cauchy completa el campo ordenado . Este es el significado establecido de "números reales". No puede cambiarlo, otros lo han arreglado para usted (en nuestro caso, los reales alternativos de Dedekind resultan ser isomorfos a los reales de Cauchy, que estamos considerando aquí). No puede quitarle ninguna parte. no puede decir "No me importa implementar la adición" o "No me importa la orden". Si hace eso, no debe llamarlo "números reales", sino algo así como "números reales donde olvidamos el orden lineal".
No voy a entrar en todos los detalles, pero permítanme explicarles cómo las diversas partes de la estructura ofrecen varias operaciones en reales:
- El axioma de Arquímedes trata de calcular aproximaciones racionales de reales
- la estructura de campo proporciona las operaciones aritméticas habituales
- el orden lineal nos da un procedimiento semidecidable para probar x<y
- la integridad de Cauchy nos da una función
lim : (nat -> real) -> real
que toma una (representación de) secuencia rápida de Cauchy y devuelve su límite. (Una secuencia es rápida si | x n - x m | ≤ 2 min ( n , m )(xn)n|xn−xm|≤2min(n,m) para todos los .)m,n
Que hacemos no obtenemos es una función de prueba para la igualdad. No hay nada en los axiomas para los reales que pida que sea decidible. (En contraste, los axiomas de Peano implican que los números naturales son decidibles, y puede probarlo implementando el uso solo como un ejercicio divertido).=eq : nat -> nat -> Bool
induction
Es un hecho que la representación decimal habitual de los reales que usa la humanidad es mala porque con ella ni siquiera podemos implementar la suma. El punto flotante con mantisa infinita también falla (ejercicio: ¿por qué?). Sin embargo, lo que funciona es la representación de dígitos con signo , es decir, una en la que permitimos dígitos negativos y positivos. O podríamos usar secuencias de racionales que satisfagan la prueba rápida de Cauchy, como se indicó anteriormente.
La representación de Tsuyoshi también implementa algo, pero no R
Consideremos la siguiente representación de números reales: una verdadera está representada por un par ( q , b ) donde ( q n ) n es una secuencia de Cauchy rápida convergiendo a x y b es un valor booleano que indica si x es un entero. Para que esto sea una representación de los reales, tendríamos que implementar la suma, pero resulta que no podemos calcular las banderas booleanas. Entonces esto no es una representación de los reales. Pero todavía representa algo, es decir, el subconjunto de los reales Z ∪ ( R ∖ Z )x(q,b)(qn)nxbxZ∪(R∖Z). De hecho, de acuerdo con la interpretación realizabilidad una unión se lleva a cabo con una bandera que indica qué parte de la unión que estamos. Por cierto, es un no igual a R , a menos que crea en medio excluido, lo cual no se puede implementar y, por lo tanto, es bastante irrelevante para esta discusión. Las computadoras nos obligan a hacer cosas intuitivamente.Z∪(R∖Z)R
No podemos probar si un real es un entero
Finalmente, déjame responder la pregunta que se hizo. Ahora sabemos que una representación aceptable de los reales es una de las rápidas secuencias de racionales de Cauchy. (Un teorema importante afirma que dos representaciones de reales que son aceptables son en realidad computacionalmente isomorfas).
Teorema: probar si un real es un entero no es decidible.
Prueba. Supongamos que pudiéramos probar si un real es un entero (por supuesto, el real se realiza mediante una secuencia rápida de Cauchy). La idea, que le permitirá probar un teorema mucho más general si lo desea, es construir una secuencia de Cauchy rápida de no enteros que converja a un entero. Esto es fácil, solo toma x n = 2 - n . A continuación, resuelva el problema de detención de la siguiente manera. Dada una máquina Turing T , defina una nueva secuencia ( y n ) n por
y n = { x n si (xn)nxn=2−nT(yn)n
Es decir, las nuevas miradas de secuencia como la secuencia(xn)n, siempre y cuandoTcarreras, pero luego se queda "atrapado" enxmsiT sedetiene en el pasom. Muy importante, la nueva secuencia también es una secuencia rápida de Cauchy (y podemos probar esto sin saber siT sedetiene). Por lo tanto, podemos calcular su límitez=limnyn
yn={xnxmif T has not stopped within n stepsif T stopped in step m and m≤n
(xn)nTxmTmTz=limnyn, porque nuestra representación de los reales es correcta. Comprueba si
es un número entero. Si es así, debe ser
0 y esto solo sucede si
T se ejecuta para siempre. De lo contrario,
z no es un entero, por lo que
T debe haberse detenido. QED
z0TzT
Ejercicio: adapte la prueba anterior para mostrar que no podemos probar números racionales. Luego, adáptelo para mostrar que no podemos probar nada no trivial (esto es un poco más difícil).
A veces las personas se confunden con todo este negocio de pruebas. Piensan que hemos demostrado que nunca podemos probar si un real es un número entero. Pero seguramente, 42 es real y podemos decir si es un número entero. De hecho, cualquier real particular que se nos ocurra, , 88 ln 89 , e π √sin1188ln89 , etc., podemos decir perfectamente si son enteros. Precisamente,podemosdecirlo porquetenemosinformación adicional: estos reales no se nos dan como secuencias, sino como expresiones simbólicas a partir de las cuales podemos calcular el bit Tsuyoshi. Tan pronto como la única información que tenemos sobre lo real es una secuencia de aproximaciones racionales que convergen a la misma (y yonosignifica una expresión simbólica que describe la secuencia, pero un cuadro negro que da salida a laNtérmino -ésima en la entradaneπ163√nn ) entonces será tan indefenso como las máquinas.
La moraleja de la historia
No tiene sentido hablar sobre la implementación de un conjunto a menos que sepamos qué tipo de operaciones queremos realizar en él.