[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X : C
⊢ AddCommGroup (End X)
[PROOFSTEP]
dsimp [End]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X : C
⊢ AddCommGroup (X ⟶ X)
[PROOFSTEP]
infer_instance
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
P Q R : C
f : P ⟶ Q
g g' : Q ⟶ R
⊢ (fun g => f ≫ g) (g + g') = (fun g => f ≫ g) g + (fun g => f ≫ g) g'
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
P Q R : C
g : Q ⟶ R
f f' : P ⟶ Q
⊢ (fun f => f ≫ g) (f + f') = (fun f => f ≫ g) f + (fun f => f ≫ g) f'
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
P Q R : C
f f' : P ⟶ Q
g g' : Q ⟶ R
⊢ (-f) ≫ (-g) = f ≫ g
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
P✝ Q✝ R : C
f✝ f' : P✝ ⟶ Q✝
g✝ g'✝ : Q✝ ⟶ R
P Q : C
f : P ⟶ Q
inst✝ : Epi f
Z✝ : C
g g' : Q ⟶ Z✝
H : (-f) ≫ g = (-f) ≫ g'
⊢ g = g'
[PROOFSTEP]
rwa [neg_comp, neg_comp, ← comp_neg, ← comp_neg, cancel_epi, neg_inj] at H
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
P✝ Q✝ R : C
f✝ f' : P✝ ⟶ Q✝
g✝ g'✝ : Q✝ ⟶ R
P Q : C
f : P ⟶ Q
inst✝ : Mono f
Z✝ : C
g g' : Z✝ ⟶ P
H : g ≫ (-f) = g' ≫ (-f)
⊢ g = g'
[PROOFSTEP]
rwa [comp_neg, comp_neg, ← neg_comp, ← neg_comp, cancel_mono, neg_inj] at H
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
P Q R : C
f✝ f' : P ⟶ Q
g g' : Q ⟶ R
X : C
src✝ : Monoid (End X) := End.monoid
f : End X
⊢ 0 * f = 0
[PROOFSTEP]
dsimp [mul]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
P Q R : C
f✝ f' : P ⟶ Q
g g' : Q ⟶ R
X : C
src✝ : Monoid (End X) := End.monoid
f : End X
⊢ f ≫ 0 = 0
[PROOFSTEP]
exact HasZeroMorphisms.comp_zero f _
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
P Q R : C
f✝ f' : P ⟶ Q
g g' : Q ⟶ R
X : C
src✝ : Monoid (End X) := End.monoid
f : End X
⊢ f * 0 = 0
[PROOFSTEP]
dsimp [mul]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
P Q R : C
f✝ f' : P ⟶ Q
g g' : Q ⟶ R
X : C
src✝ : Monoid (End X) := End.monoid
f : End X
⊢ 0 ≫ f = 0
[PROOFSTEP]
exact HasZeroMorphisms.zero_comp _ f
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
P Q R : C
f✝ f' : P ⟶ Q
g✝ g' : Q ⟶ R
X Y : C
f : X ⟶ Y
inst✝ : HasLimit (parallelPair f 0)
w : kernel.ι f = 0
P✝ : C
g : P✝ ⟶ X
h : g ≫ f = 0
⊢ g = 0
[PROOFSTEP]
rw [← kernel.lift_ι f g h, w, Limits.comp_zero]
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
P Q R : C
f✝ f' : P ⟶ Q
g✝ g' : Q ⟶ R
X Y : C
f : X ⟶ Y
inst✝ : HasColimit (parallelPair f 0)
w : cokernel.π f = 0
R✝ : C
g : Y ⟶ R✝
h : f ≫ g = 0
⊢ g = 0
[PROOFSTEP]
rw [← cokernel.π_desc f g h, w, Limits.zero_comp]
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
P Q R : C
f f' : P ⟶ Q
g g' : Q ⟶ R
inst✝ : IsIso f
⊢ f ≫ g = 0 ↔ g = 0
[PROOFSTEP]
rw [← IsIso.eq_inv_comp, Limits.comp_zero]
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Preadditive C
P Q R : C
f f' : P ⟶ Q
g g' : Q ⟶ R
inst✝ : IsIso g
⊢ f ≫ g = 0 ↔ f = 0
[PROOFSTEP]
rw [← IsIso.eq_comp_inv, Limits.zero_comp]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : KernelFork (f - g)
⊢ Fork.ι c ≫ f = Fork.ι c ≫ g
[PROOFSTEP]
rw [← sub_eq_zero, ← comp_sub, c.condition]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : Fork f g
⊢ Fork.ι c ≫ (f - g) = Fork.ι c ≫ 0
[PROOFSTEP]
rw [comp_sub, comp_zero, sub_eq_zero, c.condition]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
P : C
ι : P ⟶ X
w : ι ≫ f = ι ≫ g
⊢ ι ≫ (f - g) = 0
[PROOFSTEP]
simp [w]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : KernelFork (f - g)
i : IsLimit c
s : Fork f g
m✝ :
  ((Functor.const WalkingParallelPair).obj s.pt).obj WalkingParallelPair.zero ⟶
    ((Functor.const WalkingParallelPair).obj (forkOfKernelFork c).pt).obj WalkingParallelPair.zero
h : m✝ ≫ Fork.ι (forkOfKernelFork c) = Fork.ι s
⊢ m✝ = IsLimit.lift i (kernelForkOfFork s)
[PROOFSTEP]
apply Fork.IsLimit.hom_ext i
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : KernelFork (f - g)
i : IsLimit c
s : Fork f g
m✝ :
  ((Functor.const WalkingParallelPair).obj s.pt).obj WalkingParallelPair.zero ⟶
    ((Functor.const WalkingParallelPair).obj (forkOfKernelFork c).pt).obj WalkingParallelPair.zero
h : m✝ ≫ Fork.ι (forkOfKernelFork c) = Fork.ι s
⊢ m✝ ≫ Fork.ι c = IsLimit.lift i (kernelForkOfFork s) ≫ Fork.ι c
[PROOFSTEP]
aesop_cat
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
s : Fork (f - g) 0
m✝ :
  ((Functor.const WalkingParallelPair).obj s.pt).obj WalkingParallelPair.zero ⟶
    ((Functor.const WalkingParallelPair).obj (kernelForkOfFork c).pt).obj WalkingParallelPair.zero
h : m✝ ≫ Fork.ι (kernelForkOfFork c) = Fork.ι s
⊢ m✝ = IsLimit.lift i (forkOfKernelFork s)
[PROOFSTEP]
apply Fork.IsLimit.hom_ext i
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : Fork f g
i : IsLimit c
s : Fork (f - g) 0
m✝ :
  ((Functor.const WalkingParallelPair).obj s.pt).obj WalkingParallelPair.zero ⟶
    ((Functor.const WalkingParallelPair).obj (kernelForkOfFork c).pt).obj WalkingParallelPair.zero
h : m✝ ≫ Fork.ι (kernelForkOfFork c) = Fork.ι s
⊢ m✝ ≫ Fork.ι c = IsLimit.lift i (forkOfKernelFork s) ≫ Fork.ι c
[PROOFSTEP]
aesop_cat
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : CokernelCofork (f - g)
⊢ f ≫ Cofork.π c = g ≫ Cofork.π c
[PROOFSTEP]
rw [← sub_eq_zero, ← sub_comp, c.condition]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : Cofork f g
⊢ (f - g) ≫ Cofork.π c = 0 ≫ Cofork.π c
[PROOFSTEP]
rw [sub_comp, zero_comp, sub_eq_zero, c.condition]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
P : C
π : Y ⟶ P
w : f ≫ π = g ≫ π
⊢ (f - g) ≫ π = 0
[PROOFSTEP]
simp [w]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : CokernelCofork (f - g)
i : IsColimit c
s : Cofork f g
m✝ :
  ((Functor.const WalkingParallelPair).obj (coforkOfCokernelCofork c).pt).obj WalkingParallelPair.one ⟶
    ((Functor.const WalkingParallelPair).obj s.pt).obj WalkingParallelPair.one
h : Cofork.π (coforkOfCokernelCofork c) ≫ m✝ = Cofork.π s
⊢ m✝ = IsColimit.desc i (cokernelCoforkOfCofork s)
[PROOFSTEP]
apply Cofork.IsColimit.hom_ext i
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : CokernelCofork (f - g)
i : IsColimit c
s : Cofork f g
m✝ :
  ((Functor.const WalkingParallelPair).obj (coforkOfCokernelCofork c).pt).obj WalkingParallelPair.one ⟶
    ((Functor.const WalkingParallelPair).obj s.pt).obj WalkingParallelPair.one
h : Cofork.π (coforkOfCokernelCofork c) ≫ m✝ = Cofork.π s
⊢ Cofork.π c ≫ m✝ = Cofork.π c ≫ IsColimit.desc i (cokernelCoforkOfCofork s)
[PROOFSTEP]
aesop_cat
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
s : Cofork (f - g) 0
m✝ :
  ((Functor.const WalkingParallelPair).obj (cokernelCoforkOfCofork c).pt).obj WalkingParallelPair.one ⟶
    ((Functor.const WalkingParallelPair).obj s.pt).obj WalkingParallelPair.one
h : Cofork.π (cokernelCoforkOfCofork c) ≫ m✝ = Cofork.π s
⊢ m✝ = IsColimit.desc i (coforkOfCokernelCofork s)
[PROOFSTEP]
apply Cofork.IsColimit.hom_ext i
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X Y : C
f g : X ⟶ Y
c : Cofork f g
i : IsColimit c
s : Cofork (f - g) 0
m✝ :
  ((Functor.const WalkingParallelPair).obj (cokernelCoforkOfCofork c).pt).obj WalkingParallelPair.one ⟶
    ((Functor.const WalkingParallelPair).obj s.pt).obj WalkingParallelPair.one
h : Cofork.π (cokernelCoforkOfCofork c) ≫ m✝ = Cofork.π s
⊢ Cofork.π c ≫ m✝ = Cofork.π c ≫ IsColimit.desc i (coforkOfCokernelCofork s)
[PROOFSTEP]
aesop_cat


[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
x✝ : C
⊢ { obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
          map := fun {X Y} f =>
            NatTrans.mk fun X_1 =>
              { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                map_add' :=
                  (_ :
                    ∀
                      (g g' :
                        ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj X_1)),
                      (g + g') ≫ f = g ≫ f + g' ≫ f) } }.map
      (𝟙 x✝) =
    𝟙
      ({ obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
            map := fun {X Y} f =>
              NatTrans.mk fun X_1 =>
                { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                  map_add' :=
                    (_ :
                      ∀
                        (g g' :
                          ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj
                              X_1)),
                        (g + g') ≫ f = g ≫ f + g' ≫ f) } }.obj
        x✝)
[PROOFSTEP]
ext
[GOAL]
case w.h.w
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
x✝² : C
x✝¹ : Cᵒᵖ
x✝ :
  ↑(({ obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
              map := fun {X Y} f =>
                NatTrans.mk fun X_1 =>
                  { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                    map_add' :=
                      (_ :
                        ∀
                          (g g' :
                            ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj
                                X_1)),
                          (g + g') ≫ f = g ≫ f + g' ≫ f) } }.obj
          x✝²).obj
      x✝¹)
⊢ ↑(NatTrans.app
          ({ obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
                map := fun {X Y} f =>
                  NatTrans.mk fun X_1 =>
                    { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                      map_add' :=
                        (_ :
                          ∀
                            (g g' :
                              ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj
                                  X_1)),
                            (g + g') ≫ f = g ≫ f + g' ≫ f) } }.map
            (𝟙 x✝²))
          x✝¹)
      x✝ =
    ↑(NatTrans.app
          (𝟙
            ({ obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
                  map := fun {X Y} f =>
                    NatTrans.mk fun X_1 =>
                      { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                        map_add' :=
                          (_ :
                            ∀
                              (g g' :
                                ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat)
                                        X).obj
                                    X_1)),
                              (g + g') ≫ f = g ≫ f + g' ≫ f) } }.obj
              x✝²))
          x✝¹)
      x✝
[PROOFSTEP]
dsimp
[GOAL]
case w.h.w
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
x✝² : C
x✝¹ : Cᵒᵖ
x✝ :
  ↑(({ obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
              map := fun {X Y} f =>
                NatTrans.mk fun X_1 =>
                  { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                    map_add' :=
                      (_ :
                        ∀
                          (g g' :
                            ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj
                                X_1)),
                          (g + g') ≫ f = g ≫ f + g' ≫ f) } }.obj
          x✝²).obj
      x✝¹)
⊢ x✝ ≫ 𝟙 x✝² = x✝
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ { obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
          map := fun {X Y} f =>
            NatTrans.mk fun X_1 =>
              { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                map_add' :=
                  (_ :
                    ∀
                      (g g' :
                        ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj X_1)),
                      (g + g') ≫ f = g ≫ f + g' ≫ f) } }.map
      (f ≫ g) =
    { obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
            map := fun {X Y} f =>
              NatTrans.mk fun X_1 =>
                { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                  map_add' :=
                    (_ :
                      ∀
                        (g g' :
                          ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj
                              X_1)),
                        (g + g') ≫ f = g ≫ f + g' ≫ f) } }.map
        f ≫
      { obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
            map := fun {X Y} f =>
              NatTrans.mk fun X_1 =>
                { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                  map_add' :=
                    (_ :
                      ∀
                        (g g' :
                          ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj
                              X_1)),
                        (g + g') ≫ f = g ≫ f + g' ≫ f) } }.map
        g
[PROOFSTEP]
ext
[GOAL]
case w.h.w
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
x✝¹ : Cᵒᵖ
x✝ :
  ↑(({ obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
              map := fun {X Y} f =>
                NatTrans.mk fun X_1 =>
                  { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                    map_add' :=
                      (_ :
                        ∀
                          (g g' :
                            ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj
                                X_1)),
                          (g + g') ≫ f = g ≫ f + g' ≫ f) } }.obj
          X✝).obj
      x✝¹)
⊢ ↑(NatTrans.app
          ({ obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
                map := fun {X Y} f =>
                  NatTrans.mk fun X_1 =>
                    { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                      map_add' :=
                        (_ :
                          ∀
                            (g g' :
                              ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj
                                  X_1)),
                            (g + g') ≫ f = g ≫ f + g' ≫ f) } }.map
            (f ≫ g))
          x✝¹)
      x✝ =
    ↑(NatTrans.app
          ({ obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
                  map := fun {X Y} f =>
                    NatTrans.mk fun X_1 =>
                      { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                        map_add' :=
                          (_ :
                            ∀
                              (g g' :
                                ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat)
                                        X).obj
                                    X_1)),
                              (g + g') ≫ f = g ≫ f + g' ≫ f) } }.map
              f ≫
            { obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
                  map := fun {X Y} f =>
                    NatTrans.mk fun X_1 =>
                      { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                        map_add' :=
                          (_ :
                            ∀
                              (g g' :
                                ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat)
                                        X).obj
                                    X_1)),
                              (g + g') ≫ f = g ≫ f + g' ≫ f) } }.map
              g)
          x✝¹)
      x✝
