Theorem: CategoryTheory.Functor.toPreimages_obj
File: Mathlib/CategoryTheory/CofilteredSystem.lean

Proof steps:
state_before: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : x ∈ ⋂ f, F.map f ⁻¹' s
⊢ F.map g x ∈ ⋂ f, F.map f ⁻¹' s
state_after: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
⊢ ∀ (i_1 : Y✝ ⟶ i), F.map g x ∈ F.map i_1 ⁻¹' s
tactic: rw [mem_iInter] at h ⊢
state_before: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
⊢ ∀ (i_1 : Y✝ ⟶ i), F.map g x ∈ F.map i_1 ⁻¹' s
state_after: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
f : Y✝ ⟶ i
⊢ F.map g x ∈ F.map f ⁻¹' s
tactic: intro f
state_before: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
f : Y✝ ⟶ i
⊢ F.map g x ∈ F.map f ⁻¹' s
state_after: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
f : Y✝ ⟶ i
⊢ F.map f (F.map g x) ∈ s
tactic: rw [← mem_preimage, preimage_preimage, mem_preimage]
state_before: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
f : Y✝ ⟶ i
⊢ F.map f (F.map g x) ∈ s
state_after: case a
J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
f : Y✝ ⟶ i
⊢ F.map f (F.map g x) ∈ s ↔ x ∈ F.map (g ≫ f) ⁻¹' s
tactic: convert h (g ≫ f)
state_before: case a
J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
f : Y✝ ⟶ i
⊢ F.map f (F.map g x) ∈ s ↔ x ∈ F.map (g ≫ f) ⁻¹' s
state_after: case a
J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
f : Y✝ ⟶ i
⊢ F.map f (F.map g x) ∈ s ↔ x ∈ (F.map g ≫ F.map f) ⁻¹' s
tactic: rw [F.map_comp]
state_before: case a
J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ : J
g : X✝ ⟶ Y✝
x : F.obj X✝
h : ∀ (i_1 : X✝ ⟶ i), x ∈ F.map i_1 ⁻¹' s
f : Y✝ ⟶ i
⊢ F.map f (F.map g x) ∈ s ↔ x ∈ (F.map g ≫ F.map f) ⁻¹' s
state_after: no goals
tactic: rfl
state_before: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j✝ k : J
s : Set (F.obj i)
j : J
⊢ { obj := fun j => ↑(⋂ f, F.map f ⁻¹' s),
          map := fun {X Y} g => MapsTo.restrict (F.map g) (⋂ f, F.map f ⁻¹' s) (⋂ f, F.map f ⁻¹' s) ⋯ }.map
      (𝟙 j) =
    𝟙
      ({ obj := fun j => ↑(⋂ f, F.map f ⁻¹' s),
            map := fun {X Y} g => MapsTo.restrict (F.map g) (⋂ f, F.map f ⁻¹' s) (⋂ f, F.map f ⁻¹' s) ⋯ }.obj
        j)
state_after: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j✝ k : J
s : Set (F.obj i)
j : J
⊢ (fun x => ⟨𝟙 (F.obj j) ↑x, ⋯⟩) = 𝟙 ↑(⋂ f, F.map f ⁻¹' s)
tactic: simp only [MapsTo.restrict, Subtype.map_def, F.map_id]
state_before: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j✝ k : J
s : Set (F.obj i)
j : J
⊢ (fun x => ⟨𝟙 (F.obj j) ↑x, ⋯⟩) = 𝟙 ↑(⋂ f, F.map f ⁻¹' s)
state_after: case h.a
J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j✝ k : J
s : Set (F.obj i)
j : J
a✝ : { x // x ∈ ⋂ f, F.map f ⁻¹' s }
⊢ ↑⟨𝟙 (F.obj j) ↑a✝, ⋯⟩ = ↑(𝟙 (↑(⋂ f, F.map f ⁻¹' s)) a✝)
tactic: ext
state_before: case h.a
J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j✝ k : J
s : Set (F.obj i)
j : J
a✝ : { x // x ∈ ⋂ f, F.map f ⁻¹' s }
⊢ ↑⟨𝟙 (F.obj j) ↑a✝, ⋯⟩ = ↑(𝟙 (↑(⋂ f, F.map f ⁻¹' s)) a✝)
state_after: no goals
tactic: rfl
state_before: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ Z✝ : J
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ { obj := fun j => ↑(⋂ f, F.map f ⁻¹' s),
          map := fun {X Y} g => MapsTo.restrict (F.map g) (⋂ f, F.map f ⁻¹' s) (⋂ f, F.map f ⁻¹' s) ⋯ }.map
      (f ≫ g) =
    { obj := fun j => ↑(⋂ f, F.map f ⁻¹' s),
            map := fun {X Y} g => MapsTo.restrict (F.map g) (⋂ f, F.map f ⁻¹' s) (⋂ f, F.map f ⁻¹' s) ⋯ }.map
        f ≫
      { obj := fun j => ↑(⋂ f, F.map f ⁻¹' s),
            map := fun {X Y} g => MapsTo.restrict (F.map g) (⋂ f, F.map f ⁻¹' s) (⋂ f, F.map f ⁻¹' s) ⋯ }.map
        g
state_after: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ Z✝ : J
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ (fun x => ⟨(F.map f ≫ F.map g) ↑x, ⋯⟩) = (fun x => ⟨F.map f ↑x, ⋯⟩) ≫ fun x => ⟨F.map g ↑x, ⋯⟩
tactic: simp only [MapsTo.restrict, Subtype.map_def, F.map_comp]
state_before: J : Type u
inst✝ : Category.{?u.10050, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
X✝ Y✝ Z✝ : J
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ (fun x => ⟨(F.map f ≫ F.map g) ↑x, ⋯⟩) = (fun x => ⟨F.map f ↑x, ⋯⟩) ≫ fun x => ⟨F.map g ↑x, ⋯⟩
state_after: no goals
tactic: rfl