category_theory.limits.shapes.strong_epiMathlib.CategoryTheory.Limits.Shapes.StrongEpi

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2020 Markus Himmel. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Markus Himmel
 -/
-import Mathbin.CategoryTheory.Balanced
-import Mathbin.CategoryTheory.LiftingProperties.Basic
+import CategoryTheory.Balanced
+import CategoryTheory.LiftingProperties.Basic
 
 #align_import category_theory.limits.shapes.strong_epi from "leanprover-community/mathlib"@"3dadefa3f544b1db6214777fe47910739b54c66a"
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2020 Markus Himmel. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Markus Himmel
-
-! This file was ported from Lean 3 source module category_theory.limits.shapes.strong_epi
-! leanprover-community/mathlib commit 3dadefa3f544b1db6214777fe47910739b54c66a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Balanced
 import Mathbin.CategoryTheory.LiftingProperties.Basic
 
+#align_import category_theory.limits.shapes.strong_epi from "leanprover-community/mathlib"@"3dadefa3f544b1db6214777fe47910739b54c66a"
+
 /-!
 # Strong epimorphisms
 
Diff
@@ -114,7 +114,7 @@ variable {R : C} (f : P ⟶ Q) (g : Q ⟶ R)
 /-- The composition of two strong epimorphisms is a strong epimorphism. -/
 theorem strongEpi_comp [StrongEpi f] [StrongEpi g] : StrongEpi (f ≫ g) :=
   { Epi := epi_comp _ _
-    llp := by intros ; infer_instance }
+    llp := by intros; infer_instance }
 #align category_theory.strong_epi_comp CategoryTheory.strongEpi_comp
 -/
 
@@ -122,7 +122,7 @@ theorem strongEpi_comp [StrongEpi f] [StrongEpi g] : StrongEpi (f ≫ g) :=
 /-- The composition of two strong monomorphisms is a strong monomorphism. -/
 theorem strongMono_comp [StrongMono f] [StrongMono g] : StrongMono (f ≫ g) :=
   { Mono := mono_comp _ _
-    rlp := by intros ; infer_instance }
+    rlp := by intros; infer_instance }
 #align category_theory.strong_mono_comp CategoryTheory.strongMono_comp
 -/
 
@@ -180,7 +180,7 @@ theorem StrongEpi.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
       rw [arrow.iso_w' e]
       haveI := epi_comp f e.hom.right
       apply epi_comp
-    llp := fun X Y z => by intro ; apply has_lifting_property.of_arrow_iso_left e z }
+    llp := fun X Y z => by intro; apply has_lifting_property.of_arrow_iso_left e z }
 #align category_theory.strong_epi.of_arrow_iso CategoryTheory.StrongEpi.of_arrow_iso
 -/
 
@@ -191,21 +191,21 @@ theorem StrongMono.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
       rw [arrow.iso_w' e]
       haveI := mono_comp f e.hom.right
       apply mono_comp
-    rlp := fun X Y z => by intro ; apply has_lifting_property.of_arrow_iso_right z e }
+    rlp := fun X Y z => by intro; apply has_lifting_property.of_arrow_iso_right z e }
 #align category_theory.strong_mono.of_arrow_iso CategoryTheory.StrongMono.of_arrow_iso
 -/
 
 #print CategoryTheory.StrongEpi.iff_of_arrow_iso /-
 theorem StrongEpi.iff_of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
-    (e : Arrow.mk f ≅ Arrow.mk g) : StrongEpi f ↔ StrongEpi g := by constructor <;> intro ;
-  exacts[strong_epi.of_arrow_iso e, strong_epi.of_arrow_iso e.symm]
+    (e : Arrow.mk f ≅ Arrow.mk g) : StrongEpi f ↔ StrongEpi g := by constructor <;> intro;
+  exacts [strong_epi.of_arrow_iso e, strong_epi.of_arrow_iso e.symm]
 #align category_theory.strong_epi.iff_of_arrow_iso CategoryTheory.StrongEpi.iff_of_arrow_iso
 -/
 
 #print CategoryTheory.StrongMono.iff_of_arrow_iso /-
 theorem StrongMono.iff_of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
