Theorem: CategoryTheory.Subobject.sInf_le
File: Mathlib/CategoryTheory/Subobject/Lattice.lean

tactic: fapply le_of_comm
state_before: C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ sInf s ≤ f

tactic: . exact (underlyingIso _).hom ≫
    Limits.limit.π (wideCospan s)
      (some ⟨equivShrink (Subobject A) f,
        Set.mem_image_of_mem (equivShrink (Subobject A)) hf⟩) ≫
    eqToHom (congr_arg (fun X : Subobject A => (X : C)) (Equiv.symm_apply_apply _ _))
state_before: case f
C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ underlying.obj (sInf s) ⟶ underlying.obj f

case w
C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ ?f ≫ arrow f = arrow (sInf s)

tactic: exact (underlyingIso _).hom ≫
  Limits.limit.π (wideCospan s)
    (some ⟨equivShrink (Subobject A) f,
      Set.mem_image_of_mem (equivShrink (Subobject A)) hf⟩) ≫
  eqToHom (congr_arg (fun X : Subobject A => (X : C)) (Equiv.symm_apply_apply _ _))
state_before: case f
C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ underlying.obj (sInf s) ⟶ underlying.obj f

tactic: dsimp [sInf]
state_before: case w
C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ ((underlyingIso (widePullbackι s)).hom ≫
        limit.π (wideCospan s)
            (some
              { val := ↑(equivShrink (Subobject A)) f,
                property := (_ : ↑(equivShrink (Subobject A)) f ∈ ↑(equivShrink (Subobject A)) '' s) }) ≫
          eqToHom
            (_ :
              underlying.obj
                  (↑(equivShrink (Subobject A)).symm
                    ↑{ val := ↑(equivShrink (Subobject A)) f,
                        property := (_ : ↑(equivShrink (Subobject A)) f ∈ ↑(equivShrink (Subobject A)) '' s) }) =
                underlying.obj f)) ≫
      arrow f =
    arrow (sInf s)

tactic: simp only [Category.comp_id, Category.assoc, ← underlyingIso_hom_comp_eq_mk,
  Subobject.arrow_congr, congrArg_mpr_hom_left, Iso.cancel_iso_hom_left]
state_before: case w
C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ ((underlyingIso (widePullbackι s)).hom ≫
        limit.π (wideCospan s)
            (some
              { val := ↑(equivShrink (Subobject A)) f,
                property := (_ : ↑(equivShrink (Subobject A)) f ∈ ↑(equivShrink (Subobject A)) '' s) }) ≫
          eqToHom
            (_ :
              underlying.obj (↑(equivShrink (Subobject A)).symm (↑(equivShrink (Subobject A)) f)) = underlying.obj f)) ≫
      arrow f =
    arrow (mk (widePullbackι s))

tactic: convert limit.w (wideCospan s) (WidePullbackShape.Hom.term _)
state_before: case w
C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
⊢ limit.π (wideCospan s)
        (some
          { val := ↑(equivShrink (Subobject A)) f,
            property := (_ : ↑(equivShrink (Subobject A)) f ∈ ↑(equivShrink (Subobject A)) '' s) }) ≫
      eqToHom
          (_ : underlying.obj (↑(equivShrink (Subobject A)).symm (↑(equivShrink (Subobject A)) f)) = underlying.obj f) ≫
        arrow f =
    widePullbackι s

tactic: aesop_cat
state_before: case h.e'_2.h.h.e'_7.h
C : Type u₁
inst✝³ : Category C
X Y Z : C
D : Type u₂
inst✝² : Category D
inst✝¹ : WellPowered C
inst✝ : HasWidePullbacks C
A : C
s : Set (Subobject A)
f : Subobject A
hf : f ∈ s
e_1✝ : (widePullback s ⟶ A) = (limit (wideCospan s) ⟶ (wideCospan s).obj none)
e_4✝ :
  (wideCospan s).obj
      (some
        { val := ↑(equivShrink (Subobject A)) f,
          property := (_ : ↑(equivShrink (Subobject A)) f ∈ ↑(equivShrink (Subobject A)) '' s) }) =
    (wideCospan s).obj
      (some
        { val := ↑(equivShrink (Subobject A)) f,
          property := (_ : ↑(equivShrink (Subobject A)) f ∈ ↑(equivShrink (Subobject A)) '' s) })
e_5✝ : A = (wideCospan s).obj none
⊢ eqToHom (_ : underlying.obj (↑(equivShrink (Subobject A)).symm (↑(equivShrink (Subobject A)) f)) = underlying.obj f) ≫
      arrow f =
    (wideCospan s).map
      (WidePullbackShape.Hom.term
        { val := ↑(equivShrink (Subobject A)) f,
          property := (_ : ↑(equivShrink (Subobject A)) f ∈ ↑(equivShrink (Subobject A)) '' s) })