Class Full `(F : C ⟶ D) := {
prefmap {x y} (g : F x ~> F y) : x ~> y;
prefmap_respects {x y} : Proper (equiv ==> equiv) (@prefmap x y);
prefmap_id : ∀ x, @prefmap x x id ≈ id;
prefmap_comp : ∀ x y z (f : F y ~> F z) (g : F x ~> F y),
prefmap (f ∘ g) ≈ prefmap f ∘ prefmap g;
fmap_sur {x y} (g : F x ~> F y) : fmap[F] (prefmap g) ≈ g
}.
This definition of 'full' is nonstandard. Do you have a motivation/justification for this choice of definition?
I would advocate instead
Class Full `(F : C ⟶ D) := {
prefmap {x y} (g : F x ~> F y) : x ~> y;
fmap_sur {x y} (g : F x ~> F y) : fmap[F] (prefmap g) ≈ g
}.
Or for modularity, define what it means for a map of setoids to be surjective and use that definition.
The question of whether prefmap should respect equality is more an issue of constructive mathematics than of category theory but in Bishop-style constructive math you do not require existence to respect equality.
So we're just dropping the functoriality? I think that makes sense, as I cannot recall why I originally added that to the definition. I concur with your assessment.
From Theory/Functor.v -
This definition of 'full' is nonstandard. Do you have a motivation/justification for this choice of definition?
I would advocate instead
Or for modularity, define what it means for a map of setoids to be surjective and use that definition.
The question of whether
prefmap
should respect equality is more an issue of constructive mathematics than of category theory but in Bishop-style constructive math you do not require existence to respect equality.