Theorem: CategoryTheory.Limits.Types.Pushout.equivalence_rel'
File: Mathlib/CategoryTheory/Limits/Shapes/Types.lean

tactic: rintro x y z (_|⟨_, _, h⟩|s|_) hyz
state_before: S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
⊢ ∀ {x y z : X₁ ⊕ X₂}, Rel' f g x y → Rel' f g y z → Rel' f g x z
state_after: case refl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x z : X₁ ⊕ X₂
hyz : Rel' f g x z
⊢ Rel' f g x z

case inl_inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
z : X₁ ⊕ X₂
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
hyz : Rel' f g (Sum.inl (f y₀✝)) z
⊢ Rel' f g (Sum.inl (f x₀✝)) z

case inl_inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
z : X₁ ⊕ X₂
s : S
hyz : Rel' f g (Sum.inr (g s)) z
⊢ Rel' f g (Sum.inl (f s)) z

case inr_inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
z : X₁ ⊕ X₂
s✝ : S
hyz : Rel' f g (Sum.inl (f s✝)) z
⊢ Rel' f g (Sum.inr (g s✝)) z

tactic: exact hyz
state_before: case refl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x z : X₁ ⊕ X₂
hyz : Rel' f g x z
⊢ Rel' f g x z
state_after: no goals

tactic: obtain z₁|z₂ := z
state_before: case inl_inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
z : X₁ ⊕ X₂
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
hyz : Rel' f g (Sum.inl (f y₀✝)) z
⊢ Rel' f g (Sum.inl (f x₀✝)) z
state_after: case inl_inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
z₁ : X₁
hyz : Rel' f g (Sum.inl (f y₀✝)) (Sum.inl z₁)
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl z₁)

case inl_inl.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
z₂ : X₂
hyz : Rel' f g (Sum.inl (f y₀✝)) (Sum.inr z₂)
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr z₂)

tactic: rw [inl_rel'_inl_iff] at hyz
state_before: case inl_inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
z₁ : X₁
hyz : Rel' f g (Sum.inl (f y₀✝)) (Sum.inl z₁)
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl z₁)
state_after: case inl_inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
z₁ : X₁
hyz : f y₀✝ = z₁ ∨ ∃ x₀ y₀, ∃ (_ : g x₀ = g y₀), f y₀✝ = f x₀ ∧ z₁ = f y₀
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl z₁)

tactic: obtain rfl|⟨_, _, h', h'', rfl⟩ := hyz
state_before: case inl_inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
z₁ : X₁
hyz : f y₀✝ = z₁ ∨ ∃ x₀ y₀, ∃ (_ : g x₀ = g y₀), f y₀✝ = f x₀ ∧ z₁ = f y₀
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl z₁)
state_after: case inl_inl.inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl (f y₀✝))

case inl_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
w✝¹ w✝ : S
h' : g w✝¹ = g w✝
h'' : f y₀✝ = f w✝¹
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl (f w✝))

tactic: exact Rel'.inl_inl _ _ h
state_before: case inl_inl.inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl (f y₀✝))
state_after: no goals

tactic: obtain rfl := (mono_iff_injective f).1 inferInstance h''
state_before: case inl_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
w✝¹ w✝ : S
h' : g w✝¹ = g w✝
h'' : f y₀✝ = f w✝¹
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl (f w✝))
state_after: case inl_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
w✝ : S
h' : g y₀✝ = g w✝
h'' : f y₀✝ = f y₀✝
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl (f w✝))

tactic: exact Rel'.inl_inl _ _ (h.trans h')
state_before: case inl_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
w✝ : S
h' : g y₀✝ = g w✝
h'' : f y₀✝ = f y₀✝
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inl (f w✝))
state_after: no goals

tactic: rw [inl_rel'_inr_iff] at hyz
state_before: case inl_inl.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
z₂ : X₂
hyz : Rel' f g (Sum.inl (f y₀✝)) (Sum.inr z₂)
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr z₂)
state_after: case inl_inl.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
z₂ : X₂
hyz : ∃ s, f y₀✝ = f s ∧ z₂ = g s
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr z₂)

