[Agda] Universe level checking
Martín Hötzel Escardó
m.escardo at cs.bham.ac.uk
Wed Nov 29 21:50:52 CET 2017
Hi Andreas,
Thanks for the discussion.
My code compiles with 2.6.0-5135fd5 (in this machine now at home) and
with 2.6.0-3b39f0f (in my office machine when I posted the message).
I don't use the standard library, and all my files in this development
have --without-K --exact-split --safe.
On 29/11/17 19:30, andreas.abel at ifi.lmu.de wrote:
> completing your snipped with standard library imports, in particular
>
> open import Function
>
> for id and comp, I get the following error:
>
> Set .ℓ' != Set (.ℓ ⊔ .ℓ')
> when checking that the expression id has type .Y → .X
Perhaps you have a different definition of composition there (I don't
know). Mine is
_∘_ : {ℓ ℓ' ℓ'' : Level} {X : Set ℓ} {Y : Set ℓ'} {Z : Y → Set ℓ''}
→ ((y : Y) → Z y) → (f : X → Y) → (x : X) → Z(f x)
g ∘ f = λ x → g(f x)
> Is that the error you expected?
I don't get this error! I didn't expect any particular error.
> The answer is uniform for all Agda versions > 2.5, I did not try 2.4.
I think that, then, this must depend on the standard library. I am not
using it, as I said.
> However, I can actually not get your code to type check at all. The
> correct type for retraction-section is:
>
> retraction-section : {ℓ : Level} {X Y : Set ℓ}
> → (r : X → Y) → (s : Y → X) → Set ℓ
> retraction-section r s = (r ∘ s) ∼ id
>
> with just a single level.
I think it is perfectly fine for a large type to be a retract of a
small type. The question was rather whether "being a retract of a
large type" should be a small or large (Curry-Howard) proposition.
I may include a link to the source code and its compiled html version
if you wish, for inspection.
But I would like to clarify that my question was not so much an
Agda-specific one, but more of a philosophical one, thinking about
what the right rendering of universes in a dependendent type theory `a
la Martin-Loef is.
Best,
Martin
>
> Best,
> Andreas
>
> On 29.11.2017 16:50, Martin Escardo wrote:
>> I am generalizing some old code by replacing `Set` with `Set ?` and
>> using ctrl-C-S to fill such holes when possible.
>>
>> Am I right to think there is a problem with the following?
>>
>> ```
>> _∼_ : {ℓ ℓ' : Level} {X : Set ℓ} {Y : Set ℓ'}
>> → (X → Y) → (X → Y) → Set (ℓ ⊔ ℓ')
>> f ∼ g = ∀ x → f x ≡ g x
>>
>> retraction-section : {ℓ ℓ' : Level} {X : Set ℓ} {Y : Set ℓ'}
>> → (X → Y) → (Y → X) → Set ℓ'
>> retraction-section r s = r ∘ s ∼ id
>> ```
>>
>> I would have thought that the type of `retraction-section r s` should
>> be `Set (ℓ ⊔ ℓ')` rather than ` Set ℓ'`.
>>
>> It shouldn't be possible to construct something in a small universe
>> using ingredients from a large universe without the risk of paradox
>> (but I haven't paused to try to exploit this to get a contradiction).
>>
>> Martin
>> _______________________________________________
>> Agda mailing list
>> Agda at lists.chalmers.se
>> https://lists.chalmers.se/mailman/listinfo/agda
>
>
--
http://www.cs.bham.ac.uk/~mhe
More information about the Agda
mailing list