Module docstring
{"# Isomorphisms
This file defines isomorphisms between objects of a category.
Main definitions
structure Iso: a bundled isomorphism between two objects of a category;class IsIso: an unbundled version ofiso; note thatIsIso fis aProp, and only asserts the existence of an inverse. Of course, this inverse is unique, so it doesn't cost us much to use choice to retrieve it.inv f, for the inverse of a morphism with[IsIso f]asIso: convert fromIsIsotoIso(noncomputable);of_iso: convert fromIsotoIsIso;- standard operations on isomorphisms (composition, inverse etc)
Notations
X ≅ Y: same asIso X Y;α ≪≫ β: composition of two isomorphisms; it is calledIso.trans
Tags
category, category theory, isomorphism
","All these cancellation lemmas can be solved by simp [cancel_mono] (or simp [cancel_epi]),
but with the current design cancel_mono is not a good simp lemma,
because it generates a typeclass search.
When we can see syntactically that a morphism is a mono or an epi
because it came from an isomorphism, it's fine to do the cancellation via simp.
In the longer term, it might be worth exploring making mono and epi structures,
rather than typeclasses, with coercions back to X ⟶ Y.
Presumably we could write X ↪ Y and X ↠ Y.
"}