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 Z
come Z3
da Pos3
sopra. 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.
NQ
N × 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.