증인을 추출하려고하지만 실존 유형의 용어에서 실제로 존재하지 않으면 어떻게됩니까?


12

t : ∀x.∃y.(¬(x = 0) ⇒ x = S(y))Martin-Lof의 유형 이론에 용어 가 주어지면 의 값은 무엇 입니까? 존재 유형의 용어에 대한 증인을 추출하는 연산자는 w(t(0))어디에 w있습니까?


이라고 생각합니다 . ¬(x=0)
Mark Reitblatt

예, 마크, 지적 해 주셔서 감사합니다.

답변:


12

모든 값. 그것은 당신이 어느 를 받는지에 달려 있습니다. 유형의 용어는 하는 int 된 한 쌍의 증명 취하고 함수 하고 있습니다 증명은 입니다. 당신은 유형의 용어를 사용할 수 있습니다 과 입력 당신이 원하는 모든 유형의 용어를 유도하기 위해 (재귀에서). 여기에는 , , 유형의 항이 포함됩니다 . 따라서 원하는 정수로 만들 수 있습니다 .ty.(¬(0=0)0=S(y))y¬(0=0)0=S(y)¬(0=0)0=00=S(0)0=S(1)y


10

Mark의 답변을 보여주기 위해 tCoq. 증명에서 우리 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 yprojT1멀리 증거를 던졌습니다.

t명령 Extraction k으로 얻은에 대한 추출 된 Ocaml 코드는 다음 과 같습니다.

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

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

다시 우리는 볼 수 t 0IS 같 karibtrarily 추정 파라미터이었다.


Andrej Coq의 예제에 감사드립니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.