Ada beberapa cara untuk mendefinisikan struktur matematika, tergantung pada properti apa yang Anda anggap sebagai definisi. Antara penokohan yang setara, mana yang Anda ambil untuk menjadi definisi dan yang Anda ambil sebagai penokohan alternatif tidak penting.
Dalam matematika konstruktif, lebih baik memilih definisi yang membuat penalaran konstruktif mudah. Untuk bilangan asli, bentuk dasar penalaran adalah induksi, yang membuat definisi nol atau penerus tradisional sangat cocok. Set angka lainnya tidak memiliki preferensi seperti itu.
Ketika bernalar pada negosiasi, dalam pengaturan non-konstruktif, adalah umum untuk mengatakan "pilih anggota kelas kesetaraan". Dalam pengaturan yang konstruktif, perlu dijelaskan bagaimana memilih anggota. Ini membuatnya lebih mudah untuk pergi dengan definisi yang membangun satu objek untuk setiap anggota jenis, daripada membangun kelas ekivalensi.
Misalnya, untuk mendefinisikan , seorang ahli matematika mungkin senang dengan menyamakan perbedaan bilangan asli:
Z : = N 2 / { ( ( x , y ) , ( x ′ , y ′ ) ) ∣ x + y ′ = x ′ + y }Z
Z : = N2/ {((x,y) , ( x′, y′) ) ∣ x + y′= x′+ y}
Meskipun ini memiliki perasaan yang rapi untuk itu (tidak ada "ini atau itu"), untuk alasan konstruktif, lebih mudah jika persamaan objek bertepatan dengan persamaan representasi, jadi kita dapat mendefinisikan bilangan relatif relatif baik sebagai bilangan alami atau negatif dari suatu angka alami minus satu:
Inductive Z1 :=
| Nonnegative : nat -> Z1 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Negative : nat -> Z1. (* ⟦Negative x⟧ = -⟦x⟧-1 *)
Namun, definisi ini anehnya asimetris, yang dapat membuatnya lebih baik untuk mengakui dua representasi berbeda untuk nol:
Inductive Z2 :=
| Nonnegative : nat -> Z2 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Nonpositive : nat -> Z2. (* ⟦Nonpostitive x⟧ = -⟦x⟧ *)
Atau kita dapat membangun bilangan bulat relatif tanpa menggunakan naturals sebagai blok bangunan:
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⟧ *)
Pustaka standar Coq menggunakan definisi lain: itu membangun bilangan bulat positif dari notasi mereka adalah basis 2, karena angka 1 diikuti oleh urutan angka 0 atau 1. Kemudian dibangun Z
seperti Z3
dari Pos3
atas. Definisi ini juga memiliki representasi unik untuk setiap bilangan bulat. Pilihan menggunakan notasi biner bukan untuk alasan yang lebih mudah, tetapi untuk menghasilkan kode yang lebih efisien ketika program diekstraksi dari bukti.
Kemudahan bernalar adalah motivasi dalam memilih definisi, tetapi itu tidak pernah menjadi faktor yang tidak dapat diatasi. Jika beberapa konstruksi membuat bukti tertentu lebih mudah, seseorang dapat menggunakan definisi itu dalam bukti khusus itu, dan membuktikan bahwa konstruksi itu setara dengan konstruksi lain yang dipilih sebagai definisi aslinya.
NQ
N × N∗=?=
Q
Angka sebenarnya adalah ketel ikan yang sama sekali berbeda karena mereka tidak dapat dibangun. Tidak mungkin untuk mendefinisikan bilangan real sebagai tipe induktif (semua tipe induktif dapat didenumerasikan). Sebagai gantinya, setiap definisi bilangan real harus aksiomatik, yaitu non-konstruktif. Dimungkinkan untuk membuat himpunan bagian yang dapat didenumerasi dari bilangan real; cara untuk melakukannya tergantung pada subset apa yang ingin Anda buat.