[Agda] function application in index positions

Andreas Abel andreas.abel at ifi.lmu.de
Mon Feb 4 18:17:04 CET 2013


On 01.02.2013 21:32, Peter Divianszky wrote:

> data Even : ℕ → Set where
>    double : ∀ n → Even (n + n)

I think non-pattern indices like this one should be forbidden in the 
first place.  Instead you should have to write

   data Even (m : N) : Set where
     double : forall n -> (n + n == m) -> Even m

> emptinessProof : ¬ Even 1
> emptinessProof e = {!!}
>
> it is not trivial to fill in the hole.

Then you get the goal

   emptynessProof (double n p) = ?

of deriving a contradiction from

   p : n + n == 1

which can be done as Alan showed.

> Is it possible to improve to compiler to make this task simpler?
> I don't want to change the data definition.
>
> Is this documented / should I open a ticket?

I think the current liberty leads people to believe the type checker 
could handle arbitrary indices, which is not true and leads to error 
messages which are harder to understand than an outright

   "double's type is illegal because the unification problem

      n + n == expression

    is not solvable in general"

Cheers,
Andreas

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

Theoretical Computer Science, University of Munich
Oettingenstr. 67, D-80538 Munich, GERMANY

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


More information about the Agda mailing list