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


11

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

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

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


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

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

คำตอบ:


13

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

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

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

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

  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:AType

  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.