Curry-Howard และโปรแกรมจากบทพิสูจน์ที่ไม่สร้างสรรค์


29

นี่เป็นคำถามติดตาม

อะไรคือข้อแตกต่างระหว่างการพิสูจน์และโปรแกรม (หรือระหว่างข้อเสนอและประเภท)?

โปรแกรมอะไรจะสอดคล้องกับการที่ไม่สร้างสรรค์ (คลาสสิก) หลักฐานของแบบฟอร์มk T(e,k)¬k T(e,k) ? (สมมติว่าTเป็นความสัมพันธ์ที่สามารถตัดสินใจได้ที่น่าสนใจเช่นe th TM ไม่หยุดในขั้นตอนk )

(ps: ฉันกำลังโพสต์คำถามนี้ส่วนหนึ่งเพราะฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับความหมายของ Neel โดย " การแปล Godel-Gentzenเป็นการเปลี่ยนแปลงที่ต่อเนื่อง" ในความคิดเห็นของเขา )


2
คำตอบบางส่วนในหน้า 2 ของทั้งเอกสารประกอบการบรรยาย มันเป็นความลับเล็กน้อย ฉันจะพยายามขุดบางสิ่งให้สมบูรณ์ยิ่งขึ้น
Dave Clarke

ฉันใช้เวลานานกว่าที่วางแผนไว้เล็กน้อยในการเขียนคำตอบของฉันเนื่องจากฉันทำผิดพลาดในการตัดสินใจที่จะพิสูจน์สิ่งที่ฉันรู้มากกว่าที่จะยืนยันพวกเขา :)
Neel Krishnaswami

1
JSL ล่าสุดมีบทความนี้ สรุปสาระสำคัญคือเนื้อหาการคำนวณของการพิสูจน์แบบดั้งเดิมอาจขึ้นอยู่กับวิธีที่คุณเลือกที่จะแยกมันออกมา ฉันยังไม่ย่อยมัน แต่ฉันคิดว่าฉันจะโยนมันทิ้งไป
Mark Reitblatt

แต่คุณได้ระบุว่า T เป็นความสัมพันธ์ที่สามารถตัดสินใจได้ดังนั้นจึงเป็นไปตามที่มีข้อพิสูจน์เชิงสร้างสรรค์เกี่ยวกับข้อเสนอของคุณ Classical ตรรกะเป็นส่วนย่อยของตรรกะ intuitionistic และคุณระบุว่า T เป็นของส่วนย่อยนั้นโดยเรียกมันว่า decidable
โรมาโน

นกกระจิบนั่นคือสิ่งที่ฉันคิดในตอนแรกเช่นกัน! แต่ข้อเสนอ P ในตัวอย่าง P \ / ~ P ในคำถามถ้าปริมาณจริงทั้งหมด k, และการหาปริมาณของ T นี้ไม่จำเป็นต้องตัดสินใจได้
jbapple

คำตอบ:


25

ekT(e,k)

เพื่อความง่ายพิจารณาทฤษฎีบทคลาสสิกที่เทียบเท่า

ij(¬T(e,j)¬T(e,i))

ikT(e,k)¬T(e,i)¬T(e,i)i¬T(e,i)¬iT(e,i)¬T(e,i)j(¬T(e,j))jT(e,j)

ie

fi(¬T(e,f(i))¬T(e,i))

fjii=ii

ij¬(¬T(e,j)¬T(e,i))

f

i¬(¬T(e,f(i))¬T(e,i))

f=f(¬T(e,f(i))¬T(e,i))ii=i

i=f(0)T(e,f(0))i=0T(e,f(0))¬T(e,f(0))

ดังนั้นวิธีการตีความทฤษฎีบทคลาสสิกเช่น (1) คือการดูสูตรที่เท่าเทียมกัน (คลาสสิก) ซึ่งสามารถพิสูจน์ได้ในเชิงสร้างสรรค์ในกรณีของเรา (2)

ffifi

