Module docstring
{"# Bicategories
In this file we define typeclass for bicategories.
A bicategory B consists of
* objects a : B,
* 1-morphisms f : a ⟶ b between objects a b : B, and
* 2-morphisms η : f ⟶ g between 1-morphisms f g : a ⟶ b between objects a b : B.
We use u, v, and w as the universe variables for objects, 1-morphisms, and 2-morphisms,
respectively.
A typeclass for bicategories extends CategoryTheory.CategoryStruct typeclass. This means that
we have
* a composition f ≫ g : a ⟶ c for each 1-morphisms f : a ⟶ b and g : b ⟶ c, and
* an identity 𝟙 a : a ⟶ a for each object a : B.
For each object a b : B, the collection of 1-morphisms a ⟶ b has a category structure. The
2-morphisms in the bicategory are implemented as the morphisms in this family of categories.
The composition of 1-morphisms is in fact an object part of a functor
(a ⟶ b) ⥤ (b ⟶ c) ⥤ (a ⟶ c). The definition of bicategories in this file does not
require this functor directly. Instead, it requires the whiskering functions. For a 1-morphism
f : a ⟶ b and a 2-morphism η : g ⟶ h between 1-morphisms g h : b ⟶ c, there is a
2-morphism whiskerLeft f η : f ≫ g ⟶ f ≫ h. Similarly, for a 2-morphism η : f ⟶ g
between 1-morphisms f g : a ⟶ b and a 1-morphism f : b ⟶ c, there is a 2-morphism
whiskerRight η h : f ≫ h ⟶ g ≫ h. These satisfy the exchange law
whiskerLeft f θ ≫ whiskerRight η i = whiskerRight η h ≫ whiskerLeft g θ,
which is required as an axiom in the definition here.
","### Simp-normal form for 2-morphisms
Rewriting involving associators and unitors could be very complicated. We try to ease this
complexity by putting carefully chosen simp lemmas that rewrite any 2-morphisms into simp-normal
form defined below. Rewriting into simp-normal form is also useful when applying (forthcoming)
coherence tactic.
The simp-normal form of 2-morphisms is defined to be an expression that has the minimal number of
parentheses. More precisely,
1. it is a composition of 2-morphisms like η₁ ≫ η₂ ≫ η₃ ≫ η₄ ≫ η₅ such that each ηᵢ is
  either a structural 2-morphisms (2-morphisms made up only of identities, associators, unitors)
  or non-structural 2-morphisms, and
2. each non-structural 2-morphism in the composition is of the form f₁ ◁ f₂ ◁ f₃ ◁ η ▷ f₄ ▷ f₅,
  where each fᵢ is a 1-morphism that is not the identity or a composite and η is a
  non-structural 2-morphisms that is also not the identity or a composite.
Note that f₁ ◁ f₂ ◁ f₃ ◁ η ▷ f₄ ▷ f₅ is actually f₁ ◁ (f₂ ◁ (f₃ ◁ ((η ▷ f₄) ▷ f₅))).
"}