Skip to content

Unsound use of Sized types in Environment moduleΒ #10

@cmcl

Description

@cmcl

Hi all,

I am looking to port the development to Agda v2.6.2 and standard library version 1.7. However, I encountered a type checking failure in the Data/Environment.agda module concerning the definition of data SEnv:

data SEnv (π“₯ : I ─Scoped) : Size β†’ (Ξ“ Ξ” : List I) β†’ Set where
  [_]    : βˆ€{Ξ“} β†’ βˆ€[ (Ξ“ ─Env) π“₯ β‡’ SEnv π“₯ (↑ i) Ξ“ ]
  _⊣_,,_ : βˆ€ Ξ“β‚‚ {Γ₁} β†’ βˆ€[ (Ξ“β‚‚ ─Env) π“₯ β‡’ β—‡ (SEnv π“₯ {!i!} Γ₁) β‡’ SEnv π“₯ (↑ {!!}) (Ξ“β‚‚ ++ Γ₁) ]

The problem snippet is (↑ i) and the remaining holes. In 2.6.2/v1.7, loading the file results in a type error because the type of i is I, not Size, and thus the typechecker generates a SizeUniv != Set error. However, Agda 2.6.1.3 only complains if you try to refine the goal with i producing the error:

generic-syntax/src/Data/Environment.agda:178,47-48
Generalizable variable Data.Environment.i is not supported here
when scope checking i

if, however, you place ↑ i directly in the type for [_] as in the above snippet and load the file, Agda 2.6.1.3 fails to complain that SizeUniv != Set.

Unless I misunderstand some use-case of Sized types and the known safety issues with their use, I cannot imagine this was intended. Should i : Size be the declaration of the generalized variable instead?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions