证明Coq中依赖记录的结构平等

时间:2013-10-20 16:17:25

标签: coq dependent-type

我定义了一个简单的结构:

Require Import Ensembles.

Record ConfigStructure {T:Type} : Type := mkCS {
  E: Ensemble T;
  C: Ensemble (Ensemble T);
  CS_wf : forall x y, In _ C x -> In _ x y -> In _ E y;
  rooted := In (Ensemble T) C (Empty_set T)
}.

CS_wf在构造时基于这两个参数强制执行语义良构性属性。现在稍后,我需要比较两个记录的相等性 - 我对证明组件有什么看法?

我从以下开始 - 我想这两个结构良好也应该出现在lhs上?

Lemma CS_split: forall T e1 c1 wf1 e2 c2 wf2,
e1 = e2 /\ c1 = c2 -> mkCS T e1 c1 wf1 = mkCS T e2 c2 wf2.
Proof.
intros.
destruct H as [He Hc].
destruct He; destruct Hc.
f_equal.
Abort.

让我接受:

T : Type
e1 : Ensemble T
c1 : Ensemble (Ensemble T)
wf1 : forall (x : Ensemble T) (y : T),
      In (Ensemble T) c1 x -> In T x y -> In T e1 y
wf2 : forall (x : Ensemble T) (y : T),
      In (Ensemble T) c1 x -> In T x y -> In T e1 y
============================
 wf1 = wf2

我猜证明不相关也会发挥作用?

1 个答案:

答案 0 :(得分:1)

当然“apply proof_irrelevance”做了诀窍 - 它只是在我的情况下不起作用,因为我的脚本中有Require Import ClassicalFacts,而我需要Coq.Logic.ProofIrrelevance,作为Coq-Club成员指出。