Theorem: List.dlookup_kunion_left
File: Mathlib/Data/List/Sigma.lean

tactic: induction' l₁ with s _ ih generalizing l₂ <;> simp at h
state_before: α : Type u
β : α → Type v
l l₁✝ l₂✝ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂ : List (Sigma β)
h : a ∈ keys l₁
⊢ dlookup a (kunion l₁ l₂) = dlookup a l₁

tactic: cases' h with h h <;> cases' s with a'
state_before: case cons
α : Type u
β : α → Type v
l l₁✝ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂✝ : List (Sigma β)
h✝ : a ∈ keys l₁
s : Sigma β
tail✝ : List (Sigma β)
ih : ∀ {l₂ : List (Sigma β)}, a ∈ keys tail✝ → dlookup a (kunion tail✝ l₂) = dlookup a tail✝
l₂ : List (Sigma β)
h : a = s.fst ∨ a ∈ keys tail✝
⊢ dlookup a (kunion (s :: tail✝) l₂) = dlookup a (s :: tail✝)

tactic: subst h
state_before: case cons.inl.mk
α : Type u
β : α → Type v
l l₁✝ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂✝ : List (Sigma β)
h✝ : a ∈ keys l₁
tail✝ : List (Sigma β)
ih : ∀ {l₂ : List (Sigma β)}, a ∈ keys tail✝ → dlookup a (kunion tail✝ l₂) = dlookup a tail✝
l₂ : List (Sigma β)
a' : α
snd✝ : β a'
h : a = { fst := a', snd := snd✝ }.fst
⊢ dlookup a (kunion ({ fst := a', snd := snd✝ } :: tail✝) l₂) = dlookup a ({ fst := a', snd := snd✝ } :: tail✝)

tactic: simp
state_before: case cons.inl.mk
α : Type u
β : α → Type v
l l₁✝ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂✝ : List (Sigma β)
h : a ∈ keys l₁
tail✝ : List (Sigma β)
ih : ∀ {l₂ : List (Sigma β)}, a ∈ keys tail✝ → dlookup a (kunion tail✝ l₂) = dlookup a tail✝
l₂ : List (Sigma β)
snd✝ : β a
⊢ dlookup a (kunion ({ fst := a, snd := snd✝ } :: tail✝) l₂) = dlookup a ({ fst := a, snd := snd✝ } :: tail✝)

tactic: rw [kunion_cons]
state_before: case cons.inr.mk
α : Type u
β : α → Type v
l l₁✝ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂✝ : List (Sigma β)
h✝ : a ∈ keys l₁
tail✝ : List (Sigma β)
ih : ∀ {l₂ : List (Sigma β)}, a ∈ keys tail✝ → dlookup a (kunion tail✝ l₂) = dlookup a tail✝
l₂ : List (Sigma β)
h : a ∈ keys tail✝
a' : α
snd✝ : β a'
⊢ dlookup a (kunion ({ fst := a', snd := snd✝ } :: tail✝) l₂) = dlookup a ({ fst := a', snd := snd✝ } :: tail✝)

tactic: by_cases h' : a = a'
state_before: case cons.inr.mk
α : Type u
β : α → Type v
l l₁✝ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂✝ : List (Sigma β)
h✝ : a ∈ keys l₁
tail✝ : List (Sigma β)
ih : ∀ {l₂ : List (Sigma β)}, a ∈ keys tail✝ → dlookup a (kunion tail✝ l₂) = dlookup a tail✝
l₂ : List (Sigma β)
h : a ∈ keys tail✝
a' : α
snd✝ : β a'
⊢ dlookup a ({ fst := a', snd := snd✝ } :: kunion tail✝ (kerase { fst := a', snd := snd✝ }.fst l₂)) =
    dlookup a ({ fst := a', snd := snd✝ } :: tail✝)

tactic: subst h'
state_before: case pos
α : Type u
β : α → Type v
l l₁✝ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂✝ : List (Sigma β)
h✝ : a ∈ keys l₁
tail✝ : List (Sigma β)
ih : ∀ {l₂ : List (Sigma β)}, a ∈ keys tail✝ → dlookup a (kunion tail✝ l₂) = dlookup a tail✝
l₂ : List (Sigma β)
h : a ∈ keys tail✝
a' : α
snd✝ : β a'
h' : a = a'
⊢ dlookup a ({ fst := a', snd := snd✝ } :: kunion tail✝ (kerase { fst := a', snd := snd✝ }.fst l₂)) =
    dlookup a ({ fst := a', snd := snd✝ } :: tail✝)

tactic: simp
state_before: case pos
α : Type u
β : α → Type v
l l₁✝ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂✝ : List (Sigma β)
h✝ : a ∈ keys l₁
tail✝ : List (Sigma β)
ih : ∀ {l₂ : List (Sigma β)}, a ∈ keys tail✝ → dlookup a (kunion tail✝ l₂) = dlookup a tail✝
l₂ : List (Sigma β)
h : a ∈ keys tail✝
snd✝ : β a
⊢ dlookup a ({ fst := a, snd := snd✝ } :: kunion tail✝ (kerase { fst := a, snd := snd✝ }.fst l₂)) =
    dlookup a ({ fst := a, snd := snd✝ } :: tail✝)

tactic: simp [h', ih h]
state_before: case neg
α : Type u
β : α → Type v
l l₁✝ l₂✝¹ : List (Sigma β)
inst✝ : DecidableEq α
a : α
l₁ l₂✝ : List (Sigma β)
h✝ : a ∈ keys l₁
tail✝ : List (Sigma β)
ih : ∀ {l₂ : List (Sigma β)}, a ∈ keys tail✝ → dlookup a (kunion tail✝ l₂) = dlookup a tail✝
l₂ : List (Sigma β)
h : a ∈ keys tail✝
a' : α
snd✝ : β a'
h' : ¬a = a'
⊢ dlookup a ({ fst := a', snd := snd✝ } :: kunion tail✝ (kerase { fst := a', snd := snd✝ }.fst l₂)) =
    dlookup a ({ fst := a', snd := snd✝ } :: tail✝)