Theorem: List.Subperm.diff_right
File: .lake/packages/batteries/Batteries/Data/List/Perm.lean

tactic: split <;> rename_i hx1
state_before: case cons
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
⊢ (if x ∈ l₁ then (l₁.erase x).diff t else l₁.diff t) <+~ if x ∈ l₂ then (l₂.erase x).diff t else l₂.diff t
state_after: case cons.isTrue
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : x ∈ l₁
⊢ (l₁.erase x).diff t <+~ if x ∈ l₂ then (l₂.erase x).diff t else l₂.diff t

case cons.isFalse
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : ¬x ∈ l₁
⊢ l₁.diff t <+~ if x ∈ l₂ then (l₂.erase x).diff t else l₂.diff t

tactic: simp [h.subset hx1]
state_before: case cons.isTrue
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : x ∈ l₁
⊢ (l₁.erase x).diff t <+~ if x ∈ l₂ then (l₂.erase x).diff t else l₂.diff t
state_after: case cons.isTrue
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : x ∈ l₁
⊢ (l₁.erase x).diff t <+~ (l₂.erase x).diff t

tactic: exact ih (h.erase _)
state_before: case cons.isTrue
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : x ∈ l₁
⊢ (l₁.erase x).diff t <+~ (l₂.erase x).diff t
state_after: no goals

tactic: split
state_before: case cons.isFalse
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : ¬x ∈ l₁
⊢ l₁.diff t <+~ if x ∈ l₂ then (l₂.erase x).diff t else l₂.diff t
state_after: case cons.isFalse.isTrue
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : ¬x ∈ l₁
h✝ : x ∈ l₂
⊢ l₁.diff t <+~ (l₂.erase x).diff t

case cons.isFalse.isFalse
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : ¬x ∈ l₁
h✝ : ¬x ∈ l₂
⊢ l₁.diff t <+~ l₂.diff t

tactic: rw [← erase_of_not_mem hx1]
state_before: case cons.isFalse.isTrue
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : ¬x ∈ l₁
h✝ : x ∈ l₂
⊢ l₁.diff t <+~ (l₂.erase x).diff t
state_after: case cons.isFalse.isTrue
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : ¬x ∈ l₁
h✝ : x ∈ l₂
⊢ (l₁.erase x).diff t <+~ (l₂.erase x).diff t

tactic: exact ih (h.erase _)
state_before: case cons.isFalse.isTrue
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : ¬x ∈ l₁
h✝ : x ∈ l₂
⊢ (l₁.erase x).diff t <+~ (l₂.erase x).diff t
state_after: no goals

tactic: exact ih h
state_before: case cons.isFalse.isFalse
α : Type u_1
inst✝ : DecidableEq α
x : α
t : List α
ih : ∀ {l₁ l₂ : List α}, l₁ <+~ l₂ → l₁.diff t <+~ l₂.diff t
l₁ l₂ : List α
h : l₁ <+~ l₂
hx1 : ¬x ∈ l₁
h✝ : ¬x ∈ l₂
⊢ l₁.diff t <+~ l₂.diff t
state_after: no goals