-    (e : Arrow.mk f ≅ Arrow.mk g) : StrongMono f ↔ StrongMono g := by constructor <;> intro ;
-  exacts[strong_mono.of_arrow_iso e, strong_mono.of_arrow_iso e.symm]
+    (e : Arrow.mk f ≅ Arrow.mk g) : StrongMono f ↔ StrongMono g := by constructor <;> intro;
+  exacts [strong_mono.of_arrow_iso e, strong_mono.of_arrow_iso e.symm]
 #align category_theory.strong_mono.iff_of_arrow_iso CategoryTheory.StrongMono.iff_of_arrow_iso
 -/
 
Diff
@@ -114,9 +114,7 @@ variable {R : C} (f : P ⟶ Q) (g : Q ⟶ R)
 /-- The composition of two strong epimorphisms is a strong epimorphism. -/
 theorem strongEpi_comp [StrongEpi f] [StrongEpi g] : StrongEpi (f ≫ g) :=
   { Epi := epi_comp _ _
-    llp := by
-      intros
-      infer_instance }
+    llp := by intros ; infer_instance }
 #align category_theory.strong_epi_comp CategoryTheory.strongEpi_comp
 -/
 
@@ -124,9 +122,7 @@ theorem strongEpi_comp [StrongEpi f] [StrongEpi g] : StrongEpi (f ≫ g) :=
 /-- The composition of two strong monomorphisms is a strong monomorphism. -/
 theorem strongMono_comp [StrongMono f] [StrongMono g] : StrongMono (f ≫ g) :=
   { Mono := mono_comp _ _
-    rlp := by
-      intros
-      infer_instance }
+    rlp := by intros ; infer_instance }
 #align category_theory.strong_mono_comp CategoryTheory.strongMono_comp
 -/
 
@@ -184,9 +180,7 @@ theorem StrongEpi.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
       rw [arrow.iso_w' e]
       haveI := epi_comp f e.hom.right
       apply epi_comp
-    llp := fun X Y z => by
-      intro
-      apply has_lifting_property.of_arrow_iso_left e z }
+    llp := fun X Y z => by intro ; apply has_lifting_property.of_arrow_iso_left e z }
 #align category_theory.strong_epi.of_arrow_iso CategoryTheory.StrongEpi.of_arrow_iso
 -/
 
@@ -197,26 +191,20 @@ theorem StrongMono.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
       rw [arrow.iso_w' e]
       haveI := mono_comp f e.hom.right
       apply mono_comp
-    rlp := fun X Y z => by
-      intro
-      apply has_lifting_property.of_arrow_iso_right z e }
+    rlp := fun X Y z => by intro ; apply has_lifting_property.of_arrow_iso_right z e }
 #align category_theory.strong_mono.of_arrow_iso CategoryTheory.StrongMono.of_arrow_iso
 -/
 
 #print CategoryTheory.StrongEpi.iff_of_arrow_iso /-
 theorem StrongEpi.iff_of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
-    (e : Arrow.mk f ≅ Arrow.mk g) : StrongEpi f ↔ StrongEpi g :=
-  by
-  constructor <;> intro
+    (e : Arrow.mk f ≅ Arrow.mk g) : StrongEpi f ↔ StrongEpi g := by constructor <;> intro ;
   exacts[strong_epi.of_arrow_iso e, strong_epi.of_arrow_iso e.symm]
 #align category_theory.strong_epi.iff_of_arrow_iso CategoryTheory.StrongEpi.iff_of_arrow_iso
 -/
 
 #print CategoryTheory.StrongMono.iff_of_arrow_iso /-
 theorem StrongMono.iff_of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
-    (e : Arrow.mk f ≅ Arrow.mk g) : StrongMono f ↔ StrongMono g :=
-  by
-  constructor <;> intro
+    (e : Arrow.mk f ≅ Arrow.mk g) : StrongMono f ↔ StrongMono g := by constructor <;> intro ;
   exacts[strong_mono.of_arrow_iso e, strong_mono.of_arrow_iso e.symm]
 #align category_theory.strong_mono.iff_of_arrow_iso CategoryTheory.StrongMono.iff_of_arrow_iso
 -/
Diff
@@ -90,9 +90,9 @@ theorem StrongMono.mk' {f : P ⟶ Q} [Mono f]
 #align category_theory.strong_mono.mk' CategoryTheory.StrongMono.mk'
 -/
 
-attribute [instance] strong_epi.llp
+attribute [instance 100] strong_epi.llp
 
