อุปนัยเหนี่ยวนำคืออะไร?


11

อะไรคือสิ่งที่เหนี่ยวนำเหนี่ยวนำ ?

ทรัพยากรที่ฉันพบคือ:

การอ้างอิงสองรายการแรกสั้นเกินไปสำหรับฉันและการอ้างอิงสองรายการหลังเกินไปทางเทคนิค มีใครอธิบายได้บ้างในเทอมของคนธรรมดา? มันจะดีกว่าถ้ามีรหัส Agda


มีรหัส Agda ในการอ้างอิงที่สี่ของคุณ
— Gilles 'หยุดชั่วร้าย'

แน่นอนว่ามันยากมากที่จะอ่านรหัสจำนวนมหาศาล และ (ฉันเดา) ง่ายสุด ๆ เพียงแค่เห็น 1 หรือ 2 ตัวอย่าง
— 盛安安

คำตอบ:


13

ภาคผนวก 2016-10-03:ฉันผสมการเหนี่ยวนำการเหนี่ยวนำและการเหนี่ยวนำซ้ำ (ไม่ใช่ครั้งแรกที่ฉันทำอย่างนั้น!) ฉันขอโทษสำหรับความยุ่งเหยิง ฉันอัพเดตคำตอบเพื่อให้ครอบคลุมทั้งสองข้อ

ฉันพบคำอธิบายในกระดาษของ Forsberg & Setzer ความจริงอันจำกัดความของคำจำกัดความอุปนัย - อุปนัยที่ส่องสว่าง

เหนี่ยวนำการเรียกซ้ำ

นิยามแบบอุปนัยแบบเรียกซ้ำคือสิ่งที่เรากำหนดประเภทและประเภทตระกูลพร้อมกันในวิธีพิเศษ:AB:A→Type

  1. Aหมายถึงประเภทอุปนัย
  2. Bจะถูกกำหนดโดยการเรียกซ้ำในA
  3. ขับเคลื่อนความหมายของอาจจะใช้BAB

หากไม่มีข้อกำหนดที่สามเราสามารถกำหนดแล้วแยกก่อนAB

นี่คือตัวอย่างของทารก กำหนดเหนี่ยวนำให้มีตัวสร้างต่อไปนี้:A

  • a:A
  • ℓ:(∑x:AB(x))→A

ตระกูลถูกกำหนดโดยB

  • B(a)=bool
  • B(ℓ(x,f))=nat{}

ดังนั้นในคืออะไร ครั้งแรกของทั้งหมดที่เรามีองค์ประกอบเพราะการที่มีประเภทซึ่งถูกกำหนดให้เป็น{} ดังนั้นเราจึงสามารถรูปแบบสององค์ประกอบใหม่และใน ตอนนี้เรามีดังนั้นเราจึงสามารถสร้างทุกองค์ประกอบ และ เราสามารถทำเช่นนี้ต่อไป . ขั้นต่อไปจะเป็นเช่นนั้นตั้งแต่ A

a:A.
B(a)bool
ℓ(a,false)
ℓ(a,true)
AB(ℓ(a,false))=B(ℓ(a,true))=natn:nat
ℓ(ℓ(a,false),n):A
ℓ(ℓ(a,true),n):A
B(ℓ(ℓ(a,true),n))=nat
มีสำหรับทุกองค์ประกอบ และองค์ประกอบ เราสามารถไปต่อได้ ความคิดเล็กน้อยเผยให้เห็นว่าเป็นรายการหมายเลขธรรมชาติจำนวนมากหรือน้อยกว่าสองชุดแบ่งปันรายการเปล่าทั่วไป ฉันจะปล่อยให้มันเป็นแบบฝึกหัดเพื่อหาสาเหตุm:nat
ℓ(ℓ(ℓ(a,true),n),m):A
ℓ(ℓ(ℓ(a,false),n),m):A
A

การเหนี่ยวนำการเหนี่ยวนำ

คำนิยามอุปนัยอุปนัยยังกำหนดประเภทและพร้อมครอบครัวประเภท :AB:A→Type

  1. Aถูกกำหนดแบบเหนี่ยวนำ
  2. Bถูกกำหนดแบบเหนี่ยวนำและอาจหมายถึงA
  3. ขับเคลื่อน อาจจะหมายถึงBAB

เป็นสิ่งสำคัญที่จะต้องเข้าใจความแตกต่างระหว่างการเหนี่ยวนำซ้ำและการเหนี่ยวนำ ในการเหนี่ยวนำ-recursion เรากำหนดโดยการให้สมการในรูปแบบ ที่เป็นตัวสร้างสำหรับ ในการให้คำนิยามอุปนัยอุปนัยเรากำหนดโดยการให้การก่อสร้างสำหรับการขึ้นรูปองค์ประกอบของBB

B(c(…))=⋯
c(…)ABB

ให้เราปรับตัวอย่างก่อนหน้าของเราเป็นการเหนี่ยวนำ ก่อนอื่นเราได้รับ tpyeได้รับการเหนี่ยวนำ:A

  • a:A
  • ℓ:(∑x:AB(x))→A

ประเภทตระกูลถูกกำหนดโดยตัวสร้างต่อไปนี้:B

  • Tru:B(a)
  • Fal:B(a)
  • ถ้าและดังนั้นx:Ay:B(x)Zer:B(ℓ(x,y))
  • ถ้าและและแล้วy))x:Ay:B(x)z:B(ℓ(x,y))Suc(z):B(ℓ(x,y))

อย่างที่คุณเห็นเราได้สร้างกฎสำหรับการสร้างองค์ประกอบของซึ่งจำนวนที่บอกว่าคือ (isomoprhic ถึง) booleans และคือ (isomorphic ถึง) ตัวเลขธรรมชาติ .BB(a)B(ℓ(x,y))


เหตุใดคนบางคนจึงกำหนดประเภทข้อมูลดังกล่าว D:
— 盛安安

7
เพื่อที่จะสอนสิ่งที่ประเภทอุปนัยอุปนัยคือ ฉันสามารถยกตัวอย่างจริงให้คุณได้นั่นก็คือจักรวาลประเภทหนึ่ง แต่นั่นอาจทำให้สับสน
— Andrej Bauer

3
@AndrejBauer นี้ดูเหมือนเหนี่ยวนำซ้ำกับฉัน การเหนี่ยวนำการเหนี่ยวนำคือเมื่อครอบครัวประเภทถูกกำหนดให้เป็นประเภทอุปนัย
— gallais

2
โอ๊ะคุณพูดถูก ฉันจะแก้ไข
— Andrej Bauer

โดเมนของควรจะเป็นประเภท Sigma แทนที่จะเป็นประเภท Pi หรือไม่? ℓ
— Dan Christensen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.