“ เตรียมพร้อม” ลบเกิดขึ้นในความหมายของประเภทอุปนัยไม่ดีอยู่เสมอ?


11

ฉันรู้ว่าเหตุการณ์เชิงลบบางอย่างอาจไม่ดีอย่างแน่นอน:

data False

data Bad a = C (Bad a -> a)

selfApp :: Bad a -> a
selfApp (x@(C x')) = x' x

yc :: (a -> a) -> a
yc f = selfApp $ C (\x -> f (selfApp x))

false :: False
false = yc id

อย่างไรก็ตามฉันไม่แน่ใจว่า:

  • ทุกประเภทอุปนัยที่มีเหตุการณ์เชิงลบสามารถเปิดผิด;

  • ถ้าเป็นเช่นนั้นมีวิธีการทางกลที่รู้จักในการทำเช่นนั้น;

ตัวอย่างเช่นฉันได้พยายามต่อสู้เพื่อทำให้ประเภทนี้ผิด:

type Not a = a -> False

data Bad2 a = C2 (Bad2 (Not a) -> a)

ตัวชี้ไปยังวรรณกรรมในเรื่องนี้จะได้รับการชื่นชม


1
Coq นี้หรือไม่ Haskell? ทฤษฎีแบบหลอก? "ผิดพลาด" คุณหมายถึงอะไร
Dave Clarke

@DaveClarke ขออภัยรหัสคือ Haskell แต่ข้อกังวลคือเพิ่มเติมเกี่ยวกับภาษาเช่น Coq หรือ Agda ที่มีข้อห้ามเชิงลบเกิดขึ้น โดย "ผิดพลาด" ฉันหมายถึงความสามารถในการเขียนคำที่แตกต่างดังนั้นฉันจึงสามารถมีชีวิตอยู่เท็จได้ในแบบของฉันใน Haskell
Ptival

คำตอบ:


10

เหตุผลที่ห้ามไม่ให้เกิดเหตุการณ์ทางลบสามารถเข้าใจได้โดยการเปรียบเทียบกับทฤษฎีบท Knaster-Tarski ทฤษฎีนี้บอกว่า

ถ้าเป็น lattice ที่สมบูรณ์และf : L Lเป็นฟังก์ชัน monotone บนLดังนั้นชุดของจุดคงที่ของfก็เป็น lattice ที่สมบูรณ์เช่นกัน โดยเฉพาะอย่างยิ่งมีจุดน้อยคงμ และจุดคงที่ยิ่งใหญ่ที่สุดνLf:LLLfμfνf

Lpqqp

Ce:PQQQ

N=μα.1+α F:CCe:PQF(e):F(P)F(Q)FF(gf)=F(g)F(f)

μα.F(α)F

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

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

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

สิ่งนี้ก่อให้เกิดทฤษฎีประเภทที่อนุญาตให้เกิดเหตุการณ์เชิงลบในประเภทเรียกซ้ำได้ แต่เฉพาะเมื่อเกิดเหตุการณ์เชิงลบขึ้นภายใต้คอนสตรัคเตอร์ชนิดพิเศษ "guardedness" ความคิดนี้ได้รับการแนะนำให้รู้จักกับ Hiroshi Nakano และการเชื่อมโยงกับทฤษฎีบทของ Banach ถูกสร้างขึ้นด้วยตัวเองและ Nick Benton เช่นเดียวกับ Lars Birkedal และผู้เขียนร่วมของเขา


7

บางครั้งคุณสามารถแก้สมการซ้ำโดย "โชค"

A(A)A.
  1. AA

    AA1.
    1
  2. A()1

สรุป: มีสองโซลูชั่นประเภทที่ว่างเปล่า (ซึ่งคุณเรียกว่าFalse) ()และประเภทหน่วย

A(A2)2,
data Cow a = Moo ((a -> Bool) -> Bool)

A22AA22A

N22N.
2N22NInteger(Integer -> Bool) -> Bool

3

มันยากที่จะเพิ่มอะไรเข้าไปในคำอธิบายของ Andrej หรือ Neel แต่ฉันจะให้มันยิง ฉันจะพยายามพูดถึงมุมมองทางวากยสัมพันธ์มากกว่าพยายามที่จะเปิดเผยความหมายพื้นฐานเพราะคำอธิบายนั้นง่ายกว่าและฉันก็ให้คำตอบที่ตรงไปตรงมากับคำถามของคุณมากขึ้น

λ

การอ้างอิงที่สำคัญมีดังต่อไปนี้:

Mendler, N. (1991) ประเภทอุปนัยและข้อ จำกัด ประเภทในแคลคูลัสแลมบ์ดาอันดับสอง ฉันไม่พบข้อมูลอ้างอิงออนไลน์ฉันกลัว ข้อความและบทพิสูจน์สามารถดูได้ในวิทยานิพนธ์ระดับปริญญาเอกของ Nax (แนะนำให้อ่านอย่างละเอียด!)

Bad

Bad=BadA

A

λx:Bad.x x:BadA

และอื่น ๆ

(λx:Bad.x x) (λx:Bad.x x):A

Bad=F(Bad)
F(X)XF(X)

แน่นอนว่าคุณไม่ได้ทำงานกับประเภทที่กำหนดอย่างเท่าเทียมกัน แต่มีคอนสตรัคเตอร์เช่นคุณมี

data Bad = Pack (Bad -> A)

มากกว่าความเท่าเทียมที่เข้มงวด อย่างไรก็ตามคุณสามารถกำหนด

unpack :: Bad -> (Bad -> A)
unpack (Pack f) = f

ซึ่งเพียงพอสำหรับผลลัพธ์นี้เพื่อดำเนินการต่อ:

 (\x:Bad -> unpack x x) (Pack (\x:Bad -> unpack x x))

A


ในตัวอย่างที่สองของคุณสิ่งต่าง ๆ มีความยุ่งยากมากขึ้นในขณะที่คุณมีบางสิ่งตามแนวของ

Bad=BadA

BadBadBad aBad (Not a)

type Not a = a -> False

กับ

data Not a = Not a

มันจะแก้ไขได้อย่างง่ายดายหาก Haskell อนุญาตให้ใช้คำจำกัดความประเภทดังกล่าว:

type Acc = Not Acc

ในกรณีนี้คุณสามารถสร้าง combinator แบบวนซ้ำในลักษณะเดียวกับก่อนหน้านี้ ฉันสงสัยว่าคุณสามารถใช้สิ่งก่อสร้างที่คล้ายกัน (แต่ซับซ้อนกว่า) โดยใช้

data Acc = D (Not Acc)

ปัญหาที่นี่คือการสร้างมอร์ฟ

Bad Acc <-> Bad (Not Acc)

คุณต้องจัดการกับความแปรปรวนแบบผสม

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