Đư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?
Đư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?
Câu trả lời:
Để 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 yvà projT1ném đi những bằng chứng.
Mã Ocaml được trích xuất cho t, thu được bằng lệnh Extraction klà
(** 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.