A Lean Companion to Conceptual Mathematics

Session 29: Binary operations and diagonal argumentsπŸ”—

2. Cantor's diagonal argumentπŸ”—

Diagonal Theorem (p. 304)

(In any category with products) If Y is an object such that there exists an object T with enough points to parameterize all the maps {T \rightarrow Y} by means of some single map {T \times T \xrightarrow{f} Y}, then Y has the 'fixed point property': every endomap {Y \xrightarrow{\alpha} Y} of Y has at least one point {\mathbf{1} \xrightarrow{y} Y} for which {\alpha y = y}.

Proof (p. 304–305)

Assume Y, T, f, and \alpha given. Then there is the diagonal map {T \rightarrow T \times T} as always (which maps every element t to {\langle t,t \rangle}), so we can form the three-fold composite {g: T \rightarrow Y}. This new map by its construction satisfies g(t) = \alpha(f(t,t)) for every point t of T. We have assumed that every map {T \rightarrow Y} is named as {f(-,x)} for some point {\mathbf{1} \xrightarrow{x} T}, and g is such a map {T \rightarrow Y}. So let {x = t_0} be a parameter value corresponding to our g, i.e. {g = f(-,t_0)}, so that g(t) = f(t,t_0) for all t. Taking the special case t = t_0, we have g(t_0) = f(t_0,t_0) which by the definition of g says \alpha(f(t_0,t_0)) = f(t_0,t_0) or, in other words, that {y_0 = f(t_0,t_0)} defines a point of Y which is fixed by \alpha: \alpha(y_0) = y_0

Our implementation in Lean faithfully follows the argument of the book proof given above.

theorem diagonal_theorem {π’ž : Type u} [Category.{v, u} π’ž] {T Y : π’ž} [HasBinaryProduct T T] [HasTerminal π’ž] (h : βˆƒ f : T β¨― T ⟢ Y, βˆ€ e : T ⟢ Y, βˆƒ x : ⊀_ π’ž ⟢ T, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)) : βˆ€ Ξ± : Y ⟢ Y, βˆƒ y : ⊀_ π’ž ⟢ Y, Ξ± ⊚ y = y := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Y⊒ βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)⊒ βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)⊒ βˆƒ y, Ξ± ⊚ y = y have hgtβ‚€ : g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€ := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y have : prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.lift tβ‚€ tβ‚€ := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)⊒ prod.fst ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.fst ⊚ prod.lift tβ‚€ tβ‚€π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)⊒ prod.snd ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.snd ⊚ prod.lift tβ‚€ tβ‚€ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)⊒ prod.fst ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.fst ⊚ prod.lift tβ‚€ tβ‚€ All goals completed! πŸ™ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)⊒ prod.snd ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.snd ⊚ prod.lift tβ‚€ tβ‚€ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)⊒ tβ‚€ ⊚ terminal.from T ⊚ tβ‚€ = tβ‚€ nth_rw 3 [← Category.id_comp tβ‚€π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)⊒ tβ‚€ ⊚ terminal.from T ⊚ tβ‚€ = tβ‚€ ⊚ πŸ™ (⊀_ π’ž) All goals completed! πŸ™ All goals completed! πŸ™ have hΞ± : Ξ± ⊚ f ⊚ prod.lift tβ‚€ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€ := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y have : prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.lift tβ‚€ tβ‚€ := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)hgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€βŠ’ prod.fst ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.fst ⊚ prod.lift tβ‚€ tβ‚€π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)hgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€βŠ’ prod.snd ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.snd ⊚ prod.lift tβ‚€ tβ‚€ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)hgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€βŠ’ prod.fst ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.fst ⊚ prod.lift tβ‚€ tβ‚€ All goals completed! πŸ™ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)hgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€βŠ’ prod.snd ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.snd ⊚ prod.lift tβ‚€ tβ‚€ All goals completed! πŸ™ nth_rw 2 [← hgtβ‚€π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)hgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€this:prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.lift tβ‚€ tβ‚€βŠ’ Ξ± ⊚ f ⊚ prod.lift tβ‚€ tβ‚€ = g ⊚ tβ‚€ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)hgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€this:prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.lift tβ‚€ tβ‚€βŠ’ Ξ± ⊚ f ⊚ prod.lift tβ‚€ tβ‚€ = (Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)) ⊚ tβ‚€ All goals completed! πŸ™ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, e = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)Ξ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T)yβ‚€:⊀_ π’ž ⟢ Y := f ⊚ prod.lift tβ‚€ tβ‚€hgtβ‚€:g ⊚ tβ‚€ = yβ‚€hΞ±:Ξ± ⊚ yβ‚€ = yβ‚€βŠ’ βˆƒ y, Ξ± ⊚ y = y All goals completed! πŸ™
Cantor's Contrapositive Corollary (p. 305)

