On 09/05/2014 10:42, Jean-Jacques Levy wrote:

Yes, it is fair, since the logic of Why3 already assumes it.

In practice, I never had to assume it though, when doing a Coq proof. Indeed, 
most of the predicates I get from Why3 are trivially boolean in nature, and 
thus do not need excluded middle.

what do you mean by "most of the predicates I get from Why3 are trivially boolean in 
nature" ? In the Coq files that I get from Why3, I see Coq ‘Prop’s translated from 
Why3 predicates!!

Sure, Why3 is using Prop for predicates, but that does reduce in any way their expressiveness. Suppose you have the following predicate P:

Definition P (x : Z) : Prop := (0 <= x /\ x <= 5)%Z.

As a user, you can easily define a (P_bool : Z -> bool) function and prove the following lemma:

Lemma P_spec : forall x : Z, P x <-> P_bool x = true.

And you don't need excluded middle to prove it. That is what I mean when I say that most predicates coming from Why3 are boolean in nature (even if they are in Prop).

In an ideal world, Why3 would directly generate the boolean version of the predicates. Unfortunately, there are two shortcomings. First, if you are not an SSReflect user, boolean predicates are a pain to use in Coq. Second, the logic of Why3 supports some predicates that are not boolean in nature: inductive predicates. And because of that, all the predicates have to be in Prop.

Best regards,

Guillaume

_______________________________________________
Why3-club mailing list
Why3-club@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/why3-club

Reply via email to