อะไรคือความหมายเชิงปฏิบัติของทฤษฎีประเภท homotopy ในการเขียนโปรแกรม?


11

ฉันเพิ่งเริ่มเรียนรู้ Haskell หลังจากมาจากโลก JavaScript / Ruby ฉันเจอhttps://github.com/HoTTและหนังสือHomotopy Type Theoryซึ่งฉันอยากอ่าน

อย่างไรก็ตามฉันจะเรียนรู้แนวคิดเกี่ยวกับคณิตศาสตร์และทฤษฎีประเภทเมื่อฉันไปดังนั้นดูเหมือนว่ามันจะใช้เวลานานก่อนที่ฉันจะเข้าใจว่าทฤษฎีประเภท homotopy นั้นมีความหมายอย่างไรต่อโปรแกรมเมอร์ฝึกหัด

คุณช่วยอธิบายได้ว่าทฤษฎีประเภท homotopy มีผลกระทบอย่างไรต่อการเขียนโปรแกรมในทางปฏิบัติสำหรับคนธรรมดา? ตัวอย่างเช่นจะทำให้การเขียนง่ายขึ้นไหม? ถ้าเป็นเช่นนั้นมีอะไรบ้าง? หรือจะอนุญาตให้คุณทำสิ่งใหม่ ๆ ในการเขียนโปรแกรมที่ไม่เคยมีมาก่อนหรือไม่? ถ้าเป็นเช่นนั้นมีอะไรบ้าง?

ขอบคุณมากรอคอยที่จะห่อหัวของฉันไปรอบ ๆ ในระดับพื้นฐานมากขึ้น


ฉันคาดหวังว่ามันจะเป็นเช่นนั้นและจะยังคงไม่น่าไว้วางใจในการฝึกฝนโปรแกรมเมอร์ ที่ดีที่สุดเราอาจได้รับคอมไพเลอร์เร็วขึ้นหรือกล่องดำขลังที่ใช้ประโยชน์จากคณิตศาสตร์ - ฟู
Telastyn

ฮ่าฮ่านี่คือสิ่งที่ฉันคิดมาจนถึงตอนนี้ ฉันยังคงสงสัยว่านี่เป็นคำตอบหรือมีบางสิ่งที่เกินกว่าที่คุณพูดหรือไม่ ตัวอย่างเช่นฐานข้อมูลจะได้ประโยชน์จากสิ่งนี้หรือไม่ หรืออะไรทำนองนั้น
Lance Pollard

1
ฉันไม่รู้. ฉันอ่านบทคัดย่อและวางมันลงในถังทันทีเพื่อการศึกษาที่ไม่น่าเชื่อถือ
Telastyn


4
@Telastyn: หากคุณดาวน์โหลดหนังสือในภาษาโปรตุเกสมันจะไม่สามารถพิสูจน์ได้ตราบใดที่คุณยังไม่ได้พยายามเรียนรู้ภาษา ทำไมสาธารณชนประณามหนังสือโปรตุเกสโดยความเสียหายระยะmumbo จัมโบ้ ? แรงบันดาลใจจากGödelsสำหรับการแนะนำฟังก์ชั่นการเรียกซ้ำแบบดั้งเดิมนั้นเป็นเรื่องทางวิชาการอย่างยิ่งโดยเฉพาะอย่างยิ่งเพราะโลกไม่ได้ใช้โปรแกรมใด ๆ ในยุค 30 ฉันไม่คิดว่าเพียงเพราะเป็นโปรแกรมเมอร์ฝึกหัดหัวข้อทางวิชาการจะ "ยังคงไม่อาจพิสูจน์ได้" ต่อความสามารถของคุณ
Nikolaj-K

คำตอบ:


15

