当破坏coq等式时,证明(并非完全)无关

当破坏coq等式时,证明(并非完全)无关,coq,dependent-type,Coq,Dependent Type,我有一个依赖类型,它在过渡系统中模拟有限路径。过渡系统有一个函数R,该函数产生一个命题,说明状态s和带有标签a的s'之间是否存在边缘。有限路径类型为: Inductive FinPathTail (s : S i) := | FPTNil: FinPathTail s | FPTCons (a : Act i) (s' : S i) : R i s a s' -> FinPathTail s' ->

我有一个依赖类型,它在过渡系统中模拟有限路径。过渡系统有一个函数
R
,该函数产生一个命题,说明状态
s
和带有标签
a
s'
之间是否存在边缘。有限路径类型为:

  Inductive FinPathTail (s : S i) :=
  | FPTNil: FinPathTail s
  | FPTCons (a : Act i) (s' : S i) : R i s a s' ->
                                     FinPathTail s' -> FinPathTail s.
(尾部位是因为它实际上模拟了从
s
开始的路径的头部以外的所有部分)

我已经为可能无限的PathTail定义了一个共导类型(我将把它放在底部以便更快地回答问题),并且我有一个函数,
fpt\u to\u pt
,用于将FinPathTail转换为PathTail。这应该是内射的,所以我想证明一个引理:

Lemma fpt_to_pt_inj {s : S i} (fpt fpt' : FinPathTail s)
  : (forall s s' : S i, {s = s'} + {s <> s'}) ->
    fpt_to_pt fpt = fpt_to_pt fpt' -> fpt = fpt'.
我想用
注入
策略来分解。结果是这样的:

existT (fun s'0 : S i => PathTail s'0) s' (fpt_to_pt fpt) =
existT (fun s'0 : S i => PathTail s'0) s'2 (fpt_to_pt fpt') ->
s' = s'2 -> a = a2 -> FPTCons s a s' r fpt = FPTCons s a2 s'2 r2 fpt'
使用反转_sigma策略,我可以将其转换为:

B : s' = s'2
C : a = a2
A0 : s' = s'2
A1 : eq_rect s' (fun a : S i => PathTail a) (fpt_to_pt fpt) s'2 A0 = fpt_to_pt fpt'
我想我理解为什么我需要源域的可判定性,以便使用
inj\u pair2\u eq\u dec
。我不明白的是:r和r2怎么了?我知道我没有不相关的证据,但这难道不意味着他们必须是平等的,才能使双方平等吗?还是我误解了一些基本命题

PS:下面是PathTail的共导定义:

CoInductive PathTail (s : S i) :=
| PTNil: PathTail s
| PTCons (a : Act i) (s' : S i) : R i s a s' -> PathTail s' -> PathTail s.

显然,
注入
策略默认情况下会忽略证明之间的相等,但是您可以使用
保持证明相等
来覆盖此行为:


我想
R
有密码域
Prop
,对吗?是的,没错。啊哈!我可能自己也会发现,但非常感谢你。
CoInductive PathTail (s : S i) :=
| PTNil: PathTail s
| PTCons (a : Act i) (s' : S i) : R i s a s' -> PathTail s' -> PathTail s.
Inductive foo : nat -> Prop :=
| Foo (n : nat) : foo n.

Inductive bar :=
| Bar (n : nat) : foo n -> bar.

Lemma test n nn m mm : Bar n nn = Bar m mm -> False.
Proof.
intros H. injection H. (* No equality generated. *)
Abort.

Set Keep Proof Equalities.

Lemma test n nn m mm : Bar n nn = Bar m mm -> False.
Proof.
intros H. injection H. (* Equality generated. *)
Abort.