อ่าน 8 นาที
ประเภทพึ่งพา
ในวิทยาการคอมพิวเตอร์และตรรกศาสตร์ประเภท ที่ขึ้นอยู่กับค่า (dependent type)คือประเภทที่นิยามของมันขึ้นอยู่กับค่า มันเป็นคุณลักษณะที่ทับซ้อนกันระหว่างทฤษฎีประเภท (type...
ประเภทพึ่งพา
| ระบบประเภท |
|---|
| แนวคิดทั่วไป |
| หมวดหมู่หลัก |
|
| หมวดหมู่ย่อย |
ในวิทยาการคอมพิวเตอร์และตรรกศาสตร์ประเภท ที่ขึ้นอยู่กับค่า (dependent type)คือประเภทที่นิยามของมันขึ้นอยู่กับค่า มันเป็นคุณลักษณะที่ทับซ้อนกันระหว่างทฤษฎีประเภท (type theory)และระบบประเภท (type systems ) ในทฤษฎีประเภทแบบสัญชาตญาณ (intuitionistic type theory)ประเภทที่ขึ้นอยู่กับค่าถูกใช้เพื่อเข้ารหัสตัวบ่งปริมาณ ของตรรกศาสตร์ เช่น "สำหรับทุก" (for all) และ "มีอยู่" (there exists) ในภาษาการเขียนโปรแกรมเชิงฟังก์ชัน เช่นAgda , ATS , Rocq (เดิมชื่อCoq ), F* , Epigram , IdrisและLeanประเภทที่ขึ้นอยู่กับค่าช่วยลดข้อผิดพลาดโดยการทำให้นักเขียนโปรแกรมสามารถกำหนดประเภทที่จำกัดชุดของการใช้งานที่เป็นไปได้เพิ่มเติมได้
ตัวอย่างทั่วไปสองอย่างของประเภทที่ขึ้นอยู่กันคือฟังก์ชันที่ขึ้นอยู่กันและคู่ที่ขึ้นอยู่กันประเภทการส่งคืนของฟังก์ชันที่ขึ้นอยู่กันอาจขึ้นอยู่กับค่า (ไม่ใช่แค่ประเภท) ของอาร์กิวเมนต์ตัวใดตัวหนึ่ง เช่น ฟังก์ชันที่รับจำนวนเต็มบวกอาจส่งคืนอาร์เรย์ที่มีความยาวโดยที่ความยาวของอาร์เรย์เป็นส่วนหนึ่งของประเภทของอาร์เรย์ (โปรดทราบว่านี่แตกต่างจากโพลีมอร์ฟิซึมและการเขียนโปรแกรมแบบเจเนริกซึ่งทั้งสองอย่างนี้รวมประเภทเป็นอาร์กิวเมนต์ด้วย) คู่ที่ขึ้นอยู่กันอาจมีค่าที่สอง ซึ่งประเภทของค่าที่สองนั้นขึ้นอยู่กับค่าแรก ยกตัวอย่างเช่น อาร์เรย์ คู่ที่ขึ้นอยู่กันอาจใช้เพื่อจับคู่อาร์เรย์กับความยาวของมันในลักษณะที่ปลอดภัยต่อประเภท
ประเภทที่ขึ้นอยู่กันจะเพิ่มความซับซ้อนให้กับระบบประเภท การตัดสินความเท่าเทียมกันของประเภทที่ขึ้นอยู่กันในโปรแกรมอาจต้องใช้การคำนวณ หากอนุญาตให้ใช้ค่าใดๆ ในประเภทที่ขึ้นอยู่กัน การตัดสินความเท่าเทียมกันของประเภทอาจเกี่ยวข้องกับการตัดสินว่าโปรแกรมสองโปรแกรมใดๆ ให้ผลลัพธ์เดียวกันหรือไม่ ดังนั้นความสามารถ ในการตัดสิน ของการตรวจสอบประเภทอาจขึ้นอยู่กับความหมายของความเท่าเทียมกันของทฤษฎีประเภทที่กำหนด กล่าวคือ ทฤษฎีประเภทนั้นเป็นแบบเจตนาหรือแบบขยาย[ 1 ]
ประวัติศาสตร์
ในปี พ.ศ. 2477 Haskell Curryสังเกตเห็นว่าประเภทที่ใช้ในแคลคูลัสแลมบ์ดาแบบมีประเภทและในตรรกะเชิงผสมที่เทียบเท่ากัน นั้น เป็นไปตามรูปแบบเดียวกันกับสัจพจน์ในตรรกะเชิงประพจน์ยิ่งไปกว่านั้น สำหรับทุกการพิสูจน์ในตรรกะ จะมีฟังก์ชัน (เทอม) ที่ตรงกันในภาษาโปรแกรม ตัวอย่างหนึ่งของ Curry คือความสอดคล้องกันระหว่างแคลคูลัสแลมบ์ดาแบบมีประเภทอย่างง่ายกับตรรกะเชิงสัญชาตญาณ[ 2 ]
ตรรกศาสตร์ภาคแสดงเป็นส่วนขยายของตรรกศาสตร์เชิงประพจน์ โดยเพิ่มตัวบ่งปริมาณHowardและde Bruijnได้ขยายแคลคูลัสแลมบ์ดาเพื่อให้เข้ากับตรรกศาสตร์ที่ทรงพลังยิ่งขึ้นนี้โดยการสร้างประเภทสำหรับฟังก์ชันที่ขึ้นอยู่ ซึ่งสอดคล้องกับ "สำหรับทั้งหมด" และคู่ที่ขึ้นอยู่ ซึ่งสอดคล้องกับ "มีอยู่" [ 3 ]
ด้วยเหตุนี้ และจากผลงานอื่นๆ ของฮาวาร์ด แนวคิดเรื่องข้อเสนอในฐานะประเภท จึงถูกเรียกว่า การสอดคล้องกันระหว่างเคอร์รีและฮาวาร์ด (Curry–Howard correspondence )
คำจำกัดความอย่างเป็นทางการ
ในทฤษฎีประเภทแบบพึ่งพา (dependent type theory) ประเภทแบบพึ่งพาคือประเภทที่ข้อกำหนดอาจเปลี่ยนแปลงไปตามค่า และสามารถมองได้ว่าคล้ายคลึงกับตระกูลของเซตที่มีดัชนี ให้ แทนเอกภพของประเภท และเขียนเพื่อระบุว่าเป็นประเภทในสำหรับเทอมของประเภทเขียนตระกูลของประเภทแบบพึ่งพาบนเขียนซึ่งหมายความว่าสำหรับแต่ละเทอมตระกูลจะกำหนดประเภทดังนั้น เมื่อกำหนดและนิพจน์จะหมายถึงประเภทที่ขึ้นอยู่กับค่าเฉพาะนั้นในศัพท์เฉพาะมาตรฐาน จะอธิบายสิ่งนี้โดยการกล่าวว่าประเภทเปลี่ยนแปลงไปตาม
ประเภท Π
ฟังก์ชันที่มีประเภทของค่าส่งคืนแปรผันตามอาร์กิวเมนต์ (กล่าวคือไม่มีโคโดเมน คงที่ ) เรียกว่าฟังก์ชันขึ้นอยู่และประเภทของฟังก์ชันนี้เรียกว่าประเภทผลคูณขึ้นอยู่ประเภทพาย ( ประเภทΠ ) หรือประเภทฟังก์ชันขึ้นอยู่ [ 4 ] จากตระกูลของประเภทเราสามารถสร้างประเภทของฟังก์ชันขึ้นอยู่ซึ่งเทอมต่างๆ เป็นฟังก์ชันที่รับเทอมและส่งคืนเทอมในสำหรับตัวอย่างนี้ ประเภทฟังก์ชันขึ้นอยู่มักจะเขียนเป็น หรือ
ถ้าเป็นฟังก์ชันคงที่ ประเภทผลคูณแบบขึ้นอยู่ที่สอดคล้องกันจะเทียบเท่ากับประเภทฟังก์ชัน ธรรมดา นั่นคือมีค่าเท่ากันโดยพิจารณาจากเมื่อไม่ขึ้นอยู่กับ
ชื่อ 'Π-type' มาจากแนวคิดที่ว่าสิ่งเหล่านี้สามารถมองได้ว่าเป็นผลคูณคาร์ทีเซียน ของประเภทต่างๆ นอกจาก นี้ Π-type ยังสามารถเข้าใจได้ว่าเป็นแบบจำลองของตัวบ่งปริมาณสากล
ตัวอย่างเช่น ถ้าเราเขียนสำหรับ ทูเปิล nตัวของจำนวนจริงแล้วจะเป็นประเภทของฟังก์ชันซึ่งเมื่อกำหนดจำนวนธรรมชาติnจะส่งคืนทูเปิลของจำนวนจริงที่มีขนาดnพื้นที่ฟังก์ชันปกติเกิดขึ้นเป็นกรณีพิเศษเมื่อประเภทของช่วงไม่ขึ้นอยู่กับอินพุต เช่นคือประเภทของฟังก์ชันจากจำนวนธรรมชาติไปยังจำนวนจริง ซึ่งเขียนเป็นในแคลคูลัสแลมบ์ดาแบบมีประเภท
เพื่อให้ได้ตัวอย่างที่ชัดเจนยิ่งขึ้น สมมติว่าเป็นชนิดของจำนวนเต็มที่ไม่ติดลบตั้งแต่ 0 ถึง 255 (จำนวนที่พอดีกับ 8 บิตหรือ 1 ไบต์) และสำหรับแล้วจะกลายเป็นผลคูณของ
ประเภท Σ
คู่ตรงข้ามของประเภทผลคูณแบบพึ่งพาคือประเภทคู่แบบพึ่งพาประเภท ผลรวม แบบพึ่งพาประเภทซิกมาหรือ (อย่างสับสน) ประเภทผลคูณแบบพึ่งพา [ 4 ] ประเภทซิกมายังสามารถเข้าใจได้ว่าเป็นตัวบ่งชี้ปริมาณเชิงมีอยู่จริงจากตัวอย่างข้างต้น หากในเอกภพของประเภทมีประเภทและตระกูลของประเภทแล้วจะมีประเภทคู่แบบพึ่งพา(สัญลักษณ์ทางเลือกจะคล้ายกับ ประเภท Π )
ประเภทคู่ที่ขึ้นอยู่กันจะรวบรวมแนวคิดของคู่ลำดับที่ประเภทของพจน์ที่สองขึ้นอยู่กับค่าของพจน์แรก ถ้าแล้วและถ้าเป็นฟังก์ชันคงที่ ประเภทคู่ที่ขึ้นอยู่กันจะกลายเป็น (ถือว่าเท่ากับ) ประเภทผลคูณนั่นคือ ผลคูณคาร์ทีเซียนธรรมดา[ 4 ]
สำหรับตัวอย่างที่เป็นรูปธรรมมากขึ้น โดยกำหนดให้ เป็นจำนวนเต็มที่ไม่ติดลบตั้งแต่ 0 ถึง 255 และให้เท่ากับสำหรับค่า 256 ที่กำหนดขึ้น เอง ก็จะ ได้ผลลัพธ์เป็น ผล รวม
ตัวอย่างเช่น การวัดปริมาณเชิงการดำรงอยู่
ให้เป็นชนิดข้อมูลบางประเภท และให้โดยความสัมพันธ์แบบเคอร์รี-ฮาวาร์ดสามารถตีความได้ว่าเป็น述语เชิงตรรกะ ในแง่ของสำหรับค่า ที่กำหนดให้ การที่ ชนิดข้อมูล นั้น มีอยู่หรือไม่ บ่งชี้ว่า สอดคล้องกับ述语นี้หรือไม่ ความสัมพันธ์นี้สามารถขยายไปสู่การกำหนดปริมาณเชิงมีอยู่และคู่ที่ขึ้นอยู่กันได้ กล่าวคือ ข้อเสนอจะเป็นจริงก็ต่อเมื่อชนิดข้อมูลนั้นมีอยู่
ตัวอย่างเช่นน้อยกว่าหรือเท่ากับก็ต่อเมื่อมีจำนวนธรรมชาติอีกจำนวนหนึ่ง ที่ทำให้ เป็น เช่นนั้นในตรรกศาสตร์ ข้อความนี้ถูกบันทึกไว้โดยการกำหนดปริมาณเชิงมีอยู่ (existential quantification):
ข้อเสนอแนะนี้สอดคล้องกับประเภทคู่ที่ขึ้นอยู่กัน:
กล่าวคือ การพิสูจน์ข้อความที่ว่า น้อยกว่าหรือเท่ากับคือคู่ที่ประกอบด้วยจำนวนที่ไม่เป็นลบซึ่งเป็นผลต่างระหว่างและและการพิสูจน์ความเท่าเทียมกัน
ระบบของลูกบาศก์แลมบ์ดา
Henk Barendregtได้พัฒนาlambda cubeขึ้นมาเพื่อใช้ในการจัดประเภทระบบประเภทตามแกนสามแกน มุมทั้งแปดของแผนภาพรูปทรงลูกบาศก์ที่ได้นั้นแต่ละมุมจะสอดคล้องกับระบบประเภทหนึ่งๆ โดยที่แคลคูลัสแลมบ์ดาแบบกำหนดประเภทอย่างง่ายจะอยู่ในมุมที่มีการแสดงออกน้อยที่สุด และแคลคูลัสของการสร้างจะอยู่ในมุมที่มีการแสดงออกมากที่สุด แกนทั้งสามของลูกบาศก์สอดคล้องกับการเพิ่มเติมที่แตกต่างกันสามแบบของแคลคูลัสแลมบ์ดาแบบกำหนดประเภทอย่างง่าย ได้แก่ การเพิ่มประเภทที่ขึ้นอยู่กัน การเพิ่มพหุรูป และการเพิ่ม ตัวสร้างประเภท ที่มีชนิด ที่สูงกว่า (เช่น ฟังก์ชันจากประเภทหนึ่งไปยังอีกประเภทหนึ่ง) lambda cube ได้รับการขยายความเพิ่มเติมโดยระบบประเภทบริสุทธิ์
ทฤษฎีประเภทพึ่งพาอันดับแรก
ระบบของประเภทพึ่งพาอันดับแรกบริสุทธิ์ ซึ่งสอดคล้องกับกรอบตรรกะLF นั้นได้มาจากการขยายประเภทพื้นที่ฟังก์ชันของแคลคูลัสแลมบ์ดาแบบง่ายไปสู่ประเภทผลคูณพึ่งพา
ทฤษฎีประเภทพึ่งพาอันดับสอง
ระบบของประเภทพึ่งพาอันดับสองได้มาจากการอนุญาตให้มีการกำหนดปริมาณเหนือตัวสร้างประเภท ในทฤษฎีนี้ ตัวดำเนินการผลคูณแบบพึ่งพาครอบคลุมทั้งตัวดำเนินการของแคลคูลัสแลมบ์ดาแบบง่าย และตัวผูกของระบบ F
แคลคูลัสแลมบ์ดาโพลีมอร์ฟิกแบบพึ่งพาลำดับสูงกว่า
ระบบลำดับสูงกว่าขยายไปสู่รูปแบบนามธรรมทั้งสี่รูปแบบจากลูกบาศก์แลมบ์ดาได้แก่ ฟังก์ชันจากเทอมไปยังเทอม ประเภทไปยังประเภท เทอมไปยังประเภท และประเภทไปยังเทอม ระบบนี้สอดคล้องกับแคลคูลัสของการสร้างซึ่งอนุพันธ์ของมัน คือแคลคูลัสของการสร้างแบบอุปนัยเป็นระบบพื้นฐานของ Rocq
ภาษาโปรแกรมและตรรกะแบบพร้อมกัน
ความสัมพันธ์แบบ Curry–Howard บ่งชี้ว่าสามารถสร้างประเภทข้อมูลที่แสดงคุณสมบัติทางคณิตศาสตร์ที่ซับซ้อนได้ตามอำเภอใจ หากผู้ใช้สามารถพิสูจน์ได้อย่างสร้างสรรค์ว่าประเภทข้อมูลนั้นมีอยู่จริง (กล่าวคือ ค่าของประเภทข้อมูลนั้นมีอยู่) คอมไพเลอร์ก็จะสามารถตรวจสอบการพิสูจน์และแปลงเป็นโค้ดคอมพิวเตอร์ที่สามารถทำงานได้ ซึ่งจะคำนวณค่าโดยการดำเนินการตามการสร้างนั้น คุณสมบัติการตรวจสอบการพิสูจน์ทำให้ภาษาที่มีประเภทข้อมูลแบบพึ่งพาเกี่ยวข้องอย่างใกล้ชิดกับตัวช่วยพิสูจน์ด้านการสร้างโค้ดเป็นแนวทางที่มีประสิทธิภาพสำหรับการตรวจสอบโปรแกรม อย่างเป็นทางการ และโค้ดที่พิสูจน์ได้เนื่องจากโค้ดนั้นได้มาจากหลักฐานทางคณิตศาสตร์ที่ได้รับการตรวจสอบโดยกลไกโดยตรง
การเปรียบเทียบภาษาที่มีประเภทที่ขึ้นอยู่กัน
| ภาษา | พัฒนาอย่างต่อเนื่อง | กระบวนทัศน์[ก] | กลยุทธ์ | เงื่อนไขการพิสูจน์ | การตรวจสอบการสิ้นสุด | ประเภทต่างๆ อาจขึ้นอยู่กับ[ b ] | จักรวาล | หลักฐานไม่เกี่ยวข้อง | การดึงโปรแกรม | การสกัดจะลบคำที่ไม่เกี่ยวข้องออกไป |
|---|---|---|---|---|---|---|---|---|---|---|
| อักดา | ใช่[ 5 ] | ใช้งานได้จริงอย่างเดียว | น้อย/จำกัด[ c ] | ใช่ | ใช่ (ไม่บังคับ) | เงื่อนไขใดๆ | ใช่ (ไม่บังคับ) [ d ] | ข้อโต้แย้งที่ไม่เกี่ยวข้องกับการพิสูจน์[ 7 ]ข้อเสนอประพจน์ที่ไม่เกี่ยวข้องกับการพิสูจน์[ 8 ] | ฮัสเคลล์ , JavaScript | ใช่[ 7 ] |
| เอทีเอส | ใช่[ 9 ] | เชิงฟังก์ชัน / เชิงบังคับ | หมายเลข[ 10 ] | ใช่ | ใช่ | เงื่อนไขคงที่[ 11 ] | ? | ใช่ | ใช่ | ใช่ |
| ไคเยนน์ | เลขที่ | ใช้งานได้จริงอย่างเดียว | เลขที่ | ใช่ | เลขที่ | เงื่อนไขใดๆ | เลขที่ | เลขที่ | ? | ? |
| กัลลินา( ร็อค (เดิมชื่อค็อก )) | ใช่[ 12 ] | ใช้งานได้จริงอย่างเดียว | ใช่ | ใช่ | ใช่ | เงื่อนไขใดๆ | ใช่[ e ] | ใช่[ 13 ] | Haskell , Scheme , OCaml | ใช่ |
| ML ที่พึ่งพา | ไม่[ f ] | ? | ? | ใช่ | ? | จำนวนธรรมชาติ | ? | ? | ? | ? |
| เอฟ* | ใช่[ 14 ] | ใช้งานได้จริงและจำเป็น | ใช่[ 15 ] | ใช่ | ใช่ (ไม่บังคับ) | เงื่อนไขบริสุทธิ์ใดๆ | ใช่ | ใช่ | OCaml , F#และC | ใช่ |
| คุรุ | หมายเลข[ 16 ] | ฟังก์ชันล้วนๆ[ 17 ] | hypjoin [ 18 ] | ใช่[ 17 ] | ใช่ | เงื่อนไขใดๆ | เลขที่ | ใช่ | คาร์ราเวย์ | ใช่ |
| อิดริส | ใช่[ 19 ] | ฟังก์ชันล้วนๆ[ 20 ] | ใช่ | ใช่ | ใช่ (ไม่บังคับ) | เงื่อนไขใดๆ | ใช่ | เลขที่ | ใช่ | ใช่ |
| เอียง | ใช่ | ใช้งานได้จริงอย่างเดียว | ใช่ | ใช่ | ใช่ | เงื่อนไขใดๆ | ใช่ | ใช่ | ใช่ | ใช่ |
| มาติตา | ใช่[ 21 ] | ใช้งานได้จริงอย่างเดียว | ใช่ | ใช่ | ใช่ | เงื่อนไขใดๆ | ใช่ | ใช่ | โอแคมล์ | ใช่ |
| นูพีอาร์แอล | ใช่ | ใช้งานได้จริงอย่างเดียว | ใช่ | ใช่ | ใช่ | เงื่อนไขใดๆ | ใช่ | ? | ใช่ | ? |
| พีวีเอส | ใช่ | ? | ใช่ | ? | ? | ? | ? | ? | ? | ? |
| Sage เก็บถาวรไว้เมื่อวันที่ 9 พฤศจิกายน 2020 ที่Wayback Machine | ไม่[ g ] | ใช้งานได้จริงอย่างเดียว | เลขที่ | เลขที่ | เลขที่ | ? | เลขที่ | ? | ? | ? |
| สิบสอง | ใช่ | การเขียนโปรแกรมเชิงตรรกะ | ? | ใช่ | ใช่ (ไม่บังคับ) | เงื่อนไขใดๆ (LF) | เลขที่ | เลขที่ | ? | ? |
- ^นี่หมายถึง ภาษา หลักไม่ใช่กลยุทธ์ใดๆ (ขั้นตอนการพิสูจน์ทฤษฎีบท ) หรือภาษาย่อยสำหรับการสร้างโค้ด
- ^ขึ้นอยู่กับข้อจำกัดทางความหมาย เช่น ข้อจำกัดของเอกภพ
- ^ตัวแก้วงแหวน [ 6 ]
- ^จักรวาลเสริม, ความหลากหลายทางรูปแบบของจักรวาลเสริม และจักรวาลที่ระบุอย่างชัดเจนเสริม
- ^จักรวาล ข้อจำกัดของจักรวาลที่อนุมานโดยอัตโนมัติ (ไม่เหมือนกับ polymorphism ของจักรวาลใน Agda) และการพิมพ์ข้อจำกัดของจักรวาลอย่างชัดเจน (ไม่บังคับ)
- ^ถูกแทนที่ด้วย ATS แล้ว
- ^เอกสาร Sage ฉบับล่าสุดและภาพรวมโค้ดฉบับล่าสุดมีวันที่ระบุไว้คือปี 2006
ดูเพิ่มเติม
อ่านเพิ่มเติม
- Martin-Löf, Per (1984). ทฤษฎีประเภทเชิงสัญชาตญาณ (PDF) . Bibliopolis.
- นอร์ดสตรอม, เบงต์; ปีเตอร์สสัน, เคนท์; สมิธ, แจน เอ็ม. (1990) การเขียนโปรแกรมในทฤษฎีประเภทของ Martin-Löf: An Introduction สำนักพิมพ์มหาวิทยาลัยออกซ์ฟอร์ด. ไอเอสบีเอ็น 9780198538141.
- Barendregt, H. (1992). "Lambda calculi with types"ใน Abramsky, S.; Gabbay, D.; Maibaum, T. (บรรณาธิการ). Handbook of Logic in Computer Science . Oxford Science Publications . doi : 10.1017/CBO9781139032636 . hdl : 2066/17231 .
- แบรนด์ล, เฮลมุท (2022). แคลคูลัสของการสร้าง
- McBride, Conor ; McKinna, James (มกราคม 2547). "มุมมองจากด้านซ้าย" . วารสารการเขียนโปรแกรมเชิงฟังก์ชัน . 14 (1): 69– 111. doi : 10.1017/s0956796803004829 . S2CID 6232997 .
- Altenkirch, Thorsten ; McBride, Conor ; McKinna, James (2006). "เหตุใดประเภทที่ขึ้นอยู่จึงมีความสำคัญ" (PDF) . รายงานการประชุมสัมมนา ACM SIGPLAN-SIGACT ครั้งที่ 33 ว่าด้วยหลักการของภาษาโปรแกรม POPL 2006, ชาร์ลสตัน, เซาท์แคโรไลนา, สหรัฐอเมริกา, 11-13 มกราคม . ISBN 1-59593-027-2.
- Norell, Ulf (กันยายน 2550). สู่ภาษาโปรแกรมเชิงปฏิบัติบนพื้นฐานของทฤษฎีประเภทที่ขึ้นอยู่กับตัวแปร (PDF) (ปริญญาเอก). โกเตบอร์ก สวีเดน: ภาควิชาวิทยาการคอมพิวเตอร์และวิศวกรรมศาสตร์ มหาวิทยาลัยเทคโนโลยี Chalmers. ISBN 978-91-7291-996-9.
- Oury, Nicolas; Swierstra, Wouter (2008). "พลังของ Pi" (PDF) . ICFP '08: รายงานการประชุมนานาชาติ ACM SIGPLAN ครั้งที่ 13 ว่าด้วยการเขียนโปรแกรมเชิงฟังก์ชัน . หน้า 39–50 . doi : 10.1145/1411204.1411213 . ISBN 9781595939197. S2CID 16176901 .
- นอเรลล์, อัลฟ์ (2009) "การเขียนโปรแกรมแบบพึ่งพาใน Agda" (PDF ) ใน Koopman, P.; พลาสไมเยอร์ ร.; Swierstra, D. (บรรณาธิการ). การเขียนโปรแกรมฟังก์ชั่นขั้นสูง เอเอฟ พี2551บันทึกการบรรยายทางวิทยาการคอมพิวเตอร์ ฉบับที่ 5832. สปริงเกอร์. หน้า 230– 266. ดอย : 10.1007/978-3-642-04652-0_5 . ไอเอสบีเอ็น 978-3-642-04651-3.
- Sitnikovski, Boro (2018). บทนำอย่างอ่อนโยนเกี่ยวกับประเภทพึ่งพาด้วย Idris . สำนักพิมพ์ Lean. ISBN 978-1723139413.
- McBride, Conor ; Nordvall-Forsberg, Fredrik (2022). "ระบบประเภทสำหรับโปรแกรมที่เคารพมิติ" (PDF) . เครื่องมือทางคณิตศาสตร์และการคำนวณขั้นสูงในการวัดและทดสอบ XII . ความก้าวหน้าทางคณิตศาสตร์สำหรับวิทยาศาสตร์ประยุกต์. World Scientific. หน้า 331– 345. doi : 10.1142/9789811242380_0020 . ISBN 9789811242380. S2CID 243831207 .
ลิงก์ภายนอก
- การเขียนโปรแกรมแบบกำหนดประเภทตามตัวแปร 2008
- การเขียนโปรแกรมแบบกำหนดประเภทข้อมูลโดยอาศัยความสัมพันธ์ 2010
- การเขียนโปรแกรมแบบกำหนดประเภทตามการพึ่งพา 2011
- "Dependent type"ใน Haskell Wiki
- ทฤษฎีประเภทที่ขึ้นอยู่กับที่n Lab
- ประเภทที่ขึ้นอยู่กับที่ห้องปฏิบัติการn
- ประเภทผลิตภัณฑ์ที่ขึ้นอยู่กับที่ห้องปฏิบัติการn
- ประเภทผลรวมที่ขึ้นอยู่กันที่n Lab
- ผลิตภัณฑ์ที่ขึ้นอยู่กับที่ห้องปฏิบัติการn
- ผลรวมที่ขึ้นอยู่กันที่n Lab
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ประเภทพึ่งพา
ในวิทยาการคอมพิวเตอร์และตรรกศาสตร์ประเภท ที่ขึ้นอยู่กับค่า (dependent type)คือประเภทที่นิยามของมันขึ้นอยู่กับค่า มันเป็นคุณลักษณะที่ทับซ้อนกันระหว่างทฤษฎีประเภท (type...
ประวัติศาสตร์
ในปี พ.ศ. 2477 Haskell Curry สังเกตเห็นว่าประเภทที่ใช้ใน แคลคูลัสแลมบ์ดาแบบมีประเภท และใน ตรรกะเชิงผสมที่เทียบเท่ากัน นั้น เป็นไปตามรูปแบบเดียวกันกับสัจพจน์ใน ตรรกะเชิงประพจน์ ยิ่งไปกว่านั้น สำหรับทุกการพิสูจน์ในตรรกะ จะมีฟังก์ชัน (เทอม)...
คำจำกัดความอย่างเป็นทางการ
ในทฤษฎีประเภทแบบพึ่งพา (dependent type theory) ประเภทแบบพึ่งพาคือประเภทที่ข้อกำหนดอาจเปลี่ยนแปลงไปตามค่า และสามารถมองได้ว่าคล้ายคลึงกับตระกูล ของเซตที่มีดัชนี ให้ แทน เอกภพของประเภท และเขียนเพื่อระบุว่าเป็นประเภทในสำหรับเทอมของประเภทเขียน ตระกูลของประเภทแบบ...
ประเภท Π
ฟังก์ชันที่มีประเภทของค่าส่งคืนแปรผันตามอาร์กิวเมนต์ (กล่าวคือไม่มี โคโดเมน คงที่ ) เรียกว่า ฟังก์ชันขึ้นอยู่ และประเภทของฟังก์ชันนี้เรียกว่า ประเภทผลคูณขึ้นอยู่ ประเภท พาย ( ประเภท Π ) หรือ ประเภทฟังก์ชันขึ้นอยู่ [ 4 ] จาก...