[Agda] Should not _ patterns be resolvable by inaccessible patterns?

Andreas Abel abela at chalmers.se
Mon Jul 6 09:33:04 CEST 2015


If you define transitivity of propositional equality without hiding 
value arguments, you have to explicitly choose where to put the dots:

   transV1 : ∀{A : Set} (a b c : A) → a ≡ b → b ≡ c → a ≡ c
   transV1 _ ._ ._ refl refl = refl

   transV2 : ∀{A : Set} (a b c : A) → a ≡ b → b ≡ c → a ≡ c
   transV2 ._ _ ._ refl refl = refl

   transV3 : ∀{A : Set} (a b c : A) → a ≡ b → b ≡ c → a ≡ c
   transV3 ._ ._ _ refl refl = refl

With hidden arguments, you need not care:

   transH : ∀{A : Set}{a b c : A} → a ≡ b → b ≡ c → a ≡ c
   transH refl refl = refl

Of course, when giving the hidden arguments, it is the same as for 
visible arguments:

   transH1 : ∀{A : Set}{a b c : A} → a ≡ b → b ≡ c → a ≡ c
   transH1 {a = _}{b = ._}{c = ._} refl refl = refl
   ...

The user has more flexibility when an argument is hidden.  When an 
argument is given, the user has to actively make a decision whether a 
pattern must be a dot pattern or must not be one.  There is no "I don't 
care, please figure it out for me" as there is for hidden arguments. 
This seems to be a mismatch.

I think it would be simpler for the user if pattern "_" stood for "don't 
care" rather than "unnamed variable".  The need for writing "._" would 
vanish.

Does anything speak against this change?  Is there a situation where it 
is essential to tell Agda not to let something be a dot pattern in order 
for type-checking to succeed?  (In the end this could still be done by 
writing a named variable instead of _!)

Internally, Agda has four kinds of trivial patterns:

   DotP       ._ is (DotP MetaVariable)
   VarP       x  is (VarP "x") where x cannot be "_"
   WildP      _  is WildP
   ImplicitP  the user wrote no pattern (argument is hidden)

The change would be to let _ stand for ImplicitP, which can become 
either a dot pattern or a variable pattern (or a record pattern if issue 
473 is fixed).

Cheers,
Andreas

-- 
Andreas Abel  <><      Du bist der geliebte Mensch.

Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden

andreas.abel at gu.se
http://www2.tcs.ifi.lmu.de/~abel/


More information about the Agda mailing list