Definisi konstruktif standar bilangan bulat, rasional, dan real?

10

Bilangan asli didefinisikan secara induktif sebagai (menggunakan sintaks Coq sebagai contoh)

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

Apakah ada cara standar untuk mendefinisikan integer (dan mungkin set lain seperti rasional dan real) secara konstruktif?

Alex
sumber
1
Apa definisi konstruktif?
Trismegistos

Jawaban:

11

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 Zseperti Z3dari Pos3atas. 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.

NQN×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.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
The bilangan real dihitung tampaknya menjadi kandidat yang paling masuk akal, karena kebanyakan penggunaan bilangan real terikat untuk memesan biasa mereka dalam beberapa cara.
dfeuer
5
Apa yang dimaksud dengan "konstruktif"? Saya hanya mengetahui "set konstruktif" teori set a la, tapi itulah yang Anda maksud. Selain itu, walaupun realitanya adalah ketel ikan yang sama sekali berbeda, tidak benar bahwa "setiap definisi bilangan real harus aksiomatik, yaitu non-konstruktif". Dan dalam teori tipe homotopy ada definisi induktif-induktif yang lebih tinggi dari real.
Andrej Bauer
14

Jawaban Gilles adalah jawaban yang bagus, kecuali paragraf tentang bilangan real, yang sepenuhnya salah, kecuali fakta bahwa bilangan real memang merupakan ketel ikan yang berbeda. Karena informasi yang keliru semacam ini tampaknya cukup luas, saya ingin mencatat di sini bantahan terperinci.

Tidak benar bahwa semua tipe induktif dapat dihitung. Misalnya, tipe induktif

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

tidak dapat dinomori, karena diberikan urutan apa pun yang c : nat -> cowdapat kita bentuk horn cyang tidak sesuai urutan oleh peternakan yang kuat. Jika Anda ingin pernyataan yang benar dari bentuk "semua jenis induktif dapat dihitung" Anda harus sangat membatasi konstruksi yang diizinkan.

Bilangan real tidak dapat dengan mudah dibangun sebagai tipe induktif, kecuali bahwa dalam teori tipe homotopy, mereka dapat dibangun sebagai tipe induktif-induktif yang lebih tinggi , lihat Bab 11 buku HoTT . Dapat dikatakan bahwa ini curang.

Ada sejumlah konstruktif definisi dan konstruksi dari real, bertentangan dengan Gilles klaim. Mereka dapat secara luas dibagi menjadi dua kelas:

  1. Konstruksi jenis Cauchy di mana real dilihat sebagai penyelesaian metrik angka-angka rasional. Konstruksi semacam ini sering kali membutuhkan negosiasi, walaupun orang mungkin bisa lolos dengan definisi coiunductive, bergantung pada bagaimana seseorang memperlakukan kesetaraan. Konstruksi naif biasanya memerlukan pilihan yang dapat dihitung juga, tetapi Fred Richman memberikan prosedur penyelesaian yang bekerja secara konstruktif tanpa pilihan, lihat bilangan real dan penyelesaian lainnya .

  2. λΣ

Di sisi implementasi, kami memiliki berbagai formalisasi konstruktif dari real (tetapi bukan yang ada di perpustakaan standar Coq yang hanya mengerikan), misalnya Robbert Krebbers dan Bas Spitters's Computer bersertifikat real sebenarnya yang efisien dalam Coq .

Untuk implementasi aktual dari bilangan real yang tepat, saya mengarahkan Anda ke iRRAM Norbert Müller .

NN

Andrej Bauer
sumber
Anda mungkin bisa melakukan aksioma teori medan tertutup nyata di Coq ...
Nama samaran
Ya, Anda bisa, dan Cyril Cohen melakukannya, lihat hal.inria.fr/hal-00671809v1/document . Apa maksudmu
Andrej Bauer
Saya tidak ada benarnya, itu hanya anggapan.
Nama samaran