Theorem: Relation.TransGen.head_induction_on
File: Mathlib/Logic/Relation.lean

tactic: induction h
state_before: α : Type u_1
β : Type ?u.19922
γ : Type ?u.19925
δ : Type ?u.19928
r : α → α → Prop
a✝ b c d : α
P : (a : α) → TransGen r a b → Prop
a : α
h : TransGen r a b
base : ∀ {a : α} (h : r a b), P a (_ : TransGen r a b)
ih : ∀ {a c : α} (h' : r a c) (h : TransGen r c b), P c h → P a (_ : TransGen r a b)
⊢ P a h

tactic: case single a h => exact base h
state_before: case single
α : Type u_1
β : Type ?u.19922
γ : Type ?u.19925
δ : Type ?u.19928
r : α → α → Prop
a✝¹ b c d a b✝ : α
a✝ : r a b✝
P : (a : α) → TransGen r a b✝ → Prop
base : ∀ {a : α} (h : r a b✝), P a (_ : TransGen r a b✝)
ih : ∀ {a c : α} (h' : r a c) (h : TransGen r c b✝), P c h → P a (_ : TransGen r a b✝)
⊢ P a (_ : TransGen r a b✝)

case tail
α : Type u_1
β : Type ?u.19922
γ : Type ?u.19925
δ : Type ?u.19928
r : α → α → Prop
a✝² b c d a b✝ c✝ : α
a✝¹ : TransGen r a b✝
a✝ : r b✝ c✝
a_ih✝ :
  ∀ {P : (a : α) → TransGen r a b✝ → Prop},
    (∀ {a : α} (h : r a b✝), P a (_ : TransGen r a b✝)) →
      (∀ {a c : α} (h' : r a c) (h : TransGen r c b✝), P c h → P a (_ : TransGen r a b✝)) → P a a✝¹
P : (a : α) → TransGen r a c✝ → Prop
base : ∀ {a : α} (h : r a c✝), P a (_ : TransGen r a c✝)
ih : ∀ {a c : α} (h' : r a c) (h : TransGen r c c✝), P c h → P a (_ : TransGen r a c✝)
⊢ P a (_ : TransGen r a c✝)

tactic: case tail b c _ hbc h_ih =>
refine @h_ih (λ {a : α} (hab : @TransGen α r a b) => P a (TransGen.tail hab hbc)) ?_ ?_;
exact fun h ↦ ih h (single hbc) (base hbc)
exact fun hab hbc ↦ ih hab _
state_before: case tail
α : Type u_1
β : Type ?u.19922
γ : Type ?u.19925
δ : Type ?u.19928
r : α → α → Prop
a✝² b c d a b✝ c✝ : α
a✝¹ : TransGen r a b✝
a✝ : r b✝ c✝
a_ih✝ :
  ∀ {P : (a : α) → TransGen r a b✝ → Prop},
    (∀ {a : α} (h : r a b✝), P a (_ : TransGen r a b✝)) →
      (∀ {a c : α} (h' : r a c) (h : TransGen r c b✝), P c h → P a (_ : TransGen r a b✝)) → P a a✝¹
P : (a : α) → TransGen r a c✝ → Prop
base : ∀ {a : α} (h : r a c✝), P a (_ : TransGen r a c✝)
ih : ∀ {a c : α} (h' : r a c) (h : TransGen r c c✝), P c h → P a (_ : TransGen r a c✝)
⊢ P a (_ : TransGen r a c✝)

tactic: exact base h
state_before: α : Type u_1
β : Type ?u.19922
γ : Type ?u.19925
δ : Type ?u.19928
r : α → α → Prop
a✝¹ b c d a✝ a : α
h : r a✝ a
P : (a_1 : α) → TransGen r a_1 a → Prop
base : ∀ {a_1 : α} (h : r a_1 a), P a_1 (_ : TransGen r a_1 a)
ih : ∀ {a_1 c : α} (h' : r a_1 c) (h : TransGen r c a), P c h → P a_1 (_ : TransGen r a_1 a)
⊢ P a✝ (_ : TransGen r a✝ a)

tactic: refine @h_ih (λ {a : α} (hab : @TransGen α r a b) => P a (TransGen.tail hab hbc)) ?_ ?_
state_before: α : Type u_1
β : Type ?u.19922
γ : Type ?u.19925
δ : Type ?u.19928
r : α → α → Prop
a✝¹ b✝ c✝ d a b c : α
a✝ : TransGen r a b
hbc : r b c
h_ih :
  ∀ {P : (a : α) → TransGen r a b → Prop},
    (∀ {a : α} (h : r a b), P a (_ : TransGen r a b)) →
      (∀ {a c : α} (h' : r a c) (h : TransGen r c b), P c h → P a (_ : TransGen r a b)) → P a a✝
P : (a : α) → TransGen r a c → Prop
base : ∀ {a : α} (h : r a c), P a (_ : TransGen r a c)
ih : ∀ {a c_1 : α} (h' : r a c_1) (h : TransGen r c_1 c), P c_1 h → P a (_ : TransGen r a c)
⊢ P a (_ : TransGen r a c)

tactic: exact fun h ↦ ih h (single hbc) (base hbc)
state_before: case refine_1
α : Type u_1
β : Type ?u.19922
γ : Type ?u.19925
δ : Type ?u.19928
r : α → α → Prop
a✝¹ b✝ c✝ d a b c : α
a✝ : TransGen r a b
hbc : r b c
h_ih :
  ∀ {P : (a : α) → TransGen r a b → Prop},
    (∀ {a : α} (h : r a b), P a (_ : TransGen r a b)) →
      (∀ {a c : α} (h' : r a c) (h : TransGen r c b), P c h → P a (_ : TransGen r a b)) → P a a✝
P : (a : α) → TransGen r a c → Prop
base : ∀ {a : α} (h : r a c), P a (_ : TransGen r a c)
ih : ∀ {a c_1 : α} (h' : r a c_1) (h : TransGen r c_1 c), P c_1 h → P a (_ : TransGen r a c)
⊢ ∀ {a : α} (h : r a b), (fun {a} hab => P a (_ : TransGen r a c)) (_ : TransGen r a b)

case refine_2
α : Type u_1
β : Type ?u.19922
γ : Type ?u.19925
δ : Type ?u.19928
r : α → α → Prop
a✝¹ b✝ c✝ d a b c : α
a✝ : TransGen r a b
hbc : r b c
h_ih :
  ∀ {P : (a : α) → TransGen r a b → Prop},
    (∀ {a : α} (h : r a b), P a (_ : TransGen r a b)) →
      (∀ {a c : α} (h' : r a c) (h : TransGen r c b), P c h → P a (_ : TransGen r a b)) → P a a✝
P : (a : α) → TransGen r a c → Prop
base : ∀ {a : α} (h : r a c), P a (_ : TransGen r a c)
ih : ∀ {a c_1 : α} (h' : r a c_1) (h : TransGen r c_1 c), P c_1 h → P a (_ : TransGen r a c)
⊢ ∀ {a c_1 : α} (h' : r a c_1) (h : TransGen r c_1 b),
    (fun {a} hab => P a (_ : TransGen r a c)) h → (fun {a} hab => P a (_ : TransGen r a c)) (_ : TransGen r a b)

tactic: exact fun hab hbc ↦ ih hab _
state_before: case refine_2
α : Type u_1
β : Type ?u.19922
γ : Type ?u.19925
δ : Type ?u.19928
r : α → α → Prop
a✝¹ b✝ c✝ d a b c : α
a✝ : TransGen r a b
hbc : r b c
h_ih :
  ∀ {P : (a : α) → TransGen r a b → Prop},
    (∀ {a : α} (h : r a b), P a (_ : TransGen r a b)) →
      (∀ {a c : α} (h' : r a c) (h : TransGen r c b), P c h → P a (_ : TransGen r a b)) → P a a✝
P : (a : α) → TransGen r a c → Prop
base : ∀ {a : α} (h : r a c), P a (_ : TransGen r a c)
ih : ∀ {a c_1 : α} (h' : r a c_1) (h : TransGen r c_1 c), P c_1 h → P a (_ : TransGen r a c)
⊢ ∀ {a c_1 : α} (h' : r a c_1) (h : TransGen r c_1 b),
    (fun {a} hab => P a (_ : TransGen r a c)) h → (fun {a} hab => P a (_ : TransGen r a c)) (_ : TransGen r a b)