Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] how to proof this?

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] how to proof this?


chronological Thread 
  • From: Adam Chlipala <adamc AT hcoop.net>
  • To: Hai WAN <wan.whyhigh AT gmail.com>
  • Cc: Coq Club <coq-club AT pauillac.inria.fr>
  • Subject: Re: [Coq-Club] how to proof this?
  • Date: Fri, 14 Aug 2009 11:25:14 -0400
  • List-archive: <http://pauillac.inria.fr/pipermail/coq-club/>

Hai WAN wrote:
(* Here are the Coq codes abstracted from a real problem.*)

Section test.
Variable P Q : Prop.
Variable a : P /\ Q.
Variable get : P -> Set.
Variable H0 :
    match a with
        | conj H0 _ => get H0
    end.
Variable b : P.

(* I want to prove this goal, but got stuck. Could any one help? Thanks in advance!*)

Goal (get b).

I expect you need something like proof irrelevance to prove your theorem, like so:
====
 Require Import ProofIrrelevance.

 Goal (get b).
   rewrite (proof_irrelevance P b (match a with
                                     | conj H _ => H
                                   end));
   generalize dependent H0; case a; tauto.
 Qed.
====

Intuitively, the theorem seems false without proof irrelevance, because you have no way of showing that [get] can't return different [Set]s for different proofs of [P]. Alternatively, you could avoid axioms by adding a [Hypothesis] asserting that [get] has this property.





Archive powered by MhonArc 2.6.16.

Top of Page