[Agda] Level constraints

Wolfram Kahl kahl at cas.mcmaster.ca
Sat Nov 16 04:20:05 CET 2013


On Fri, Nov 15, 2013 at 09:32:45PM +0000, Martin Escardo wrote:
> 
> 
> On 15/11/13 19:02, Wolfram Kahl wrote:
> >Some of this can of course already be had by just writing ``Set _'',
> >as it occurs quite frequently in the standard library.
> >(I must admit that I do it rarely --- although I do have a definition
> >  that takes over 30 (implicit) Level parameters.)
> >
> >Making the underlying metavariable instantiation even more intelligent
> >would expand the opportunities for writing ``Set _''
> >without any change to the language ---
> >perhaps that could be one avenue for experimentation...
> 
> Nice, I will try to exploit this idea while typical ambiguity is not 
> available (I am sure we will manage to persuade the great and kind Agda 
> developers to eventually implement it). But I think the limitation of 
> your solution could be when it comes to situations where i \sqcup j is 
> needed for levels i and j, which is often the case

In the i <= j case implemented by i \sqcup j' that you mentioned previously,
you will need to make at least the key |Level|s explicit.
But in many cases, there is enough other material around that determines
the levels: In the standard library:

 $ grep ' → Set [^)}]*$' $(find . -name "*.agda") | wc -l
    211
 $ grep ' → Set [^)}]*$' $(find . -name "*.agda") | grep '_$' | wc
    115

Omit the `` | wc -l'' and you'll see what these look like...


> Are you suggesting to define something like
> 
> Type {i} = Set i
> 
> (if that's possible)

probably not possible...

> and then rely on implicit parameter inference to 
> simulate (some of) typical ambiguity?

Well, ``_'' is an explicit argument supplied implicitly,
just like ``{zero}'' in your ``Type ``{zero}'' would be
an implicit argument supplied explicitly.


Wolfram


More information about the Agda mailing list