Hay varias formas de definir una estructura matemática, según las propiedades que considere la definición. Entre las caracterizaciones equivalentes, cuál toma para ser la definición y cuál toma para ser una caracterización alternativa no es importante.
En matemáticas constructivas, es preferible elegir una definición que facilite el razonamiento constructivo. Para los números naturales, la forma básica de razonamiento es la inducción, lo que hace que la definición tradicional de cero o sucesor sea muy adecuada. Otros conjuntos de números no tienen esa preferencia.
Al razonar sobre cocientes, en entornos no constructivos, es común decir "elegir un miembro de la clase de equivalencia". En un entorno constructivo, es necesario describir cómo elegir un miembro. Esto facilita el ir con definiciones que construyen un objeto para cada miembro del tipo, en lugar de construir clases de equivalencia.
Z
Z:=N2/{((x,y),(x′,y′))∣x+y′=x′+y}
Si bien esto tiene un sentimiento ordenado (no "esto o aquello"), para el razonamiento constructivo, es más simple si la igualdad de objetos coincide con la igualdad de representaciones, por lo que podríamos definir los enteros relativos como un número natural o negativo de un número natural menos uno:
Inductive Z1 :=
| Nonnegative : nat -> Z1 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Negative : nat -> Z1. (* ⟦Negative x⟧ = -⟦x⟧-1 *)
Sin embargo, esta definición es extrañamente asimétrica, lo que puede hacer preferible admitir dos representaciones diferentes para cero:
Inductive Z2 :=
| Nonnegative : nat -> Z2 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Nonpositive : nat -> Z2. (* ⟦Nonpostitive x⟧ = -⟦x⟧ *)
O podemos construir los enteros relativos sin usar los naturales como un bloque de construcción:
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⟧ *)
La biblioteca estándar de Coq usa otra definición más: construye enteros positivos a partir de su notación es la base 2, ya que el dígito 1 seguido de una secuencia de dígitos 0 o 1. Luego construye Z
como Z3
desde Pos3
arriba. Esta definición también tiene una representación única para cada número entero. La elección de usar la notación binaria no es para un razonamiento más fácil, sino para producir un código más eficiente cuando los programas se extraen de las pruebas.
La facilidad de razonamiento es una motivación para elegir una definición, pero nunca es un factor insuperable. Si alguna construcción hace que una prueba en particular sea más fácil, uno puede usar esa definición en esa prueba en particular y demostrar que la construcción es equivalente a la otra construcción que se eligió como definición originalmente.
NQ
N×N∗=?=
Q
Los números reales son una caldera de peces completamente diferente porque no son construibles. Es imposible definir los números reales como un tipo inductivo (todos los tipos inductivos son numerables). En cambio, cualquier definición de los números reales tiene que ser axiomática, es decir, no constructiva. Es posible construir subconjuntos numerables de los números reales; la forma de hacerlo depende del subconjunto que desee construir.