Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Why no unfolding on left in match?

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Why no unfolding on left in match?


Chronological Thread 
  • From: Abhishek Anand <abhishek.anand.iitg AT gmail.com>
  • To: coq-club <coq-club AT inria.fr>
  • Subject: Re: [Coq-Club] Why no unfolding on left in match?
  • Date: Wed, 8 Oct 2014 14:34:23 -0400

You can solve the readability problem by using abbreviations instead of definitions.

Notation foo  := 1.
Definition bar (n:nat): nat := match n with foo => 1 | _ => 0 end.

http://coq.inria.fr/coq/refman/Reference-Manual014.html#Abbreviations


On Wed, Oct 8, 2014 at 2:05 PM, Kevin Sullivan <sullivan.kevinj AT gmail.com> wrote:
I'm wondering what's the technical reason that Coq doesn't unfold expressions in pattern position?

(* THIS WORKS *)

Definition bar (n:nat): nat := match n with 1 => 1 | _ => 0 end.

(* THIS DOESN'T *)

Definition foo: nat := 1.
Definition bar (n:nat): nat := match n with foo => 1 | _ => 0 end.

(* 
The only difference is the use of a symbol rather than a "manifest constant" in the second case.
When using nats to represent objects of another kind, I'd prefer to match on symbolic names rather than on their concrete representations as nats -- for  abstraction, information hiding, readability. Of course the question generalizes beyond nats.
*)

Kevin 




Archive powered by MHonArc 2.6.18.

Top of Page