A coherence
tactic for monoidal categories, and ⊗≫
(composition up to associators) #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
We provide a coherence
tactic,
which proves equations where the two sides differ by replacing
strings of monoidal structural morphisms with other such strings.
(The replacements are always equalities by the monoidal coherence theorem.)
A simpler version of this tactic is pure_coherence
,
which proves that any two morphisms (with the same source and target)
in a monoidal category which are built out of associators and unitors
are equal.
We also provide f ⊗≫ g
, the monoidal_comp
operation,
which automatically inserts associators and unitors as needed
to make the target of f
match the source of g
.
A typeclass carrying a choice of lift of an object from C
to free_monoidal_category C
.
Instances of this typeclass
Instances of other typeclasses for category_theory.monoidal_category.lift_obj
- category_theory.monoidal_category.lift_obj.has_sizeof_inst
- lift : category_theory.monoidal_category.lift_obj.lift X ⟶ category_theory.monoidal_category.lift_obj.lift Y
A typeclass carrying a choice of lift of a morphism from C
to free_monoidal_category C
.
Instances of this typeclass
- category_theory.monoidal_category.lift_hom_id
- category_theory.monoidal_category.lift_hom_left_unitor_hom
- category_theory.monoidal_category.lift_hom_left_unitor_inv
- category_theory.monoidal_category.lift_hom_right_unitor_hom
- category_theory.monoidal_category.lift_hom_right_unitor_inv
- category_theory.monoidal_category.lift_hom_associator_hom
- category_theory.monoidal_category.lift_hom_associator_inv
- category_theory.monoidal_category.lift_hom_comp
- category_theory.monoidal_category.lift_hom_tensor
Instances of other typeclasses for category_theory.monoidal_category.lift_hom
- category_theory.monoidal_category.lift_hom.has_sizeof_inst
- hom : X ⟶ Y
- is_iso : category_theory.is_iso (category_theory.monoidal_category.monoidal_coherence.hom X Y) . "apply_instance"
A typeclass carrying a choice of monoidal structural isomorphism between two objects.
Used by the ⊗≫
monoidal composition operator, and the coherence
tactic.
Instances of this typeclass
- category_theory.monoidal_category.monoidal_coherence.refl
- category_theory.monoidal_category.monoidal_coherence.tensor
- category_theory.monoidal_category.monoidal_coherence.tensor_right
- category_theory.monoidal_category.monoidal_coherence.tensor_right'
- category_theory.monoidal_category.monoidal_coherence.left
- category_theory.monoidal_category.monoidal_coherence.left'
- category_theory.monoidal_category.monoidal_coherence.right
- category_theory.monoidal_category.monoidal_coherence.right'
- category_theory.monoidal_category.monoidal_coherence.assoc
- category_theory.monoidal_category.monoidal_coherence.assoc'
Instances of other typeclasses for category_theory.monoidal_category.monoidal_coherence
- category_theory.monoidal_category.monoidal_coherence.has_sizeof_inst
Equations
Equations
Construct an isomorphism between two objects in a monoidal category out of unitors and associators.
Compose two morphisms in a monoidal category, inserting unitors and associators between as necessary.
Equations
- f ⊗≫ g = f ≫ category_theory.monoidal_category.monoidal_coherence.hom X Y ≫ g
Compose two isomorphisms in a monoidal category, inserting unitors and associators between as necessary.
Equations
Auxiliary simp lemma for the coherence
tactic:
this moves brackets to the left in order to expose a maximal prefix
built out of unitors and associators.
Use the coherence theorem for monoidal categories to solve equations in a monoidal equation, where the two sides only differ by replacing strings of monoidal structural morphisms (that is, associators, unitors, and identities) with different strings of structural morphisms with the same source and target.
That is, coherence
can handle goals of the form
a ≫ f ≫ b ≫ g ≫ c = a' ≫ f ≫ b' ≫ g ≫ c'
where a = a'
, b = b'
, and c = c'
can be proved using pure_coherence
.
(If you have very large equations on which coherence
is unexpectedly failing,
you may need to increase the typeclass search depth,
using e.g. set_option class.instance_max_depth 500
.)