If Y is an object known to have at least one endomap \alpha which has no fixed points, then for every object T and for every attempt {f: T \times T \rightarrow Y} to parameterize maps {T \rightarrow Y} by points of T, there must be at least one map {T \rightarrow Y} which is left out of the family, i.e. does not occur as {f(-,x)} for any point x in T.

Proof (p. 305)

Use \alpha and the diagonal as above to make f itself produce an example g which f leaves out.

Our implementation in Lean follows the structure of the Diagonal Theorem proof.

theorem cantor's_contrapositive_corollary {π’ž : Type u} [Category.{v, u} π’ž] {T Y : π’ž} [HasBinaryProduct T T] [HasTerminal π’ž] (h : βˆƒ Ξ± : Y ⟢ Y, βˆ€ y : ⊀_ π’ž ⟢ Y, Ξ± ⊚ y β‰  y) : βˆ€ f : T β¨― T ⟢ Y, βˆƒ g : T ⟢ Y, βˆ€ x : ⊀_ π’ž ⟢ T, g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ Ξ±, βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  y⊒ βˆ€ (f : T β¨― T ⟢ Y), βˆƒ g, βˆ€ (x : ⊀_ π’ž ⟢ T), g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  y⊒ βˆ€ (f : T β¨― T ⟢ Y), βˆƒ g, βˆ€ (x : ⊀_ π’ž ⟢ T), g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Y⊒ βˆƒ g, βˆ€ (x : ⊀_ π’ž ⟢ T), g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)⊒ βˆƒ g, βˆ€ (x : ⊀_ π’ž ⟢ T), g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)⊒ βˆ€ (x : ⊀_ π’ž ⟢ T), g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) intro x π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ False have hgx : g ⊚ x = f ⊚ prod.lift x x := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ Ξ±, βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  y⊒ βˆ€ (f : T β¨― T ⟢ Y), βˆƒ g, βˆ€ (x : ⊀_ π’ž ⟢ T), g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) have : prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ x = prod.lift x x := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ Ξ±, βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  y⊒ βˆ€ (f : T β¨― T ⟢ Y), βˆƒ g, βˆ€ (x : ⊀_ π’ž ⟢ T), g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ prod.fst ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ x = prod.fst ⊚ prod.lift x xπ’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ prod.snd ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ x = prod.snd ⊚ prod.lift x x π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ prod.fst ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ x = prod.fst ⊚ prod.lift x x All goals completed! πŸ™ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ prod.snd ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ x = prod.snd ⊚ prod.lift x x π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ x ⊚ terminal.from T ⊚ x = x nth_rw 3 [← Category.id_comp xπ’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)⊒ x ⊚ terminal.from T ⊚ x = x ⊚ πŸ™ (⊀_ π’ž) All goals completed! πŸ™ All goals completed! πŸ™ have hΞ± : Ξ± ⊚ f ⊚ prod.lift x x = f ⊚ prod.lift x x := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ Ξ±, βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  y⊒ βˆ€ (f : T β¨― T ⟢ Y), βˆƒ g, βˆ€ (x : ⊀_ π’ž ⟢ T), g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) have : prod.lift (πŸ™ T) (πŸ™ T) ⊚ x = prod.lift x x := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ Ξ±, βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  y⊒ βˆ€ (f : T β¨― T ⟢ Y), βˆƒ g, βˆ€ (x : ⊀_ π’ž ⟢ T), g β‰  f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)hgx:g ⊚ x = f ⊚ prod.lift x x⊒ prod.fst ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ x = prod.fst ⊚ prod.lift x xπ’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)hgx:g ⊚ x = f ⊚ prod.lift x x⊒ prod.snd ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ x = prod.snd ⊚ prod.lift x x π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)hgx:g ⊚ x = f ⊚ prod.lift x x⊒ prod.fst ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ x = prod.fst ⊚ prod.lift x x All goals completed! πŸ™ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)hgx:g ⊚ x = f ⊚ prod.lift x x⊒ prod.snd ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ x = prod.snd ⊚ prod.lift x x All goals completed! πŸ™ nth_rw 2 [← hgxπ’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)hgx:g ⊚ x = f ⊚ prod.lift x xthis:prod.lift (πŸ™ T) (πŸ™ T) ⊚ x = prod.lift x x⊒ Ξ± ⊚ f ⊚ prod.lift x x = g ⊚ x π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)hgx:g ⊚ x = f ⊚ prod.lift x xthis:prod.lift (πŸ™ T) (πŸ™ T) ⊚ x = prod.lift x x⊒ Ξ± ⊚ f ⊚ prod.lift x x = (Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)) ⊚ x All goals completed! πŸ™ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)yβ‚€:⊀_ π’ž ⟢ Y := f ⊚ prod.lift x xhgx:g ⊚ x = yβ‚€hΞ±:Ξ± ⊚ yβ‚€ = yβ‚€βŠ’ False π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žΞ±:Y ⟢ Yh':βˆ€ (y : ⊀_ π’ž ⟢ Y), Ξ± ⊚ y β‰  yf:T β¨― T ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)x:⊀_ π’ž ⟢ Thg:g = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T)yβ‚€:⊀_ π’ž ⟢ Y := f ⊚ prod.lift x xhgx:g ⊚ x = yβ‚€hΞ±:Ξ± ⊚ yβ‚€ = yβ‚€βŠ’ Ξ± ⊚ yβ‚€ = yβ‚€ All goals completed! πŸ™
Exercise 1 (p. 306)

