[Agda] Does the order of patterns matter?

Achim Jung A.Jung at cs.bham.ac.uk
Wed Sep 26 12:51:16 CEST 2012


Hello,

    I am new to Agda and have run into the following problem. 
When defining a term by pattern matching and when those patterns are
mutually exclusive, then it seems to me that the order in which they
are listed should not matter. However, while trying to prove a simple
statement about equality modulo 2 on the natural numbers, I discovered
a case where it appears to matter a lot, in that for the first
definition my theorem type-checks whereas for the second it doesn't.
The attached short Agda code file is very simple and hopefully
self-explanatory.

    Achim.

PS: I am running version 2.3.0.1 on Ubuntu 12.04.

-------------------------------------------------------------------------
  Prof Achim Jung			Tel.: (+44) 121 41 44776
  School of Computer Science		Sec.: (+44) 121 41 42791
  The University of Birmingham		Fax.: (+44) 121 41 44281
  Edgbaston				Email: A.Jung at cs.bham.ac.uk
  BIRMINGHAM, B15 2TT			Web: http://www.cs.bham.ac.uk/~axj
  England
-------------------------------------------------------------------------
-------------- next part --------------
-----------------------------------------------------
-- Author: Achim Jung (A.Jung at cs.bham.ac.uk)
-- Date: 25 September 2012
-----------------------------------------------------
module Mod2 where

data ??? : Set where
 zero : ???
 succ : ??? ??? ???

data ??? : Set where

data ??? : Set where
 * : ???

-- Equality modulo 2; first version
_???_ : ??? ??? ??? ??? Set
-- Here, this pattern is listed first --
succ x ??? succ y         = x ??? y 
----------------------------------------
zero ??? zero             = ???
zero ??? succ zero        = ???
zero ??? succ (succ y)    = zero ??? y
succ zero ??? zero        = ???
succ (succ x) ??? zero    = x ??? zero
infixl 4 _???_

thm : ???(x y : ???) ??? (x ??? y) ??? (succ x ??? succ y)
thm x y p = p

-- Equality modulo 2; second version
_???'_ : ??? ??? ??? ??? Set
zero ???' zero             = ???
zero ???' succ zero        = ???
zero ???' succ (succ y)    = zero ???' y
succ zero ???' zero        = ???
succ (succ x) ???' zero    = x ???' zero
-- Here it is listed last --------------
succ x ???' succ y         = x ???' y 
----------------------------------------
infixl 4 _???'_

no-thm : ???(x y : ???) ??? (x ???' y) ??? (succ x ???' succ y)
no-thm x y p = p




More information about the Agda mailing list