tactic: obtain ⟨s, hs, rfl⟩ := hyz
state_before: case inl_inl.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
z₂ : X₂
hyz : ∃ s, f y₀✝ = f s ∧ z₂ = g s
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr z₂)
state_after: case inl_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
s : S
hs : f y₀✝ = f s
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr (g s))

tactic: obtain rfl := (mono_iff_injective f).1 inferInstance hs
state_before: case inl_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
s : S
hs : f y₀✝ = f s
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr (g s))
state_after: case inl_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
hs : f y₀✝ = f y₀✝
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr (g y₀✝))

tactic: rw [← h]
state_before: case inl_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
hs : f y₀✝ = f y₀✝
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr (g y₀✝))
state_after: case inl_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
hs : f y₀✝ = f y₀✝
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr (g x₀✝))

tactic: apply Rel'.inl_inr
state_before: case inl_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
x₀✝ y₀✝ : S
h : g x₀✝ = g y₀✝
hs : f y₀✝ = f y₀✝
⊢ Rel' f g (Sum.inl (f x₀✝)) (Sum.inr (g x₀✝))
state_after: no goals

tactic: obtain z₁|z₂ := z
state_before: case inl_inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
z : X₁ ⊕ X₂
s : S
hyz : Rel' f g (Sum.inr (g s)) z
⊢ Rel' f g (Sum.inl (f s)) z
state_after: case inl_inr.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₁ : X₁
hyz : Rel' f g (Sum.inr (g s)) (Sum.inl z₁)
⊢ Rel' f g (Sum.inl (f s)) (Sum.inl z₁)

case inl_inr.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₂ : X₂
hyz : Rel' f g (Sum.inr (g s)) (Sum.inr z₂)
⊢ Rel' f g (Sum.inl (f s)) (Sum.inr z₂)

tactic: replace hyz := hyz.symm
state_before: case inl_inr.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₁ : X₁
hyz : Rel' f g (Sum.inr (g s)) (Sum.inl z₁)
⊢ Rel' f g (Sum.inl (f s)) (Sum.inl z₁)
state_after: case inl_inr.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₁ : X₁
hyz : Rel' f g (Sum.inl z₁) (Sum.inr (g s))
⊢ Rel' f g (Sum.inl (f s)) (Sum.inl z₁)

tactic: rw [inl_rel'_inr_iff] at hyz
state_before: case inl_inr.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₁ : X₁
hyz : Rel' f g (Sum.inl z₁) (Sum.inr (g s))
⊢ Rel' f g (Sum.inl (f s)) (Sum.inl z₁)
state_after: case inl_inr.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₁ : X₁
hyz : ∃ s_1, z₁ = f s_1 ∧ g s = g s_1
⊢ Rel' f g (Sum.inl (f s)) (Sum.inl z₁)

tactic: obtain ⟨s', rfl, hs'⟩ := hyz
state_before: case inl_inr.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₁ : X₁
hyz : ∃ s_1, z₁ = f s_1 ∧ g s = g s_1
⊢ Rel' f g (Sum.inl (f s)) (Sum.inl z₁)
state_after: case inl_inr.inl.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s s' : S
hs' : g s = g s'
⊢ Rel' f g (Sum.inl (f s)) (Sum.inl (f s'))

tactic: exact Rel'.inl_inl _ _ hs'
state_before: case inl_inr.inl.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s s' : S
hs' : g s = g s'
⊢ Rel' f g (Sum.inl (f s)) (Sum.inl (f s'))
state_after: no goals

tactic: rw [inr_rel'_inr_iff] at hyz
state_before: case inl_inr.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₂ : X₂
hyz : Rel' f g (Sum.inr (g s)) (Sum.inr z₂)
⊢ Rel' f g (Sum.inl (f s)) (Sum.inr z₂)
state_after: case inl_inr.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₂ : X₂
hyz : g s = z₂
⊢ Rel' f g (Sum.inl (f s)) (Sum.inr z₂)

tactic: subst hyz
state_before: case inl_inr.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
z₂ : X₂
hyz : g s = z₂
⊢ Rel' f g (Sum.inl (f s)) (Sum.inr z₂)
state_after: case inl_inr.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
⊢ Rel' f g (Sum.inl (f s)) (Sum.inr (g s))

tactic: apply Rel'.inl_inr
state_before: case inl_inr.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s : S
⊢ Rel' f g (Sum.inl (f s)) (Sum.inr (g s))
state_after: no goals

tactic: obtain z₁|z₂ := z
state_before: case inr_inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
z : X₁ ⊕ X₂
s✝ : S
hyz : Rel' f g (Sum.inl (f s✝)) z
⊢ Rel' f g (Sum.inr (g s✝)) z
state_after: case inr_inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
z₁ : X₁
hyz : Rel' f g (Sum.inl (f s✝)) (Sum.inl z₁)
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl z₁)

