Definizioni costruttive standard di numeri interi, razionali e reali?


10

I numeri naturali sono definiti induttivamente come (usando la sintassi di Coq come esempio)

Inductive nat: Set :=
| O: nat
| S: nat -> nat.

Esiste un modo standard per definire in modo costruttivo numeri interi (e forse altri insiemi come razionali e reali)?


1
Cos'è la definizione costruttiva?
Trismegistos,

Risposte:


12

Esistono diversi modi per definire una struttura matematica, a seconda delle proprietà che consideri essere la definizione. Tra caratterizzazioni equivalenti, quale prendi come definizione e quale prendi come caratterizzazione alternativa non è importante.

Nella matematica costruttiva, è preferibile scegliere una definizione che renda facile il ragionamento costruttivo. Per i numeri naturali, la forma di base del ragionamento è l'induzione, che rende molto adatta la tradizionale definizione zero o successore. Altre serie di numeri non hanno una tale preferenza.

Quando si ragiona su quozienti, in contesti non costruttivi, è comune dire "scegli un membro della classe di equivalenza". In un contesto costruttivo, è necessario descrivere come scegliere un membro. Ciò semplifica l'utilizzo di definizioni che costruiscono un oggetto per ciascun membro del tipo, piuttosto che costruire classi di equivalenza.

Ad esempio, per definire , un matematico potrebbe essere felice di equiparare le differenze dei numeri naturali: Z : = N 2 / { ( ( x , y ) , ( x , y ) ) x + y = x + y }Z

Z: =N2/{((X,y),(X',y'))|X+y'=X'+y}
Mentre questo ha una sensazione ordinata (non "questo o quello"), per un ragionamento costruttivo, è più semplice se l'uguaglianza degli oggetti coincide con l'uguaglianza delle rappresentazioni, quindi potremmo definire gli interi relativi come un numero naturale o il negativo di un numero naturale meno uno:
Inductive Z1 :=
  | Nonnegative : nat -> Z1   (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
  | Negative : nat -> Z1.     (* ⟦Negative x⟧ = -⟦x⟧-1 *)

Tuttavia, questa definizione è stranamente asimmetrica, il che può rendere preferibile ammettere due diverse rappresentazioni per zero:

Inductive Z2 :=
  | Nonnegative : nat -> Z2   (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
  | Nonpositive : nat -> Z2.  (* ⟦Nonpostitive x⟧ = -⟦x⟧ *)

Oppure possiamo costruire i relativi numeri interi senza usare i naturali come blocco predefinito:

Inductive Pos3 :=
  | I : Pos3                  (* ⟦I⟧ = 1 *)
  | S3 : Pos3 -> Pos3         (* ⟦S3 x⟧ = ⟦x⟧+1 *)
Inductive Z3 :=
  | N3 : Pos3 -> Z3           (* ⟦N3 x⟧ = -⟦x⟧ *)
  | O3 : Z3                   (* ⟦O3⟧ = 0 *)
  | P3 : Pos3 -> Z3           (* ⟦P3 x⟧ = ⟦x⟧ *)

Le Coq usi libreria standard ancora un'altra definizione: costruisce interi positivi dalla loro notazione è base 2, la cifra 1 seguita da una sequenza di cifre 0 o 1. Si costruisce poi Zcome Z3da Pos3sopra. Questa definizione ha anche una rappresentazione univoca per ogni numero intero. La scelta di usare la notazione binaria non è per ragionare più facilmente, ma per produrre un codice più efficiente quando i programmi vengono estratti dalle prove.

La facilità di ragionamento è una motivazione nella scelta di una definizione, ma non è mai un fattore insormontabile. Se alcune costruzioni rendono più semplice una prova particolare, si può usare quella definizione in quella prova particolare e provare che la costruzione è equivalente all'altra costruzione che è stata scelta come definizione originariamente.

NQN×N*=?=Q

I numeri reali sono un bollitore di pesce completamente diverso perché non sono costruibili. È impossibile definire i numeri reali come un tipo induttivo (tutti i tipi induttivi sono numerabili). Invece, qualsiasi definizione dei numeri reali deve essere assiomatica, cioè non costruttiva. È possibile costruire sottoinsiemi numerici di numeri reali; il modo per farlo dipende dal sottoinsieme che si desidera costruire.


1
I numeri reali calcolabili sembrano essere i candidati più ragionevoli, poiché la maggior parte degli usi dei numeri reali sono legati in qualche modo al loro solito ordinamento.
Dfeuer

5
Cosa significa "costruibile"? Conosco solo "insiemi costruibili" come teoria dell'insieme, ma questo è ciò che intendi. Inoltre, mentre i reali sono un bollitore completamente diverso di pesci, non è vero che "qualsiasi definizione dei numeri reali deve essere assiomatica, cioè non costruttiva". E nella teoria dei tipi di omotopia esiste una definizione induttiva-induttiva più elevata di reali.
Andrej Bauer,

15

La risposta di Gilles è buona, fatta eccezione per il paragrafo sui numeri reali, che è completamente falso, tranne per il fatto che i numeri reali sono effettivamente un diverso bollitore di pesce. Poiché questo tipo di disinformazione sembra essere abbastanza diffusa, vorrei registrare qui una confutazione dettagliata.

Non è vero che tutti i tipi induttivi sono numerabili. Ad esempio, il tipo induttivo

Inductive cow := 
   | nose : cow
   | horn : (nat -> cow) -> cow.

non è numerabile, dato c : nat -> cowche si può formare una sequenza horn cche non è nella sequenza fondata sul bestiame. Se si desidera una dichiarazione corretta del modulo "tutti i tipi induttivi sono numerabili" è necessario limitare severamente le costruzioni consentite.

I numeri reali non possono essere facilmente costruiti come un tipo induttivo, tranne per il fatto che nella teoria dei tipi di omotopia possono essere costruiti come un tipo induttivo-induttivo superiore , vedere il capitolo 11 del libro HoTT . Si potrebbe sostenere che questo è barare.

Ci sono un certo numero di costruttive definizioni e costruzioni di numeri reali, contrariamente a Gilles rivendicazione. Possono essere ampiamente divisi in due classi:

  1. Costruzioni di tipo Cauchy in cui i reali sono visti come un completamento metrico dei numeri razionali. Questo tipo di costruzione richiede spesso dei quozienti, sebbene si possa riuscire a cavarsela con una definizione coiunduttiva, a seconda di come si tratta l'uguaglianza. Una costruzione ingenua in genere richiede anche una scelta numerabile, ma Fred Richman ha dato una procedura di completamento che funziona in modo costruttivo senza scelta, vedere i suoi numeri reali e altri completamenti .

  2. λΣ

Dal punto di vista dell'implementazione, abbiamo varie formalizzazione costruttive di reali (ma non quella nella libreria standard di Coq che è semplicemente orribile), ad esempio Rob Real Krebert e Bas Spitters Computer Reals efficienti e reali certificati in Coq .

Per un'implementazione effettiva di numeri reali esatti vi rimando all'iRRAM di Norbert Müller .

NN


Si potrebbe presumibilmente assiomatizzare la teoria dei veri campi chiusi in Coq ...
Pseudonimo

Sì, puoi, e Cyril Cohen l'ha fatto, vedi hal.inria.fr/hal-00671809v1/document . Qual è il tuo punto?
Andrej Bauer,

1
Non ho ragione, era solo una presunzione.
Pseudonimo del
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.