È possibile verificare se un numero calcolabile è razionale o intero?


18

È possibile testare algoritmicamente se un numero calcolabile è razionale o intero? In altre parole, sarebbe possibile per una libreria che implementa numeri calcolabili fornire le funzioni isIntegero isRational?

Immagino che non sia possibile e che ciò sia in qualche modo correlato al fatto che non è possibile verificare se due numeri sono uguali, ma non vedo come dimostrarlo.

Modifica: un numero calcolabile è dato da una funzione che può restituire un'approssimazione razionale di con precisione : , per qualsiasi . Data tale funzione, è possibile verificare se o ?f x ( ϵ ) x ϵ | x - f x ( ϵ ) | ϵ ϵ > 0 x Q x Zxfx(ϵ)xϵ|xfx(ϵ)|ϵϵ>0xQxZ

computability  computing-over-reals  lambda-calculus  graph-theory  co.combinatorics  cc.complexity-theory  reference-request  graph-theory  proofs  np-complete  cc.complexity-theory  machine-learning  boolean-functions  combinatory-logic  boolean-formulas  reference-request  approximation-algorithms  optimization  cc.complexity-theory  co.combinatorics  permutations  cc.complexity-theory  cc.complexity-theory  ai.artificial-intel  p-vs-np  relativization  co.combinatorics  permutations  ds.algorithms  algebra  automata-theory  dfa  lo.logic  temporal-logic  linear-temporal-logic  circuit-complexity  lower-bounds  permanent  arithmetic-circuits  determinant  dc.parallel-comp  asymptotics  ds.algorithms  graph-theory  planar-graphs  physics  max-flow  max-flow-min-cut  fl.formal-languages  automata-theory  finite-model-theory  dfa  language-design  soft-question  machine-learning  linear-algebra  db.databases  arithmetic-circuits  ds.algorithms  machine-learning  ds.data-structures  tree  soft-question  security  project-topic  approximation-algorithms  linear-programming  primal-dual  reference-request  graph-theory  graph-algorithms  cr.crypto-security  quantum-computing  gr.group-theory  graph-theory  time-complexity  lower-bounds  matrices  sorting  asymptotics  approximation-algorithms  linear-algebra  matrices  max-cut  graph-theory  graph-algorithms  time-complexity  circuit-complexity  regular-language  graph-algorithms  approximation-algorithms  set-cover  clique  graph-theory  graph-algorithms  approximation-algorithms  clustering  partition-problem  time-complexity  turing-machines  term-rewriting-systems  cc.complexity-theory  time-complexity  nondeterminism 

3
Come viene dato il numero calcolabile?
Tsuyoshi Ito,

10
Come viene dato il numero è ovviamente rilevante. A titolo di esempio sciocco, se l'input contiene un flag se il numero è un numero intero o meno, decidere se l'input è un numero intero o meno è banale.
Tsuyoshi Ito,


3
(1) "Come fai a sapere che si tratta di un numero intero?" Perché dovrei preoccuparmi? Non hai detto nulla sui requisiti relativi alle operazioni. (2) "Se vedi le due risposte finora, non menzionano nulla sull'implementazione." Non so cosa intendi per "implementazione" qui, o perché questa frase sia rilevante per i miei commenti.
Tsuyoshi Ito,

16
Spero che la mia risposta nasconda questa discussione. Tsuyoshi, ti sbagli, è rilevante quali operazioni sono calcolabili. Non implementiamo numeri reali nel vuoto, ma per manipolarli . Secondo te, potremmo semplicemente usare il tipo di unità per implementare tutto. Sì, potremmo, ma alcune operazioni non sarebbero calcolabili, e questo è esattamente il criterio in base al quale giudichiamo le rappresentazioni.
Andrej Bauer,

Risposte:


32

È facile confondersi su cosa significhi "rappresentare" o "implementare" un numero reale. In effetti, stiamo assistendo a una discussione nei commenti in cui la rappresentazione è controversa. Quindi vorrei prima parlarmene.

Come facciamo a sapere che un'implementazione è corretta?

La teoria che spiega come rappresentare le cose in un computer è la realizzabilità . L'idea di base è che, dato un insieme , scegliamo un tipo di dati τ e ad ogni x X un insieme di valori di tipo τ che lo realizzano . Scriviamo v x X quando v è un valore che realizza x . Ad esempio (userò Haskell senza una buona ragione), un'implementazione ragionevole di N potrebbe essere il tipo di dati in cui v k N quando vXτxXτvxXvxNIntegervkNvvaluta il numero (quindi, in particolare , non rappresenta un numero naturale, né un programma divergente). Ma alcuni joker potrebbero passare e suggerire che usiamo per rappresentare numeri naturali con T r u e42 N e F a l s en N per n 42 . Perché questo non è corretto? Abbiamo bisogno di un criterio .k¯-42BoolTrue42NFalsenNn42

