การอนุมานแบบอิงข้อ จำกัด พร้อมข้อมูลพีชคณิต


11

ฉันกำลังทำงานกับภาษาที่ใช้แสดงออกของลำดับวงศ์ตระกูล ML ดังนั้นจึงจำเป็นต้องมีการอนุมานแบบตามธรรมชาติ> :)

ตอนนี้ฉันกำลังพยายามที่จะขยายการแก้ปัญหาตามข้อ จำกัด ไปสู่ปัญหาประเภทอนุมานตามการใช้งานง่าย ๆ ใน EOPL (Friedman และ Wand) แต่พวกเขามีประเภทข้อมูลพีชคณิตขั้นตอนที่สวยงาม

สิ่งที่ฉันมีจนถึงตอนนี้ทำงานได้อย่างราบรื่น; ถ้าการแสดงออกeคือa + b, e : Int, และa : Int b : Intถ้าeเป็นการแข่งขัน

match n with
  | 0 -> 1
  | n' -> n' * fac(n - 1)`, 

ฉันถูกต้องสามารถอนุมานได้ว่าt(e) = t(the whole match expression), t(n) = t(0) = t(n'), t(match) = t(1) = t(n' * fac(n - 1)และอื่น ๆ ...

แต่ฉันไม่แน่ใจมากเมื่อมันมาถึงประเภทข้อมูลเกี่ยวกับพีชคณิต สมมติว่าฟังก์ชั่นเช่นตัวกรอง:

let filter pred list =
  match list with
    | Empty -> Empty
    | Cons(e, ls') when pred e -> Cons (e, filter ls')
    | Cons(_, ls') -> filter 

สำหรับรายการประเภทที่จะยังคง polymorphic a * a list -> a listจุดด้อยความต้องการที่จะเป็นชนิด ดังนั้นในการสร้างข้อ จำกัด เหล่านี้ฉันต้องหาตัวสร้างพีชคณิตประเภทนี้อย่างชัดเจน - ปัญหาที่ฉันมีตอนนี้คือ 'บริบทความอ่อนไหว' ของการใช้ประโยชน์หลายอย่างของตัวสร้างพีชคณิต - ฉันจะแสดงในสมการข้อ จำกัด ของฉันได้อย่างไรaใน แต่ละกรณีจะต้องเหมือนกันหรือไม่

ฉันมีปัญหาในการหาคำตอบทั่วไปเกี่ยวกับเรื่องนี้และฉันไม่สามารถหาวรรณกรรมจำนวนมากเกี่ยวกับเรื่องนี้ เมื่อใดก็ตามที่ฉันพบสิ่งที่คล้ายกัน - ภาษาที่ใช้แสดงออกซึ่งมีข้อสรุปตามประเภทของข้อ จำกัด - พวกเขาหยุดสั้น ๆ เพียงแค่ประเภทข้อมูลเกี่ยวกับพีชคณิตและ polymorphism

ข้อมูลใด ๆ ที่ชื่นชมมาก!


@ ซื้อฉันไม่ได้ตั้งใจฟังเสียงเนรคุณ แต่ฉันไม่ได้มองหาวิธีแก้ปัญหาแบบปิด - คุณมีคำแนะนำหรือไม่? เอกสารที่มีอยู่ส่วนใหญ่ที่ฉันสามารถหาได้ (เช่นเอกสาร INRIA ใน ML, OCaml ... ) นั้นกว้างขวางกว่าสิ่งที่ฉันต้องการ (และฉันสามารถเข้าใจได้)
กริช

ฉันจะเริ่มด้วยบทสรุปในATTAPLฉันคิดว่าพวกเขาพูดถึงทุกสิ่งที่คุณต้องการในระดับที่สามารถเข้าถึงได้
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

@Gilles ฉันคิดว่า ATTAPL เป็นหนังสือ PL คลาสสิกเพียงเล่มเดียวที่ฉันไม่มีในชั้นวางหนังสือ: P แต่ขอบคุณฉันจะดูวันจันทร์ฉันนั่งบนพื้นที่ Uni ซึ่งมี 10 เล่มกระจายอยู่ทั่วออฟฟิศ: )
Kris

@Kris คุณเคยพบทรัพยากรที่สามารถเข้าถึงปัญหานี้ได้หรือไม่? การติดตั้ง "mini ML" ของฉันติดอยู่ที่ปัญหานี้ ... ฉันคิดว่าฉันพบบทที่เกี่ยวข้องจาก ATTAPL ( pauillac.inria.fr/~fpottier/publis/emlti-final.pdf ) และอ่านส่วนที่เกี่ยวกับพีชคณิต ประเภทข้อมูล แต่ฉันเกรงว่ามันจะเป็นส่วนหัวของฉัน
michiakig

@spacemanaki ใช่ฉันพบตั้งแต่pdfs.semanticscholar.org/8983/…เป็นทรัพยากรที่ยอดเยี่ยมสำหรับสิ่งนี้
กริช

คำตอบ:


2

ดู: Mini MLโดยเฉพาะในส่วนการอนุมานประเภท

มีรหัสตัวอย่างใน F # สำหรับเครื่องมือวิเคราะห์คำที่สมบูรณ์ของภาษาที่ใช้งานง่าย ที่สำคัญยิ่งกว่าส่วนการอนุมานประเภทนั้นใช้อัลกอริทึม Hindley-Milner ซึ่งเป็นสิ่งที่พบในระบบการอนุมานประเภทส่วนใหญ่ ผู้เขียนยังมีลิงก์ไปยังเอกสารสำคัญอีกสองฉบับเพื่อช่วยในการทำความเข้าใจ Hindley-Milner; หนึ่งเป็นประเภทของการแนะนำระดับสูงและอื่น ๆ ที่เป็นกระดาษที่อธิบายถึงการใช้อัลกอริทึมในรหัส


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