-attribute [instance] strong_mono.rlp
+attribute [instance 100] strong_mono.rlp
 
 #print CategoryTheory.epi_of_strongEpi /-
 instance (priority := 100) epi_of_strongEpi (f : P ⟶ Q) [StrongEpi f] : Epi f :=
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Markus Himmel
 
 ! This file was ported from Lean 3 source module category_theory.limits.shapes.strong_epi
-! leanprover-community/mathlib commit 093c5036c7d80f381c16b74813d4ca1d4c3d7c64
+! leanprover-community/mathlib commit 3dadefa3f544b1db6214777fe47910739b54c66a
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.CategoryTheory.LiftingProperties.Basic
 /-!
 # Strong epimorphisms
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 In this file, we define strong epimorphisms. A strong epimorphism is an epimorphism `f`
 which has the (unique) left lifting property with respect to monomorphisms. Similarly,
 a strong monomorphisms in a monomorphism which has the (unique) right lifting property
Diff
@@ -47,13 +47,16 @@ variable {C : Type u} [Category.{v} C]
 
 variable {P Q : C}
 
+#print CategoryTheory.StrongEpi /-
 /-- A strong epimorphism `f` is an epimorphism which has the left lifting property
 with respect to monomorphisms. -/
 class StrongEpi (f : P ⟶ Q) : Prop where
   Epi : Epi f
   llp : ∀ ⦃X Y : C⦄ (z : X ⟶ Y) [Mono z], HasLiftingProperty f z
 #align category_theory.strong_epi CategoryTheory.StrongEpi
+-/
 
