Theorem: TopCat.GlueData.preimage_image_eq_image'
File: Mathlib/Topology/Gluing.lean

tactic: convert D.preimage_image_eq_image i j U using 1
state_before: D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ ⇑(D.ι j) ⁻¹' (⇑(D.ι i) '' U) = ⇑(D.t i j ≫ D.f j i) '' (⇑(D.f i j) ⁻¹' U)
state_after: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ ⇑(D.t i j ≫ D.f j i) '' (⇑(D.f i j) ⁻¹' U) = ⇑(D.f j i) '' (⇑(D.t j i ≫ D.f i j) ⁻¹' U)

tactic: rw [coe_comp, coe_comp]
state_before: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ ⇑(D.t i j ≫ D.f j i) '' (⇑(D.f i j) ⁻¹' U) = ⇑(D.f j i) '' (⇑(D.t j i ≫ D.f i j) ⁻¹' U)
state_after: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ ⇑(D.f j i) ∘ ⇑(D.t i j) '' (⇑(D.f i j) ⁻¹' U) = ⇑(D.f j i) '' (⇑(D.f i j) ∘ ⇑(D.t j i) ⁻¹' U)

tactic: show (fun x => ((forget TopCat).map _ ((forget TopCat).map _ x))) '' _ = _
state_before: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ ⇑(D.f j i) ∘ ⇑(D.t i j) '' (⇑(D.f i j) ⁻¹' U) = ⇑(D.f j i) '' (⇑(D.f i j) ∘ ⇑(D.t j i) ⁻¹' U)
state_after: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ (fun x => (forget TopCat).map (D.f j i) ((forget TopCat).map (D.t i j) x)) '' (⇑(D.f i j) ⁻¹' U) =
    ⇑(D.f j i) '' (⇑(D.f i j) ∘ ⇑(D.t j i) ⁻¹' U)

tactic: rw [← Set.image_image]
state_before: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ (fun x => (forget TopCat).map (D.f j i) ((forget TopCat).map (D.t i j) x)) '' (⇑(D.f i j) ⁻¹' U) =
    ⇑(D.f j i) '' (⇑(D.f i j) ∘ ⇑(D.t j i) ⁻¹' U)
state_after: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ (forget TopCat).map (D.f j i) '' ((forget TopCat).map (D.t i j) '' (⇑(D.f i j) ⁻¹' U)) =
    ⇑(D.f j i) '' (⇑(D.f i j) ∘ ⇑(D.t j i) ⁻¹' U)

tactic: refine congr_arg ?_ ?_
state_before: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ (forget TopCat).map (D.f j i) '' ((forget TopCat).map (D.t i j) '' (⇑(D.f i j) ⁻¹' U)) =
    ⇑(D.f j i) '' (⇑(D.f i j) ∘ ⇑(D.t j i) ⁻¹' U)
state_after: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ (forget TopCat).map (D.t i j) '' (⇑(D.f i j) ⁻¹' U) = ⇑(D.f i j) ∘ ⇑(D.t j i) ⁻¹' U

tactic: rw [← Set.eq_preimage_iff_image_eq, Set.preimage_preimage]
state_before: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ (forget TopCat).map (D.t i j) '' (⇑(D.f i j) ⁻¹' U) = ⇑(D.f i j) ∘ ⇑(D.t j i) ⁻¹' U
state_after: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ ⇑(D.f i j) ⁻¹' U = (fun x => (⇑(D.f i j) ∘ ⇑(D.t j i)) ((forget TopCat).map (D.t i j) x)) ⁻¹' U

case h.e'_3.hf
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ Function.Bijective ((forget TopCat).map (D.t i j))

tactic: rw [← isIso_iff_bijective]
state_before: case h.e'_3.hf
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ Function.Bijective ((forget TopCat).map (D.t i j))
state_after: case h.e'_3.hf
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ IsIso ((forget TopCat).map (D.t i j))

tactic: apply (forget TopCat).map_isIso
state_before: case h.e'_3.hf
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ IsIso ((forget TopCat).map (D.t i j))
state_after: no goals

tactic: change _ = (D.t i j ≫ D.t j i ≫ _) ⁻¹' _
state_before: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ ⇑(D.f i j) ⁻¹' U = (fun x => (⇑(D.f i j) ∘ ⇑(D.t j i)) ((forget TopCat).map (D.t i j) x)) ⁻¹' U
state_after: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ ⇑(D.f i j) ⁻¹' U = ⇑(D.t i j ≫ D.t j i ≫ D.f i j) ⁻¹' U

tactic: rw [𝖣.t_inv_assoc]
state_before: case h.e'_3
D : GlueData
i j : D.J
U : Set ↑(D.U i)
⊢ ⇑(D.f i j) ⁻¹' U = ⇑(D.t i j ≫ D.t j i ≫ D.f i j) ⁻¹' U
state_after: no goals