จะเกิดอะไรขึ้นถ้าเราพยายามดึงพยานออกมา แต่จริงๆแล้วมันไม่ได้มีอยู่จริงจากเทอมของประเภทที่มีอยู่จริง?


12

ที่กำหนดระยะเวลาt : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))ในประเภททฤษฎีมาร์ตินลอฟ-ของสิ่งที่คุ้มค่าของการw(t(0))ที่wเป็นผู้ประกอบการที่สารสกัดจากพยานของระยะเวลาของประเภทการดำรงอยู่หรือไม่?


ฉันคิดว่าคุณหมายถึง0) ¬(x=0)
Mark Reitblatt

ใช่ทำเครื่องหมายขอบคุณที่ชี้ให้เห็นว่าได้รับการแก้ไขแล้ว
วันที่

คำตอบ:


12

ค่าใด ๆ มันขึ้นอยู่กับที่คุณจะได้รับ เทอมประเภทเป็นคู่ของ intและฟังก์ชั่นที่ใช้พิสูจน์และให้คุณ หลักฐานของ(y) คุณสามารถใช้คำศัพท์ประเภทและประเภท (จากการสะท้อนแสง) เพื่อให้ได้คำศัพท์ประเภทใดก็ได้ที่คุณต้องการ ซึ่งรวมถึงระยะเวลาของชนิด , , \ดังนั้นคุณสามารถทำให้จำนวนเต็มใด ๆ ที่คุณต้องการY ( ¬ ( 0 = 0 ) 0 = S ( y ) ) y ¬ ( 0 = 0 ) 0 = S ( y ) ¬ ( 0 = 0 ) 0 = 0 0 = S ( 0 ) 0 = S ( 1 ) ... Yty.(¬(0=0)0=S(y))y¬(0=0)0=S(y)¬(0=0)0=00=S(0)0=S(1)y


10

เพื่อแสดงคำตอบของ Mark ให้พิจารณาหลักฐานtของคำแถลงการณ์ต่อไปนี้ของคุณซึ่งเขียนเป็น Coq ในการพิสูจน์ที่เราคิดว่าพารามิเตอร์kของประเภทnatจะได้รับ เราใช้kเป็นค่าyในกรณีx = 0:

Parameter k : nat.

Theorem t : forall x : nat, { y : nat | x <> 0 -> x = S y}.
Proof.
  induction x.
  exists k; tauto.
  induction x.
  exists 0; auto.
  destruct IHx as [z G].
  exists (S z).
  intro H.
  elim G; auto.
Defined.

เราสามารถพิสูจน์ได้ว่าt 0เท่ากับk:

Theorem A: projT1 (t 0) = k.
Proof.
  auto.
Qed.

protT1มีเพราะt 0ไม่ได้เป็นเพียงจำนวนธรรมชาติ แต่จริง ๆ แล้วเป็นจำนวนธรรมชาติที่มีหลักฐานว่า0 <> 0 -> 0 = S yและprojT1พ่นออกหลักฐาน

รหัส Ocaml ที่ถูกแตกออกมาtซึ่งได้มาจากคำสั่งExtraction kคือ

(** val t : nat -> nat **)

let rec t = function
  | O -> k
  | S n0 -> (match n0 with
              | O -> O
              | S n1 -> S (t n0))

เราสามารถเห็นได้อีกครั้งt 0เท่ากับkซึ่งเป็นพารามิเตอร์ที่สันนิษฐานว่าเป็นไปในทางที่ผิด


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