我试图证明给定的一种关系: eqX 和Hypo:当量eqX , eqX ab-> eqX(proj1_sig fa)(proj1_sig fb)。(其中 f 类型为 {x:A | P x} )我想问:
我尝试阅读 Coq.Init.Specif 并进行操作(搜索proj1_sig等效项。)。但是我找不到解决我的问题的定理。
respecting_equiv:
forall (A : Type) (R : relation A)
(eqa : Equivalence R)
(B : Type) (R' : relation B)
(eqb : Equivalence R'),
Equivalence
(fun f g : respecting eqa eqb =>
forall x y : A,
R x y ->
R' (proj1_sig f x)
(proj1_sig g y))
答案 0 :(得分:1)
这是您要显示的内容吗?
Require Import Coq.Relations.Relation_Definitions.
Require Import Coq.Classes.Equivalence.
Require Import Setoid.
Generalizable All Variables.
Lemma foo `{!@Equivalence A RA, @Equivalence B RB, f : @respecting A _ _ B _ _ , @equiv A _ _ a b} :
equiv (proj1_sig f a) (proj1_sig f b).
Proof.
now apply respecting_equiv.
Qed.
答案 1 :(得分:1)
您的索赔不可直接证明;考虑
X := nat
eqX a b := (a mod 2) = (b mod 2)
P a := True
f x := exist P (x / 2) I
然后我们有eqX 2 4
,但我们没有eqX (proj1_sig (f 2)) (proj1_sig (f 4))
,因为我们没有eqX 1 2
。
您可以接受要证明为假设的定理,也可以接受类型为forall a, proj1_sig (f a) = a
的假设,也可以接受类型为forall a, eqX (proj1_sig (f a)) a
的假设。请注意,如果您对某个功能reflexivity
有intros; assumption
,则所有这些都是可以证明的(通过f a := exist P a (g a)
或g
。