在类型级别重写

时间:2016-05-21 22:52:06

标签: coq coq-tactic

我有以下证明状态:

1 subgoals
U : Type
X : Ensemble U
Y : Ensemble U
f : U -> U
g : U -> U
pF : proof_dom_cod U X Y f
pG : proof_dom_cod U X Y g
fg : f = g
H : proof_dom_cod U X Y g = proof_dom_cod U X Y f
______________________________________(1/1)
createarrow U X Y f pF = createarrow U X Y g pG

所以我想

assert (pF = pG)

然后使用证明不相关来证明这一点。不幸的是,pF = pG无效,因为它们有不同的类型,即使我知道类型是相同的,因为H。说rewrite Hrewrite H in pF导致匹配失败,我假设因为in pF引用的值不是类型。

类型是否等同于rewrite

这是我要完成的定理(包含所有必要的定义)。

Require Import Coq.Logic.FunctionalExtensionality.
Require Import Coq.Sets.Ensembles.
Require Import Coq.Logic.Classical_Prop.


Definition proof_dom_cod 
(U : Type) (X Y : Ensemble U) (f : U -> U) : Prop
    := forall x : U, In U X x -> In U Y (f x).

Inductive setarrow (U : Type) (X Y : Ensemble U) : Type
        :=
    | createarrow (f : U -> U) (proof : proof_dom_cod U X Y f).

Lemma eq_setarrow
    (U : Type) (X Y : Ensemble U) (f g : U -> U) (pF : proof_dom_cod U X Y f) (pG : proof_dom_cod U X Y g)
        : (f = g -> (createarrow U X Y f pF = createarrow U X Y g pG)).
    intros fg.
    assert (proof_dom_cod U X Y g = proof_dom_cod U X Y f).
        rewrite fg.
        trivial.
Qed.

1 个答案:

答案 0 :(得分:2)

这不是一般问题的答案,但这里subst完成了工作。证明可以完成如下:

subst f.
apply f_equal. apply proof_irrelevance.