[Agda] newbie instance resolution question: too many candidates?
Andreas Abel
abela at chalmers.se
Sat Nov 5 11:26:43 CET 2016
On 05.11.2016 10:32, Jesper Cockx wrote:
> If you write ⦃ _ ⦄as an argument, then Agda won't use instance search
> for this argument but it will use the constraint solver instead.
I thought I changed that in 2.5.2, see
https://github.com/agda/agda/issues/2172
> You
> should just leave out the argument instead if you want to use the
> instance search. The following version works:
>
> works2 : (e : E) (g : G) (e∈g : e ∈ g) →
> _≡_ {A = V}
> (value e∈g)
> (value e∈g)
> works2 e g e∈g = refl
>
> You do need to give {A = V} because the instance search doesn't work
> with unsolved metas in the type, because otherwise it may get stuck in a
> loop.
>
> Cheers,
> Jesper
>
> On Sat, Nov 5, 2016 at 8:23 AM, Ulf Norell <ulf.norell at gmail.com
> <mailto:ulf.norell at gmail.com>> wrote:
>
> The problem isn't that there are too many candidates (the error
> should be clearer about this) but that there are unsolved metas in
> the target (_A_35).
> See http://agda.readthedocs.io/en/latest/language/instance-arguments.html#instance-resolution
> <http://agda.readthedocs.io/en/latest/language/instance-arguments.html#instance-resolution>
> for the details.
>
> / Ulf
>
> On Sat, Nov 5, 2016 at 6:03 AM, Martin Stone Davis
> <martin.stone.davis at gmail.com <mailto:martin.stone.davis at gmail.com>>
> wrote:
>
> I'm unclear why the below code fails to typecheck and confused
> by the error message. First, the code:
>
> open import Agda.Builtin.Equality
>
> record Membership (E G : Set) : Set₁ where
> field _∈_ : E → G → Set
>
> open Membership ⦃ ... ⦄
>
> record Valueable (A V : Set) : Set where
> field value : A → V
>
> open Valueable ⦃ ... ⦄
>
> module _
> (E G V : Set)
> ⦃ E∈G : Membership E G ⦄
> ⦃ e∈g→v : {e : E} {g : G} → Valueable (e ∈ g) V ⦄
> where
>
> works : (e : E) (g : G) (e∈g : e ∈ g) →
> _≡_ {A = V}
> (value ⦃ e∈g→v ⦄ e∈g)
> (value ⦃ e∈g→v ⦄ e∈g)
> works e g e∈g = refl
>
> fails : (e : E) (g : G) (e∈g : e ∈ g) →
> _≡_ {A = _}
> (value ⦃ _ ⦄ e∈g)
> (value ⦃ _ ⦄ e∈g)
> fails e g e∈g = refl
>
>
> Here are the relevant parts of the error message that have me
> scratching my head:
>
> _r_41 : Valueable ((E∈G Membership.∈ e) g) (_A_35 E G V e g e∈g)
>
> (This is associated with yellow highlighting on the instance
> argument to the first call to 'value' in 'fails'.)
>
>
> Failed to solve the following constraints:
> [0] Resolve instance argument
> _41 :
> (E₁ G₁ V₁ : Set) {{E∈G = E∈G₁ : Membership E₁ G₁}}
> {{e∈g→v = e∈g→v₁
> : {e = e₁ : E₁} {g = g₁ : G₁} →
> Valueable ((E∈G₁ Membership.∈ e₁) g₁) V₁}}
> (e₁ : E₁) (g₁ : G₁) (e∈g₁ : (E∈G₁ Membership.∈ e₁)
> g₁) →
> Valueable ((E∈G₁ Membership.∈ e₁) g₁) (_A_35 E₁ G₁
> V₁ e₁ g₁ e∈g₁)
> Candidates
> e∈g→v :
> {e = e₁ : E} {g = g₁ : G} → Valueable ((E∈G
> Membership.∈ e₁) g₁) V
> E∈G : Membership E G
>
> The above error message seems to indicate that both 'e∈g→v' and
> 'E∈G' are candidates for the instance argument to 'value'. But
> 'E∈G' doesn't have a 'Valueable' type! So, how can it be a
> candidate?
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se <mailto:Agda at lists.chalmers.se>
> https://lists.chalmers.se/mailman/listinfo/agda
> <https://lists.chalmers.se/mailman/listinfo/agda>
>
>
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se <mailto:Agda at lists.chalmers.se>
> https://lists.chalmers.se/mailman/listinfo/agda
> <https://lists.chalmers.se/mailman/listinfo/agda>
>
>
>
>
> _______________________________________________
> 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