Theorem: CategoryTheory.Functor.eval_section_injective_of_eventually_injective
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
⊢ Function.Injective fun s => ↑s j
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
h : (fun s => ↑s j) s₀ = (fun s => ↑s j) s₁
k : J
⊢ ↑s₀ k = ↑s₁ k
tactic: refine fun s₀ s₁ h => Subtype.ext <| funext fun k => ?_
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
h : (fun s => ↑s j) s₀ = (fun s => ↑s j) s₁
k : J
⊢ ↑s₀ k = ↑s₁ k
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
h : (fun s => ↑s j) s₀ = (fun s => ↑s j) s₁
k m : J
mi : m ⟶ i
mk : m ⟶ k
h✝ : True
⊢ ↑s₀ k = ↑s₁ k
tactic: obtain ⟨m, mi, mk, _⟩ := IsCofilteredOrEmpty.cone_objs i k
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
h : (fun s => ↑s j) s₀ = (fun s => ↑s j) s₁
k m : J
mi : m ⟶ i
mk : m ⟶ k
h✝ : True
⊢ ↑s₀ k = ↑s₁ k
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
h : ↑s₀ j = ↑s₁ j
k m : J
mi : m ⟶ i
mk : m ⟶ k
h✝ : True
⊢ ↑s₀ k = ↑s₁ k
tactic: dsimp at h
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
h : ↑s₀ j = ↑s₁ j
k m : J
mi : m ⟶ i
mk : m ⟶ k
h✝ : True
⊢ ↑s₀ k = ↑s₁ k
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
k m : J
mi : m ⟶ i
h : F.map (mi ≫ f) (↑s₀ m) = F.map (mi ≫ f) (↑s₁ m)
mk : m ⟶ k
h✝ : True
⊢ ↑s₀ k = ↑s₁ k
tactic: rw [← s₀.prop (mi ≫ f), ← s₁.prop (mi ≫ f)] at h
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
k m : J
mi : m ⟶ i
h : F.map (mi ≫ f) (↑s₀ m) = F.map (mi ≫ f) (↑s₁ m)
mk : m ⟶ k
h✝ : True
⊢ ↑s₀ k = ↑s₁ k
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
k m : J
mi : m ⟶ i
h : F.map (mi ≫ f) (↑s₀ m) = F.map (mi ≫ f) (↑s₁ m)
mk : m ⟶ k
h✝ : True
⊢ F.map mk (↑s₀ m) = F.map mk (↑s₁ m)
tactic: rw [← s₀.prop mk, ← s₁.prop mk]
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
j : J
Finj : ∀ (i : J) (f : i ⟶ j), Function.Injective (F.map f)
i : J
f : i ⟶ j
s₀ s₁ : ↑F.sections
k m : J
mi : m ⟶ i
h : F.map (mi ≫ f) (↑s₀ m) = F.map (mi ≫ f) (↑s₁ m)
mk : m ⟶ k
h✝ : True
⊢ F.map mk (↑s₀ m) = F.map mk (↑s₁ m)
state_after: no goals
tactic: exact congr_arg _ (Finj m (mi ≫ f) h)