Theorem: Equiv.removeNone_aux_inv
File: Mathlib/Logic/Equiv/Option.lean

tactic: cases h1 : e.symm (some (removeNone_aux e x)) <;> cases h2 : e (some x)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x : α
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x
state_after: case none.none
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x : α
h1 : e.symm (some (e.removeNone_aux x)) = none
h2 : e (some x) = none
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x

case none.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x : α
h1 : e.symm (some (e.removeNone_aux x)) = none
val✝ : β
h2 : e (some x) = some val✝
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x

case some.none
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝ : α
h1 : e.symm (some (e.removeNone_aux x)) = some val✝
h2 : e (some x) = none
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x

case some.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝¹ : α
h1 : e.symm (some (e.removeNone_aux x)) = some val✝¹
val✝ : β
h2 : e (some x) = some val✝
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x

tactic: rw [removeNone_aux_none _ h1]
state_before: case none.none
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x : α
h1 : e.symm (some (e.removeNone_aux x)) = none
h2 : e (some x) = none
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x
state_after: case none.none
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x : α
h1 : e.symm (some (e.removeNone_aux x)) = none
h2 : e (some x) = none
⊢ e.symm none = some x

tactic: exact (e.eq_symm_apply.mpr h2).symm
state_before: case none.none
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x : α
h1 : e.symm (some (e.removeNone_aux x)) = none
h2 : e (some x) = none
⊢ e.symm none = some x
state_after: no goals

tactic: rw [removeNone_aux_some _ ⟨_, h2⟩] at h1
state_before: case none.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x : α
h1 : e.symm (some (e.removeNone_aux x)) = none
val✝ : β
h2 : e (some x) = some val✝
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x
state_after: case none.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x : α
h1 : e.symm (e (some x)) = none
val✝ : β
h2 : e (some x) = some val✝
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x

tactic: simp at h1
state_before: case none.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x : α
h1 : e.symm (e (some x)) = none
val✝ : β
h2 : e (some x) = some val✝
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x
state_after: no goals

tactic: rw [removeNone_aux_none _ h2] at h1
state_before: case some.none
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝ : α
h1 : e.symm (some (e.removeNone_aux x)) = some val✝
h2 : e (some x) = none
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x
state_after: case some.none
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝ : α
h1 : e.symm (e none) = some val✝
h2 : e (some x) = none
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x

tactic: simp at h1
state_before: case some.none
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝ : α
h1 : e.symm (e none) = some val✝
h2 : e (some x) = none
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x
state_after: no goals

tactic: rw [removeNone_aux_some _ ⟨_, h1⟩]
state_before: case some.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝¹ : α
h1 : e.symm (some (e.removeNone_aux x)) = some val✝¹
val✝ : β
h2 : e (some x) = some val✝
⊢ some (e.symm.removeNone_aux (e.removeNone_aux x)) = some x
state_after: case some.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝¹ : α
h1 : e.symm (some (e.removeNone_aux x)) = some val✝¹
val✝ : β
h2 : e (some x) = some val✝
⊢ e.symm (some (e.removeNone_aux x)) = some x

tactic: rw [removeNone_aux_some _ ⟨_, h2⟩]
state_before: case some.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝¹ : α
h1 : e.symm (some (e.removeNone_aux x)) = some val✝¹
val✝ : β
h2 : e (some x) = some val✝
⊢ e.symm (some (e.removeNone_aux x)) = some x
state_after: case some.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝¹ : α
h1 : e.symm (some (e.removeNone_aux x)) = some val✝¹
val✝ : β
h2 : e (some x) = some val✝
⊢ e.symm (e (some x)) = some x

tactic: simp
state_before: case some.some
α : Type u_1
β : Type u_2
γ : Type u_3
e : Option α ≃ Option β
x val✝¹ : α
h1 : e.symm (some (e.removeNone_aux x)) = some val✝¹
val✝ : β
h2 : e (some x) = some val✝
⊢ e.symm (e (some x)) = some x
state_after: no goals