Session 23: More on universal mapping properties
1. A category of pairs of maps
Formulate and prove in two ways the theorem of uniqueness of the product of two objects B_1 and B_2 of the category π. (One way is the direct proof and the other way is to define the category π_{B_{1}B_{2}}, to prove that it is a category, to prove that its terminal object is the same as a product of B_1 and B_2 in π, and to appeal to the theorem on uniqueness of terminal objects.)
Solution: Exercise 1
The direct proof was already given in Article IV. In Exercise 12 of Article IV, we proved uniqueness of the product in the case of two objects, and on p. 221 we proved uniqueness in the case of an arbitrary family of objects.
We now give the second proof, starting with the definition of the category π_{B_{1}B_{2}}.
variable {π : Type u} [Category.{v, u} π]
structure PairOfMaps (Bβ Bβ : π) where
carrier : π
pβ : carrier βΆ Bβ
pβ : carrier βΆ Bβ
We show that π_{B_{1}B_{2}} is a valid category.
instance {Bβ Bβ : π} : Category (PairOfMaps Bβ Bβ) where
Hom X Y := {
f : X.carrier βΆ Y.carrier //
Y.pβ β f = X.pβ β§ Y.pβ β f = X.pβ
}
id X := β¨π X.carrier, π:Type uinstβ:Category.{v, u} πBβ:πBβ:πX:PairOfMaps Bβ Bββ’ X.pβ β π X.carrier = X.pβ β§ X.pβ β π X.carrier = X.pβ π:Type uinstβ:Category.{v, u} πBβ:πBβ:πX:PairOfMaps Bβ Bββ’ X.pβ β π X.carrier = X.pβπ:Type uinstβ:Category.{v, u} πBβ:πBβ:πX:PairOfMaps Bβ Bββ’ X.pβ β π X.carrier = X.pβ π:Type uinstβ:Category.{v, u} πBβ:πBβ:πX:PairOfMaps Bβ Bββ’ X.pβ β π X.carrier = X.pβπ:Type uinstβ:Category.{v, u} πBβ:πBβ:πX:PairOfMaps Bβ Bββ’ X.pβ β π X.carrier = X.pβ All goals completed! πβ©
comp f g := β¨g.val β f.val, π:Type uinstβ:Category.{v, u} πBβ:πBβ:πXβ:PairOfMaps Bβ BβYβ:PairOfMaps Bβ BβZβ:PairOfMaps Bβ Bβf:{ f // Yβ.pβ β f = Xβ.pβ β§ Yβ.pβ β f = Xβ.pβ }g:{ f // Zβ.pβ β f = Yβ.pβ β§ Zβ.pβ β f = Yβ.pβ }β’ Zβ.pβ β βg β βf = Xβ.pβ β§ Zβ.pβ β βg β βf = Xβ.pβ
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πXβ:PairOfMaps Bβ BβYβ:PairOfMaps Bβ BβZβ:PairOfMaps Bβ Bβf:{ f // Yβ.pβ β f = Xβ.pβ β§ Yβ.pβ β f = Xβ.pβ }g:{ f // Zβ.pβ β f = Yβ.pβ β§ Zβ.pβ β f = Yβ.pβ }β’ Zβ.pβ β βg β βf = Xβ.pβπ:Type uinstβ:Category.{v, u} πBβ:πBβ:πXβ:PairOfMaps Bβ BβYβ:PairOfMaps Bβ BβZβ:PairOfMaps Bβ Bβf:{ f // Yβ.pβ β f = Xβ.pβ β§ Yβ.pβ β f = Xβ.pβ }g:{ f // Zβ.pβ β f = Yβ.pβ β§ Zβ.pβ β f = Yβ.pβ }β’ Zβ.pβ β βg β βf = Xβ.pβ
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πXβ:PairOfMaps Bβ BβYβ:PairOfMaps Bβ BβZβ:PairOfMaps Bβ Bβf:{ f // Yβ.pβ β f = Xβ.pβ β§ Yβ.pβ β f = Xβ.pβ }g:{ f // Zβ.pβ β f = Yβ.pβ β§ Zβ.pβ β f = Yβ.pβ }β’ Zβ.pβ β βg β βf = Xβ.pβ All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πXβ:PairOfMaps Bβ BβYβ:PairOfMaps Bβ BβZβ:PairOfMaps Bβ Bβf:{ f // Yβ.pβ β f = Xβ.pβ β§ Yβ.pβ β f = Xβ.pβ }g:{ f // Zβ.pβ β f = Yβ.pβ β§ Zβ.pβ β f = Yβ.pβ }β’ Zβ.pβ β βg β βf = Xβ.pβ All goals completed! πβ©
Next we show that the terminal object of π_{B_{1}B_{2}} is the same as a product of B_1 and B_2 in π.
example {Bβ Bβ : π} {T : PairOfMaps Bβ Bβ} (hT : IsTerminal T) :
β (X : π) (fβ : X βΆ Bβ) (fβ : X βΆ Bβ),
β! f : X βΆ T.carrier, T.pβ β f = fβ β§ T.pβ β f = fβ := π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal Tβ’ β (X : π) (fβ : X βΆ Bβ) (fβ : X βΆ Bβ), β! f, T.pβ β f = fβ β§ T.pβ β f = fβ
intro X π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bββ’ β (fβ : X βΆ Bβ), β! f, T.pβ β f = fβ β§ T.pβ β f = fβ π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ Bββ’ β! f, T.pβ β f = fβ β§ T.pβ β f = fβ
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ BβXP:PairOfMaps Bβ Bβ := { carrier := X, pβ := fβ, pβ := fβ }β’ β! f, T.pβ β f = fβ β§ T.pβ β f = fβ
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ BβXP:PairOfMaps Bβ Bβ := { carrier := X, pβ := fβ, pβ := fβ }fP:XP βΆ T := hT.from XPβ’ β! f, T.pβ β f = fβ β§ T.pβ β f = fβ
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ BβXP:PairOfMaps Bβ Bβ := { carrier := X, pβ := fβ, pβ := fβ }fP:XP βΆ T := hT.from XPβ’ (fun f β¦ T.pβ β f = fβ β§ T.pβ β f = fβ) βfP β§ β (y : X βΆ T.carrier), (fun f β¦ T.pβ β f = fβ β§ T.pβ β f = fβ) y β y = βfP
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ BβXP:PairOfMaps Bβ Bβ := { carrier := X, pβ := fβ, pβ := fβ }fP:XP βΆ T := hT.from XPβ’ (fun f β¦ T.pβ β f = fβ β§ T.pβ β f = fβ) βfPπ:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ BβXP:PairOfMaps Bβ Bβ := { carrier := X, pβ := fβ, pβ := fβ }fP:XP βΆ T := hT.from XPβ’ β (y : X βΆ T.carrier), (fun f β¦ T.pβ β f = fβ β§ T.pβ β f = fβ) y β y = βfP
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ BβXP:PairOfMaps Bβ Bβ := { carrier := X, pβ := fβ, pβ := fβ }fP:XP βΆ T := hT.from XPβ’ (fun f β¦ T.pβ β f = fβ β§ T.pβ β f = fβ) βfP All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ BβXP:PairOfMaps Bβ Bβ := { carrier := X, pβ := fβ, pβ := fβ }fP:XP βΆ T := hT.from XPβ’ β (y : X βΆ T.carrier), (fun f β¦ T.pβ β f = fβ β§ T.pβ β f = fβ) y β y = βfP intro f π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ BβXP:PairOfMaps Bβ Bβ := { carrier := X, pβ := fβ, pβ := fβ }fP:XP βΆ T := hT.from XPf:X βΆ T.carrierhf:T.pβ β f = fβ β§ T.pβ β f = fββ’ f = βfP
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πT:PairOfMaps Bβ BβhT:IsTerminal TX:πfβ:X βΆ Bβfβ:X βΆ BβXP:PairOfMaps Bβ Bβ := { carrier := X, pβ := fβ, pβ := fβ }fP:XP βΆ T := hT.from XPf:X βΆ T.carrierhf:T.pβ β f = fβ β§ T.pβ β f = fβfP':XP βΆ T := β¨f, hfβ©β’ f = βfP
All goals completed! π
Finally we appeal to the theorem on uniqueness of terminal objects.
example {Bβ Bβ : π} {Tβ Tβ : PairOfMaps Bβ Bβ}
(hTβ : IsTerminal Tβ) (hTβ : IsTerminal Tβ) :
Nonempty (Tβ.carrier β
Tβ.carrier) := π:Type uinstβ:Category.{v, u} πBβ:πBβ:πTβ:PairOfMaps Bβ BβTβ:PairOfMaps Bβ BβhTβ:IsTerminal TβhTβ:IsTerminal Tββ’ Nonempty (Tβ.carrier β
Tβ.carrier)
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πTβ:PairOfMaps Bβ BβTβ:PairOfMaps Bβ BβhTβ:IsTerminal TβhTβ:IsTerminal Tβt:Tβ βΆ Tβht_iso:IsIso trightβ:β (y : Tβ βΆ Tβ), (fun s β¦ IsIso s) y β y = tβ’ Nonempty (Tβ.carrier β
Tβ.carrier)
π:Type uinstβ:Category.{v, u} πBβ:πBβ:πTβ:PairOfMaps Bβ BβTβ:PairOfMaps Bβ BβhTβ:IsTerminal TβhTβ:IsTerminal Tβt:Tβ βΆ Tβht_iso:IsIso trightβ:β (y : Tβ βΆ Tβ), (fun s β¦ IsIso s) y β y = tβ’ Tβ.carrier β
Tβ.carrier
All goals completed! π
2. How to calculate products
For any pair of maps {A \xrightarrow{f_1} B_1}, {A \xrightarrow{f_2} B_2}, {\langle f_1, f_2 \rangle} is the unique map {A \rightarrow B_1 \times B_2} that satisfies the equations {p_1 \langle f_1, f_2 \rangle = f_1} and {p_2 \langle f_1, f_2 \rangle = f_2}.
The relevant mathlib definition here is prod.lift, which we print below for reference.
#print prod.lift
Try to create the definition of 'sum' of two objects, in terms of a universal mapping property 'dual' to that of product, by reversing all maps in the definition of product. Then verify that in the category of sets and in the category of graphs, this property actually is satisfied by the intuitive idea of sum: 'Put together with no overlap and no interaction'.
Solution: Exercise 2
We start by defining a CategorySum structure to represent the sum of two objects in an arbitrary category as the dual of the product.
variable {π : Type u} [Category.{v, u} π]
structure CategorySum (Bβ Bβ : π) where
carrier : π
jβ : Bβ βΆ carrier
jβ : Bβ βΆ carrier
h_univ : β (Y : π) (gβ : Bβ βΆ Y) (gβ : Bβ βΆ Y),
β! g : carrier βΆ Y, g β jβ = gβ β§ g β jβ = gβ
In the category of sets (types), the intuitive idea of sum as the disjoint union of two sets (types) is given by the Sum type, so we show that Sum satisfies the universal mapping property of our CategorySum structure.
example {Bβ Bβ : Type} : CategorySum Bβ Bβ := {
carrier := Sum Bβ Bβ
jβ := Sum.inl
jβ := Sum.inr
h_univ Y gβ gβ:= π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β! g, g β Sum.inl = gβ β§ g β Sum.inr = gβ
π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ ((fun g β¦ g β Sum.inl = gβ β§ g β Sum.inr = gβ) fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ) β§
β (y : Bβ β Bβ βΆ Y),
(fun g β¦ g β Sum.inl = gβ β§ g β Sum.inr = gβ) y β
y = fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ
π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun g β¦ g β Sum.inl = gβ β§ g β Sum.inr = gβ) fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβπ:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β (y : Bβ β Bβ βΆ Y),
(fun g β¦ g β Sum.inl = gβ β§ g β Sum.inr = gβ) y β
y = fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ
π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun g β¦ g β Sum.inl = gβ β§ g β Sum.inr = gβ) fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ) β
Sum.inl =
gβπ:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ) β
Sum.inr =
gβ π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ) β
Sum.inl =
gβπ:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ) β
Sum.inr =
gβ All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β (y : Bβ β Bβ βΆ Y),
(fun g β¦ g β Sum.inl = gβ β§ g β Sum.inr = gβ) y β
y = fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ intro g π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yg:Bβ β Bβ βΆ Yhgβ:g β Sum.inl = gβhgβ:g β Sum.inr = gββ’ g = fun x β¦
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ
π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yg:Bβ β Bβ βΆ Yhgβ:g β Sum.inl = gβhgβ:g β Sum.inr = gβx:Bβ β Bββ’ g x =
match x with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ
cases x with
π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yg:Bβ β Bβ βΆ Yhgβ:g β Sum.inl = gβhgβ:g β Sum.inr = gβbβ:Bββ’ g (Sum.inl bβ) =
match Sum.inl bβ with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:TypeBβ:TypeY:Typegβ:Bβ βΆ Ygβ:Bβ βΆ Yg:Bβ β Bβ βΆ Yhgβ:g β Sum.inl = gβhgβ:g β Sum.inr = gβbβ:Bββ’ g (Sum.inr bβ) =
match Sum.inr bβ with
| Sum.inl bβ => gβ bβ
| Sum.inr bβ => gβ bβ All goals completed! π
}
In the category of graphs, the intuitive idea of sum can be formalised as follows:
def IGSum (Bβ Bβ : IrreflexiveGraph) : IrreflexiveGraph := {
carrierA := Sum Bβ.carrierA Bβ.carrierA
carrierD := Sum Bβ.carrierD Bβ.carrierD
toSrc := fun
| Sum.inl aβ => Sum.inl (Bβ.toSrc aβ)
| Sum.inr aβ => Sum.inr (Bβ.toSrc aβ)
toTgt := fun
| Sum.inl aβ => Sum.inl (Bβ.toTgt aβ)
| Sum.inr aβ => Sum.inr (Bβ.toTgt aβ)
}
def IGSum.inl {Bβ Bβ : IrreflexiveGraph} : Bβ βΆ IGSum Bβ Bβ := β¨
(Sum.inl, Sum.inl), π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inl, Sum.inl).2 β Bβ.toSrc = (IGSum Bβ Bβ).toSrc β (Sum.inl, Sum.inl).1 β§
(Sum.inl, Sum.inl).2 β Bβ.toTgt = (IGSum Bβ Bβ).toTgt β (Sum.inl, Sum.inl).1 π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inl, Sum.inl).2 β Bβ.toSrc = (IGSum Bβ Bβ).toSrc β (Sum.inl, Sum.inl).1π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inl, Sum.inl).2 β Bβ.toTgt = (IGSum Bβ Bβ).toTgt β (Sum.inl, Sum.inl).1 π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inl, Sum.inl).2 β Bβ.toSrc = (IGSum Bβ Bβ).toSrc β (Sum.inl, Sum.inl).1π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inl, Sum.inl).2 β Bβ.toTgt = (IGSum Bβ Bβ).toTgt β (Sum.inl, Sum.inl).1 All goals completed! π
β©
def IGSum.inr {Bβ Bβ : IrreflexiveGraph} : Bβ βΆ IGSum Bβ Bβ := β¨
(Sum.inr, Sum.inr), π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inr, Sum.inr).2 β Bβ.toSrc = (IGSum Bβ Bβ).toSrc β (Sum.inr, Sum.inr).1 β§
(Sum.inr, Sum.inr).2 β Bβ.toTgt = (IGSum Bβ Bβ).toTgt β (Sum.inr, Sum.inr).1 π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inr, Sum.inr).2 β Bβ.toSrc = (IGSum Bβ Bβ).toSrc β (Sum.inr, Sum.inr).1π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inr, Sum.inr).2 β Bβ.toTgt = (IGSum Bβ Bβ).toTgt β (Sum.inr, Sum.inr).1 π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inr, Sum.inr).2 β Bβ.toSrc = (IGSum Bβ Bβ).toSrc β (Sum.inr, Sum.inr).1π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphβ’ (Sum.inr, Sum.inr).2 β Bβ.toTgt = (IGSum Bβ Bβ).toTgt β (Sum.inr, Sum.inr).1 All goals completed! π
β©
We then show that IGSum satisfies the universal mapping property of our CategorySum structure.
example {Bβ Bβ : IrreflexiveGraph} : CategorySum Bβ Bβ := {
carrier := IGSum Bβ Bβ
jβ := IGSum.inl
jβ := IGSum.inr
h_univ Y gβ gβ:= π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β! g, g β IGSum.inl = gβ β§ g β IGSum.inr = gβ
use β¨
(fun
| Sum.inl aβ => gβ.val.1 aβ
| Sum.inr aβ => gβ.val.1 aβ,
fun
| Sum.inl dβ => gβ.val.2 dβ
| Sum.inr dβ => gβ.val.2 dβ),
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toSrc =
Y.toSrc β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1 β§
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toTgt =
Y.toTgt β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toSrc =
Y.toSrc β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toTgt =
Y.toTgt β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1 π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toSrc =
Y.toSrc β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toTgt =
Y.toTgt β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1 π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yx:(IGSum Bβ Bβ).carrierAβ’ ((fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toTgt)
x =
(Y.toTgt β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1)
x
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yx:(IGSum Bβ Bβ).carrierAβ’ ((fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toSrc)
x =
(Y.toSrc β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1)
x cases x with
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yaβ:Bβ.carrierAβ’ ((fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toSrc)
(Sum.inl aβ) =
(Y.toSrc β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1)
(Sum.inl aβ) All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yaβ:Bβ.carrierAβ’ ((fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toSrc)
(Sum.inr aβ) =
(Y.toSrc β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1)
(Sum.inr aβ) All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yx:(IGSum Bβ Bβ).carrierAβ’ ((fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toTgt)
x =
(Y.toTgt β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1)
x cases x with
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yaβ:Bβ.carrierAβ’ ((fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toTgt)
(Sum.inl aβ) =
(Y.toTgt β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1)
(Sum.inl aβ) All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yaβ:Bβ.carrierAβ’ ((fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).2 β
(IGSum Bβ Bβ).toTgt)
(Sum.inr aβ) =
(Y.toTgt β
(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ).1)
(Sum.inr aβ) All goals completed! π
β©
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun g β¦ g β IGSum.inl = gβ β§ g β IGSum.inr = gβ)
β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β (y : IGSum Bβ Bβ βΆ Y),
(fun g β¦ g β IGSum.inl = gβ β§ g β IGSum.inr = gβ) y β
y =
β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ (fun g β¦ g β IGSum.inl = gβ β§ g β IGSum.inr = gβ)
β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β© π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β© β
IGSum.inl =
gβπ:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β© β
IGSum.inr =
gβ π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β© β
IGSum.inl =
gβπ:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β© β
IGSum.inr =
gβ All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yβ’ β (y : IGSum Bβ Bβ βΆ Y),
(fun g β¦ g β IGSum.inl = gβ β§ g β IGSum.inr = gβ) y β
y =
β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β© intro g π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gββ’ g =
β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2β’ g =
β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2β’ g =
β¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2β’ (βg).1 =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).1π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2β’ (βg).2 =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).2 π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2β’ (βg).1 =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).1π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2β’ (βg).2 =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).2 π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2x:(IGSum Bβ Bβ).carrierDβ’ (βg).2 x =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).2
x
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2x:(IGSum Bβ Bβ).carrierAβ’ (βg).1 x =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).1
x cases x with
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2aβ:Bβ.carrierAβ’ (βg).1 (Sum.inl aβ) =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).1
(Sum.inl aβ) All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2aβ:Bβ.carrierAβ’ (βg).1 (Sum.inr aβ) =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).1
(Sum.inr aβ) All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2x:(IGSum Bβ Bβ).carrierDβ’ (βg).2 x =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).2
x cases x with
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2dβ:Bβ.carrierDβ’ (βg).2 (Sum.inl dβ) =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).2
(Sum.inl dβ) All goals completed! π
π:Type uinstβ:Category.{v, u} πBβ:IrreflexiveGraphBβ:IrreflexiveGraphY:IrreflexiveGraphgβ:Bβ βΆ Ygβ:Bβ βΆ Yg:IGSum Bβ Bβ βΆ Yhgβ:g β IGSum.inl = gβhgβ:g β IGSum.inr = gβhgβ1:(β(g β IGSum.inl)).1 = (βgβ).1hgβ2:(β(g β IGSum.inl)).2 = (βgβ).2hgβ1:(β(g β IGSum.inr)).1 = (βgβ).1hgβ2:(β(g β IGSum.inr)).2 = (βgβ).2dβ:Bβ.carrierDβ’ (βg).2 (Sum.inr dβ) =
(ββ¨(fun x β¦
match x with
| Sum.inl aβ => (βgβ).1 aβ
| Sum.inr aβ => (βgβ).1 aβ,
fun x β¦
match x with
| Sum.inl dβ => (βgβ).2 dβ
| Sum.inr dβ => (βgβ).2 dβ),
β―β©).2
(Sum.inr dβ) All goals completed! π
}