abstract MicroAbs = { cat A; fun a, ab : A; redup : A -> A; }