[PROOFSTEP]
dsimp
[GOAL]
case w.h.w
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
x✝¹ : Cᵒᵖ
x✝ :
  ↑(({ obj := fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat,
              map := fun {X Y} f =>
                NatTrans.mk fun X_1 =>
                  { toZeroHom := { toFun := fun g => g ≫ f, map_zero' := (_ : 0 ≫ f = 0) },
                    map_add' :=
                      (_ :
                        ∀
                          (g g' :
                            ↑(((fun Y => preadditiveYonedaObj Y ⋙ forget₂ (ModuleCat (End Y)) AddCommGroupCat) X).obj
                                X_1)),
                          (g + g') ≫ f = g ≫ f + g' ≫ f) } }.obj
          X✝).obj
      x✝¹)
⊢ x✝ ≫ f ≫ g = (x✝ ≫ f) ≫ g
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
x✝ : Cᵒᵖ
⊢ { obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
          map := fun {X Y} f =>
            NatTrans.mk fun Y_1 =>
              { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                map_add' :=
                  (_ :
                    ∀
                      (g g' :
                        ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat) X).obj
                            Y_1)),
                      f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.map
      (𝟙 x✝) =
    𝟙
      ({ obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
            map := fun {X Y} f =>
              NatTrans.mk fun Y_1 =>
                { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                  map_add' :=
                    (_ :
                      ∀
                        (g g' :
                          ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat) X).obj
                              Y_1)),
                        f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.obj
        x✝)
[PROOFSTEP]
ext
[GOAL]
case w.h.w
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
x✝² : Cᵒᵖ
x✝¹ : C
x✝ :
  ↑(({ obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
              map := fun {X Y} f =>
                NatTrans.mk fun Y_1 =>
                  { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                    map_add' :=
                      (_ :
                        ∀
                          (g g' :
                            ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat) X).obj
                                Y_1)),
                          f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.obj
          x✝²).obj
      x✝¹)
⊢ ↑(NatTrans.app
          ({ obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
                map := fun {X Y} f =>
                  NatTrans.mk fun Y_1 =>
                    { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                      map_add' :=
                        (_ :
                          ∀
                            (g g' :
                              ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat)
                                      X).obj
                                  Y_1)),
                            f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.map
            (𝟙 x✝²))
          x✝¹)
      x✝ =
    ↑(NatTrans.app
          (𝟙
            ({ obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
                  map := fun {X Y} f =>
                    NatTrans.mk fun Y_1 =>
                      { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                        map_add' :=
                          (_ :
                            ∀
                              (g g' :
                                ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat)
                                        X).obj
                                    Y_1)),
                              f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.obj
              x✝²))
          x✝¹)
      x✝
[PROOFSTEP]
dsimp
[GOAL]
case w.h.w
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
x✝² : Cᵒᵖ
x✝¹ : C
x✝ :
  ↑(({ obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
              map := fun {X Y} f =>
                NatTrans.mk fun Y_1 =>
                  { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                    map_add' :=
                      (_ :
                        ∀
                          (g g' :
                            ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat) X).obj
                                Y_1)),
                          f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.obj
          x✝²).obj
      x✝¹)
⊢ 𝟙 x✝².unop ≫ x✝ = x✝
[PROOFSTEP]
simp
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X✝ Y✝ Z✝ : Cᵒᵖ
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ { obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
          map := fun {X Y} f =>
            NatTrans.mk fun Y_1 =>
              { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                map_add' :=
                  (_ :
                    ∀
                      (g g' :
                        ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat) X).obj
                            Y_1)),
                      f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.map
      (f ≫ g) =
    { obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
            map := fun {X Y} f =>
              NatTrans.mk fun Y_1 =>
                { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                  map_add' :=
                    (_ :
                      ∀
                        (g g' :
                          ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat) X).obj
                              Y_1)),
                        f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.map
        f ≫
      { obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
            map := fun {X Y} f =>
              NatTrans.mk fun Y_1 =>
                { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                  map_add' :=
                    (_ :
                      ∀
                        (g g' :
                          ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat) X).obj
                              Y_1)),
                        f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.map
        g
[PROOFSTEP]
ext
[GOAL]
case w.h.w
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X✝ Y✝ Z✝ : Cᵒᵖ
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
x✝¹ : C
x✝ :
  ↑(({ obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
              map := fun {X Y} f =>
                NatTrans.mk fun Y_1 =>
                  { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                    map_add' :=
                      (_ :
                        ∀
                          (g g' :
                            ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat) X).obj
                                Y_1)),
                          f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.obj
          X✝).obj
      x✝¹)
⊢ ↑(NatTrans.app
          ({ obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
                map := fun {X Y} f =>
                  NatTrans.mk fun Y_1 =>
                    { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                      map_add' :=
                        (_ :
                          ∀
                            (g g' :
                              ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat)
                                      X).obj
                                  Y_1)),
                            f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.map
            (f ≫ g))
          x✝¹)
      x✝ =
    ↑(NatTrans.app
          ({ obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
                  map := fun {X Y} f =>
                    NatTrans.mk fun Y_1 =>
                      { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                        map_add' :=
                          (_ :
                            ∀
                              (g g' :
                                ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat)
                                        X).obj
                                    Y_1)),
                              f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.map
              f ≫
            { obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
                  map := fun {X Y} f =>
                    NatTrans.mk fun Y_1 =>
                      { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                        map_add' :=
                          (_ :
                            ∀
                              (g g' :
                                ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat)
                                        X).obj
                                    Y_1)),
                              f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.map
              g)
          x✝¹)
      x✝
[PROOFSTEP]
dsimp
[GOAL]
case w.h.w
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
X✝ Y✝ Z✝ : Cᵒᵖ
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
x✝¹ : C
x✝ :
  ↑(({ obj := fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat,
              map := fun {X Y} f =>
                NatTrans.mk fun Y_1 =>
                  { toZeroHom := { toFun := fun g => f.unop ≫ g, map_zero' := (_ : f.unop ≫ 0 = 0) },
                    map_add' :=
                      (_ :
                        ∀
                          (g g' :
                            ↑(((fun X => preadditiveCoyonedaObj X ⋙ forget₂ (ModuleCat (End X)) AddCommGroupCat) X).obj
                                Y_1)),
                          f.unop ≫ (g + g') = f.unop ≫ g + f.unop ≫ g') } }.obj
          X✝).obj
      x✝¹)
⊢ (g.unop ≫ f.unop) ≫ x✝ = g.unop ≫ f.unop ≫ x✝
[PROOFSTEP]
simp


[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
⊢ Unbounded (fun x x_1 => x ≤ x_1) s ↔ ∀ (a : α), ∃ b, b ∈ s ∧ a < b
[PROOFSTEP]
simp only [Unbounded, not_le]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
⊢ Unbounded (fun x x_1 => x < x_1) s ↔ ∀ (a : α), ∃ b, b ∈ s ∧ a ≤ b
[PROOFSTEP]
simp only [Unbounded, not_lt]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : Preorder α
inst✝ : NoMaxOrder α
⊢ Bounded (fun x x_1 => x ≤ x_1) s ↔ Bounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
refine' ⟨fun h => _, bounded_le_of_bounded_lt⟩
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : Preorder α
inst✝ : NoMaxOrder α
h : Bounded (fun x x_1 => x ≤ x_1) s
⊢ Bounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
cases' h with a ha
[GOAL]
case intro
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : Preorder α
inst✝ : NoMaxOrder α
a : α
ha : ∀ (b : α), b ∈ s → (fun x x_1 => x ≤ x_1) b a
⊢ Bounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
cases' exists_gt a with b hb
[GOAL]
case intro.intro
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : Preorder α
inst✝ : NoMaxOrder α
a : α
ha : ∀ (b : α), b ∈ s → (fun x x_1 => x ≤ x_1) b a
b : α
hb : a < b
⊢ Bounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
exact ⟨b, fun c hc => lt_of_le_of_lt (ha c hc) hb⟩
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : Preorder α
inst✝ : NoMaxOrder α
⊢ Unbounded (fun x x_1 => x < x_1) s ↔ Unbounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
simp_rw [← not_bounded_iff, bounded_le_iff_bounded_lt]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : Preorder α
inst✝ : NoMaxOrder α
a : α
⊢ Bounded (fun x x_1 => x < x_1) (Iic a)
[PROOFSTEP]
simp only [← bounded_le_iff_bounded_lt, bounded_le_Iic]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : Preorder α
inst✝ : NoMinOrder α
a : α
⊢ Bounded (fun x x_1 => x > x_1) (Ici a)
[PROOFSTEP]
simp only [← bounded_ge_iff_bounded_gt, bounded_ge_Ici]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
H : ∀ (a b : α), ∃ m, ∀ (c : α), r c a ∨ r c b → r c m
a : α
⊢ Bounded r (s ∩ {b | ¬r b a}) ↔ Bounded r s
[PROOFSTEP]
refine' ⟨_, Bounded.mono (Set.inter_subset_left s _)⟩
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
H : ∀ (a b : α), ∃ m, ∀ (c : α), r c a ∨ r c b → r c m
a : α
⊢ Bounded r (s ∩ {b | ¬r b a}) → Bounded r s
[PROOFSTEP]
rintro ⟨b, hb⟩
[GOAL]
case intro
α : Type u_1
r : α → α → Prop
s t : Set α
H : ∀ (a b : α), ∃ m, ∀ (c : α), r c a ∨ r c b → r c m
a b : α
hb : ∀ (b_1 : α), b_1 ∈ s ∩ {b | ¬r b a} → r b_1 b
⊢ Bounded r s
[PROOFSTEP]
cases' H a b with m hm
[GOAL]
case intro.intro
α : Type u_1
r : α → α → Prop
s t : Set α
H : ∀ (a b : α), ∃ m, ∀ (c : α), r c a ∨ r c b → r c m
a b : α
hb : ∀ (b_1 : α), b_1 ∈ s ∩ {b | ¬r b a} → r b_1 b
m : α
hm : ∀ (c : α), r c a ∨ r c b → r c m
⊢ Bounded r s
[PROOFSTEP]
exact ⟨m, fun c hc => hm c (or_iff_not_imp_left.2 fun hca => hb c ⟨hc, hca⟩)⟩
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
H : ∀ (a b : α), ∃ m, ∀ (c : α), r c a ∨ r c b → r c m
a : α
⊢ Unbounded r (s ∩ {b | ¬r b a}) ↔ Unbounded r s
[PROOFSTEP]
simp_rw [← not_bounded_iff, bounded_inter_not H]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : SemilatticeSup α
a : α
⊢ Unbounded (fun x x_1 => x ≤ x_1) (s ∩ {b | ¬b ≤ a}) ↔ Unbounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
rw [← not_bounded_iff, ← not_bounded_iff, not_iff_not]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : SemilatticeSup α
a : α
⊢ Bounded (fun x x_1 => x ≤ x_1) (s ∩ {b | ¬b ≤ a}) ↔ Bounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
exact bounded_le_inter_not_le a
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Bounded (fun x x_1 => x ≤ x_1) (s ∩ {b | a < b}) ↔ Bounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
simp_rw [← not_le, bounded_le_inter_not_le]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Unbounded (fun x x_1 => x ≤ x_1) (s ∩ {b | a < b}) ↔ Unbounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
convert @unbounded_le_inter_not_le _ s _ a
[GOAL]
case h.e'_1.h.e'_3.h.e'_4.h.e'_2.h.a
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a x✝ : α
⊢ a < x✝ ↔ ¬x✝ ≤ a
[PROOFSTEP]
exact lt_iff_not_le
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Bounded (fun x x_1 => x ≤ x_1) (s ∩ {b | a ≤ b}) ↔ Bounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
refine' ⟨_, Bounded.mono (Set.inter_subset_left s _)⟩
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Bounded (fun x x_1 => x ≤ x_1) (s ∩ {b | a ≤ b}) → Bounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
rw [← @bounded_le_inter_lt _ s _ a]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Bounded (fun x x_1 => x ≤ x_1) (s ∩ {b | a ≤ b}) → Bounded (fun x x_1 => x ≤ x_1) (s ∩ {b | a < b})
[PROOFSTEP]
exact Bounded.mono fun x ⟨hx, hx'⟩ => ⟨hx, le_of_lt hx'⟩
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Unbounded (fun x x_1 => x ≤ x_1) (s ∩ {b | a ≤ b}) ↔ Unbounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
rw [← not_bounded_iff, ← not_bounded_iff, not_iff_not]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Bounded (fun x x_1 => x ≤ x_1) (s ∩ {b | a ≤ b}) ↔ Bounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
exact bounded_le_inter_le a
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : SemilatticeSup α
a : α
⊢ Unbounded (fun x x_1 => x < x_1) (s ∩ {b | ¬b < a}) ↔ Unbounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
rw [← not_bounded_iff, ← not_bounded_iff, not_iff_not]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : SemilatticeSup α
a : α
⊢ Bounded (fun x x_1 => x < x_1) (s ∩ {b | ¬b < a}) ↔ Bounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
exact bounded_lt_inter_not_lt a
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Bounded (fun x x_1 => x < x_1) (s ∩ {b | a ≤ b}) ↔ Bounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
convert @bounded_lt_inter_not_lt _ s _ a
[GOAL]
case h.e'_1.h.e'_3.h.e'_4.h.e'_2.h.a
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a x✝ : α
⊢ a ≤ x✝ ↔ ¬x✝ < a
[PROOFSTEP]
exact not_lt.symm
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a : α
⊢ Unbounded (fun x x_1 => x < x_1) (s ∩ {b | a ≤ b}) ↔ Unbounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
convert @unbounded_lt_inter_not_lt _ s _ a
[GOAL]
case h.e'_1.h.e'_3.h.e'_4.h.e'_2.h.a
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝ : LinearOrder α
a x✝ : α
⊢ a ≤ x✝ ↔ ¬x✝ < a
[PROOFSTEP]
exact not_lt.symm
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : LinearOrder α
inst✝ : NoMaxOrder α
a : α
⊢ Bounded (fun x x_1 => x < x_1) (s ∩ {b | a < b}) ↔ Bounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
rw [← bounded_le_iff_bounded_lt, ← bounded_le_iff_bounded_lt]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : LinearOrder α
inst✝ : NoMaxOrder α
a : α
⊢ Bounded (fun x x_1 => x ≤ x_1) (s ∩ {b | a < b}) ↔ Bounded (fun x x_1 => x ≤ x_1) s
[PROOFSTEP]
exact bounded_le_inter_lt a
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : LinearOrder α
inst✝ : NoMaxOrder α
a : α
⊢ Unbounded (fun x x_1 => x < x_1) (s ∩ {b | a < b}) ↔ Unbounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
rw [← not_bounded_iff, ← not_bounded_iff, not_iff_not]
[GOAL]
α : Type u_1
r : α → α → Prop
s t : Set α
inst✝¹ : LinearOrder α
inst✝ : NoMaxOrder α
a : α
⊢ Bounded (fun x x_1 => x < x_1) (s ∩ {b | a < b}) ↔ Bounded (fun x x_1 => x < x_1) s
[PROOFSTEP]
exact bounded_lt_inter_lt a