Đư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 w
là 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 w
là 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 t
về 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ố k
của loại nat
được đưa ra. Chúng tôi sử dụng k
như giá trị của y
trong 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 0
bằng k
:
Theorem A: projT1 (t 0) = k.
Proof.
auto.
Qed.
Các protT1
là có vì t 0
khô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 y
và projT1
né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
là
(** 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 0
là bằng k
, đó là một tham số giả định phi thường.