Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
(** Equalizers *) Definition Equalizer {A B} (f g : A -> B) := {x : A & f x = g x}.
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B -> B'
k: A -> A'
p: h o f == f' o k
q: h o g == g' o k

Equalizer f g -> Equalizer f' g'
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B -> B'
k: A -> A'
p: h o f == f' o k
q: h o g == g' o k

Equalizer f g -> Equalizer f' g'
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B -> B'
k: A -> A'
p: h o f == f' o k
q: h o g == g' o k
x: A
r: f x = g x

Equalizer f' g'
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B -> B'
k: A -> A'
p: h o f == f' o k
q: h o g == g' o k
x: A
r: f x = g x

f' (k x) = g' (k x)
exact ((p x)^ @ (ap h r) @ (q x)). Defined.
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B <~> B'
k: A <~> A'
p: h o f == f' o k
q: h o g == g' o k

Equalizer f g <~> Equalizer f' g'
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B <~> B'
k: A <~> A'
p: h o f == f' o k
q: h o g == g' o k

Equalizer f g <~> Equalizer f' g'
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B <~> B'
k: A <~> A'
p: h o f == f' o k
q: h o g == g' o k

{x : A & f x = g x} <~> {x : A' & f' x = g' x}
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B <~> B'
k: A <~> A'
p: h o f == f' o k
q: h o g == g' o k

forall a : A, (fun x : A => f x = g x) a <~> (fun x : A' => f' x = g' x) (k a)
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B <~> B'
k: A <~> A'
p: h o f == f' o k
q: h o g == g' o k

forall a : A, (fun x : A => f x = g x) a <~> (fun x : A' => f' x = g' x) (k a)
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B <~> B'
k: A <~> A'
p: h o f == f' o k
q: h o g == g' o k
a: A

f a = g a <~> f' (k a) = g' (k a)
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B <~> B'
k: A <~> A'
p: h o f == f' o k
q: h o g == g' o k
a: A

?Goal <~> f' (k a) = g' (k a)
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B <~> B'
k: A <~> A'
p: h o f == f' o k
q: h o g == g' o k
a: A
f a = g a <~> ?Goal
A, B, A', B': Type
f, g: A -> B
f', g': A' -> B'
h: B <~> B'
k: A <~> A'
p: h o f == f' o k
q: h o g == g' o k
a: A

h (f a) = h (g a) <~> f' (k a) = g' (k a)
exact (equiv_concat_r (q a) _ oE equiv_concat_l (p a)^ _). Defined.