จำนวนธรรมชาติถูกกำหนด inductively เป็น (ใช้ไวยากรณ์ Coq เป็นตัวอย่าง)
Inductive nat: Set :=
| O: nat
| S: nat -> nat.
มีวิธีมาตรฐานในการกำหนดจำนวนเต็ม (และชุดอื่น ๆ เช่น rationals และ reals) อย่างสร้างสรรค์?
จำนวนธรรมชาติถูกกำหนด inductively เป็น (ใช้ไวยากรณ์ Coq เป็นตัวอย่าง)
Inductive nat: Set :=
| O: nat
| S: nat -> nat.
มีวิธีมาตรฐานในการกำหนดจำนวนเต็ม (และชุดอื่น ๆ เช่น rationals และ reals) อย่างสร้างสรรค์?
คำตอบ:
มีหลายวิธีในการกำหนดโครงสร้างทางคณิตศาสตร์ขึ้นอยู่กับคุณสมบัติที่คุณพิจารณาว่าเป็นนิยาม ระหว่างคุณสมบัติที่เทียบเท่าซึ่งคุณใช้เพื่อกำหนดและสิ่งที่คุณใช้เพื่อเป็นลักษณะทางเลือกไม่สำคัญ
ในวิชาคณิตศาสตร์เชิงสร้างสรรค์นั้นควรเลือกนิยามที่ทำให้การใช้เหตุผลเชิงสร้างสรรค์ง่ายขึ้น สำหรับตัวเลขธรรมชาติรูปแบบพื้นฐานของการให้เหตุผลคืออุปนัยซึ่งทำให้คำนิยามศูนย์หรือผู้สืบทอดที่เหมาะสมมาก ชุดตัวเลขอื่น ๆ ไม่มีการกำหนดลักษณะดังกล่าว
เมื่อให้เหตุผลเกี่ยวกับความฉลาดในการตั้งค่าที่ไม่สร้างสรรค์มันเป็นเรื่องธรรมดาที่จะพูดว่า "เลือกสมาชิกของระดับความเท่าเทียม" ในการตั้งค่าที่สร้างสรรค์มีความจำเป็นต้องอธิบายวิธีการเลือกสมาชิก สิ่งนี้ทำให้ง่ายขึ้นที่จะไปพร้อมกับคำจำกัดความที่สร้างวัตถุหนึ่งรายการสำหรับสมาชิกแต่ละประเภทแทนที่จะสร้างคลาสที่เท่าเทียมกัน
ตัวอย่างเช่นเพื่อกำหนดนักคณิตศาสตร์อาจมีความสุขกับการเทียบความแตกต่างของจำนวนธรรมชาติ: ในขณะนี้มีความรู้สึกเป็นระเบียบ (ไม่ใช่“ นี่หรืออย่างนั้น”) เพื่อเหตุผลเชิงสร้างสรรค์มันง่ายกว่าถ้าความเท่าเทียมกันของวัตถุเกิดขึ้นพร้อมกับความเท่าเทียมของการเป็นตัวแทน ดังนั้นเราอาจกำหนดจำนวนเต็มสัมพัทธ์เป็นจำนวนธรรมชาติหรือลบของจำนวนธรรมชาติลบหนึ่ง:
Inductive Z1 :=
| Nonnegative : nat -> Z1 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Negative : nat -> Z1. (* ⟦Negative x⟧ = -⟦x⟧-1 *)
อย่างไรก็ตามคำจำกัดความนี้ไม่สมมาตรแปลก ๆ ซึ่งสามารถทำให้ยอมรับการเป็นตัวแทนที่แตกต่างกันสองรายการสำหรับศูนย์:
Inductive Z2 :=
| Nonnegative : nat -> Z2 (* ⟦Nonnegative x⟧ = ⟦x⟧ *)
| Nonpositive : nat -> Z2. (* ⟦Nonpostitive x⟧ = -⟦x⟧ *)
หรือเราสามารถสร้างจำนวนเต็มสัมพัทธ์โดยไม่ใช้ naturals เป็นแบบเอกสารสำเร็จรูป:
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⟧ *)
ไลบรารีมาตรฐาน Coq ใช้คำจำกัดความอื่น: มันสร้างจำนวนเต็มบวกจากสัญกรณ์ของพวกเขาคือฐาน 2 เป็นหลัก 1 ตามด้วยลำดับของตัวเลข 0 หรือ 1 จากนั้นสร้างZ
เช่นZ3
จากPos3
ด้านบน คำจำกัดความนี้ยังมีการแสดงที่ไม่ซ้ำกันสำหรับแต่ละจำนวนเต็ม ทางเลือกของการใช้รูปแบบไบนารีไม่ใช่เพื่อเหตุผลที่ง่ายกว่า แต่เพื่อสร้างรหัสที่มีประสิทธิภาพมากขึ้นเมื่อโปรแกรมถูกดึงออกมาจากบทพิสูจน์
ความง่ายในการให้เหตุผลคือแรงจูงใจในการเลือกคำจำกัดความ แต่มันไม่เคยเป็นปัจจัยที่ผ่านไม่ได้ หากการก่อสร้างบางอย่างทำให้การพิสูจน์เฉพาะง่ายขึ้นเราสามารถใช้คำจำกัดความนั้นในการพิสูจน์นั้นและพิสูจน์ว่าการก่อสร้างนั้นเทียบเท่ากับการก่อสร้างอื่นที่ได้รับเลือกให้เป็นคำจำกัดความเดิม
สำหรับตัวเลขที่มีเหตุผลมันเป็นเรื่องยากที่จะหลีกเลี่ยงการหารไม่ได้ถ้าเราเริ่มต้นจากการแสดงจำนวนเต็มเป็นผลคูณของปัจจัย (ซึ่งทำให้การดำเนินงานพื้นฐานบางอย่างเช่นการเพิ่มและการเรียงลำดับทั้งหมดบนยากที่จะกำหนด) Coq กำหนดมาตรฐานห้องสมุดเป็น (เศษและส่วน) และกำหนดดำเนินการในการทดสอบความเท่าเทียมกันของทั้งสององค์ประกอบของ คำจำกัดความนี้ค่อนข้างธรรมดาเพราะมันง่ายอย่างที่ได้รับQ
=?=
Q
จำนวนจริงเป็นกาต้มน้ำที่แตกต่างกันทั้งตัวเพราะพวกมันไม่สามารถสร้างได้ มันเป็นไปไม่ได้ที่จะกำหนดจำนวนจริงเป็นประเภทอุปนัย (ประเภทอุปนัยทั้งหมดนับได้) คำจำกัดความของจำนวนจริงใด ๆ จะต้องเป็นจริง แต่ไม่ใช่เชิงสร้างสรรค์ เป็นไปได้ที่จะสร้างชุดย่อยที่นับได้ของจำนวนจริง วิธีการทำขึ้นอยู่กับว่าคุณต้องการสร้างชุดย่อยใด
คำตอบ Gilles เป็นคำตอบที่ดียกเว้นย่อหน้าในจำนวนจริงซึ่งเป็นเท็จโดยสมบูรณ์ยกเว้นความจริงที่ว่าจำนวนจริงเป็นกาต้มน้ำปลาที่แตกต่างกัน เนื่องจากข้อมูลที่ผิดประเภทนี้ดูเหมือนจะค่อนข้างแพร่หลายฉันต้องการบันทึกข้อโต้แย้งอย่างละเอียด
มันไม่เป็นความจริงเลยที่อุปนัยทุกประเภทนั้นนับได้ ตัวอย่างเช่นประเภทอุปนัย
Inductive cow :=
| nose : cow
| horn : (nat -> cow) -> cow.
ไม่สามารถนับได้สำหรับลำดับใดก็ตามที่c : nat -> cow
เราอาจก่อตัวขึ้นhorn c
ซึ่งไม่ได้อยู่ในลำดับโดยการก่อตั้งที่ดีของวัว หากคุณต้องการคำแถลงที่ถูกต้องของรูปแบบ "ประเภทอุปนัยทั้งหมดนับได้" คุณจะต้อง จำกัด การก่อสร้างที่อนุญาตอย่างรุนแรง
ตัวเลขจริงไม่สามารถสร้างได้อย่างง่ายดายเป็นประเภทอุปนัยยกเว้นว่าในประเภททฤษฎี homotopy พวกเขาสามารถสร้างเป็นประเภทอุปนัยอุปนัยสูงดูบทที่ 11 ของหนังสือ อาจเป็นที่ถกเถียงกันอยู่ว่านี่คือการโกง
มีคำจำกัดความเชิงสร้างสรรค์จำนวนมากและสิ่งปลูกสร้างของ reals ซึ่งตรงกันข้ามกับการเรียกร้องของ Gilles พวกเขาสามารถแบ่งออกเป็นสองชั้นกว้าง:
กองกำลังประเภท Cauchyซึ่ง reals เท่าที่เห็นเป็นการวัดความสมบูรณ์ของจำนวนตรรกยะ การก่อสร้างประเภทนี้มักจะต้องมีความฉลาดทางวัตถุแม้ว่าบางคนอาจจะสามารถนิยามคำว่า coiunductive ได้ แต่ก็ขึ้นอยู่กับว่าคนเราปฏิบัติต่อความเท่าเทียมกันอย่างไร การสร้างแบบไร้เดียงสามักจะต้องเลือกที่นับได้เช่นกัน แต่เฟร็ด Richman ให้ขั้นตอนการดำเนินการเสร็จสมบูรณ์ซึ่งทำงานอย่างสร้างสรรค์โดยไม่ต้องเลือกดูของเขาจำนวนจริงและความสำเร็จอื่น ๆ
การก่อสร้างประเภท Dedekindซึ่ง reals ถูกมองว่าเป็นการตัดแบบปันส่วน (สองด้าน) การสร้างแบบนี้มักจะต้องการ powersets หรืออุปกรณ์ที่คล้ายกันถึงแม้ว่ามันจะเป็นไปได้ที่จะทำมันด้วยพื้นฐานบางอย่าง- คำนวณและ axiomatization ของพื้นที่ Sierpinski ดูreals Dedekind นามธรรมหินคู่
ในด้านการดำเนินการที่เรามี formalizations ต่างๆที่สร้างสรรค์ของ reals ( แต่ไม่ได้เป็นหนึ่งในมาตรฐานห้องสมุด Coq ซึ่งเป็นเพียงเหลือร้าย) เช่น Robbert Krebbers และ Bas Spitters ของคอมพิวเตอร์ได้รับการรับรอง reals ที่แน่นอนมีประสิทธิภาพในการ Coq
สำหรับการดำเนินงานที่แท้จริงของแน่นอนตัวเลขจริงผมชี้ให้คุณ Norbert ของMüller iRRAM
สุดท้าย Gilles พูดเกี่ยวกับชุดย่อยของ reals ที่นับได้ว่าปิดอยู่ เป็นไปได้อย่างสมบูรณ์ในการสร้างหรือกำหนดเซตที่นับไม่ได้ไม่ว่าจะอยู่ในรูปแบบใดก็ตามที่คุณอาศัยอยู่ ตัวอย่างเช่นพื้นที่ Baireลำดับทั้งหมดของตัวเลขเป็นเสมอนับไม่ได้แม้ถ้าคุณคิดว่าฟังก์ชั่นทุกคนเป็นทัวริง-คำนวณ - ดูโพสต์บล็อกของฉันสำหรับคำอธิบาย