Nel caso dei "numeri joker" l'osservazione semplice è che l'aggiunta non può essere implementata. Supponiamo che ti dica che ho due numeri, entrambi rappresentati da . Puoi dare un realizzatore per la loro somma? Bene, questo dipende dal fatto che la somma sia 42, ma non si può dire. Poiché l'aggiunta è una "parte essenziale di ciò che sono i numeri naturali", questo è inaccettabile. In altre parole, l'implementazione non riguarda gli insiemi, ma le strutture , ovvero dobbiamo rappresentare gli insiemi in modo tale che sia possibile implementare anche la struttura pertinente. Vorrei sottolineare questo:False

Implementiamo strutture, non set nudi. Pertanto, dobbiamo essere in grado di implementare l'intera struttura, insieme alle operazioni e a tutti gli assiomi, affinché l'implementazione sia corretta.

Se non ti attieni a questo principio, allora devi suggerire un criterio matematico alternativo di correttezza. Non ne conosco uno.

Esempio: rappresentazione di numeri naturali

Per i numeri naturali la struttura pertinente è descritta dagli assiomi di Peano e l'assioma cruciale che deve essere implementato è l'induzione (ma anche , successore, + e × ). Possiamo calcolare, usando la fattibilità, cosa fa l'implementazione dell'induzione. Risulta essere una mappa (dov'è il tipo di dati ancora sconosciuto che rappresenta i numeri naturali)0+×nat

induction : 'a -> (nat -> 'a -> 'a) -> 'nat -> 'a

soddisfacente induction x f zero = xe induction x f (succ n) = f n (induction x f n). Tutto ciò deriva dalla realizzabilità. Abbiamo un criterio: un'implementazione di numeri naturali è corretta quando consente un'implementazione degli assiomi di Peano. Analogo risultato si otterrebbe se abbiamo utilizzato la caratterizzazione dei numeri come algebra iniziale per il funtore .X1+X

Corretta implementazione di numeri reali

Rivolgiamo l'attenzione ai numeri reali e alla domanda a portata di mano. La prima domanda da porsi è "qual è la struttura pertinente dei numeri reali?" La risposta è: Archimedean Cauchy completa il campo ordinato . Questo è il significato stabilito di "numeri reali". Non puoi cambiarlo, è stato riparato da altri per te (nel nostro caso i reali Dedekind alternativi si rivelano isomorfi ai reali di Cauchy, che stiamo prendendo in considerazione qui.) Non puoi toglierne nessuna parte, non puoi dire "Non mi interessa implementare l'aggiunta" o "Non mi interessa l'ordine". Se lo fai, non devi chiamarlo "numeri reali", ma qualcosa come "numeri reali in cui dimentichiamo l'ordine lineare".

Non ho intenzione di entrare in tutti i dettagli, ma lasciatemi solo spiegare come le varie parti della struttura danno varie operazioni sui reali:

  • l' assioma di Archimede riguarda il calcolo di approssimazioni razionali dei reali
  • la struttura del campo fornisce le solite operazioni aritmetiche
  • l'ordine lineare ci fornisce una procedura semidecidabile per testare x<y
  • la completezza di Cauchy ci dà una funzione lim : (nat -> real) -> realche prende una (rappresentazione di) rapida sequenza di Cauchy e restituisce il suo limite. (Una sequenza è rapida se | x n - x m |2 min ( n , m ) per tutti m , n .)(xn)n|xnxm|2min(n,m)m,n

Ciò che non otteniamo è una funzione di test per l'uguaglianza. Non c'è nulla negli assiomi per i reali che chiede che sia decidibile. (Al contrario, gli assiomi di Peano implicano che i numeri naturali sono decidibili, e puoi dimostrarlo implementandolo usando solo come esercizio divertente).=eq : nat -> nat -> Boolinduction

È un dato di fatto che la solita rappresentazione decimale dei reali che l'umanità usa è cattiva perché con essa non possiamo nemmeno implementare l'aggiunta. Anche la virgola mobile con mantissa infinita fallisce (esercizio: perché?). Ciò che funziona, però è firmato rappresentazione cifre, vale a dire, quella in cui ci lasciamo le cifre negative e quelle positive. Oppure potremmo usare sequenze di razionali che soddisfano il rapido test di Cauchy, come detto sopra.

La rappresentazione Tsuyoshi implementa anche qualcosa, ma non R

Consideriamo la seguente rappresentazione di reali: un vero è rappresentato da una coppia ( q , b ) dove ( q n ) n è un Cauchy rapido convergendo x e b è un booleano che indica se x è un numero intero. Perché questa sia una rappresentazione dei reali, dovremmo implementare l'addizione, ma a quanto pare non possiamo calcolare le bandiere booleane. Quindi questa non è una rappresentazione dei reali. Ma rappresenta ancora qualcosa, vale a dire il sottoinsieme dei reali Z( RZ )x(q,b)(qn)nxbxZ(RZ). Infatti, secondo l'interpretazione realizzabilità un'unione è implementata con un flag che indica quale parte del sindacato ci troviamo. A proposito, è un non pari a R , a meno che non si crede in terzo escluso, che non può essere implementato ed è quindi del tutto irrilevante per questa discussione. Siamo costretti dai computer a fare le cose in modo intuitivo.Z(RZ)R

Non possiamo verificare se un reale è un numero intero

Infine, lasciami rispondere alla domanda che è stata posta. Ora sappiamo che una rappresentazione accettabile dei reali è una rapida sequenza di razionali di Cauchy. (Un importante teorema afferma che due rappresentazioni di realtà accettabili sono in realtà calcolabili isomorfe.)

Teorema: verificare se un reale è un numero intero non è decidibile.

Prova. Supponiamo di poter verificare se un reale è un numero intero (ovviamente, il reale è realizzato da una rapida sequenza di Cauchy). L'idea, che ti permetterà di dimostrare un teorema molto più generale, se lo desideri, è quella di costruire una rapida sequenza di Cauchy di non numeri interi che converge in un numero intero. Questo è facile, basta prendere x n = 2 - n . Quindi, risolvere il problema di Halting come segue. Data una macchina di Turing T , definire una nuova sequenza ( y n ) n per y n = { x n se  T(xn)nxn=2nT(yn)n Cioè, la nuova sequenza appare come la sequenza(xn)nfinchéTscorre, ma poi si "blocca" axmseT siferma al puntom. Cosa molto importante, la nuova sequenza è anche una rapida sequenza di Cauchy (e possiamo dimostrarlo senza sapere seT siferma). Pertanto, possiamo calcolare il suo limitez=limnyn

yn={xnif T has not stopped within n stepsxmif T stopped in step m and mn
(xn)nTxmTmTz=limnyn, perché la nostra rappresentazione dei reali è corretta. Verifica se è un numero intero. Se lo è, allora deve essere 0 e questo accade solo se T funziona per sempre. Altrimenti, z non è un numero intero, quindi T deve essersi fermato. QED.z0TzT

Esercizio: adattare la prova di cui sopra per dimostrare che non possiamo verificare numeri razionali. Quindi adattalo per mostrare che non possiamo testare nulla di non banale (è un po 'più difficile).

A volte le persone si confondono su tutte queste attività di test. Pensano che abbiamo dimostrato che non possiamo mai verificare se un reale è un numero intero. Ma sicuramente 42 è un reale e possiamo dire se è un numero intero. In effetti, ogni particolare reale che ci viene in mente, , 88 ln 89 , e π sin1188ln89 , ecc., Possiamo perfettamente dire se sono numeri interi. Precisamente,possiamodirlo perchéabbiamoulteriori informazioni: questi reali non ci vengono dati come sequenze, ma piuttosto come espressioni simboliche da cui possiamo calcolare il bit Tsuyoshi. Non appena l'unica informazione che abbiamo sul reale è una sequenza di approssimazioni razionali convergenti ad esso (e iononsignifica un'espressione simbolica che descrive la sequenza, ma una scatola nera che emette iln-esimo termine sull'ingresson) allora sarà impotente quanto le macchine.eπ163nn

La morale della storia

Non ha senso parlare dell'implementazione di un set a meno che non conosciamo il tipo di operazioni che vogliamo eseguire su di esso.


16
Se le mie risposte fossero mogli, potrei rispondere solo una volta. O almeno dovrei cancellare la risposta precedente prima di scrivere la prossima.
Andrej Bauer,

5
@Max: i primi teoremi di questo tipo furono dati da Kreisel, Lacombe e Shoenfield (cercare il teorema di KLS). Tsteitin ha dato indipendentemente un teorema che generalizzava KLS ed era esplicitamente della forma "ogni mappa calcolabile è calcolabile in modo continuo".
Andrej Bauer,

6
Devo scrivere un libro di testo - (Google google google). Bene, hai un mandato. Fallo!
Jeffε

10
@Tsuyoshi: la domanda utilizzava la frase stabilita "numero reale" senza una qualifica. La struttura dei numeri reali è standard. Sei libero di prendere in considerazione altre strutture, ma non sei libero di interpretare erroneamente la terminologia standard.
Andrej Bauer,

21
Tecnicamente parlando, hai ragione, la parola "reale" non è stata usata. Ma ti sbagli sulla definizione di numeri reali. O direi così: è una cattiva matematica pensare che i reali siano un insieme particolare che viene prima, a cui seguiranno solo alcune strutture. Proprio come definiamo gruppi, anelli, spazi topologici, ecc., In termini di struttura, quindi dovremmo definire oggetti speciali in termini di proprietà universali (i numeri naturali sono il semina iniziale, i numeri interi l'anello iniziale, il campo iniziale razionale, i reali il .....).
Andrej Bauer,

10

Tendo a pensare che questo sia indecidibile:

Sia un numero irrazionale calcolabile. Si consideri una TM M . È possibile costruire una funzione che esegue M su ϵ e in parallelo calcola x con crescente precisione. Se M si ferma, smette di calcolare x , altrimenti continua.xMMϵxMx

Decidere se questa funzione calcola un numero razionale equivale al problema di arresto.


Mx

Come Tsuyoshi ha sottolineato, la risposta dipende dalla rappresentazione e dal modello di calcolo. La tua risposta afferma correttamente che se si considera che gli input siano numeri reali calcolabili dati da una TM che li calcola, l'uguaglianza non è decidibile. Questo è corretto, tuttavia non è vicino a nessun modello utilizzato nella pratica.
Kaveh,

2
MMMM

10

Supponendo che un reale sia dato come una sequenza di approssimazioni razionali con l'errore delimitato da una nota funzione calcolabile che tende a zero (tutte tali approssimazioni sono equivalenti e corrispondono alla solita topologia sui reali).

Le funzioni calcolabili sono continue. IsRational e IsInteger non sono continui e quindi non calcolabili.

IsInteger è semi- calcolabile : esiste una procedura che alla fine produrrà "false" se l'input non è un numero intero, ma funzionerà per sempre se l'input è un numero intero. Questa procedura esamina semplicemente ogni approssimazione e verifica se esiste un numero intero all'interno del limite di errore. Questa funzione è continua quando usiamo la topologia Sierpiński su {true, false} (ovvero {false} è un set aperto ma {true} non lo è).


Grazie per la risposta. Non capisco il non continuo => non calcolabile, suppongo che tu abbia usato un teorema (probabilmente ampiamente conosciuto) di cui non sono a conoscenza o che non ricordo. Potresti fornire maggiori dettagli su questo passaggio?
dbarbosa,

1
"computable => continue" sembra essere un teorema popolare - non riesco a trovare una citazione originale. La teoria del calcolo su oggetti infiniti e le connessioni alla topologia sono descritte abbastanza bene (IMO) in queste diapositive del corso di Brattka ( math.uni.wroc.pl/~pkowa/slides/brattka.pdf ). La proposizione 2 nelle diapositive afferma che tutte le funzioni calcolabili sulle sequenze di naturali sono continue; combinato con il Teorema 12 si ottiene il risultato per funzioni di altri tipi.
Max

6

Non è possibile stabilire se un determinato numero calcolabile sia uguale a zero .

(Quindi il tuo oracolo di approssimazione razionale restituisce 0 per ogni ε che hai provato? Forse non gli hai dato un ε abbastanza piccolo.)

Pertanto, è indecidibile se un dato numero calcolabile compreso tra -½ e + ½ sia un numero intero.


2

Una funzione calcolabile è più forte della funzione continua, vale a dire qualsiasi funzione calcolabile deve essere continua nella topologia delle informazioni.

F:R{Yes,No}

F(r)={YESrQNOo.w.

è calcolabile.

rk2nr[k2n,k+12n]n

Quindi la tua funzione non è continua e pertanto non è calcolabile.

M0n[12n,12n]MMmM[12m,12m]MMNOYESM[12m,12m]MYESM

La prova che qualsiasi funzione calcolabile deve essere continua è simile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.