+#print CategoryTheory.StrongEpi.mk' /-
 theorem StrongEpi.mk' {f : P ⟶ Q} [Epi f]
     (hf :
       ∀ (X Y : C) (z : X ⟶ Y) (hz : Mono z) (u : P ⟶ X) (v : Q ⟶ Y) (sq : CommSq u f z v),
@@ -62,14 +65,18 @@ theorem StrongEpi.mk' {f : P ⟶ Q} [Epi f]
   { Epi := inferInstance
     llp := fun X Y z hz => ⟨fun u v sq => hf X Y z hz u v sq⟩ }
 #align category_theory.strong_epi.mk' CategoryTheory.StrongEpi.mk'
+-/
 
+#print CategoryTheory.StrongMono /-
 /-- A strong monomorphism `f` is a monomorphism which has the right lifting property
 with respect to epimorphisms. -/
 class StrongMono (f : P ⟶ Q) : Prop where
   Mono : Mono f
   rlp : ∀ ⦃X Y : C⦄ (z : X ⟶ Y) [Epi z], HasLiftingProperty z f
 #align category_theory.strong_mono CategoryTheory.StrongMono
+-/
 
+#print CategoryTheory.StrongMono.mk' /-
 theorem StrongMono.mk' {f : P ⟶ Q} [Mono f]
     (hf :
       ∀ (X Y : C) (z : X ⟶ Y) (hz : Epi z) (u : X ⟶ P) (v : Y ⟶ Q) (sq : CommSq u z f v),
@@ -78,23 +85,29 @@ theorem StrongMono.mk' {f : P ⟶ Q} [Mono f]
   { Mono := inferInstance
     rlp := fun X Y z hz => ⟨fun u v sq => hf X Y z hz u v sq⟩ }
 #align category_theory.strong_mono.mk' CategoryTheory.StrongMono.mk'
+-/
 
 attribute [instance] strong_epi.llp
 
 attribute [instance] strong_mono.rlp
 
+#print CategoryTheory.epi_of_strongEpi /-
 instance (priority := 100) epi_of_strongEpi (f : P ⟶ Q) [StrongEpi f] : Epi f :=
   StrongEpi.epi
 #align category_theory.epi_of_strong_epi CategoryTheory.epi_of_strongEpi
+-/
 
+#print CategoryTheory.mono_of_strongMono /-
 instance (priority := 100) mono_of_strongMono (f : P ⟶ Q) [StrongMono f] : Mono f :=
   StrongMono.mono
 #align category_theory.mono_of_strong_mono CategoryTheory.mono_of_strongMono
+-/
 
 section
 
 variable {R : C} (f : P ⟶ Q) (g : Q ⟶ R)
 
+#print CategoryTheory.strongEpi_comp /-
 /-- The composition of two strong epimorphisms is a strong epimorphism. -/
 theorem strongEpi_comp [StrongEpi f] [StrongEpi g] : StrongEpi (f ≫ g) :=
   { Epi := epi_comp _ _
@@ -102,7 +115,9 @@ theorem strongEpi_comp [StrongEpi f] [StrongEpi g] : StrongEpi (f ≫ g) :=
       intros
       infer_instance }
 #align category_theory.strong_epi_comp CategoryTheory.strongEpi_comp
+-/
 
+#print CategoryTheory.strongMono_comp /-
 /-- The composition of two strong monomorphisms is a strong monomorphism. -/
 theorem strongMono_comp [StrongMono f] [StrongMono g] : StrongMono (f ≫ g) :=
   { Mono := mono_comp _ _
@@ -110,7 +125,9 @@ theorem strongMono_comp [StrongMono f] [StrongMono g] : StrongMono (f ≫ g) :=
       intros
       infer_instance }
 #align category_theory.strong_mono_comp CategoryTheory.strongMono_comp
+-/
 
+#print CategoryTheory.strongEpi_of_strongEpi /-
 /-- If `f ≫ g` is a strong epimorphism, then so is `g`. -/
 theorem strongEpi_of_strongEpi [StrongEpi (f ≫ g)] : StrongEpi g :=
   { Epi := epi_of_epi f g
@@ -124,7 +141,9 @@ theorem strongEpi_of_strongEpi [StrongEpi (f ≫ g)] : StrongEpi g :=
           ⟨(comm_sq.mk h₀).lift, by
             simp only [← cancel_mono z, category.assoc, comm_sq.fac_right, sq.w], by simp⟩ }
 #align category_theory.strong_epi_of_strong_epi CategoryTheory.strongEpi_of_strongEpi
+-/
 
+#print CategoryTheory.strongMono_of_strongMono /-
 /-- If `f ≫ g` is a strong monomorphism, then so is `f`. -/
 theorem strongMono_of_strongMono [StrongMono (f ≫ g)] : StrongMono f :=
   { Mono := mono_of_mono f g
@@ -135,21 +154,27 @@ theorem strongMono_of_strongMono [StrongMono (f ≫ g)] : StrongMono f :=
       have h₀ : u ≫ f ≫ g = z ≫ v ≫ g := by rw [reassoc_of sq.w]
       exact comm_sq.has_lift.mk' ⟨(comm_sq.mk h₀).lift, by simp, by simp [← cancel_epi z, sq.w]⟩ }
 #align category_theory.strong_mono_of_strong_mono CategoryTheory.strongMono_of_strongMono
+-/
 
+#print CategoryTheory.strongEpi_of_isIso /-
 /-- An isomorphism is in particular a strong epimorphism. -/
 instance (priority := 100) strongEpi_of_isIso [IsIso f] : StrongEpi f
     where
   Epi := by infer_instance
   llp X Y z hz := HasLiftingProperty.of_left_iso _ _
 #align category_theory.strong_epi_of_is_iso CategoryTheory.strongEpi_of_isIso
+-/
 
+#print CategoryTheory.strongMono_of_isIso /-
 /-- An isomorphism is in particular a strong monomorphism. -/
 instance (priority := 100) strongMono_of_isIso [IsIso f] : StrongMono f
     where
   Mono := by infer_instance
   rlp X Y z hz := HasLiftingProperty.of_right_iso _ _
 #align category_theory.strong_mono_of_is_iso CategoryTheory.strongMono_of_isIso
+-/
 
+#print CategoryTheory.StrongEpi.of_arrow_iso /-
 theorem StrongEpi.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
     (e : Arrow.mk f ≅ Arrow.mk g) [h : StrongEpi f] : StrongEpi g :=
   { Epi := by
@@ -160,7 +185,9 @@ theorem StrongEpi.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
       intro
       apply has_lifting_property.of_arrow_iso_left e z }
 #align category_theory.strong_epi.of_arrow_iso CategoryTheory.StrongEpi.of_arrow_iso
+-/
 
+#print CategoryTheory.StrongMono.of_arrow_iso /-
 theorem StrongMono.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
     (e : Arrow.mk f ≅ Arrow.mk g) [h : StrongMono f] : StrongMono g :=
   { Mono := by
@@ -171,64 +198,83 @@ theorem StrongMono.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
       intro
       apply has_lifting_property.of_arrow_iso_right z e }
 #align category_theory.strong_mono.of_arrow_iso CategoryTheory.StrongMono.of_arrow_iso
+-/
 
+#print CategoryTheory.StrongEpi.iff_of_arrow_iso /-
 theorem StrongEpi.iff_of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
     (e : Arrow.mk f ≅ Arrow.mk g) : StrongEpi f ↔ StrongEpi g :=
   by
   constructor <;> intro
   exacts[strong_epi.of_arrow_iso e, strong_epi.of_arrow_iso e.symm]
 #align category_theory.strong_epi.iff_of_arrow_iso CategoryTheory.StrongEpi.iff_of_arrow_iso
+-/
 
+#print CategoryTheory.StrongMono.iff_of_arrow_iso /-
 theorem StrongMono.iff_of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
     (e : Arrow.mk f ≅ Arrow.mk g) : StrongMono f ↔ StrongMono g :=
   by
   constructor <;> intro
   exacts[strong_mono.of_arrow_iso e, strong_mono.of_arrow_iso e.symm]
 #align category_theory.strong_mono.iff_of_arrow_iso CategoryTheory.StrongMono.iff_of_arrow_iso
+-/
 
 end
 
+#print CategoryTheory.isIso_of_mono_of_strongEpi /-
 /-- A strong epimorphism that is a monomorphism is an isomorphism. -/
 theorem isIso_of_mono_of_strongEpi (f : P ⟶ Q) [Mono f] [StrongEpi f] : IsIso f :=
   ⟨⟨(CommSq.mk (show 𝟙 P ≫ f = f ≫ 𝟙 Q by simp)).lift, by tidy⟩⟩
 #align category_theory.is_iso_of_mono_of_strong_epi CategoryTheory.isIso_of_mono_of_strongEpi
+-/
 
+#print CategoryTheory.isIso_of_epi_of_strongMono /-
 /-- A strong monomorphism that is an epimorphism is an isomorphism. -/
 theorem isIso_of_epi_of_strongMono (f : P ⟶ Q) [Epi f] [StrongMono f] : IsIso f :=
   ⟨⟨(CommSq.mk (show 𝟙 P ≫ f = f ≫ 𝟙 Q by simp)).lift, by tidy⟩⟩
 #align category_theory.is_iso_of_epi_of_strong_mono CategoryTheory.isIso_of_epi_of_strongMono
+-/
 
 section
 
 variable (C)
 
+#print CategoryTheory.StrongEpiCategory /-
 /-- A strong epi category is a category in which every epimorphism is strong. -/
 class StrongEpiCategory : Prop where
   strongEpi_of_epi : ∀ {X Y : C} (f : X ⟶ Y) [Epi f], StrongEpi f
 #align category_theory.strong_epi_category CategoryTheory.StrongEpiCategory
+-/
 
+#print CategoryTheory.StrongMonoCategory /-
 /-- A strong mono category is a category in which every monomorphism is strong. -/
 class StrongMonoCategory : Prop where
   strongMono_of_mono : ∀ {X Y : C} (f : X ⟶ Y) [Mono f], StrongMono f
 #align category_theory.strong_mono_category CategoryTheory.StrongMonoCategory
+-/
 
 end
 
+#print CategoryTheory.strongEpi_of_epi /-
 theorem strongEpi_of_epi [StrongEpiCategory C] (f : P ⟶ Q) [Epi f] : StrongEpi f :=
   StrongEpiCategory.strongEpi_of_epi _
 #align category_theory.strong_epi_of_epi CategoryTheory.strongEpi_of_epi
+-/
 
+#print CategoryTheory.strongMono_of_mono /-
 theorem strongMono_of_mono [StrongMonoCategory C] (f : P ⟶ Q) [Mono f] : StrongMono f :=
   StrongMonoCategory.strongMono_of_mono _
 #align category_theory.strong_mono_of_mono CategoryTheory.strongMono_of_mono
+-/
 
 section
 
 attribute [local instance] strong_epi_of_epi
 
+#print CategoryTheory.balanced_of_strongEpiCategory /-
 instance (priority := 100) balanced_of_strongEpiCategory [StrongEpiCategory C] : Balanced C
     where isIso_of_mono_of_epi _ _ _ _ _ := is_iso_of_mono_of_strong_epi _
 #align category_theory.balanced_of_strong_epi_category CategoryTheory.balanced_of_strongEpiCategory
+-/
 
 end
 
@@ -236,9 +282,11 @@ section
 
 attribute [local instance] strong_mono_of_mono
 
+#print CategoryTheory.balanced_of_strongMonoCategory /-
 instance (priority := 100) balanced_of_strongMonoCategory [StrongMonoCategory C] : Balanced C
     where isIso_of_mono_of_epi _ _ _ _ _ := is_iso_of_epi_of_strong_mono _
 #align category_theory.balanced_of_strong_mono_category CategoryTheory.balanced_of_strongMonoCategory
+-/
 
 end
 

Changes in mathlib4

mathlib3
mathlib4
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -41,7 +41,6 @@ universe v u
 namespace CategoryTheory
 
 variable {C : Type u} [Category.{v} C]
-
 variable {P Q : C}
 
 /-- A strong epimorphism `f` is an epimorphism which has the left lifting property
chore: space after (#8178)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -132,7 +132,7 @@ theorem strongMono_of_strongMono [StrongMono (f ≫ g)] : StrongMono f :=
       constructor
       intro u v sq
       have h₀ : u ≫ f ≫ g = z ≫ v ≫ g := by
-        rw [←Category.assoc, eq_whisker sq.w, Category.assoc]
+        rw [← Category.assoc, eq_whisker sq.w, Category.assoc]
       exact CommSq.HasLift.mk' ⟨(CommSq.mk h₀).lift, by simp, by simp [← cancel_epi z, sq.w]⟩ }
 #align category_theory.strong_mono_of_strong_mono CategoryTheory.strongMono_of_strongMono
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2020 Markus Himmel. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Markus Himmel
-
-! This file was ported from Lean 3 source module category_theory.limits.shapes.strong_epi
-! leanprover-community/mathlib commit 32253a1a1071173b33dc7d6a218cf722c6feb514
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Balanced
 import Mathlib.CategoryTheory.LiftingProperties.Basic
 
+#align_import category_theory.limits.shapes.strong_epi from "leanprover-community/mathlib"@"32253a1a1071173b33dc7d6a218cf722c6feb514"
+
 /-!
 # Strong epimorphisms
 
chore: port missing instance priorities (#3613)

See discussion at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/mathport.20drops.20priorities.20in.20.60attribute.20.5Binstance.5D.60. mathport has been dropping the priorities on instances when using the attribute command.

This PR adds back all the priorities, except for local attribute, and instances involving coercions, which I didn't want to mess with.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -82,9 +82,9 @@ theorem StrongMono.mk' {f : P ⟶ Q} [Mono f]
   rlp := fun {X Y} z hz => ⟨fun {u v} sq => hf X Y z hz u v sq⟩
 #align category_theory.strong_mono.mk' CategoryTheory.StrongMono.mk'
 
-attribute [instance] StrongEpi.llp
+attribute [instance 100] StrongEpi.llp
 
-attribute [instance] StrongMono.rlp
+attribute [instance 100] StrongMono.rlp
 
 instance (priority := 100) epi_of_strongEpi (f : P ⟶ Q) [StrongEpi f] : Epi f :=
   StrongEpi.epi
@@ -246,4 +246,3 @@ instance (priority := 100) balanced_of_strongMonoCategory [StrongMonoCategory C]
 end
 
 end CategoryTheory
-
feat: port CategoryTheory.Limits.Shapes.Terminal (#2459)

Co-authored-by: Matthew Robert Ballard <100034030+mattrobball@users.noreply.github.com> Co-authored-by: Johan Commelin <johan@commelin.net>

Diff
@@ -246,3 +246,4 @@ instance (priority := 100) balanced_of_strongMonoCategory [StrongMonoCategory C]
 end
 
 end CategoryTheory
+
chore: tidy various files (#2446)
Diff
@@ -26,7 +26,7 @@ Besides the definition, we show that
 * if `f ≫ g` is a strong epimorphism, then so is `g`,
 * if `f` is both a strong epimorphism and a monomorphism, then it is an isomorphism
 
-We also define classes `strong_mono_category` and `strong_epi_category` for categories in which
+We also define classes `StrongMonoCategory` and `StrongEpiCategory` for categories in which
 every monomorphism or epimorphism is strong, and deduce that these categories are balanced.
 
 ## TODO
@@ -59,11 +59,11 @@ class StrongEpi (f : P ⟶ Q) : Prop where
 
 
 theorem StrongEpi.mk' {f : P ⟶ Q} [Epi f]
-    (hf : ∀ (X Y : C) (z : X ⟶ Y) 
+    (hf : ∀ (X Y : C) (z : X ⟶ Y)
       (_ : Mono z) (u : P ⟶ X) (v : Q ⟶ Y) (sq : CommSq u f z v), sq.HasLift) :
     StrongEpi f :=
   { epi := inferInstance
-    llp := fun {X} {Y} z hz => ⟨fun {u} {v} sq => hf X Y z hz u v sq⟩ }
+    llp := fun {X Y} z hz => ⟨fun {u v} sq => hf X Y z hz u v sq⟩ }
 #align category_theory.strong_epi.mk' CategoryTheory.StrongEpi.mk'
 
 /-- A strong monomorphism `f` is a monomorphism which has the right lifting property
@@ -76,10 +76,10 @@ class StrongMono (f : P ⟶ Q) : Prop where
 #align category_theory.strong_mono CategoryTheory.StrongMono
 
 theorem StrongMono.mk' {f : P ⟶ Q} [Mono f]
-    (hf : ∀ (X Y : C) (z : X ⟶ Y) (_ : Epi z) (u : X ⟶ P) 
-    (v : Y ⟶ Q) (sq : CommSq u z f v), sq.HasLift) : StrongMono f where
+    (hf : ∀ (X Y : C) (z : X ⟶ Y) (_ : Epi z) (u : X ⟶ P)
+      (v : Y ⟶ Q) (sq : CommSq u z f v), sq.HasLift) : StrongMono f where
   mono := inferInstance
-  rlp := fun {X} {Y} z hz => ⟨fun {u} {v} sq => hf X Y z hz u v sq⟩
+  rlp := fun {X Y} z hz => ⟨fun {u v} sq => hf X Y z hz u v sq⟩
 #align category_theory.strong_mono.mk' CategoryTheory.StrongMono.mk'
 
 attribute [instance] StrongEpi.llp
@@ -117,7 +117,7 @@ theorem strongMono_comp [StrongMono f] [StrongMono g] : StrongMono (f ≫ g) :=
 /-- If `f ≫ g` is a strong epimorphism, then so is `g`. -/
 theorem strongEpi_of_strongEpi [StrongEpi (f ≫ g)] : StrongEpi g :=
   { epi := epi_of_epi f g
-    llp := fun {X} {Y} z _ => by
+    llp := fun {X Y} z _ => by
       constructor
       intro u v sq
       have h₀ : (f ≫ u) ≫ z = (f ≫ g) ≫ v := by simp only [Category.assoc, sq.w]
@@ -130,27 +130,25 @@ theorem strongEpi_of_strongEpi [StrongEpi (f ≫ g)] : StrongEpi g :=
 /-- If `f ≫ g` is a strong monomorphism, then so is `f`. -/
 theorem strongMono_of_strongMono [StrongMono (f ≫ g)] : StrongMono f :=
   { mono := mono_of_mono f g
-    rlp := fun {X} {Y} z => by
+    rlp := fun {X Y} z => by
       intros
       constructor
       intro u v sq
-      have h₀ : u ≫ f ≫ g = z ≫ v ≫ g := by 
+      have h₀ : u ≫ f ≫ g = z ≫ v ≫ g := by
         rw [←Category.assoc, eq_whisker sq.w, Category.assoc]
       exact CommSq.HasLift.mk' ⟨(CommSq.mk h₀).lift, by simp, by simp [← cancel_epi z, sq.w]⟩ }
 #align category_theory.strong_mono_of_strong_mono CategoryTheory.strongMono_of_strongMono
 
 /-- An isomorphism is in particular a strong epimorphism. -/
-instance (priority := 100) strongEpi_of_isIso [IsIso f] : StrongEpi f
-    where
+instance (priority := 100) strongEpi_of_isIso [IsIso f] : StrongEpi f where
   epi := by infer_instance
-  llp {X} {Y} z := HasLiftingProperty.of_left_iso _ _
+  llp {X Y} z := HasLiftingProperty.of_left_iso _ _
 #align category_theory.strong_epi_of_is_iso CategoryTheory.strongEpi_of_isIso
 
 /-- An isomorphism is in particular a strong monomorphism. -/
-instance (priority := 100) strongMono_of_isIso [IsIso f] : StrongMono f
-    where
+instance (priority := 100) strongMono_of_isIso [IsIso f] : StrongMono f where
   mono := by infer_instance
-  rlp {X} {Y} z := HasLiftingProperty.of_right_iso _ _
+  rlp {X Y} z := HasLiftingProperty.of_right_iso _ _
 #align category_theory.strong_mono_of_is_iso CategoryTheory.strongMono_of_isIso
 
 theorem StrongEpi.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
@@ -159,7 +157,7 @@ theorem StrongEpi.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
       rw [Arrow.iso_w' e]
       haveI := epi_comp f e.hom.right
       apply epi_comp
-    llp := fun {X} {Y} z => by
+    llp := fun {X Y} z => by
       intro
       apply HasLiftingProperty.of_arrow_iso_left e z }
 #align category_theory.strong_epi.of_arrow_iso CategoryTheory.StrongEpi.of_arrow_iso
@@ -170,7 +168,7 @@ theorem StrongMono.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
       rw [Arrow.iso_w' e]
       haveI := mono_comp f e.hom.right
       apply mono_comp
-    rlp := fun {X} {Y} z => by
+    rlp := fun {X Y} z => by
       intro
       apply HasLiftingProperty.of_arrow_iso_right z e }
 #align category_theory.strong_mono.of_arrow_iso CategoryTheory.StrongMono.of_arrow_iso
@@ -178,13 +176,13 @@ theorem StrongMono.of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
 theorem StrongEpi.iff_of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
     (e : Arrow.mk f ≅ Arrow.mk g) : StrongEpi f ↔ StrongEpi g := by
   constructor <;> intro
-  exacts[StrongEpi.of_arrow_iso e, StrongEpi.of_arrow_iso e.symm]
+  exacts [StrongEpi.of_arrow_iso e, StrongEpi.of_arrow_iso e.symm]
 #align category_theory.strong_epi.iff_of_arrow_iso CategoryTheory.StrongEpi.iff_of_arrow_iso
 
 theorem StrongMono.iff_of_arrow_iso {A B A' B' : C} {f : A ⟶ B} {g : A' ⟶ B'}
     (e : Arrow.mk f ≅ Arrow.mk g) : StrongMono f ↔ StrongMono g := by
   constructor <;> intro
-  exacts[StrongMono.of_arrow_iso e, StrongMono.of_arrow_iso e.symm]
+  exacts [StrongMono.of_arrow_iso e, StrongMono.of_arrow_iso e.symm]
 #align category_theory.strong_mono.iff_of_arrow_iso CategoryTheory.StrongMono.iff_of_arrow_iso
 
 end
@@ -231,8 +229,8 @@ section
 
 attribute [local instance] strongEpi_of_epi
 
-instance (priority := 100) balanced_of_strongEpiCategory [StrongEpiCategory C] : Balanced C
-    where isIso_of_mono_of_epi _ _ _ := isIso_of_mono_of_strongEpi _
+instance (priority := 100) balanced_of_strongEpiCategory [StrongEpiCategory C] : Balanced C where
+  isIso_of_mono_of_epi _ _ _ := isIso_of_mono_of_strongEpi _
 #align category_theory.balanced_of_strong_epi_category CategoryTheory.balanced_of_strongEpiCategory
 
 end
@@ -241,11 +239,10 @@ section
 
 attribute [local instance] strongMono_of_mono
 
-instance (priority := 100) balanced_of_strongMonoCategory [StrongMonoCategory C] : Balanced C
-    where isIso_of_mono_of_epi _ _ _ := isIso_of_epi_of_strongMono _
+instance (priority := 100) balanced_of_strongMonoCategory [StrongMonoCategory C] : Balanced C where
+  isIso_of_mono_of_epi _ _ _ := isIso_of_epi_of_strongMono _
 #align category_theory.balanced_of_strong_mono_category CategoryTheory.balanced_of_strongMonoCategory
 
 end
 
 end CategoryTheory
-#lint
feat: port CategoryTheory.Limits.Shapes.StrongEpi (#2327)

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Matthew Robert Ballard <100034030+mattrobball@users.noreply.github.com>

Dependencies 54

55 files ported (100.0%)
18067 lines ported (100.0%)

All dependencies are ported!