Es gibt mehrere Möglichkeiten, eine mathematische Struktur zu definieren, je nachdem, welche Eigenschaften Sie als Definition betrachten. Zwischen äquivalenten Charakterisierungen ist es nicht wichtig, welche Sie als Definition und welche als alternative Charakterisierung betrachten.
In der konstruktiven Mathematik ist es vorzuziehen, eine Definition zu wählen, die das konstruktive Denken erleichtert. Für natürliche Zahlen ist die Grundform des Denkens die Induktion, was die traditionelle Null-oder-Nachfolger-Definition sehr gut geeignet macht. Andere Zahlenreihen haben keine solche Präferenz.
Wenn Sie in nicht konstruktiven Umgebungen über Quotienten nachdenken, wird häufig gesagt, dass Sie ein Mitglied der Äquivalenzklasse auswählen. In einer konstruktiven Umgebung muss beschrieben werden, wie ein Mitglied ausgewählt wird. Dies erleichtert die Verwendung von Definitionen, die für jedes Element des Typs ein Objekt erstellen, anstatt Äquivalenzklassen zu erstellen.
Um beispielsweise zu definieren , könnte ein Mathematiker glücklich sein, Unterschiede natürlicher Zahlen gleichzusetzen:
Z : = N 2 / { ( ( x , y ) , ( x ' , y ' ) ) ∣ x + y ' = x ' + y }Z.
Z : = N.2/ {((x,y) , ( x', y') ) ∣ x + y'= x'+ y}}
Während dies ein ordentliches Gefühl hat (kein „dies oder das“), ist es für konstruktives Denken einfacher, wenn die Gleichheit von Objekten mit der Gleichheit von Darstellungen übereinstimmt, sodass wir die relativen ganzen Zahlen entweder als natürliche Zahl oder als Negativ von a definieren können natürliche Zahl minus eins:
Inductive Z1 :=
| Nonnegative : nat -> Z1 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Negative : nat -> Z1. (* ⟦Negative x⟧ = -⟦x⟧-1 *)
Diese Definition ist jedoch seltsamerweise asymmetrisch, weshalb es vorzuziehen ist, zwei verschiedene Darstellungen für Null zuzulassen:
Inductive Z2 :=
| Nonnegative : nat -> Z2 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Nonpositive : nat -> Z2. (* ⟦Nonpostitive x⟧ = -⟦x⟧ *)
Oder wir können die relativen Ganzzahlen erstellen, ohne die Naturwerte als Baustein zu verwenden:
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⟧ *)
Die Coq Standard - Bibliothek verwendet noch eine andere Definition: es konstruiert positive ganze Zahlen von ihrer Notation Basis 2, wie die Ziffer 1 durch eine Folge von Ziffern , gefolgt 0 oder 1. Es erstellt dann Z
wie Z3
von Pos3
oben. Diese Definition hat auch eine eindeutige Darstellung für jede Ganzzahl. Die Wahl der binären Notation dient nicht der einfacheren Argumentation, sondern der Erzeugung eines effizienteren Codes, wenn Programme aus Proofs extrahiert werden.
Einfaches Denken ist eine Motivation bei der Auswahl einer Definition, aber niemals ein unüberwindbarer Faktor. Wenn eine Konstruktion einen bestimmten Beweis erleichtert, kann man diese Definition in diesem bestimmten Beweis verwenden und beweisen, dass die Konstruktion der anderen Konstruktion entspricht, die ursprünglich als Definition gewählt wurde.
N.Q
N × N.∗=?=
Q
Reelle Zahlen sind ein ganz anderer Fischkessel, weil sie nicht konstruierbar sind. Es ist unmöglich, die reellen Zahlen als induktiven Typ zu definieren (alle induktiven Typen sind denumerierbar). Stattdessen muss jede Definition der reellen Zahlen axiomatisch, dh nicht konstruktiv sein. Es ist möglich, denumerierbare Teilmengen der reellen Zahlen zu konstruieren; Die Vorgehensweise hängt davon ab, welche Teilmenge Sie erstellen möchten.