[Agda] Help, I'm failing at sized types.

Conor McBride conor at strictlypositive.org
Fri Mar 13 14:04:22 CET 2015


On 13 Mar 2015, at 12:56, Andreas Abel <andreas.abel at ifi.lmu.de> wrote:

> Hi Conor,
> 
> sorry for the bad interface to sized types, it dates from 2008 when no big syntax invasions were wanted.  Thus, Agda silently accepts an "old-style" sized type (as you tried to implement with Foo) if it has the right format, otherwise it treats it as ordinary type.  [The new-style sized types Andrea explained are a bit less fragile.]
> 
> In particular, if you want an old-style sized type, every constructor has to target "Foo (up i)".  The following should work:
> 
> data Foo : Size -> Set where
>  boo : {i : Size} -> Foo (up i)
>  coo : {i : Size} -> Foo i -> Foo (up i)

OK, that explains a lot.

> 
> subtype? : {i : Size} -> Foo i -> Foo infty
> subtype? t = t

I’ll see if I can make progress with the new style.

Thanks

Conor

> 
> On 13.03.2015 12:51, Conor McBride wrote:
>> Hi
>> 
>> Sorry to be a nuisance.
>> 
>> I’m trying to do some stuff with sized types, but I think I’m failing at basic stuff like finding
>> the on-switch. Specifically…
>> 
>> ****************************************
>> {-# OPTIONS --sized-types #-}
>> 
>> module SizeFail where
>> 
>> open import Agda.Primitive
>> postulate
>>   Size : Set
>>   Size<_ : Size -> Set
>>   up : Size -> Size
>>   infty : Size
>> {-# BUILTIN SIZE Size #-}
>> {-# BUILTIN SIZELT Size<_ #-}
>> {-# BUILTIN SIZESUC up #-}
>> {-# BUILTIN SIZEINF infty #-}
>> 
>> data Foo : Size -> Set where
>>   boo : {i : Size} -> Foo i
>>   coo : {i : Size} -> Foo i -> Foo (up i)
>> 
>> subtype? : {i : Size} -> Foo i -> Foo infty
>> subtype? t = t
>> ****************************************
>> 
>> …results in the complaint...
>> 
>> .i != infty of type Size
>> when checking that the expression t has type Foo infty
>> 
>> …whether the pragmas are present or not.
>> 
>> Any light gratefully received.
>> 
>> (Longer term, I want to do some syntactic mangling in which renaming is obviously size-preserving, so I can apply a renaming to a substructure before I do a recursive call on it.)
>> 
>> Cheers
>> 
>> Conor_______________________________________________
>> Agda mailing list
>> Agda at lists.chalmers.se
>> https://lists.chalmers.se/mailman/listinfo/agda
>> 
> 
> 
> -- 
> 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