Cantor's proof, if you read it carefully, really tells us a bit more. Rewrite the proof to show that if {T \times T \xrightarrow{f} Y} weakly parameterizes all maps {T \rightarrow Y}, then Y has the fixed point property. To say that {T \times T \xrightarrow{f} Y} 'weakly' parameterizes all maps {T \rightarrow Y} means that for each {T \xrightarrow{g} Y} there is a point {\mathbf{1} \xrightarrow{x} X} such that (letting \xi stand for the map whose components are the identity and the constant map with value x) the composite map {h = f \circ \xi} T \xrightarrow{\xi} T \times T \xrightarrow{f} Y agrees with {T \xrightarrow{g} Y} on points; i.e. for each point {\mathbf{1} \xrightarrow{t} T}, {g \circ t = h \circ t}. (In the category of sets that says {g = h}; but as we have seen, in other categories it says much less.)

Solution: Exercise 1

cf. Our formalisation of the Diagonal Theorem above.

example {π’ž : Type u} [Category.{v, u} π’ž] {T Y : π’ž} [HasBinaryProduct T T] [HasTerminal π’ž] (h : βˆƒ f : T β¨― T ⟢ Y, βˆ€ e : T ⟢ Y, βˆƒ x : ⊀_ π’ž ⟢ T, βˆ€ t : ⊀_ π’ž ⟢ T, e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ t) : βˆ€ Ξ± : Y ⟢ Y, βˆƒ y : ⊀_ π’ž ⟢ Y, Ξ± ⊚ y = y := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ t⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ t⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Y⊒ βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)⊒ βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ t⊒ βˆƒ y, Ξ± ⊚ y = y have hgtβ‚€ : g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€ := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ t⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y have : prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.lift tβ‚€ tβ‚€ := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ t⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ t⊒ prod.fst ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.fst ⊚ prod.lift tβ‚€ tβ‚€π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ t⊒ prod.snd ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.snd ⊚ prod.lift tβ‚€ tβ‚€ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ t⊒ prod.fst ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.fst ⊚ prod.lift tβ‚€ tβ‚€ All goals completed! πŸ™ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ t⊒ prod.snd ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tβ‚€ = prod.snd ⊚ prod.lift tβ‚€ tβ‚€ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ t⊒ tβ‚€ ⊚ terminal.from T ⊚ tβ‚€ = tβ‚€ nth_rw 3 [← Category.id_comp tβ‚€π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ t⊒ tβ‚€ ⊚ terminal.from T ⊚ tβ‚€ = tβ‚€ ⊚ πŸ™ (⊀_ π’ž) All goals completed! πŸ™ All goals completed! πŸ™ have hΞ± : Ξ± ⊚ f ⊚ prod.lift tβ‚€ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€ := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ t⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y have : prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.lift tβ‚€ tβ‚€ := π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žh:βˆƒ f, βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ t⊒ βˆ€ (Ξ± : Y ⟢ Y), βˆƒ y, Ξ± ⊚ y = y π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ thgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€βŠ’ prod.fst ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.fst ⊚ prod.lift tβ‚€ tβ‚€π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ thgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€βŠ’ prod.snd ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.snd ⊚ prod.lift tβ‚€ tβ‚€ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ thgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€βŠ’ prod.fst ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.fst ⊚ prod.lift tβ‚€ tβ‚€ All goals completed! πŸ™ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ thgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€βŠ’ prod.snd ⊚ prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.snd ⊚ prod.lift tβ‚€ tβ‚€ All goals completed! πŸ™ nth_rw 2 [← hgtβ‚€π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ thgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€this:prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.lift tβ‚€ tβ‚€βŠ’ Ξ± ⊚ f ⊚ prod.lift tβ‚€ tβ‚€ = g ⊚ tβ‚€ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ thgtβ‚€:g ⊚ tβ‚€ = f ⊚ prod.lift tβ‚€ tβ‚€this:prod.lift (πŸ™ T) (πŸ™ T) ⊚ tβ‚€ = prod.lift tβ‚€ tβ‚€βŠ’ Ξ± ⊚ f ⊚ prod.lift tβ‚€ tβ‚€ = (Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)) ⊚ tβ‚€ All goals completed! πŸ™ π’ž:Type uinst✝²:Category.{v, u} π’žT:π’žY:π’žinst✝¹:HasBinaryProduct T Tinst✝:HasTerminal π’žf:T β¨― T ⟢ Yh':βˆ€ (e : T ⟢ Y), βˆƒ x, βˆ€ (t : ⊀_ π’ž ⟢ T), e ⊚ t = f ⊚ prod.lift (πŸ™ T) (x ⊚ terminal.from T) ⊚ tΞ±:Y ⟢ Yg:T ⟢ Y := Ξ± ⊚ f ⊚ prod.lift (πŸ™ T) (πŸ™ T)tβ‚€:⊀_ π’ž ⟢ Thg:βˆ€ (t : ⊀_ π’ž ⟢ T), g ⊚ t = f ⊚ prod.lift (πŸ™ T) (tβ‚€ ⊚ terminal.from T) ⊚ tyβ‚€:⊀_ π’ž ⟢ Y := f ⊚ prod.lift tβ‚€ tβ‚€hgtβ‚€:g ⊚ tβ‚€ = yβ‚€hΞ±:Ξ± ⊚ yβ‚€ = yβ‚€βŠ’ βˆƒ y, Ξ± ⊚ y = y All goals completed! πŸ™