Nicolas, Sage should be told that End(O) is a monoid for any object O in a category Cat() that is a subcategory of Sets().
Say that a morphism f in Hom(A,B,Cat()) is computable if it comes equipped with an algorithm that computes f(a) for every a in A. Clearly the composition of computable morphisms is computable and an identity morphism is computable. Therefore the computable elements of End(O) form a submonoid. Say that an isomorphism f in End(O) is bicomputable if it is computable and its inverse is also computable. Then the bicomputable elements form a subgroup of Aut(O). The implementation of the computable submonoid of End(O) is obvious: each new element comes equipped with a set-theoretic function and the multiplication is function composition. One could perform some mild general simplification by having the designated identity morphism and building its triviality into the product explicitly. The bicomputable subgroup of Aut(O) could be implemented as a free group with dynamically createable generators, each of which comes equipped with an evaluation map. When an element gets created, one must supply both the algorithm for its evaluation as well as that for its inverse. Of course with the presence of evaluation maps, one is actually working in a quotient of the free monoid/group but alas, one cannot test true equality of elements if O is infinite. Of course we cannot test whether a supplied set-theoretic function yields an honest morphism either. --Mark -- You received this message because you are subscribed to the Google Groups "sage-combinat-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-combinat-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-combinat-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-combinat-devel?hl=en. For more options, visit https://groups.google.com/groups/opt_out.