如何证明(proj1_sig f a)和(proj1_sig f b)两个对象的等价性,其中a和b是等价的

时间:2019-07-28 07:51:57

标签: coq

我试图证明给定的一种关系: eqX 和Hypo:当量eqX ,   eqX ab-> eqX(proj1_sig fa)(proj1_sig fb)。(其中 f 类型为 {x:A | P x} )我想问:

  1. 我可以根据库Coq.Init.Specif中sig的定义来证明这个断言吗?我已经看到了一个类似的定理尊重peing_equiv,但这没有帮助。
  2. Dose Coq提供了可以证明其断言的现有功能吗?

我尝试阅读 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))

2 个答案:

答案 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的假设。请注意,如果您对某个功能reflexivityintros; assumption,则所有这些都是可以证明的(通过f a := exist P a (g a)g