อีกจุดสำคัญคือคุณต้องการให้ข้อความจาก (1) ถึง (2) เป็น "แบบแยกส่วน" คือถ้า (1) ใช้เพื่อพิสูจน์ (1 ') จากนั้นจึงใช้การตีความ (2) ในลักษณะเดียวกัน เพื่อพิสูจน์การตีความของ (1 ') ให้พูด (2') การตีความทั้งหมดที่กล่าวมาข้างต้นทำเช่นนั้นรวมถึงการแปล Goedel-Gentzen


8
ยินดีต้อนรับ! เป็นเรื่องดีที่ได้เห็นนักทฤษฎีพิสูจน์ผู้เชี่ยวชาญที่นี่
Neel Krishnaswami

1
ขอบคุณเปาโลคำตอบของคุณได้อธิบายบางส่วนของภาพในปัญหาที่เกี่ยวข้องซึ่งฉันกำลังทำอยู่
Kaveh

17

มันค่อนข้างเป็นที่รู้จักกันดีว่าการคำนวณทางคณิตศาสตร์แบบคลาสสิกและแบบอสมการมีความเท่าเทียมกัน

ϕ

G()=¬¬G(ϕψ)=¬¬(G(ϕ)G(ψ))G()=¬G(¬ϕ)=¬G(ϕ)G(ϕψ)=¬(¬G(ϕ)¬G(ψ))G(x.ϕ)=x.¬¬G(ϕ)G(x.ϕ)=¬x.¬(G(ϕ))G(P)=¬¬P

G(ϕ)

G(ϕ)ϕ

,,,¬

A,B::=x.A(x)|AB|AB|¬A|¬¬P

และจากนั้นเราสามารถพิสูจน์ได้ว่าเป็นบทแทรก (โดยการเหนี่ยวนำใน ) ที่นั้นเป็นไปได้โดยสัญชาตญาณ ดังนั้นตอนนี้เราสามารถแสดงความสามารถในการสร้างความสมดุลของสูตรลบโดยทำการเหนี่ยวนำผ่านโครงสร้างของการพิสูจน์ (ใน, พูด, แคลคูลัสตามลำดับ) และใช้บทแทรกก่อนหน้าเพื่อจำลองกฎของตรงกลางที่แยกออกAG(A)A

คุณคิดอย่างไรเกี่ยวกับสิ่งนี้อย่างสังหรณ์ใจ?

  • ก่อนมุมมองหลักฐานทางทฤษฎี หากคุณดูที่กฎของแคลคูลัสที่ตามลำดับคุณจะเห็นว่าตรรกะคลาสสิกและปรีชาญาณที่แตกต่างกันอย่างจริงจังก็คือกฎสำหรับการแยกและการดำรงอยู่ ดังนั้นเราจึงใช้ข้อเท็จจริงนี้เพื่อแสดงให้เห็นว่าการพิสูจน์ในตรรกะหนึ่งของสูตรเหล่านี้สามารถแปลเป็นบทพิสูจน์ในอีกอันหนึ่งได้ นี้แสดงให้เห็นถึงวิธีการคิดของตรรกะที่สร้างสรรค์ในฐานะที่เป็นส่วนขยายของตรรกะคลาสสิกกับสอง connectives ใหม่และ\สิ่งที่เราเรียกว่า "การดำรงอยู่แบบคลาสสิก" และ "การแตกคลาสสิก" เป็นเพียงตัวย่อที่เกี่ยวข้องกับ , , and negation และเพื่อที่จะพูดคุยเกี่ยวกับการดำรงอยู่จริงที่เราต้องการเพื่อเชื่อมต่อใหม่

  • ประการที่สองมีมุมมองเชิงทอพอโลยี ตอนนี้แบบจำลองของตรรกะคลาสสิก (เป็นครอบครัวของชุด) เป็นพีชคณิตแบบบูล (เช่นครอบครัวของชุดย่อยปิดภายใต้สหภาพพลการแยกและเติมเต็ม) ปรากฎว่าแบบจำลองของตรรกะ intuitionsitic เป็นพื้นที่ทอพอโลยีกับข้อเสนอที่ถูกตีความว่าเป็นชุดเปิด การตีความหมายของการปฏิเสธคือการตกแต่งภายในของส่วนประกอบและจากนั้นมันง่ายที่จะแสดงให้เห็นว่าซึ่งหมายความว่าการปฏิเสธสองครั้งส่งเราไปสู่ ​​clopen ที่เล็กที่สุดซึ่งเปิดแต่ละ --- และ clopens เป็นพีชคณิตแบบบูล¬¬¬P=¬P

ตอนนี้ต้องขอบคุณ Curry-Howard เรารู้วิธีตีความข้อพิสูจน์ในตรรกะเชิงปรีชาญาณว่าเป็นโปรแกรมที่ใช้งานได้ ดังนั้นคำตอบเดียวที่เป็นไปได้ (แต่ไม่ใช่คำตอบเดียว) สำหรับคำถามที่ว่า "อะไรคือเนื้อหาเชิงสร้างสรรค์ของการพิสูจน์แบบดั้งเดิม" คือต่อไปนี้:

เนื้อหาการคำนวณของการพิสูจน์แบบดั้งเดิมคือสิ่งที่เนื้อหาการคำนวณของการแปลของการพิสูจน์ของมัน (ตามการแปลเชิงลบ) คือ

ดังนั้นขอให้ดูที่การแปลของ(A)) ดังนั้นสิ่งนี้จึงบอกว่าเนื้อหาที่สร้างสรรค์ของตรงกลางที่ถูกแยกออกนั้นเหมือนกับที่บอกว่าไม่ใช่ในกรณีที่และ hold - นั่นคือไม่ใช่การควบคุม ดังนั้นในแง่นี้ไม่มีเนื้อหาการคำนวณตามกฎหมายของคนกลางที่ได้รับการยกเว้นG(A¬A)=¬(¬G(A)¬¬G(A))¬P¬¬P

