[Agda] Inference difficulties

Jesper Cockx Jesper at sikanda.be
Tue Nov 10 09:50:08 CET 2020


Hi Conal,

I believe you're being bitten by the automatic insertion of implicit lambda
abstractions. When Agda tries to check an expression at an implicit pi type
like ∀ `{A : Magma 0ℓ 0ℓ} → A ⇒ A`, it will automatically insert an
abstraction `λ {A} → ...` Likewise, when checking `id` it will
automatically insert an implicit argument `{_}`. So the expression Agda
actually tries to check is not `id` but `λ {A} →id {_}`. But now there's
many possible solutions for the `_`, and Agda doesn't know which one to
pick!

To work around the automatic insertion, you need to pass the `A`
explicitly, for example like this:

```
id' : ∀ {A : Magma 0ℓ 0ℓ} → A ⇒ A
id' {A} = id {A}
```

There were two papers at ICFP this year that propose more intelligent
strategies for the insertion of implicits (
https://dl.acm.org/doi/10.1145/3408971 and
https://dl.acm.org/doi/10.1145/3408983), but neither of them has been
implemented for Agda so far.

-- Jesper

On Tue, Nov 10, 2020 at 5:40 AM Conal Elliott <conal at conal.net> wrote:

> I’ve been encountering inference difficulties working with
> agda-categories. I’ve whittled down the problem to a simplified example
> that doesn’t use agda-categories (source also attached as T8.agda):
>
> open import Levelopen import Algebra.Bundles using (Magma)open import Relation.Binary using (Rel)open import Function.Equality using (_⟶_) renaming (id to ⟶-id)record Cat (o ℓ : Level) : Set (suc (o ⊔ ℓ)) where  infix  4 _⇒_  field    Obj : Set o    _⇒_ : Rel Obj ℓ    id  : ∀ {A} → A ⇒ A    -- ... elidedM : Cat _ _M = record { Obj = Magma 0ℓ 0ℓ           ; _⇒_ = λ A B → Magma.setoid A ⟶ Magma.setoid B           ; id  = ⟶-id           -- ...           } open Cat M_ : ∀ {A : Magma 0ℓ 0ℓ} → A ⇒ A_ = id
>
> The error message (referring to the use of id in the last line):
>
> __∙__27 : Algebra.Core.Op₂ (Magma.Carrier A)  [ at /Users/conal/Agda/cat-linear/src/T8.agda:24,5-7 ]_∙-cong_30  : Algebra.Definitions.Congruent₂ (λ z z₁ → (A Magma.≈ z) z₁)    __∙__27  [ at /Users/conal/Agda/cat-linear/src/T8.agda:24,5-7 ]
>
> If I replace Magma by a structure with more operations, such as Ring, I
> see more such errors, failing to infer each operation and associated
> property.
>
> I’m stumped and would appreciate any insights about causes and cures for
> this inference failure.
>
> – Conal
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.chalmers.se/pipermail/agda/attachments/20201110/2c707610/attachment.html>


More information about the Agda mailing list