@@ -1753,6 +1753,62 @@ begin
1753
1753
cokernel_cofork_of_cofork_π, cofork.π_of_π, add_sub_cancel'_right]
1754
1754
end
1755
1755
1756
+ /-- If `b` is a binary bicone such that `b.inl` is a kernel of `b.snd`, then `b` is a bilimit
1757
+ bicone. -/
1758
+ def binary_bicone.is_bilimit_of_kernel_inl {X Y : C} (b : binary_bicone X Y)
1759
+ (hb : is_limit (kernel_fork.of_ι _ b.inl_snd)) : b.is_bilimit :=
1760
+ is_binary_bilimit_of_is_limit _ $ binary_fan.is_limit.mk _
1761
+ (λ T f g, f ≫ b.inl + g ≫ b.inr) (λ T f g, by simp) (λ T f g, by simp) $ λ T f g m h₁ h₂,
1762
+ begin
1763
+ have h₁' : (m - (f ≫ b.inl + g ≫ b.inr)) ≫ b.fst = 0 := by simpa using sub_eq_zero.2 h₁,
1764
+ have h₂' : (m - (f ≫ b.inl + g ≫ b.inr)) ≫ b.snd = 0 := by simpa using sub_eq_zero.2 h₂,
1765
+ obtain ⟨q : T ⟶ X, hq : q ≫ b.inl = m - (f ≫ b.inl + g ≫ b.inr)⟩ :=
1766
+ kernel_fork.is_limit.lift' hb _ h₂',
1767
+ rw [←sub_eq_zero, ←hq, ←category.comp_id q, ←b.inl_fst, ←category.assoc, hq, h₁', zero_comp]
1768
+ end
1769
+
1770
+ /-- If `b` is a binary bicone such that `b.inr` is a kernel of `b.fst`, then `b` is a bilimit
1771
+ bicone. -/
1772
+ def binary_bicone.is_bilimit_of_kernel_inr {X Y : C} (b : binary_bicone X Y)
1773
+ (hb : is_limit (kernel_fork.of_ι _ b.inr_fst)) : b.is_bilimit :=
1774
+ is_binary_bilimit_of_is_limit _ $ binary_fan.is_limit.mk _
1775
+ (λ T f g, f ≫ b.inl + g ≫ b.inr) (λ t f g, by simp) (λ t f g, by simp) $ λ T f g m h₁ h₂,
1776
+ begin
1777
+ have h₁' : (m - (f ≫ b.inl + g ≫ b.inr)) ≫ b.fst = 0 := by simpa using sub_eq_zero.2 h₁,
1778
+ have h₂' : (m - (f ≫ b.inl + g ≫ b.inr)) ≫ b.snd = 0 := by simpa using sub_eq_zero.2 h₂,
1779
+ obtain ⟨q : T ⟶ Y, hq : q ≫ b.inr = m - (f ≫ b.inl + g ≫ b.inr)⟩ :=
1780
+ kernel_fork.is_limit.lift' hb _ h₁',
1781
+ rw [←sub_eq_zero, ←hq, ←category.comp_id q, ←b.inr_snd, ←category.assoc, hq, h₂', zero_comp]
1782
+ end
1783
+
1784
+ /-- If `b` is a binary bicone such that `b.fst` is a cokernel of `b.inr`, then `b` is a bilimit
1785
+ bicone. -/
1786
+ def binary_bicone.is_bilimit_of_cokernel_fst {X Y : C} (b : binary_bicone X Y)
1787
+ (hb : is_colimit (cokernel_cofork.of_π _ b.inr_fst)) : b.is_bilimit :=
1788
+ is_binary_bilimit_of_is_colimit _ $ binary_cofan.is_colimit.mk _
1789
+ (λ T f g, b.fst ≫ f + b.snd ≫ g) (λ T f g, by simp) (λ T f g, by simp) $ λ T f g m h₁ h₂,
1790
+ begin
1791
+ have h₁' : b.inl ≫ (m - (b.fst ≫ f + b.snd ≫ g)) = 0 := by simpa using sub_eq_zero.2 h₁,
1792
+ have h₂' : b.inr ≫ (m - (b.fst ≫ f + b.snd ≫ g)) = 0 := by simpa using sub_eq_zero.2 h₂,
1793
+ obtain ⟨q : X ⟶ T, hq : b.fst ≫ q = m - (b.fst ≫ f + b.snd ≫ g)⟩ :=
1794
+ cokernel_cofork.is_colimit.desc' hb _ h₂',
1795
+ rw [←sub_eq_zero, ←hq, ←category.id_comp q, ←b.inl_fst, category.assoc, hq, h₁', comp_zero]
1796
+ end
1797
+
1798
+ /-- If `b` is a binary bicone such that `b.snd` is a cokernel of `b.inl`, then `b` is a bilimit
1799
+ bicone. -/
1800
+ def binary_bicone.is_bilimit_of_cokernel_snd {X Y : C} (b : binary_bicone X Y)
1801
+ (hb : is_colimit (cokernel_cofork.of_π _ b.inl_snd)) : b.is_bilimit :=
1802
+ is_binary_bilimit_of_is_colimit _ $ binary_cofan.is_colimit.mk _
1803
+ (λ T f g, b.fst ≫ f + b.snd ≫ g) (λ T f g, by simp) (λ T f g, by simp) $ λ T f g m h₁ h₂,
1804
+ begin
1805
+ have h₁' : b.inl ≫ (m - (b.fst ≫ f + b.snd ≫ g)) = 0 := by simpa using sub_eq_zero.2 h₁,
1806
+ have h₂' : b.inr ≫ (m - (b.fst ≫ f + b.snd ≫ g)) = 0 := by simpa using sub_eq_zero.2 h₂,
1807
+ obtain ⟨q : Y ⟶ T, hq : b.snd ≫ q = m - (b.fst ≫ f + b.snd ≫ g)⟩ :=
1808
+ cokernel_cofork.is_colimit.desc' hb _ h₁',
1809
+ rw [←sub_eq_zero, ←hq, ←category.id_comp q, ←b.inr_snd, category.assoc, hq, h₂', comp_zero]
1810
+ end
1811
+
1756
1812
/--
1757
1813
Every split epi `f` with a kernel induces a binary bicone with `f` as its `snd` and
1758
1814
the kernel map as its `inl`.
@@ -1791,15 +1847,7 @@ This is a version of the splitting lemma that holds in all preadditive categorie
1791
1847
def is_bilimit_binary_bicone_of_split_epi_of_kernel {X Y : C} {f : X ⟶ Y} [split_epi f]
1792
1848
{c : kernel_fork f} (i : is_limit c) :
1793
1849
(binary_bicone_of_split_epi_of_kernel i).is_bilimit :=
1794
- is_binary_bilimit_of_total _
1795
- begin
1796
- simp only [binary_bicone_of_split_epi_of_kernel_fst, binary_bicone_of_split_epi_of_kernel_inl,
1797
- binary_bicone_of_split_epi_of_kernel_inr, binary_bicone_of_split_epi_of_kernel_snd,
1798
- split_mono_of_idempotent_of_is_limit_fork_retraction],
1799
- dsimp only [binary_bicone_of_split_epi_of_kernel_X],
1800
- rw [is_limit_fork_of_kernel_fork_lift, is_kernel_comp_mono_lift],
1801
- simp only [fork.is_limit.lift_ι, fork.ι_of_ι, kernel_fork_of_fork_ι, sub_add_cancel]
1802
- end
1850
+ binary_bicone.is_bilimit_of_kernel_inl _ $ i.of_iso_limit $ fork.ext (iso.refl _) (by simp)
1803
1851
1804
1852
end
1805
1853
0 commit comments