Учитывая термин t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))
в теории типов Мартина-Лофа, какова ценность того w(t(0))
, где w
находится оператор, извлекающий свидетельство термина экзистенциального типа?
Учитывая термин t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))
в теории типов Мартина-Лофа, какова ценность того w(t(0))
, где w
находится оператор, извлекающий свидетельство термина экзистенциального типа?
Ответы:
Чтобы продемонстрировать ответ Марка, рассмотрим следующее доказательство 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
, что было условно принятым параметром.