[Agda] newbie instance resolution question: too many candidates?
Jesper Cockx
Jesper at sikanda.be
Sat Nov 5 13:31:30 CET 2016
Wait, what?!? That seems really counterintuitive to me. But you're right,
the following also works on the current github Agda:
works3 : (e : E) (g : G) (e∈g : e ∈ g) →
_≡_ {A = V}
(value ⦃ _ ⦄ e∈g)
(value ⦃ _ ⦄ e∈g)
works3 e g e∈g = refl
I would expect an underscore to be solved by the constraint solver, if I
wanted instance search I'd use 'it'. So now there's no easy way to turn an
instance implicit into a regular implicit, that seems like a loss of
expressivity to me.
Jesper
On Sat, Nov 5, 2016 at 11:26 AM, Andreas Abel <abela at chalmers.se> wrote:
> 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-argum
>> ents.html#instance-resolution
>> <http://agda.readthedocs.io/en/latest/language/instance-argu
>> ments.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/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.chalmers.se/pipermail/agda/attachments/20161105/b49c8b9b/attachment.html
More information about the Agda
mailing list