when (on line 235) I want to extend PreTriple morphism (GlobalElement morphism) ?
Agreed, there are two Functors involved, but, there must be some way out, no?
Code listing
namespaceYoneda#eval"- begin -"abbrevfunctionαβ:=α→βclassIdentity(morphism:Type→Type→Type)whereι(α:Type):morphismααexportIdentity(ι)classSequential(morphism:Type→Type→Type)whereandThen(αβγ:Type):morphismαβ→morphismβγ→morphismαγexportSequential(andThen)classCategory(morphism:Type→Type→Type)extendsIdentitymorphism,SequentialmorphismclassCategoryLaws(morphism:Type→Type→Type)(_:Categorymorphism):Propwherecategory_left_identity(αmβ:morphismαβ):(andThenααβ(ια)αmβ)=αmβcategory_right_identity(αmβ:morphismαβ):(andThenαββαmβ(ιβ))=αmβcategory_associativity(αmβ:morphismαβ)(βmγ:morphismβγ)(γmδ:morphismγδ):(andThenαγδ(andThenαβγαmββmγ)γmδ)=(andThenαβδαmβ(andThenβγδβmγγmδ))exportCategoryLaws(category_right_identitycategory_left_identitycategory_associativity)attribute[simp]category_right_identitycategory_left_identitycategory_associativityclassFunctor(fromMorphism:Type→Type→Type)(toMorphism:Type→Type→Type)(morphed:Type→Type)whereζ:fromMorphismαβ→toMorphism(morphedα)(morphedβ)classFunctorLaws(fromMorphism:Type→Type→Type)(toMorphism:Type→Type→Type)(morphed:Type→Type)(fromCategory:CategoryfromMorphism)(toCategory:CategorytoMorphism)(functor:FunctorfromMorphismtoMorphismmorphed):Propwherefunctor_identity:functor.ζ(fromCategory.ια)=toCategory.ι(morphedα)functor_sequential:functor.ζ(andThenαβγαmββmγ)=andThen(morphedα)(morphedβ)(morphedγ)(functor.ζαmβ)(functor.ζβmγ)exportFunctorLaws(functor_identityfunctor_sequential)attribute[simp]functor_identityfunctor_sequentialclassNaturalTransformation(fromMorphism:Type→Type→Type)(toMorphism:Type→Type→Type)(fromMorphed:Type→Type)(toMorphed:Type→Type)whereτ:(ω:Type)→toMorphism(fromMorphedω)(toMorphedω)classNaturalTransformationLaws(fromMorphism:Type→Type→Type)(toMorphism:Type→Type→Type)(fromMorphed:Type→Type)(toMorphed:Type→Type)(toCategory:CategorytoMorphism)(fromFunctor:FunctorfromMorphismtoMorphismfromMorphed)(toFunctor:FunctorfromMorphismtoMorphismtoMorphed):PropwherenaturalTransformation_natural(αfmβ:fromMorphismαβ)(τ:(ω:Type)→toMorphism(fromMorphedω)(toMorphedω)):andThen(fromMorphedα)(toMorphedα)(toMorphedβ)(τα)(toFunctor.ζαfmβ)=andThen(fromMorphedα)(fromMorphedβ)(toMorphedβ)(fromFunctor.ζαfmβ)(τβ)exportNaturalTransformationLaws(naturalTransformation_natural)attribute[simp]naturalTransformation_naturalclassPreTriple(morphism:Type→Type→Type)(morphed:Type→Type)extendsFunctormorphismmorphismmorphedwhereν:(ω:Type)→morphismω(morphedω)classPreTripleLaws(morphism:Type→Type→Type)(morphed:Type→Type)(category:Categorymorphism)(preTriple:PreTriplemorphismmorphed)(αfmβ:morphismαβ):PropwherepreTriple_natural(αfmβ:morphismαβ):andThenα(morphedα)(morphedβ)(preTriple.να)(preTriple.ζαfmβ)=andThenαβ(morphedβ)αfmβ(preTriple.νβ)exportPreTripleLaws(preTriple_natural)attribute[simp]preTriple_naturalclassTriple(morphism:Type→Type→Type)(morphed:Type→Type)extendsPreTriplemorphismmorphedwhereμ:(ω:Type)→morphism(morphed(morphedω))(morphedω)classTripleLaws(morphism:Type→Type→Type)(morphed:Type→Type)(category:Categorymorphism)(triple:Triplemorphismmorphed)(αfmβ:morphismαβ):Propwheretriple_natural(αfmβ:morphismαβ):andThen(morphed(morphedα))(morphedα)(morphedβ)(triple.μα)(triple.ζαfmβ)=andThen(morphed(morphedα))(morphed(morphedβ))(morphedβ)((triple.ζ∘triple.ζ)αfmβ)(triple.μβ)triple_left_identity:category.ι(morphedα)=andThen(morphedα)(morphed(morphedα))(morphedα)(triple.ν(morphedα))(triple.μα)triple_right_identity:category.ι(morphedα)=andThen(morphedα)(morphed(morphedα))(morphedα)(triple.ζ(triple.να))(triple.μα)triple_associativity:andThen(morphed(morphed(morphedα)))(morphed(morphedα))(morphedα)(triple.μ(morphedα))(triple.μα)=andThen(morphed(morphed(morphedα)))(morphed(morphedα))(morphedα)(triple.ζ(triple.μα))(triple.μα)exportTripleLaws(triple_naturaltriple_left_identitytriple_associativity)attribute[simp]triple_naturaltriple_left_identitytriple_associativityabbrevGlobalElement(morphism:Type→Type→Type):Type→Type:=λα=>morphismUnitαclassPreFunctionalCategory(morphism:Type→Type→Type)extendsCategorymorphism,FunctorfunctionmorphismId-- , PreTriple morphism (GlobalElement morphism)wherefunction2morphism:functionαβ→morphismαβ:=ζglobal:(ω:Type)→functionω(GlobalElementmorphismω):=λ_=>λz=>function2morphism(λ_=>z)ν:(ω:Type)→morphismω(GlobalElementmorphismω):=λω=>function2morphism(globalω)classFunctionalCategory(morphism:Type→Type→Type)extendsPreFunctionalCategorymorphismwhereμ:morphism(morphismUnit(GlobalElementmorphismω))(GlobalElementmorphismω)defyonedaFunctor(_:Categorymorphism):(ω:Type)→morphismαβ→function(morphismωα)(morphismωβ):=λω=>λαmβωmα=>andThenωαβωmααmβdefyonedaEndoFunctor(preFunctionalCategory:PreFunctionalCategorymorphism):(ω:Type)→morphismαβ→morphism(morphismωα)(morphismωβ):=λω=>preFunctionalCategory.function2morphism∘λαmβωmα=>andThenωαβωmααmβdefglobaElementFunctor(preFunctionalCategory:PreFunctionalCategorymorphism):morphismαβ→morphism(GlobalElementmorphismα)(GlobalElementmorphismβ):=yonedaEndoFunctorpreFunctionalCategoryUnit#eval"-- end --"endYoneda
For arbitrary categories, the Yoneda lemma deals with functors from (arbitrary category) morphisms to (Set category) functions. The Yoneda lemma is pointful (i.e. deals with elements of sets).
The idea behind my "lemma" is the following.
What I call functional categories, are categories for which there exists a functor from (Set category) functions to (functional category) morphisms.
Composing a functor from (functional category) morphisms to (Set category) functions with that functor from (Set category) functions to (functional category) morphisms yields an endofunctor from (functional category) morphisms to (functional category) morphisms.
My "lemma" is a pointfree Yoneda-like lemma for such endofunctors.