หากต้องการดูว่ามันคืออะไรเป็นรูปธรรมเรียกว่าสร้างสรรค์ปฏิเสธถูกกำหนดให้เป็น\ ดังนั้นสูตรนี้เป็น\ รหัส Ocaml บิตต่อไปนี้จะอธิบาย:¬A==A((G(A))((G(A))))

type bot = Void of bot
type 'a not = 'a -> bot

let excluded_middle : ('a not * 'a not not) not = fun (u, k) -> k u 

นั่นคือถ้าคุณไม่ได้ A และไม่ใช่ A คุณก็สามารถผ่านการคัดค้านครั้งแรกไปยังวินาทีเพื่อรับความขัดแย้งที่คุณต้องการ

ทีนี้การแปลงรูปแบบผ่านคืออะไร?

  • ความต่อเนื่องของ typeคือสิ่งที่รับค่าของ typeและคำนวณคำตอบสุดท้ายจากมันττ
  • ใช้การต่อเนื่องเพื่อจำลองบริบทของโปรแกรม นั่นคือเราอาจจะมีระยะที่การประเมินเป็นส่วนหนึ่งของโปรแกรมมีขนาดใหญ่มาก5] ทุกสิ่งที่อยู่รอบ ๆ มันจะเป็นผลมาจากการคำนวณและคำนวณคำตอบสุดท้าย3+5C[3+5]3+5
  • ดังนั้นคุณสามารถนึกถึงความต่อเนื่องของ typeเป็นฟังก์ชั่นโดยที่เป็นประเภทของคำตอบτταα
  • ดังนั้นหากคุณมีโปรแกรมประเภทเราสามารถ "แปลง CPS" ได้โดยการหาคำศัพท์ประเภทซึ่งจะจบลงด้วยสิ่งใดก็ตามที่คำนวณไป ความต่อเนื่องของมัน (โดยทั่วไปจะทำให้การควบคุมโฟลว์ชัดเจน)eτ(τα)αe
  • แต่เราต้องทำสิ่งนี้ทางพันธุกรรมเพื่อให้ทุกส่วนย่อยของโปรแกรมได้ทำให้ความต่อเนื่องของมันชัดเจน

ตอนนี้

  • การแปลเชิงลบพื้น hereditarily ส่งจะ\ϕ¬¬ϕ
  • อย่างไรก็ตามในขณะที่การแปลของเราใช้การปฏิเสธมันไม่เคยกำจัดข้อเสนอที่ผิดพลาด - ดังนั้นการแปลจึงทำงานเป็นพารามิเตอร์ในข้อเสนอนั้น
  • โดยเฉพาะอย่างยิ่งเราสามารถแทนที่ที่มีประเภทคำตอบใด ๆ\α
  • ดังนั้นเราจึง hereditarily แทนที่ด้วย\ϕ(ϕα)α
  • นี่คือการแปลง CPS

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


3
นี่คือคำตอบที่ดี มันทำให้ฉันนึกถึงกระดาษของ Wadler "Call-by-value เป็นแบบคู่กับ call-by-name": homepages.inf.ed.ac.uk/wadler/topics/call-by-need.htmlซึ่งรวมถึงเกร็ดเล็กเกร็ดน้อยที่น่าจดจำอย่างมาก ในส่วนที่ 4 เพื่ออธิบายความสัมพันธ์ระหว่าง callCC และตรงกลางที่แยกออก
sclv

8

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

มันกลับกลายเป็นประเภทของการโทรกับกระแสต่อเนื่องที่สอดคล้องกับข้อเสนอที่เรียกว่ากฎหมายของเพียรซซึ่งสามารถนำมาใช้เพื่อพิสูจน์กฎของการยกเว้นกลาง ( ) สามารถเขียนโปรแกรม LEM โดยใช้ callcc ใน Coq:P,P¬P

Set Implicit Arguments.

Axiom callcc : forall (A B : Set), ((A -> B) -> A) -> A.

Lemma lem : forall (A B:Set), sum A (A -> B).
Proof.
  intros.
  eapply callcc.
  intros H.
  right.
  intros.
  apply H.
  left.
  assumption.
Defined.

Recursive Extraction lem.

ให้รหัส O'Caml:

type ('a, 'b) sum =
  | Inl of 'a
  | Inr of 'b

(** val callcc : (('a1 -> 'a2) -> 'a1) -> 'a1 **)

let callcc =
  failwith "AXIOM TO BE REALIZED"

(** val lem : ('a1, 'a1 -> no) sum **)

let lem =
    callcc (fun h -> Inr (fun h0 -> h (Inl h0)))

แนะนำสะอาดนี้ฉันได้เห็นอยู่ในทิมกริฟฟิ"เป็นสูตรตามประเภทความคิดของการควบคุม"


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