Theorem: Set.restrictPreimage_isClosedMap
File: Mathlib/Topology/LocalAtTarget.lean

tactic: rintro t ⟨u, hu, e⟩
state_before: α : Type u_2
β : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type ?u.4199
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
H : IsClosedMap f
⊢ IsClosedMap (restrictPreimage s f)

tactic: refine' ⟨⟨_, (H _ (IsOpen.isClosed_compl hu)).1, _⟩⟩
state_before: case mk.intro.intro
α : Type u_2
β : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type ?u.4199
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
H : IsClosedMap f
t : Set ↑(f ⁻¹' s)
u : Set α
hu : IsOpen u
e : Subtype.val ⁻¹' u = tᶜ
⊢ IsClosed (restrictPreimage s f '' t)

tactic: rw [← (congr_arg HasCompl.compl e).trans (compl_compl t)]
state_before: case mk.intro.intro
α : Type u_2
β : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type ?u.4199
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
H : IsClosedMap f
t : Set ↑(f ⁻¹' s)
u : Set α
hu : IsOpen u
e : Subtype.val ⁻¹' u = tᶜ
⊢ Subtype.val ⁻¹' (f '' uᶜ)ᶜ = (restrictPreimage s f '' t)ᶜ

tactic: simp only [Set.preimage_compl, compl_inj_iff]
state_before: case mk.intro.intro
α : Type u_2
β : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type ?u.4199
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
H : IsClosedMap f
t : Set ↑(f ⁻¹' s)
u : Set α
hu : IsOpen u
e : Subtype.val ⁻¹' u = tᶜ
⊢ Subtype.val ⁻¹' (f '' uᶜ)ᶜ = (restrictPreimage s f '' (Subtype.val ⁻¹' u)ᶜ)ᶜ

tactic: ext ⟨x, hx⟩
state_before: case mk.intro.intro
α : Type u_2
β : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type ?u.4199
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
H : IsClosedMap f
t : Set ↑(f ⁻¹' s)
u : Set α
hu : IsOpen u
e : Subtype.val ⁻¹' u = tᶜ
⊢ Subtype.val ⁻¹' (f '' uᶜ) = restrictPreimage s f '' (Subtype.val ⁻¹' u)ᶜ

tactic: suffices (∃ y, y ∉ u ∧ f y = x) ↔ ∃ y, y ∉ u ∧ f y ∈ s ∧ f y = x by
  simpa [Set.restrictPreimage, ← Subtype.coe_inj]
state_before: case mk.intro.intro.h.mk
α : Type u_2
β : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type ?u.4199
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
H : IsClosedMap f
t : Set ↑(f ⁻¹' s)
u : Set α
hu : IsOpen u
e : Subtype.val ⁻¹' u = tᶜ
x : β
hx : x ∈ s
⊢ { val := x, property := hx } ∈ Subtype.val ⁻¹' (f '' uᶜ) ↔
    { val := x, property := hx } ∈ restrictPreimage s f '' (Subtype.val ⁻¹' u)ᶜ

tactic: exact ⟨fun ⟨a, b, c⟩ => ⟨a, b, c.symm ▸ hx, c⟩, fun ⟨a, b, _, c⟩ => ⟨a, b, c⟩⟩
state_before: case mk.intro.intro.h.mk
α : Type u_2
β : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type ?u.4199
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
H : IsClosedMap f
t : Set ↑(f ⁻¹' s)
u : Set α
hu : IsOpen u
e : Subtype.val ⁻¹' u = tᶜ
x : β
hx : x ∈ s
⊢ (∃ y, ¬y ∈ u ∧ f y = x) ↔ ∃ y, ¬y ∈ u ∧ f y ∈ s ∧ f y = x

tactic: simpa [Set.restrictPreimage, ← Subtype.coe_inj]
state_before: α : Type u_2
β : Type u_1
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type ?u.4199
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
H : IsClosedMap f
t : Set ↑(f ⁻¹' s)
u : Set α
hu : IsOpen u
e : Subtype.val ⁻¹' u = tᶜ
x : β
hx : x ∈ s
this : (∃ y, ¬y ∈ u ∧ f y = x) ↔ ∃ y, ¬y ∈ u ∧ f y ∈ s ∧ f y = x
⊢ { val := x, property := hx } ∈ Subtype.val ⁻¹' (f '' uᶜ) ↔
    { val := x, property := hx } ∈ restrictPreimage s f '' (Subtype.val ⁻¹' u)ᶜ