Що станеться, якщо ми спробуємо витягнути свідка, але насправді він не існує в терміні екзистенційного типу?


12

Враховуючи термін t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))у теорії типу Мартіна-Лофа, у чому значення w(t(0)), де wоператор, який витягує свідка терміна екзистенційного типу?


Я думаю, ти маєш на увазі . ¬(x=0)
Марк Рейтблатт

Так, Марк, дякую, що вказав на це, виправлено.
день

Відповіді:


12

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


10

Щоб продемонструвати відповідь Марка, розгляньте наступне підтвердження 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, Андрей, він уточнює більше.
день
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.