Theorem: Relation.cutExpand_closed
File: Mathlib/Logic/Hydra.lean

tactic: intros s' s
state_before: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
⊢ ∀ {s' s : Multiset α}, CutExpand r s' s → (∀ a ∈ s, p a) → ∀ a ∈ s', p a
state_after: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s' s : Multiset α
⊢ CutExpand r s' s → (∀ a ∈ s, p a) → ∀ a ∈ s', p a

tactic: classical
rw [cutExpand_iff]
rintro ⟨t, a, hr, ha, rfl⟩ hsp a' h'
obtain (h'|h') := mem_add.1 h'
exacts [hsp a' (mem_of_mem_erase h'), h (hr a' h') (hsp a ha)]
state_before: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s' s : Multiset α
⊢ CutExpand r s' s → (∀ a ∈ s, p a) → ∀ a ∈ s', p a
state_after: no goals

tactic: rw [cutExpand_iff]
state_before: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s' s : Multiset α
⊢ CutExpand r s' s → (∀ a ∈ s, p a) → ∀ a ∈ s', p a
state_after: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s' s : Multiset α
⊢ (∃ t a, (∀ a' ∈ t, r a' a) ∧ a ∈ s ∧ s' = s.erase a + t) → (∀ a ∈ s, p a) → ∀ a ∈ s', p a

tactic: rintro ⟨t, a, hr, ha, rfl⟩ hsp a' h'
state_before: α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s' s : Multiset α
⊢ (∃ t a, (∀ a' ∈ t, r a' a) ∧ a ∈ s ∧ s' = s.erase a + t) → (∀ a ∈ s, p a) → ∀ a ∈ s', p a
state_after: case intro.intro.intro.intro
α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s t : Multiset α
a : α
hr : ∀ a' ∈ t, r a' a
ha : a ∈ s
hsp : ∀ a ∈ s, p a
a' : α
h' : a' ∈ s.erase a + t
⊢ p a'

tactic: obtain (h'|h') := mem_add.1 h'
state_before: case intro.intro.intro.intro
α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s t : Multiset α
a : α
hr : ∀ a' ∈ t, r a' a
ha : a ∈ s
hsp : ∀ a ∈ s, p a
a' : α
h' : a' ∈ s.erase a + t
⊢ p a'
state_after: case intro.intro.intro.intro.inl
α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s t : Multiset α
a : α
hr : ∀ a' ∈ t, r a' a
ha : a ∈ s
hsp : ∀ a ∈ s, p a
a' : α
h'✝ : a' ∈ s.erase a + t
h' : a' ∈ s.erase a
⊢ p a'

case intro.intro.intro.intro.inr
α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s t : Multiset α
a : α
hr : ∀ a' ∈ t, r a' a
ha : a ∈ s
hsp : ∀ a ∈ s, p a
a' : α
h'✝ : a' ∈ s.erase a + t
h' : a' ∈ t
⊢ p a'

tactic: exacts [hsp a' (mem_of_mem_erase h'), h (hr a' h') (hsp a ha)]
state_before: case intro.intro.intro.intro.inl
α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s t : Multiset α
a : α
hr : ∀ a' ∈ t, r a' a
ha : a ∈ s
hsp : ∀ a ∈ s, p a
a' : α
h'✝ : a' ∈ s.erase a + t
h' : a' ∈ s.erase a
⊢ p a'

case intro.intro.intro.intro.inr
α : Type u_1
r : α → α → Prop
inst✝ : IsIrrefl α r
p : α → Prop
h : ∀ {a' a : α}, r a' a → p a → p a'
s t : Multiset α
a : α
hr : ∀ a' ∈ t, r a' a
ha : a ∈ s
hsp : ∀ a ∈ s, p a
a' : α
h'✝ : a' ∈ s.erase a + t
h' : a' ∈ t
⊢ p a'
state_after: no goals