case inr_inl.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
z₂ : X₂
hyz : Rel' f g (Sum.inl (f s✝)) (Sum.inr z₂)
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inr z₂)

tactic: rw [inl_rel'_inl_iff] at hyz
state_before: case inr_inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
z₁ : X₁
hyz : Rel' f g (Sum.inl (f s✝)) (Sum.inl z₁)
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl z₁)
state_after: case inr_inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
z₁ : X₁
hyz : f s✝ = z₁ ∨ ∃ x₀ y₀, ∃ (_ : g x₀ = g y₀), f s✝ = f x₀ ∧ z₁ = f y₀
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl z₁)

tactic: obtain rfl|⟨_, _, h, h', rfl⟩  := hyz
state_before: case inr_inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
z₁ : X₁
hyz : f s✝ = z₁ ∨ ∃ x₀ y₀, ∃ (_ : g x₀ = g y₀), f s✝ = f x₀ ∧ z₁ = f y₀
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl z₁)
state_after: case inr_inl.inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl (f s✝))

case inr_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ w✝¹ w✝ : S
h : g w✝¹ = g w✝
h' : f s✝ = f w✝¹
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl (f w✝))

tactic: apply Rel'.inr_inl
state_before: case inr_inl.inl.inl
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl (f s✝))
state_after: no goals

tactic: obtain rfl := (mono_iff_injective f).1 inferInstance h'
state_before: case inr_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ w✝¹ w✝ : S
h : g w✝¹ = g w✝
h' : f s✝ = f w✝¹
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl (f w✝))
state_after: case inr_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ w✝ : S
h : g s✝ = g w✝
h' : f s✝ = f s✝
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl (f w✝))

tactic: rw [h]
state_before: case inr_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ w✝ : S
h : g s✝ = g w✝
h' : f s✝ = f s✝
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inl (f w✝))
state_after: case inr_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ w✝ : S
h : g s✝ = g w✝
h' : f s✝ = f s✝
⊢ Rel' f g (Sum.inr (g w✝)) (Sum.inl (f w✝))

tactic: apply Rel'.inr_inl
state_before: case inr_inl.inl.inr.intro.intro.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ w✝ : S
h : g s✝ = g w✝
h' : f s✝ = f s✝
⊢ Rel' f g (Sum.inr (g w✝)) (Sum.inl (f w✝))
state_after: no goals

tactic: rw [inl_rel'_inr_iff] at hyz
state_before: case inr_inl.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
z₂ : X₂
hyz : Rel' f g (Sum.inl (f s✝)) (Sum.inr z₂)
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inr z₂)
state_after: case inr_inl.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
z₂ : X₂
hyz : ∃ s, f s✝ = f s ∧ z₂ = g s
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inr z₂)

tactic: obtain ⟨s, hs, rfl⟩ := hyz
state_before: case inr_inl.inr
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
z₂ : X₂
hyz : ∃ s, f s✝ = f s ∧ z₂ = g s
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inr z₂)
state_after: case inr_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ s : S
hs : f s✝ = f s
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inr (g s))

tactic: obtain rfl := (mono_iff_injective f).1 inferInstance hs
state_before: case inr_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ s : S
hs : f s✝ = f s
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inr (g s))
state_after: case inr_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
hs : f s✝ = f s✝
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inr (g s✝))

tactic: apply Rel'.refl
state_before: case inr_inl.inr.intro.intro
S X₁ X₂ : Type u
f : S ⟶ X₁
g : S ⟶ X₂
inst✝ : Mono f
s✝ : S
hs : f s✝ = f s✝
⊢ Rel' f g (Sum.inr (g s✝)) (Sum.inr (g s✝))
state_after: no goals