Điều gì xảy ra nếu chúng ta cố gắng trích xuất một nhân chứng nhưng nó thực sự không tồn tại từ một thuật ngữ thuộc loại tồn tại?


12

Đưa ra một thuật ngữ t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))trong lý thuyết loại của Martin-Lof, giá trị của w(t(0)), đâu wlà toán tử trích xuất sự chứng kiến ​​của một thuật ngữ của loại tồn tại?


Tôi nghĩ rằng bạn có ý nghĩa . ¬(x=0)
Đánh dấu Reitblatt

Vâng, Mark, cảm ơn vì đã chỉ ra rằng, đã sửa.
ngày

Câu trả lời:


12

ty.(¬(0=0)0=S(y))y¬(0=0)0=S(y)¬(0=0)0=00=S(0)0=S(1)y


10

Để chứng minh câu trả lời của Mark, hãy xem xét bằng chứng sau đây tvề tuyên bố của bạn, được viết bằng Coq. Trong bằng chứng, chúng tôi giả định rằng một tham số kcủa loại natđược đưa ra. Chúng tôi sử dụng knhư giá trị của ytrong trường hợp 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.

Chúng tôi có thể chứng minh rằng t 0bằng k:

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

Các protT1là có vì t 0không chỉ là một số tự nhiên, nhưng thực sự là một số tự nhiên với một bằng chứng cho thấy 0 <> 0 -> 0 = S yprojT1ném đi những bằng chứng.

Mã Ocaml được trích xuất cho t, thu được bằng lệnh Extraction k

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

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

Một lần nữa chúng ta có thể thấy t 0là bằng k, đó là một tham số giả định phi thường.


Cảm ơn ví dụ trong Coq, Andrej, nó làm rõ hơn.
ngày
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.