Elementary Affine Logic สามารถใช้เป็นระบบประเภทหลักของภาษาการเขียนโปรแกรมในทางปฏิบัติได้หรือไม่?


9

Elementary Affine Logic เป็นระบบประเภทที่รวบรวมคลาสของ terms- ข้อกำหนดที่สามารถลดลงในเวลาประถม ยิ่งไปกว่านั้นคำที่สามารถพิมพ์ได้ EAL สามารถลดลงได้โดยใช้ชิ้นส่วนนามธรรมของอัลกอรึทึมของ Lamping ซึ่งเป็นสิ่งที่น่าสนใจเป็นพิเศษสำหรับฉัน

คำถามของฉันคือเราจะสร้างภาษาที่ใช้งานได้จริงโดยใช้ EAL เป็นระบบประเภทพื้นฐานได้อย่างไร นั่นคือส่วนขยายประเภทใด (การแก้ไขคะแนน, ความหลากหลาย, ชนิดพึ่งพา, ประเภทข้อมูล ฯลฯ ) สามารถสร้างให้กับระบบประเภทแกนกลางได้โดยไม่ส่งผลกระทบต่อลักษณะดังกล่าวและภาษาดังกล่าวสามารถใช้งานได้จริงหรือไม่ก็ตาม จำกัด ด้วยเหตุผลที่ฉันไม่ทราบ?


"Elementary Affine Logic เป็นระบบประเภทที่รวบรวมคลาสของ terms- ข้อกำหนดที่สามารถลดลงในเวลาประถม": นี่ไม่แน่ชัด EAL รวบรวมชุดย่อยที่เข้มงวดของλ-termsที่แสดงถึงฟังก์ชันพื้นฐาน (การเข้ารหัส wrt the Church) มันเป็นความจริงที่ฟังก์ชั่นระดับประถมศึกษาทั้งหมดได้รับการคุ้มครอง: สำหรับฟังก์ชั่นระดับประถมศึกษาแต่ละคนfมีการคำนวณ EAL อย่างน้อยหนึ่งคำ fแต่มักจะมีคำอื่น ๆ อีกมากมายที่เกี่ยวข้องกับการคำนวณขั้นตอนวิธีเบื้องต้น fซึ่งไม่ได้อยู่ใน EAL
Damiano Mazza

ว้าวใช่มั้ย นอกจากนี้เท่าที่ฉันเข้าใจมีเงื่อนไขที่สามารถลดลงได้ด้วยอัลกอริธึมนามธรรม แต่ไม่มีประเภท EAL ใช่มั้ย ดังนั้นในขณะที่เงื่อนไข EAL ทั้งหมดสามารถลดลงได้โดยไม่มี oracle แต่ก็ยังมีความไม่ตรงกันระหว่างอัลกอริธึมนามธรรมและ EAL @DamianoMazza
MaiaVictor

ใช่ที่ถูกต้อง.
Damiano Mazza

1
"อย่างไรก็ตามไม่มีใครห้ามไม่ให้คุณลองและดูว่าคุณจะได้อะไร!" - 3 ปีต่อมา: ใช่ไม่มีใครห้ามฉันเลยฉันก็ทำได้! docs.formality-lang.org ขอบคุณสำหรับความช่วยเหลือทั้งหมดของคุณ :)
21419

คำตอบ:


10

มีบางสิ่งที่คล้ายกันมาก แต่การใช้ตรรกะเลียนแบบแสง (LAL) แทน EAL นั้นได้พยายามเมื่อไม่กี่ปีก่อนโดย Baillot, Gaboardi และ Mogbil (คุณอาจพบกระดาษที่นี่ ) ฉันคิดว่างานของพวกเขาอาจจะทำให้ EAL ง่ายขึ้นซึ่งเป็นระบบเสรีมากขึ้น

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

สิ่งหนึ่งที่สำคัญคือใน EAL คุณอาจใช้จุดแก้ไขแบบกำหนดเอง (ดูตัวอย่างกระดาษนี้โดย Baillot) และกำหนดประเภทข้อมูลในลักษณะแบบเรียกซ้ำตามธรรมชาติ (เช่นlist A:=nil|A  list A) พร้อมกับคำจำกัดความระบบ F ที่เป็นธรรมชาติน้อยลง (จากมุมมองการเขียนโปรแกรม) อย่างไรก็ตามตามที่กล่าวไว้ข้างต้นเกี่ยวกับการทำให้เป็นมาตรฐานที่ไม่ได้พิมพ์ภาษาการเขียนโปรแกรมตาม EAL จะเป็นผลรวมเสมอซึ่งหมายความว่าคุณจะไม่มี combpointator fixpoint และการใช้ชนิดเรียกซ้ำนั้นไม่เป็นธรรมชาติอย่างที่คุณคาดหวัง ตัวอย่างเช่นใช้ตัวเลข Scott: โดยไม่ต้องมีคำจำกัดความซ้ำ (ที่กำหนดโดย combpoint ของ fixpoint) เป็นการยากที่จะแสดงสิ่งใดนอกเหนือจากการดำเนินการแบบคงที่ด้วยการแสดงจำนวนเต็มนี้ ดังนั้นคุณยังจะต้องใช้ตัวเลขของคริสตจักรในการทำซ้ำ (เช่นfor ลูป) โดยใช้สิ่งที่คุณจะได้รับในการ จำกัด การแบ่งชั้นพื้นฐานของ logics แบบเบา (ซึ่งให้คุณสมบัติความซับซ้อนของพวกมัน): คุณไม่สามารถทำซ้ำฟังก์ชันได้ NatNat ซึ่งตัวมันเองถูกกำหนดโดยการทำซ้ำ (Nat นี่คือประเภทของจำนวนเต็มของโบสถ์)

ตัวอย่าง: ในบางกรณี "การแฮ็คจำนวนเต็มของโบสถ์" เป็นไปได้ที่จะกำหนดใน EAL dbl:NatNat ดังนั้น dbl n_=2n_ โดยไม่ต้องใช้การทำซ้ำ จากนั้นคุณสามารถทำซ้ำdbl เพื่อกำหนดฟังก์ชันเลขชี้กำลัง expซึ่งไม่สามารถทำซ้ำได้เอง ดังนั้นภาษาการเขียนโปรแกรมใด ๆ ที่อิง EAL จะต้องมีกลไกบางอย่างที่ห้ามไม่ให้มีการทำซ้ำอย่างแน่นอน มันยากที่จะจินตนาการว่าข้อ จำกัด ดังกล่าวจะไม่ส่งผลในภาษาที่รู้สึกอึดอัดใจกับโปรแกรมเมอร์ อย่างไรก็ตามไม่มีใครห้ามไม่ให้คุณลองและดูว่าคุณจะได้อะไร!

ไม่ว่าในกรณีใดหากคุณสนใจในความสัมพันธ์ระหว่างการประเมินที่ดีที่สุด EAL และการใช้แสงน้อยโดยทั่วไปฉันขอแนะนำให้คุณดูเอกสารของ Coppolaตั้งแต่ต้นจนถึงกลางปี ​​2000

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