คอมไพเลอร์ที่ทรงพลังอย่างหนึ่งที่สามารถทำได้ในระหว่างขั้นตอนการออพติไมซ์ก็คือการสลับการแทนค่าที่ไม่มีประสิทธิภาพสำหรับสิ่งที่เทียบเท่า ตัวอย่างเช่นใน Haskell คุณสามารถใช้รายการสันหลังยาวเพื่อคำนวณผลรวมของตัวเลข แต่คอมไพเลอร์ GHC Haskell จะรับรู้ว่าสิ่งนี้เทียบเท่ากับการใช้การวนซ้ำกับตัวแปรชั่วคราว ด้วยวิธีนี้คุณสามารถตั้งโปรแกรมกับสิ่งที่เป็นนามธรรมง่าย ๆ ซึ่งเป็นเรื่องง่ายในขณะที่ความสามารถในการปฏิบัติการของคุณใช้ประโยชน์จากการเป็นตัวแทนที่เหมาะสมกับแพลตฟอร์มฮาร์ดแวร์มากขึ้น (และนั่นยากกว่าเหตุผลในระดับ)

อย่างไรก็ตามคอมไพเลอร์ที่รู้จักกันจะถูก จำกัด ส่วนใหญ่เป็นที่รู้จักกันดีและวิจัยโครงสร้างข้อมูลเช่นกระแสฟิวชั่นสำหรับรายการ คุณสามารถกำหนดความเทียบเท่าของคุณเองในซอร์สโค้ด (ใช้ฟังก์ชั่นการแปลงคู่ที่ประกอบไปด้วยตัวตนในทิศทางใดทิศทางหนึ่ง) แต่คุณต้องใช้มันด้วยตนเองและมันอาจจะยุ่งยากในการเลือกประเภทที่เหมาะสมที่จะใช้ในทุกสถานที่ เพื่อหลีกเลี่ยงการแปลงมากเกินไป

ทีนี้ลองจินตนาการถึงโลกที่คุณจะนิยาม "ประเภทอุปนัยที่สูงขึ้น" พูดแผนที่การค้นหาแบบบัญญัติ ประเภทนี้มีตัวสร้างหลายอย่างสำหรับแผนที่ประเภทต่าง ๆ : การค้นหาแบบไบนารี, AVL, แดง - ดำ, Trie, Patricia ฯลฯ พร้อมด้วยตัวสร้างข้อมูลทั่วไปคุณยังกำหนดประเภทการจับคู่ที่เทียบเท่าซึ่งอาจเป็น Conversion หลายรายการระหว่างการนำเสนอเหล่านี้ Conversion มีมิติของประสิทธิภาพที่แตกต่างกัน (เช่นเวลากับหน่วยความจำ)

เกิดอะไรขึ้นถ้าคอมไพเลอร์สามารถใช้ความคิดนี้ในการเขียนการนำเสนอแผนที่ใหม่ได้อย่างโปร่งใสวิธีเดียวกันกับที่ได้ทำรายการฟิวชั่นในวันนี้ ในรหัสของคุณคุณจะได้ทำงานกับสิ่งก่อสร้างที่ง่ายที่สุดในการให้เหตุผล (และทำให้งานพิสูจน์ง่ายขึ้นถ้าคุณอยู่ในสภาพแวดล้อมเช่นนี้) สิ่งนี้อาจฟังดูคล้ายกับอินเทอร์เฟซแบบนามธรรมที่มีการใช้งานหลายอย่าง แต่รวมถึงเสรีภาพในการเลือกการใช้งานใด ๆ และให้คอมไพเลอร์โปร่งใสแทนสิ่งอื่นตามที่ต้องการ

HoTT ให้พื้นฐานทางทฤษฎีประเภทหนึ่งแก่เราเพื่อพิสูจน์กลไกการเขียนใหม่ที่แปลกประหลาดและประเภทที่กำหนดไว้อย่างมั่งคั่งเหล่านี้ มันยังคงที่จะเห็นว่าสิ่งนี้จะเล่นจริงในทางปฏิบัติ แต่มันทำให้เรามีกรอบทฤษฎีที่จะใช้ในการทำงานในอนาคต

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