Theorem: Equiv.Perm.subtypeCongr.trans
File: Mathlib/Logic/Equiv/Basic.lean

tactic: ext x
state_before: ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
⊢ Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en') = subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')
state_after: case H
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x

tactic: by_cases h:p x
state_before: case H
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x
state_after: case pos
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
h : p x
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x

case neg
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
h : ¬p x
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x

tactic: have : p (ep ⟨x, h⟩) := Subtype.property _
state_before: case pos
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
h : p x
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x
state_after: case pos
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
h : p x
this : p ↑(ep ⟨x, h⟩)
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x

tactic: simp [Perm.subtypeCongr.apply, h, this]
state_before: case pos
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
h : p x
this : p ↑(ep ⟨x, h⟩)
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x
state_after: no goals

tactic: have : ¬p (en ⟨x, h⟩) := Subtype.property (en _)
state_before: case neg
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
h : ¬p x
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x
state_after: case neg
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
h : ¬p x
this : ¬p ↑(en ⟨x, h⟩)
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x

tactic: simp [Perm.subtypeCongr.apply, h, symm_apply_eq, this]
state_before: case neg
ε : Type u_1
p : ε → Prop
inst✝ : DecidablePred p
ep ep' : Perm { a // p a }
en en' : Perm { a // ¬p a }
x : ε
h : ¬p x
this : ¬p ↑(en ⟨x, h⟩)
⊢ (Equiv.trans (ep.subtypeCongr en) (ep'.subtypeCongr en')) x =
    (subtypeCongr (Equiv.trans ep ep') (Equiv.trans en en')) x
state_after: no goals