มีแนวคิดที่ดีเกี่ยวกับการไม่เลิกและการพิสูจน์ในทฤษฎีประเภทหรือไม่?


10

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

โดยเฉพาะสิ่งที่ฉันกำลังมองหาคือวิธีที่ได้รับประเภทที่เป็นตัวแทนของการคำนวณที่ไม่สิ้นสุดของประเภท , T ( A )ควรมีแนวคิดของการพิสูจน์ว่าx : T ( A )ยุติประเภทH ( x )เช่นว่าได้รับx : T ( )และP : H ( x )เราสามารถสร้างระยะ~ x :AT(A)x:T(A)H(x)x:T(A)p:H(x)x~:A

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


3
fAB dom(f)xAdom(f)(x)fx

3
คุณกำลังมองหาMonad ที่ล่าช้าหรือไม่?
Andrej Bauer

AB

คำตอบ:


11

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

ฉันจะไม่ทำแบบสำรวจที่สมบูรณ์ที่นี่ แต่ฉันจะพยายามและชี้ไปที่แรงขับหลักของทิศทางที่แตกต่างกัน

  • F x yfxf(x)=yx(y,F x y)(¬y,F x y)

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

  • A

    codata Delay A =
    | Now : A -> Delay A
    | Later (Delay A)
    

    รหัสนี้กระแสอาจจะไม่มีที่สิ้นสุดของLaterราชสกุล ( "เห็บ" ของการคำนวณ) Now aอาจจะจบลงด้วยผล ไม่ใช่การเลิกจ้างเทียบเท่ากับการเป็นแบบทวิภาคีกับโปรแกรม

    loop = การวนซ้ำและการสิ้นสุดในภายหลังสามารถกำหนดได้โดยการสรุปของอุปนัยDelay A:

    data Terminates : Data A -> Prop =
    | Term_now : forall x, Terminates (Now x)
    | Term_later : forall d, Terminates d -> Terminates (Later d)
    

    ผมคิดว่า AGDA-istas มีจำนวนมากที่จะพูดเกี่ยวกับเรื่องนี้ซึ่งพวกเขาเรียกที่monad ลำเอียง (ดูเช่นDanielsson )

  • วิธี "แบบบางส่วน" : นี่เป็นการทดลองอีกเล็กน้อย (ทฤษฎียังคงทำงานอยู่) แต่มีทฤษฎีประเภทบางประเภทที่ได้รับการพัฒนาขึ้นเพื่อรับมือกับความจริงที่ว่ามีฟังก์ชั่นสองประเภทที่เราต้องการ เขียนในทฤษฎีประเภท: เงื่อนไขการพิสูจน์และโปรแกรม มันจะเปิดออกได้ยากที่จะได้รับเป็นทฤษฎีที่เหมาะสมของสิ่งเหล่านี้ (และรักษาความสอดคล้องของทฤษฎี) แต่พยายามอย่างจริงจังที่จะทำนี่โดยCasinghino et al,และความพยายามที่คล้ายกันโดยคิมเมล , et al

ฉันแน่ใจว่ามีวิธีการอื่นที่ฉันไม่ทราบและฉันจะมีความสุขถ้ามีคนต้องการทำรายการนี้

Π10

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


น่าสนใจขอบคุณสำหรับข้อมูล! ฉันเชื่อว่าวิธีทฤษฎีบางส่วนน่าจะใกล้เคียงที่สุดกับสิ่งที่ฉันกำลังมองหาและอย่างน้อยที่สุดกระดาษคิมเมลก็ดูเหมือนจะให้ในบางระดับโดยเฉพาะสิ่งที่ฉันกำลังมองหา (ดูกฎการพิมพ์สำหรับ "tcast" )
Nathan BeDell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.