-- Mathlib/Order/Basic.lean
lemma ltByCases_congr {x' y' : α} {h₁ : x < y → P} {h₂ : x = y → P} {h₃ : y < x → P}
    {h₁' : x' < y' → P} {h₂' : x' = y' → P} {h₃' : y' < x' → P} (ltc : (x < y) ↔ (x' < y'))
    (gtc : (y < x) ↔ (y' < x')) (hh'₁ : ∀ (h : x' < y'), h₁ (ltc.mpr h) = h₁' h)
    (hh'₂ : ∀ (h : x' = y'), h₂ ((eq_iff_eq_of_lt_iff_lt_of_gt_iff_gt ltc gtc).mpr h) = h₂' h)
    (hh'₃ : ∀ (h : y' < x'), h₃ (gtc.mpr h) = h₃' h) :
    ltByCases x y h₁ h₂ h₃ = ltByCases x' y' h₁' h₂' h₃'

Proof state:
case refine_2
α : Type u_2
inst✝ : LinearOrder α
P : Sort u_5
x y x' y' : α
h₁ : x < y → P
h₂ : x = y → P
h₃ : y < x → P
h₁' : x' < y' → P
h₂' : x' = y' → P
h₃' : y' < x' → P
ltc : x < y ↔ x' < y'
gtc : y < x ↔ y' < x'
hh'₁ : ∀ (h : x' < y'), h₁ ⋯ = h₁' h
hh'₂ : ∀ (h : x' = y'), h₂ ⋯ = h₂' h
hh'₃ : ∀ (h : y' < x'), h₃ ⋯ = h₃' h
h : x = y
⊢ h₂ h = ltByCases x' y' h₁' h₂' h₃'

Tactic:
rw [eq_iff_eq_of_lt_iff_lt_of_gt_iff_gt ltc gtc] at h

Result:
case refine_2
α : Type u_2
inst✝ : LinearOrder α
P : Sort u_5
x y x' y' : α
h₁ : x < y → P
h₂ : x = y → P
h₃ : y < x → P
h₁' : x' < y' → P
h₂' : x' = y' → P
h₃' : y' < x' → P
ltc : x < y ↔ x' < y'
gtc : y < x ↔ y' < x'
hh'₁ : ∀ (h : x' < y'), h₁ ⋯ = h₁' h
hh'₂ : ∀ (h : x' = y'), h₂ ⋯ = h₂' h
hh'₃ : ∀ (h : y' < x'), h₃ ⋯ = h₃' h
h✝ : x = y
h : x' = y'
⊢ h₂ h✝ = ltByCases x' y' h₁' h₂' h₃'

Proof state:
case refine_2
α : Type u_2
inst✝ : LinearOrder α
P : Sort u_5
x y x' y' : α
h₁ : x < y → P
h₂ : x = y → P
h₃ : y < x → P
h₁' : x' < y' → P
h₂' : x' = y' → P
h₃' : y' < x' → P
ltc : x < y ↔ x' < y'
gtc : y < x ↔ y' < x'
hh'₁ : ∀ (h : x' < y'), h₁ ⋯ = h₁' h
hh'₂ : ∀ (h : x' = y'), h₂ ⋯ = h₂' h
hh'₃ : ∀ (h : y' < x'), h₃ ⋯ = h₃' h
h✝ : x = y
h : x' = y'
⊢ h₂ h✝ = ltByCases x' y' h₁' h₂' h₃'

Tactic:
rw [ltByCases_eq h, hh'₂]

Result:
no goals

Proof state:
case refine_1
α : Type u_2
inst✝ : LinearOrder α
P : Sort u_5
x y x' y' : α
h₁ : x < y → P
h₂ : x = y → P
h₃ : y < x → P
h₁' : x' < y' → P
h₂' : x' = y' → P
h₃' : y' < x' → P
ltc : x < y ↔ x' < y'
gtc : y < x ↔ y' < x'
hh'₁ : ∀ (h : x' < y'), h₁ ⋯ = h₁' h
hh'₂ : ∀ (h : x' = y'), h₂ ⋯ = h₂' h
hh'₃ : ∀ (h : y' < x'), h₃ ⋯ = h₃' h
h : x < y
⊢ h₁ h = ltByCases x' y' h₁' h₂' h₃'

Tactic:
rw [ltByCases_lt (ltc.mp h), hh'₁]

Result:
no goals

Proof state:
case refine_3
α : Type u_2
inst✝ : LinearOrder α
P : Sort u_5
x y x' y' : α
h₁ : x < y → P
h₂ : x = y → P
h₃ : y < x → P
h₁' : x' < y' → P
h₂' : x' = y' → P
h₃' : y' < x' → P
ltc : x < y ↔ x' < y'
gtc : y < x ↔ y' < x'
hh'₁ : ∀ (h : x' < y'), h₁ ⋯ = h₁' h
hh'₂ : ∀ (h : x' = y'), h₂ ⋯ = h₂' h
hh'₃ : ∀ (h : y' < x'), h₃ ⋯ = h₃' h
h : y < x
⊢ h₃ h = ltByCases x' y' h₁' h₂' h₃'

Tactic:
rw [ltByCases_gt (gtc.mp h), hh'₃]

Result:
no goals

Proof state:
α : Type u_2
inst✝ : LinearOrder α
P : Sort u_5
x y x' y' : α
h₁ : x < y → P
h₂ : x = y → P
h₃ : y < x → P
h₁' : x' < y' → P
h₂' : x' = y' → P
h₃' : y' < x' → P
ltc : x < y ↔ x' < y'
gtc : y < x ↔ y' < x'
hh'₁ : ∀ (h : x' < y'), h₁ ⋯ = h₁' h
hh'₂ : ∀ (h : x' = y'), h₂ ⋯ = h₂' h
hh'₃ : ∀ (h : y' < x'), h₃ ⋯ = h₃' h
⊢ ltByCases x y h₁ h₂ h₃ = ltByCases x' y' h₁' h₂' h₃'

Tactic:
refine ltByCases_rec _ (fun h => ?_) (fun h => ?_) (fun h => ?_)

Result:
case refine_1
α : Type u_2
inst✝ : LinearOrder α
P : Sort u_5
x y x' y' : α
h₁ : x < y → P
h₂ : x = y → P
h₃ : y < x → P
h₁' : x' < y' → P
h₂' : x' = y' → P
h₃' : y' < x' → P
ltc : x < y ↔ x' < y'
gtc : y < x ↔ y' < x'
hh'₁ : ∀ (h : x' < y'), h₁ ⋯ = h₁' h
hh'₂ : ∀ (h : x' = y'), h₂ ⋯ = h₂' h
hh'₃ : ∀ (h : y' < x'), h₃ ⋯ = h₃' h
h : x < y
⊢ h₁ h = ltByCases x' y' h₁' h₂' h₃'

case refine_2
α : Type u_2
inst✝ : LinearOrder α
P : Sort u_5
x y x' y' : α
h₁ : x < y → P
h₂ : x = y → P
h₃ : y < x → P
h₁' : x' < y' → P
h₂' : x' = y' → P
h₃' : y' < x' → P
ltc : x < y ↔ x' < y'
gtc : y < x ↔ y' < x'
hh'₁ : ∀ (h : x' < y'), h₁ ⋯ = h₁' h
hh'₂ : ∀ (h : x' = y'), h₂ ⋯ = h₂' h
hh'₃ : ∀ (h : y' < x'), h₃ ⋯ = h₃' h
h : x = y
⊢ h₂ h = ltByCases x' y' h₁' h₂' h₃'

case refine_3
α : Type u_2
inst✝ : LinearOrder α
P : Sort u_5
x y x' y' : α
h₁ : x < y → P
h₂ : x = y → P
h₃ : y < x → P
h₁' : x' < y' → P
h₂' : x' = y' → P
h₃' : y' < x' → P
ltc : x < y ↔ x' < y'
gtc : y < x ↔ y' < x'
hh'₁ : ∀ (h : x' < y'), h₁ ⋯ = h₁' h
hh'₂ : ∀ (h : x' = y'), h₂ ⋯ = h₂' h
hh'₃ : ∀ (h : y' < x'), h₃ ⋯ = h₃' h
h : y < x
⊢ h₃ h = ltByCases x' y' h₁' h₂' h₃'