Theorem: List.Perm.kunion_right
File: Mathlib/Data/List/Sigma.lean

tactic: induction p generalizing l
state_before: α : Type u
β : α → Type v
l✝ l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
p : l₁ ~ l₂
l : List (Sigma β)
⊢ kunion l₁ l ~ kunion l₂ l

tactic: case nil => rfl
state_before: case nil
α : Type u
β : α → Type v
l✝ l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ l : List (Sigma β)
⊢ kunion [] l ~ kunion [] l

case cons
α : Type u
β : α → Type v
l✝ l₁✝¹ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
x✝ : Sigma β
l₁✝ l₂✝ : List (Sigma β)
a✝ : l₁✝ ~ l₂✝
a_ih✝ : ∀ (l : List (Sigma β)), kunion l₁✝ l ~ kunion l₂✝ l
l : List (Sigma β)
⊢ kunion (x✝ :: l₁✝) l ~ kunion (x✝ :: l₂✝) l

case swap
α : Type u
β : α → Type v
l✝¹ l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
x✝ y✝ : Sigma β
l✝ : List (Sigma β)
l : List (Sigma β)
⊢ kunion (y✝ :: x✝ :: l✝) l ~ kunion (x✝ :: y✝ :: l✝) l

case trans
α : Type u
β : α → Type v
l✝ l₁✝¹ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
l₁✝ l₂✝ l₃✝ : List (Sigma β)
a✝¹ : l₁✝ ~ l₂✝
a✝ : l₂✝ ~ l₃✝
a_ih✝¹ : ∀ (l : List (Sigma β)), kunion l₁✝ l ~ kunion l₂✝ l
a_ih✝ : ∀ (l : List (Sigma β)), kunion l₂✝ l ~ kunion l₃✝ l
l : List (Sigma β)
⊢ kunion l₁✝ l ~ kunion l₃✝ l

tactic: case cons hd tl₁ tl₂ _ ih =>
  simp [ih (List.kerase _ _), Perm.cons]
state_before: case cons
α : Type u
β : α → Type v
l✝ l₁✝¹ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
x✝ : Sigma β
l₁✝ l₂✝ : List (Sigma β)
a✝ : l₁✝ ~ l₂✝
a_ih✝ : ∀ (l : List (Sigma β)), kunion l₁✝ l ~ kunion l₂✝ l
l : List (Sigma β)
⊢ kunion (x✝ :: l₁✝) l ~ kunion (x✝ :: l₂✝) l

case swap
α : Type u
β : α → Type v
l✝¹ l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
x✝ y✝ : Sigma β
l✝ : List (Sigma β)
l : List (Sigma β)
⊢ kunion (y✝ :: x✝ :: l✝) l ~ kunion (x✝ :: y✝ :: l✝) l

case trans
α : Type u
β : α → Type v
l✝ l₁✝¹ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
l₁✝ l₂✝ l₃✝ : List (Sigma β)
a✝¹ : l₁✝ ~ l₂✝
a✝ : l₂✝ ~ l₃✝
a_ih✝¹ : ∀ (l : List (Sigma β)), kunion l₁✝ l ~ kunion l₂✝ l
a_ih✝ : ∀ (l : List (Sigma β)), kunion l₂✝ l ~ kunion l₃✝ l
l : List (Sigma β)
⊢ kunion l₁✝ l ~ kunion l₃✝ l

tactic: case swap s₁ s₂ l => simp [kerase_comm, Perm.swap]
state_before: case swap
α : Type u
β : α → Type v
l✝¹ l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
x✝ y✝ : Sigma β
l✝ : List (Sigma β)
l : List (Sigma β)
⊢ kunion (y✝ :: x✝ :: l✝) l ~ kunion (x✝ :: y✝ :: l✝) l

case trans
α : Type u
β : α → Type v
l✝ l₁✝¹ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
l₁✝ l₂✝ l₃✝ : List (Sigma β)
a✝¹ : l₁✝ ~ l₂✝
a✝ : l₂✝ ~ l₃✝
a_ih✝¹ : ∀ (l : List (Sigma β)), kunion l₁✝ l ~ kunion l₂✝ l
a_ih✝ : ∀ (l : List (Sigma β)), kunion l₂✝ l ~ kunion l₃✝ l
l : List (Sigma β)
⊢ kunion l₁✝ l ~ kunion l₃✝ l

tactic: case trans l₁ l₂ l₃ _ _ ih₁₂ ih₂₃ => exact Perm.trans (ih₁₂ l) (ih₂₃ l)
state_before: case trans
α : Type u
β : α → Type v
l✝ l₁✝¹ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
l₁✝ l₂✝ l₃✝ : List (Sigma β)
a✝¹ : l₁✝ ~ l₂✝
a✝ : l₂✝ ~ l₃✝
a_ih✝¹ : ∀ (l : List (Sigma β)), kunion l₁✝ l ~ kunion l₂✝ l
a_ih✝ : ∀ (l : List (Sigma β)), kunion l₂✝ l ~ kunion l₃✝ l
l : List (Sigma β)
⊢ kunion l₁✝ l ~ kunion l₃✝ l

tactic: rfl
state_before: α : Type u
β : α → Type v
l✝ l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ l : List (Sigma β)
⊢ kunion [] l ~ kunion [] l

tactic: simp [ih (List.kerase _ _), Perm.cons]
state_before: α : Type u
β : α → Type v
l✝ l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
hd : Sigma β
tl₁ tl₂ : List (Sigma β)
a✝ : tl₁ ~ tl₂
ih : ∀ (l : List (Sigma β)), kunion tl₁ l ~ kunion tl₂ l
l : List (Sigma β)
⊢ kunion (hd :: tl₁) l ~ kunion (hd :: tl₂) l

tactic: simp [kerase_comm, Perm.swap]
state_before: α : Type u
β : α → Type v
l✝¹ l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
l₁ l₂ : List (Sigma β)
s₁ s₂ : Sigma β
l✝ : List (Sigma β)
l : List (Sigma β)
⊢ kunion (s₂ :: s₁ :: l✝) l ~ kunion (s₁ :: s₂ :: l✝) l

tactic: exact Perm.trans (ih₁₂ l) (ih₂₃ l)
state_before: α : Type u
β : α → Type v
l✝ l₁✝¹ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
l₁✝ l₂✝ : List (Sigma β)
l₁ l₂ l₃ : List (Sigma β)
a✝¹ : l₁ ~ l₂
a✝ : l₂ ~ l₃
ih₁₂ : ∀ (l : List (Sigma β)), kunion l₁ l ~ kunion l₂ l
ih₂₃ : ∀ (l : List (Sigma β)), kunion l₂ l ~ kunion l₃ l
l : List (Sigma β)
⊢ kunion l₁ l ~ kunion l₃ l