Section ua_laws.
Variable diese : forall a' : A, (b --> G a') -> (a --> a').
Definition UA_eq (a' : A) (f : b --> G a') (g : a --> a') :=
u o FMor G g =_S f.
Definition UA_law1 := forall (a' : A) (f : b --> G a'), UA_eq f (diese f).
Definition UA_law2 :=
forall (a' : A) (f : b --> G a') (g : a --> a'),
UA_eq f g -> g =_S diese f.
End ua_laws.
Structure IsUA : Type :=
{UA_diese : forall a' : A, (b --> G a') -> (a --> a');
Prf_isUA_law1 : UA_law1 UA_diese;
Prf_isUA_law2 : UA_law2 UA_diese}.
Variable t : IsUA.
(* f=g => f# = g# *)

Lemma Diese_map : forall a' : A, Map_law (UA_diese t (a':=a')).