Yoneda was Re: [Agda] Associativity for free!
Thorsten Altenkirch
txa at Cs.Nott.AC.UK
Thu Nov 3 11:50:53 CET 2011
P.S. Just remembered that I forgot one thing:
On 3 Nov 2011, at 09:39, Thorsten Altenkirch wrote:
> On 28 Oct 2011, at 16:26, Andreas Abel wrote:
>
>> On 10/27/11 3:47 PM, James Chapman wrote:
>>> Now, Yoneda's embedding says that we can view morphism in C as the following polymorphic function:
>>>
>>> Y : ∀{C A B} → Hom C A B → (∀ Z → Hom C B Z → Hom C A Z)
>>> Y {C} f = λ Z g → comp C g f
>>>
>>> and we can convert back again:
>>>
>>> Y-1 : ∀{C A B} → (∀ Z → Hom C B Z → Hom C A Z) → Hom C A B
>>> Y-1 {C}{A}{B} α = α B (iden C)
>>
>> Is that the glorious Yoneda lemma? Trivial in the language of types. Just subtract the categorical waffle and every programmer understands it...
>
> Indeed, I have been pushing this for a while. Actually given F : Set -> Set a functor, Yoneda just says for any A : Set:
>
> ((X : Set) -> (A -> X) -> F X) ~ F A
>
> where ~ is isomorphism (or equality f we accept univalence). And yes this is a consequence of parametricity or more precisely of the assumption that (X : Set) -> H X X is a coend (where H : Set^op -> Set -> Set is a bifunctor).
>
> One interesting aspect of this equation is that the left hand side is actually large (in Set_1) while the right hand side is small. So it is a "resizing axiom" which enables to make big things small.
>
> There are many nice applications of the Yoneda lemma. One of my favourites is the derivation of the exponential of endofunctors (i.e. the function space in Set -> Set) which is actually a categorical generalisation of Kripke semantics.
>
> Given F,G : Set -> Set (functors) and exponential F=>G if it exists must satisfy
>
> ((X : Set) -> (H x F) X -> G X) ~ ((X : Set) -> H X -> (F => G) X) (1)
>
> and it is easy to see that (H x F) X = H X x F X (products are constructed pointwise).
>
> Hence we can calculate
>
> (F => G) A
> ~ (X : Set) (A -> X) -> (F => G) X (Yoneda)
> ~ (X : Set) (A -> X) x F X -> G X (1)
> ~ (X : Set) (A -> X) -> F X -> G X (currying)
>
> The relation to Kripke semantics becomes clear if we read (A -> X) as X is a future of A. Actually we should really use the contravariant version then we can read -> as implication.
Don't forget that I said *if* it exists the exponential looks like this. However, we have no reason to assume that in general
(X : Set) (A -> X) -> F X -> G X : Set. It is the case if we assume that F and G are containers (see our CIE paper from last year).
>
> It is a generalisation because it is an isomorphism as opposed to a logical equivalence.
>
> So, yes, functional programmers should be aware of the Yoneda lemma. Ralph Hinze recently wrote a nice paper expressing the same sentiment (after I showed him the little proof above).
>
> Obviously, Yoneda is much more general than what I wrote above. As indicated it also works for covariant functors and there also is a version with SIgma types instead of Pi types.
>
> Cheers,
> Thorsten
>
>
>
>
>>
>> Cheers,
>> Andreas
>>
>> --
>> Andreas Abel <>< Du bist der geliebte Mensch.
>>
>> Theoretical Computer Science, University of Munich
>> Oettingenstr. 67, D-80538 Munich, GERMANY
>>
>> andreas.abel at ifi.lmu.de
>> http://www2.tcs.ifi.lmu.de/~abel/
>> _______________________________________________
>> Agda mailing list
>> Agda at lists.chalmers.se
>> https://lists.chalmers.se/mailman/listinfo/agda
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
More information about the Agda
mailing list