답변:
증명할 수 없습니다. 우리가 설정할 때 다음과 같은 정리의 특별한 경우를 고려하십시오 X := bool
.
foo true = foo false -> true = false
그 true
와 false
다른 점을 감안할 때 , 정리가 입증 될 수 있다면 그것을 보여줄 수 foo true
있고 foo false
달라야합니다. 문제는이 두 가지 유형이 동형이라는 것입니다 .
Inductive foo : bool -> Type :=
| constr : forall (x : bool), foo x.
(* An isomorphism between foo true and foo false *)
Definition foo_t_f (x : foo true) : foo false := constr false.
Definition foo_f_t (x : foo false) : foo true := constr true.
(* Proofs that the functions are inverses of each other *)
Lemma foo_t_fK x : foo_f_t (foo_t_f x) = x.
Proof. unfold foo_f_t, foo_t_f. now destruct x. Qed.
Lemma foo_f_tK x : foo_t_f (foo_f_t x) = x.
Proof. unfold foo_f_t, foo_t_f. now destruct x. Qed.
Coq의 이론에서는 여분의 공리를 가정하지 않고 두 가지 동형 형태가 다르다는 것을 보여주는 것은 불가능합니다. 이것이 동성애 형 이론 과 같은 Coq 이론의 확장 이 건전한 이유 입니다. HoTT에서 동형 형태는 동일하게 표시 될 수 있으며 정리를 증명할 수 있으면 HoTT가 일치하지 않습니다.
(x <> y) -> (foo x <> foo y)
있습니까? 나는 배제 된 중간의 원칙없이이 세상에서 정말로 혼란 스럽다.