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

Proof steps:
state_before: J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
x : F.obj j
hx : x ∈ F.eventualRange j
⊢ F.map f x ∈ F.eventualRange i
state_after: J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
x : F.obj j
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), x ∈ range (F.map f)
⊢ ∀ ⦃i_1 : J⦄ (f_1 : i_1 ⟶ i), F.map f x ∈ range (F.map f_1)
tactic: rw [mem_eventualRange_iff] at hx ⊢
state_before: J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
x : F.obj j
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), x ∈ range (F.map f)
⊢ ∀ ⦃i_1 : J⦄ (f_1 : i_1 ⟶ i), F.map f x ∈ range (F.map f_1)
state_after: J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k✝ : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
x : F.obj j
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), x ∈ range (F.map f)
k : J
f' : k ⟶ i
⊢ F.map f x ∈ range (F.map f')
tactic: intro k f'
state_before: J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k✝ : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
x : F.obj j
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), x ∈ range (F.map f)
k : J
f' : k ⟶ i
⊢ F.map f x ∈ range (F.map f')
state_after: case intro.intro.intro
J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k✝ : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
x : F.obj j
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), x ∈ range (F.map f)
k : J
f' : k ⟶ i
l : J
g : l ⟶ j
g' : l ⟶ k
he : g ≫ f = g' ≫ f'
⊢ F.map f x ∈ range (F.map f')
tactic: obtain ⟨l, g, g', he⟩ := cospan f f'
state_before: case intro.intro.intro
J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k✝ : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
x : F.obj j
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), x ∈ range (F.map f)
k : J
f' : k ⟶ i
l : J
g : l ⟶ j
g' : l ⟶ k
he : g ≫ f = g' ≫ f'
⊢ F.map f x ∈ range (F.map f')
state_after: case intro.intro.intro.intro
J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k✝ : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
k : J
f' : k ⟶ i
l : J
g : l ⟶ j
g' : l ⟶ k
he : g ≫ f = g' ≫ f'
x : F.obj l
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), F.map g x ∈ range (F.map f)
⊢ F.map f (F.map g x) ∈ range (F.map f')
tactic: obtain ⟨x, rfl⟩ := hx g
state_before: case intro.intro.intro.intro
J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k✝ : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
k : J
f' : k ⟶ i
l : J
g : l ⟶ j
g' : l ⟶ k
he : g ≫ f = g' ≫ f'
x : F.obj l
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), F.map g x ∈ range (F.map f)
⊢ F.map f (F.map g x) ∈ range (F.map f')
state_after: case intro.intro.intro.intro
J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k✝ : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
k : J
f' : k ⟶ i
l : J
g : l ⟶ j
g' : l ⟶ k
he : g ≫ f = g' ≫ f'
x : F.obj l
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), F.map g x ∈ range (F.map f)
⊢ (F.map g' ≫ F.map f') x ∈ range (F.map f')
tactic: rw [← map_comp_apply, he, F.map_comp]
state_before: case intro.intro.intro.intro
J : Type u
inst✝¹ : Category.{u_1, u} J
F : J ⥤ Type v
i j k✝ : J
s : Set (F.obj i)
inst✝ : IsCofilteredOrEmpty J
f : j ⟶ i
k : J
f' : k ⟶ i
l : J
g : l ⟶ j
g' : l ⟶ k
he : g ≫ f = g' ≫ f'
x : F.obj l
hx : ∀ ⦃i : J⦄ (f : i ⟶ j), F.map g x ∈ range (F.map f)
⊢ (F.map g' ≫ F.map f') x ∈ range (F.map f')
state_after: no goals
tactic: exact ⟨_, rfl⟩