Следующие два предложения легко доказать.Как доказать «~ (nat = False)», «~ (nat = bool)» и «~ (nat = True)» в coq
Theorem nat_eq_nat : nat = nat.
Proof.
trivial.
Qed.
Theorem True_neq_False : ~(True = False).
Proof.
unfold not.
intros.
symmetry in H.
rewrite H.
trivial.
Qed.
Но когда я попытался доказать, несколько иное предложение ~(nat = False)
, я обнаружил, что переписывание тактика не работает. Он сообщает
Error: Refiner was given an argument "fun x : Set => x" of type "Set -> Set" instead of "Set -> Prop".
Итак, я попытался написать лемм.
Lemma Type_eq_prod : forall (a : Type) (b : Type), a = b -> (a -> b).
Proof.
intros.
rewrite <- H.
trivial.
Qed.
Theorem nat_neq_False : ~(nat = False).
Proof.
unfold not.
intros.
apply (Type_eq_prod nat False) in H.
inversion H.
apply 0. (*no subgoals left*)
Все работает нормально до сих пор. Но когда я попытался передать его, он сообщил
Error: Illegal application (Type Error):
The term "Type_eq_prod" of type "forall a b : Type, a = b -> a -> b"
cannot be applied to the terms
"nat" : "Set"
"False" : "Prop"
"H" : "nat = False"
"0" : "nat"
The 3rd term has type "nat = False" which should be coercible to
"nat = False".
Следующие два предложения, которые заставляют меня застревать.
Theorem nat_neq_bool : ~(nat = bool).
Proof.
unfold not.
intros.
Abort.
Theorem nat_neq_true : ~(nat = True).
Proof.
unfold not.
intros.
Abort.
Мои вопросы:
1.Why the rewrite tactic doesn't work with proposition ~(nat = False).
2.Why can't I Qed it when there is no subgoals.
3.How to prove the aborted propositions above or is it possible to prove or prove the negates of them in coq.
Благодарим за подробный ответ. – TorosFanny
Но как показать, что у bool два элемента? И если два набора являются nat и положительными, которые имеют равные элементы в теории, то как доказать nat <> положительный? – TorosFanny
Показать, что bool имеет только два элемента: можно доказать утверждение, такое как 'exists b1 b2: bool, forall b3: bool, b3 = b1 \/b3 = b2.', выполнив' exists true. существует ложь. intros []; auto.'. Однако невозможно показать, что 'nat <> положительный' в Coq. Как оказалось, это не зависит от теории, что означает, что безопасно добавлять «nat = positive» и «nat <> positive» в качестве аксиом отдельно. –