category_theory.groupoid.subgroupoidMathlib.CategoryTheory.Groupoid.Subgroupoid

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)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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
@@ -514,7 +514,7 @@ theorem IsNormal.generatedNormal_le {S : Subgroupoid C} (Sn : S.IsNormal) :
   constructor
   · rintro h c d
     let h' := generated_le_generated_normal X
-    rw [le_iff] at h h' 
+    rw [le_iff] at h h'
     exact ((subset_generated X c d).trans (@h' c d)).trans (@h c d)
   · rintro h
     apply @sInf_le (subgroupoid C) _
@@ -681,7 +681,7 @@ theorem mem_map_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
   dsimp [objs, map]
   constructor
   · rintro ⟨f, hf⟩
-    change map.arrows φ hφ S d d f at hf ; rw [map.arrows_iff] at hf 
+    change map.arrows φ hφ S d d f at hf; rw [map.arrows_iff] at hf
     obtain ⟨c, d, g, ec, ed, eg, gS, eg⟩ := hf
     exact ⟨c, ⟨mem_objs_of_src S eg, ec⟩⟩
   · rintro ⟨c, ⟨γ, γS⟩, rfl⟩
@@ -736,18 +736,18 @@ theorem isNormal_map (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤)
       change map.arrows φ hφ S _ _ (𝟙 _); rw [← Functor.map_id]
       constructor; exact Sn.wide c
     conj := fun d d' g δ hδ => by
-      rw [mem_map_iff] at hδ 
+      rw [mem_map_iff] at hδ
       obtain ⟨c, c', γ, cd, cd', γS, hγ⟩ := hδ; subst_vars; cases hφ cd'
       have : d' ∈ (im φ hφ).objs := by rw [hφ']; apply mem_top_objs
-      rw [mem_im_objs_iff] at this 
+      rw [mem_im_objs_iff] at this
       obtain ⟨c', rfl⟩ := this
       have : g ∈ (im φ hφ).arrows (φ.obj c) (φ.obj c') := by rw [hφ']; trivial
-      rw [mem_im_iff] at this 
+      rw [mem_im_iff] at this
       obtain ⟨b, b', f, hb, hb', _, hf⟩ := this; subst_vars; cases hφ hb; cases hφ hb'
       change map.arrows φ hφ S (φ.obj c') (φ.obj c') _
       simp only [eq_to_hom_refl, category.comp_id, category.id_comp, inv_eq_inv]
       suffices map.arrows φ hφ S (φ.obj c') (φ.obj c') (φ.map <| inv f ≫ γ ≫ f) by
-        simp only [inv_eq_inv, functor.map_comp, functor.map_inv] at this ; exact this
+        simp only [inv_eq_inv, functor.map_comp, functor.map_inv] at this; exact this
       · constructor; apply Sn.conj f γS }
 #align category_theory.subgroupoid.is_normal_map CategoryTheory.Subgroupoid.isNormal_map
 -/
Diff
@@ -3,13 +3,13 @@ Copyright (c) 2022 Rémi Bottinelli. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Rémi Bottinelli, Junyan Xu
 -/
-import Mathbin.CategoryTheory.Groupoid.VertexGroup
-import Mathbin.CategoryTheory.Groupoid.Basic
-import Mathbin.CategoryTheory.Groupoid
-import Mathbin.Algebra.Group.Defs
-import Mathbin.Data.Set.Lattice
-import Mathbin.GroupTheory.Subgroup.Basic
-import Mathbin.Order.GaloisConnection
+import CategoryTheory.Groupoid.VertexGroup
+import CategoryTheory.Groupoid.Basic
+import CategoryTheory.Groupoid
+import Algebra.Group.Defs
+import Data.Set.Lattice
+import GroupTheory.Subgroup.Basic
+import Order.GaloisConnection
 
 #align_import category_theory.groupoid.subgroupoid from "leanprover-community/mathlib"@"44e2ae8cffc713925494e4975ee31ec1d06929b3"
 
Diff
@@ -223,7 +223,7 @@ theorem hom.faithful : ∀ c d, Function.Injective fun f : c ⟶ d => (hom S).ma
 def vertexSubgroup {c : C} (hc : c ∈ S.objs) : Subgroup (c ⟶ c)
     where
   carrier := S.arrows c c
-  mul_mem' f g hf hg := S.mul hf hg
+  hMul_mem' f g hf hg := S.mul hf hg
   one_mem' := id_mem_of_nonempty_isotropy _ _ hc
   inv_mem' f hf := S.inv hf
 #align category_theory.subgroupoid.vertex_subgroup CategoryTheory.Subgroupoid.vertexSubgroup
Diff
@@ -593,12 +593,10 @@ theorem ker_comp {E : Type _} [Groupoid E] (ψ : D ⥤ E) : ker (φ ⋙ ψ) = co
 #align category_theory.subgroupoid.ker_comp CategoryTheory.Subgroupoid.ker_comp
 -/
 
-#print CategoryTheory.Subgroupoid.Map.Arrows /-
 /-- The family of arrows of the image of a subgroupoid under a functor injective on objects -/
 inductive Map.Arrows (hφ : Function.Injective φ.obj) (S : Subgroupoid C) : ∀ c d : D, (c ⟶ d) → Prop
   | im {c d : C} (f : c ⟶ d) (hf : f ∈ S.arrows c d) : map.arrows (φ.obj c) (φ.obj d) (φ.map f)
-#align category_theory.subgroupoid.map.arrows CategoryTheory.Subgroupoid.Map.Arrows
--/
+#align category_theory.subgroupoid.map.arrows CategoryTheory.Subgroupoid.Map.Arrowsₓ
 
 #print CategoryTheory.Subgroupoid.Map.arrows_iff /-
 theorem Map.arrows_iff (hφ : Function.Injective φ.obj) (S : Subgroupoid C) {c d : D} (f : c ⟶ d) :
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2022 Rémi Bottinelli. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Rémi Bottinelli, Junyan Xu
-
-! This file was ported from Lean 3 source module category_theory.groupoid.subgroupoid
-! leanprover-community/mathlib commit 44e2ae8cffc713925494e4975ee31ec1d06929b3
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Groupoid.VertexGroup
 import Mathbin.CategoryTheory.Groupoid.Basic
@@ -16,6 +11,8 @@ import Mathbin.Data.Set.Lattice
 import Mathbin.GroupTheory.Subgroup.Basic
 import Mathbin.Order.GaloisConnection
 
+#align_import category_theory.groupoid.subgroupoid from "leanprover-community/mathlib"@"44e2ae8cffc713925494e4975ee31ec1d06929b3"
+
 /-!
 # Subgroupoid
 
Diff
@@ -235,7 +235,7 @@ def vertexSubgroup {c : C} (hc : c ∈ S.objs) : Subgroup (c ⟶ c)
 instance : SetLike (Subgroupoid C) (Σ c d : C, c ⟶ d)
     where
   coe S := {F | F.2.2 ∈ S.arrows F.1 F.2.1}
-  coe_injective' := fun ⟨S, _, _⟩ ⟨T, _, _⟩ h => by ext (c d f); apply Set.ext_iff.1 h ⟨c, d, f⟩
+  coe_injective' := fun ⟨S, _, _⟩ ⟨T, _, _⟩ h => by ext c d f; apply Set.ext_iff.1 h ⟨c, d, f⟩
 
 #print CategoryTheory.Subgroupoid.mem_iff /-
 theorem mem_iff (S : Subgroupoid C) (F : Σ c d, c ⟶ d) : F ∈ S ↔ F.2.2 ∈ S.arrows F.1 F.2.1 :=
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Rémi Bottinelli, Junyan Xu
 
 ! This file was ported from Lean 3 source module category_theory.groupoid.subgroupoid
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
+! leanprover-community/mathlib commit 44e2ae8cffc713925494e4975ee31ec1d06929b3
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -19,6 +19,9 @@ import Mathbin.Order.GaloisConnection
 /-!
 # Subgroupoid
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file defines subgroupoids as `structure`s containing the subsets of arrows and their
 stability under composition and inversion.
 Also defined are:
Diff
@@ -88,6 +88,7 @@ namespace Subgroupoid
 
 variable (S : Subgroupoid C)
 
+#print CategoryTheory.Subgroupoid.inv_mem_iff /-
 theorem inv_mem_iff {c d : C} (f : c ⟶ d) : inv f ∈ S.arrows d c ↔ f ∈ S.arrows c d :=
   by
   constructor
@@ -96,7 +97,9 @@ theorem inv_mem_iff {c d : C} (f : c ⟶ d) : inv f ∈ S.arrows d c ↔ f ∈ S
     · apply S.inv h
   · apply S.inv
 #align category_theory.subgroupoid.inv_mem_iff CategoryTheory.Subgroupoid.inv_mem_iff
+-/
 
+#print CategoryTheory.Subgroupoid.mul_mem_cancel_left /-
 theorem mul_mem_cancel_left {c d e : C} {f : c ⟶ d} {g : d ⟶ e} (hf : f ∈ S.arrows c d) :
     f ≫ g ∈ S.arrows c e ↔ g ∈ S.arrows d e :=
   by
@@ -107,7 +110,9 @@ theorem mul_mem_cancel_left {c d e : C} {f : c ⟶ d} {g : d ⟶ e} (hf : f ∈
     · apply S.mul (S.inv hf) h
   · apply S.mul hf
 #align category_theory.subgroupoid.mul_mem_cancel_left CategoryTheory.Subgroupoid.mul_mem_cancel_left
+-/
 
+#print CategoryTheory.Subgroupoid.mul_mem_cancel_right /-
 theorem mul_mem_cancel_right {c d e : C} {f : c ⟶ d} {g : d ⟶ e} (hg : g ∈ S.arrows d e) :
     f ≫ g ∈ S.arrows c e ↔ f ∈ S.arrows c d :=
   by
@@ -118,6 +123,7 @@ theorem mul_mem_cancel_right {c d e : C} {f : c ⟶ d} {g : d ⟶ e} (hg : g ∈
     · apply S.mul h (S.inv hg)
   · exact fun hf => S.mul hf hg
 #align category_theory.subgroupoid.mul_mem_cancel_right CategoryTheory.Subgroupoid.mul_mem_cancel_right
+-/
 
 #print CategoryTheory.Subgroupoid.objs /-
 /-- The vertices of `C` on which `S` has non-trivial isotropy -/
@@ -126,28 +132,38 @@ def objs : Set C :=
 #align category_theory.subgroupoid.objs CategoryTheory.Subgroupoid.objs
 -/
 
+#print CategoryTheory.Subgroupoid.mem_objs_of_src /-
 theorem mem_objs_of_src {c d : C} {f : c ⟶ d} (h : f ∈ S.arrows c d) : c ∈ S.objs :=
   ⟨f ≫ inv f, S.mul h (S.inv h)⟩
 #align category_theory.subgroupoid.mem_objs_of_src CategoryTheory.Subgroupoid.mem_objs_of_src
+-/
 
+#print CategoryTheory.Subgroupoid.mem_objs_of_tgt /-
 theorem mem_objs_of_tgt {c d : C} {f : c ⟶ d} (h : f ∈ S.arrows c d) : d ∈ S.objs :=
   ⟨inv f ≫ f, S.mul (S.inv h) h⟩
 #align category_theory.subgroupoid.mem_objs_of_tgt CategoryTheory.Subgroupoid.mem_objs_of_tgt
+-/
 
+#print CategoryTheory.Subgroupoid.id_mem_of_nonempty_isotropy /-
 theorem id_mem_of_nonempty_isotropy (c : C) : c ∈ objs S → 𝟙 c ∈ S.arrows c c :=
   by
   rintro ⟨γ, hγ⟩
   convert S.mul hγ (S.inv hγ)
   simp only [inv_eq_inv, is_iso.hom_inv_id]
 #align category_theory.subgroupoid.id_mem_of_nonempty_isotropy CategoryTheory.Subgroupoid.id_mem_of_nonempty_isotropy
+-/
 
+#print CategoryTheory.Subgroupoid.id_mem_of_src /-
 theorem id_mem_of_src {c d : C} {f : c ⟶ d} (h : f ∈ S.arrows c d) : 𝟙 c ∈ S.arrows c c :=
   id_mem_of_nonempty_isotropy S c (mem_objs_of_src S h)
 #align category_theory.subgroupoid.id_mem_of_src CategoryTheory.Subgroupoid.id_mem_of_src
+-/
 
+#print CategoryTheory.Subgroupoid.id_mem_of_tgt /-
 theorem id_mem_of_tgt {c d : C} {f : c ⟶ d} (h : f ∈ S.arrows c d) : 𝟙 d ∈ S.arrows d d :=
   id_mem_of_nonempty_isotropy S d (mem_objs_of_tgt S h)
 #align category_theory.subgroupoid.id_mem_of_tgt CategoryTheory.Subgroupoid.id_mem_of_tgt
+-/
 
 #print CategoryTheory.Subgroupoid.asWideQuiver /-
 /-- A subgroupoid seen as a quiver on vertex set `C` -/
@@ -172,11 +188,13 @@ instance coe : Groupoid S.objs where
 #align category_theory.subgroupoid.coe CategoryTheory.Subgroupoid.coe
 -/
 
+#print CategoryTheory.Subgroupoid.coe_inv_coe' /-
 @[simp]
 theorem coe_inv_coe' {c d : S.objs} (p : c ⟶ d) :
     (CategoryTheory.inv p).val = CategoryTheory.inv p.val := by
   simp only [Subtype.val_eq_coe, ← inv_eq_inv, coe_inv_coe]
 #align category_theory.subgroupoid.coe_inv_coe' CategoryTheory.Subgroupoid.coe_inv_coe'
+-/
 
 #print CategoryTheory.Subgroupoid.hom /-
 /-- The embedding of the coerced subgroupoid to its parent-/
@@ -188,13 +206,17 @@ def hom : S.objs ⥤ C where
 #align category_theory.subgroupoid.hom CategoryTheory.Subgroupoid.hom
 -/
 
+#print CategoryTheory.Subgroupoid.hom.inj_on_objects /-
 theorem hom.inj_on_objects : Function.Injective (hom S).obj := by rintro ⟨c, hc⟩ ⟨d, hd⟩ hcd;
   simp only [Subtype.mk_eq_mk]; exact hcd
 #align category_theory.subgroupoid.hom.inj_on_objects CategoryTheory.Subgroupoid.hom.inj_on_objects
+-/
 
+#print CategoryTheory.Subgroupoid.hom.faithful /-
 theorem hom.faithful : ∀ c d, Function.Injective fun f : c ⟶ d => (hom S).map f := by
   rintro ⟨c, hc⟩ ⟨d, hd⟩ ⟨f, hf⟩ ⟨g, hg⟩ hfg; simp only [Subtype.mk_eq_mk]; exact hfg
 #align category_theory.subgroupoid.hom.faithful CategoryTheory.Subgroupoid.hom.faithful
+-/
 
 #print CategoryTheory.Subgroupoid.vertexSubgroup /-
 /-- The subgroup of the vertex group at `c` given by the subgroupoid -/
@@ -212,26 +234,34 @@ instance : SetLike (Subgroupoid C) (Σ c d : C, c ⟶ d)
   coe S := {F | F.2.2 ∈ S.arrows F.1 F.2.1}
   coe_injective' := fun ⟨S, _, _⟩ ⟨T, _, _⟩ h => by ext (c d f); apply Set.ext_iff.1 h ⟨c, d, f⟩
 
+#print CategoryTheory.Subgroupoid.mem_iff /-
 theorem mem_iff (S : Subgroupoid C) (F : Σ c d, c ⟶ d) : F ∈ S ↔ F.2.2 ∈ S.arrows F.1 F.2.1 :=
   Iff.rfl
 #align category_theory.subgroupoid.mem_iff CategoryTheory.Subgroupoid.mem_iff
+-/
 
+#print CategoryTheory.Subgroupoid.le_iff /-
 theorem le_iff (S T : Subgroupoid C) : S ≤ T ↔ ∀ {c d}, S.arrows c d ⊆ T.arrows c d := by
   rw [SetLike.le_def, Sigma.forall]; exact forall_congr' fun c => Sigma.forall
 #align category_theory.subgroupoid.le_iff CategoryTheory.Subgroupoid.le_iff
+-/
 
 instance : Top (Subgroupoid C) :=
   ⟨{  arrows := fun _ _ => Set.univ
       mul := by rintro; trivial
       inv := by rintro; trivial }⟩
 
+#print CategoryTheory.Subgroupoid.mem_top /-
 theorem mem_top {c d : C} (f : c ⟶ d) : f ∈ (⊤ : Subgroupoid C).arrows c d :=
   trivial
 #align category_theory.subgroupoid.mem_top CategoryTheory.Subgroupoid.mem_top
+-/
 
+#print CategoryTheory.Subgroupoid.mem_top_objs /-
 theorem mem_top_objs (c : C) : c ∈ (⊤ : Subgroupoid C).objs := by dsimp [Top.top, objs];
   simp only [univ_nonempty]
 #align category_theory.subgroupoid.mem_top_objs CategoryTheory.Subgroupoid.mem_top_objs
+-/
 
 instance : Bot (Subgroupoid C) :=
   ⟨{  arrows := fun _ _ => ∅
@@ -270,10 +300,13 @@ instance : CompleteLattice (Subgroupoid C) :=
     inf_le_left := fun R S _ => And.left
     inf_le_right := fun R S _ => And.right }
 
+#print CategoryTheory.Subgroupoid.le_objs /-
 theorem le_objs {S T : Subgroupoid C} (h : S ≤ T) : S.objs ⊆ T.objs := fun s ⟨γ, hγ⟩ =>
   ⟨γ, @h ⟨s, s, γ⟩ hγ⟩
 #align category_theory.subgroupoid.le_objs CategoryTheory.Subgroupoid.le_objs
+-/
 
+#print CategoryTheory.Subgroupoid.inclusion /-
 /-- The functor associated to the embedding of subgroupoids -/
 def inclusion {S T : Subgroupoid C} (h : S ≤ T) : S.objs ⥤ T.objs
     where
@@ -282,29 +315,40 @@ def inclusion {S T : Subgroupoid C} (h : S ≤ T) : S.objs ⥤ T.objs
   map_id' _ := rfl
   map_comp' _ _ _ _ _ := rfl
 #align category_theory.subgroupoid.inclusion CategoryTheory.Subgroupoid.inclusion
+-/
 
+#print CategoryTheory.Subgroupoid.inclusion_inj_on_objects /-
 theorem inclusion_inj_on_objects {S T : Subgroupoid C} (h : S ≤ T) :
     Function.Injective (inclusion h).obj := fun ⟨s, hs⟩ ⟨t, ht⟩ => by
   simpa only [inclusion, Subtype.mk_eq_mk] using id
 #align category_theory.subgroupoid.inclusion_inj_on_objects CategoryTheory.Subgroupoid.inclusion_inj_on_objects
+-/
 
+#print CategoryTheory.Subgroupoid.inclusion_faithful /-
 theorem inclusion_faithful {S T : Subgroupoid C} (h : S ≤ T) (s t : S.objs) :
     Function.Injective fun f : s ⟶ t => (inclusion h).map f := fun ⟨f, hf⟩ ⟨g, hg⟩ => by
   dsimp only [inclusion]; simpa only [Subtype.mk_eq_mk] using id
 #align category_theory.subgroupoid.inclusion_faithful CategoryTheory.Subgroupoid.inclusion_faithful
+-/
 
+#print CategoryTheory.Subgroupoid.inclusion_refl /-
 theorem inclusion_refl {S : Subgroupoid C} : inclusion (le_refl S) = 𝟭 S.objs :=
   Functor.hext (fun ⟨s, hs⟩ => rfl) fun ⟨s, hs⟩ ⟨t, ht⟩ ⟨f, hf⟩ => hEq_of_eq rfl
 #align category_theory.subgroupoid.inclusion_refl CategoryTheory.Subgroupoid.inclusion_refl
+-/
 
+#print CategoryTheory.Subgroupoid.inclusion_trans /-
 theorem inclusion_trans {R S T : Subgroupoid C} (k : R ≤ S) (h : S ≤ T) :
     inclusion (k.trans h) = inclusion k ⋙ inclusion h :=
   rfl
 #align category_theory.subgroupoid.inclusion_trans CategoryTheory.Subgroupoid.inclusion_trans
+-/
 
+#print CategoryTheory.Subgroupoid.inclusion_comp_embedding /-
 theorem inclusion_comp_embedding {S T : Subgroupoid C} (h : S ≤ T) : inclusion h ⋙ T.Hom = S.Hom :=
   rfl
 #align category_theory.subgroupoid.inclusion_comp_embedding CategoryTheory.Subgroupoid.inclusion_comp_embedding
+-/
 
 #print CategoryTheory.Subgroupoid.Discrete.Arrows /-
 /-- The family of arrows of the discrete groupoid -/
@@ -322,10 +366,12 @@ def discrete : Subgroupoid C where
 #align category_theory.subgroupoid.discrete CategoryTheory.Subgroupoid.discrete
 -/
 
+#print CategoryTheory.Subgroupoid.mem_discrete_iff /-
 theorem mem_discrete_iff {c d : C} (f : c ⟶ d) :
     f ∈ discrete.arrows c d ↔ ∃ h : c = d, f = eqToHom h :=
   ⟨by rintro ⟨⟩; exact ⟨rfl, rfl⟩, by rintro ⟨rfl, rfl⟩; constructor⟩
 #align category_theory.subgroupoid.mem_discrete_iff CategoryTheory.Subgroupoid.mem_discrete_iff
+-/
 
 #print CategoryTheory.Subgroupoid.IsWide /-
 /-- A subgroupoid is wide if its carrier set is all of `C`-/
@@ -334,6 +380,7 @@ structure IsWide : Prop where
 #align category_theory.subgroupoid.is_wide CategoryTheory.Subgroupoid.IsWide
 -/
 
+#print CategoryTheory.Subgroupoid.isWide_iff_objs_eq_univ /-
 theorem isWide_iff_objs_eq_univ : S.IsWide ↔ S.objs = Set.univ :=
   by
   constructor
@@ -345,14 +392,19 @@ theorem isWide_iff_objs_eq_univ : S.IsWide ↔ S.objs = Set.univ :=
     obtain ⟨γ, γS⟩ := (le_of_eq h.symm : ⊤ ⊆ S.objs) (Set.mem_univ c)
     exact id_mem_of_src S γS
 #align category_theory.subgroupoid.is_wide_iff_objs_eq_univ CategoryTheory.Subgroupoid.isWide_iff_objs_eq_univ
+-/
 
+#print CategoryTheory.Subgroupoid.IsWide.id_mem /-
 theorem IsWide.id_mem {S : Subgroupoid C} (Sw : S.IsWide) (c : C) : 𝟙 c ∈ S.arrows c c :=
   Sw.wide c
 #align category_theory.subgroupoid.is_wide.id_mem CategoryTheory.Subgroupoid.IsWide.id_mem
+-/
 
+#print CategoryTheory.Subgroupoid.IsWide.eqToHom_mem /-
 theorem IsWide.eqToHom_mem {S : Subgroupoid C} (Sw : S.IsWide) {c d : C} (h : c = d) :
     eqToHom h ∈ S.arrows c d := by cases h; simp only [eq_to_hom_refl]; apply Sw.id_mem c
 #align category_theory.subgroupoid.is_wide.eq_to_hom_mem CategoryTheory.Subgroupoid.IsWide.eqToHom_mem
+-/
 
 #print CategoryTheory.Subgroupoid.IsNormal /-
 /-- A subgroupoid is normal if it is wide and satisfies the expected stability under conjugacy. -/
@@ -361,11 +413,14 @@ structure IsNormal extends IsWide S : Prop where
 #align category_theory.subgroupoid.is_normal CategoryTheory.Subgroupoid.IsNormal
 -/
 
+#print CategoryTheory.Subgroupoid.IsNormal.conj' /-
 theorem IsNormal.conj' {S : Subgroupoid C} (Sn : IsNormal S) :
     ∀ {c d} (p : d ⟶ c) {γ : c ⟶ c} (hs : γ ∈ S.arrows c c), p ≫ γ ≫ inv p ∈ S.arrows d d :=
   fun c d p γ hs => by convert Sn.conj (inv p) hs; simp
 #align category_theory.subgroupoid.is_normal.conj' CategoryTheory.Subgroupoid.IsNormal.conj'
+-/
 
+#print CategoryTheory.Subgroupoid.IsNormal.conjugation_bij /-
 theorem IsNormal.conjugation_bij (Sn : IsNormal S) {c d} (p : c ⟶ d) :
     Set.BijOn (fun γ : c ⟶ c => inv p ≫ γ ≫ p) (S.arrows c c) (S.arrows d d) :=
   by
@@ -379,27 +434,36 @@ theorem IsNormal.conjugation_bij (Sn : IsNormal S) {c d} (p : c ⟶ d) :
     simp only [inv_eq_inv, category.assoc, is_iso.inv_hom_id, category.comp_id,
       is_iso.inv_hom_id_assoc]
 #align category_theory.subgroupoid.is_normal.conjugation_bij CategoryTheory.Subgroupoid.IsNormal.conjugation_bij
+-/
 
+#print CategoryTheory.Subgroupoid.top_isNormal /-
 theorem top_isNormal : IsNormal (⊤ : Subgroupoid C) :=
   { wide := fun c => trivial
     conj := fun a b c d e => trivial }
 #align category_theory.subgroupoid.top_is_normal CategoryTheory.Subgroupoid.top_isNormal
+-/
 
+#print CategoryTheory.Subgroupoid.sInf_isNormal /-
 theorem sInf_isNormal (s : Set <| Subgroupoid C) (sn : ∀ S ∈ s, IsNormal S) : IsNormal (sInf s) :=
   { wide := by simp_rw [Inf, mem_Inter₂]; exact fun c S Ss => (sn S Ss).wide c
     conj := by simp_rw [Inf, mem_Inter₂]; exact fun c d p γ hγ S Ss => (sn S Ss).conj p (hγ S Ss) }
 #align category_theory.subgroupoid.Inf_is_normal CategoryTheory.Subgroupoid.sInf_isNormal
+-/
 
+#print CategoryTheory.Subgroupoid.discrete_isNormal /-
 theorem discrete_isNormal : (@discrete C _).IsNormal :=
   { wide := fun c => by constructor
     conj := fun c d f γ hγ => by cases hγ;
       simp only [inv_eq_inv, category.id_comp, is_iso.inv_hom_id]; constructor }
 #align category_theory.subgroupoid.discrete_is_normal CategoryTheory.Subgroupoid.discrete_isNormal
+-/
 
+#print CategoryTheory.Subgroupoid.IsNormal.vertexSubgroup /-
 theorem IsNormal.vertexSubgroup (Sn : IsNormal S) (c : C) (cS : c ∈ S.objs) :
     (S.vertexSubgroup cS).Normal :=
   { conj_mem := fun x hx y => by rw [mul_assoc]; exact Sn.conj' y hx }
 #align category_theory.subgroupoid.is_normal.vertex_subgroup CategoryTheory.Subgroupoid.IsNormal.vertexSubgroup
+-/
 
 section GeneratedSubgroupoid
 
@@ -413,12 +477,14 @@ def generated : Subgroupoid C :=
 #align category_theory.subgroupoid.generated CategoryTheory.Subgroupoid.generated
 -/
 
+#print CategoryTheory.Subgroupoid.subset_generated /-
 theorem subset_generated (c d : C) : X c d ⊆ (generated X).arrows c d :=
   by
   dsimp only [generated, Inf]
   simp only [subset_Inter₂_iff]
   exact fun S hS f fS => hS _ _ fS
 #align category_theory.subgroupoid.subset_generated CategoryTheory.Subgroupoid.subset_generated
+-/
 
 #print CategoryTheory.Subgroupoid.generatedNormal /-
 /-- The normal sugroupoid generated by the set of arrows `X` -/
@@ -427,16 +493,21 @@ def generatedNormal : Subgroupoid C :=
 #align category_theory.subgroupoid.generated_normal CategoryTheory.Subgroupoid.generatedNormal
 -/
 
+#print CategoryTheory.Subgroupoid.generated_le_generatedNormal /-
 theorem generated_le_generatedNormal : generated X ≤ generatedNormal X :=
   by
   apply @sInf_le_sInf (subgroupoid C) _
   exact fun S ⟨h, _⟩ => h
 #align category_theory.subgroupoid.generated_le_generated_normal CategoryTheory.Subgroupoid.generated_le_generatedNormal
+-/
 
+#print CategoryTheory.Subgroupoid.generatedNormal_isNormal /-
 theorem generatedNormal_isNormal : (generatedNormal X).IsNormal :=
   sInf_isNormal _ fun S h => h.right
 #align category_theory.subgroupoid.generated_normal_is_normal CategoryTheory.Subgroupoid.generatedNormal_isNormal
+-/
 
+#print CategoryTheory.Subgroupoid.IsNormal.generatedNormal_le /-
 theorem IsNormal.generatedNormal_le {S : Subgroupoid C} (Sn : S.IsNormal) :
     generatedNormal X ≤ S ↔ ∀ c d, X c d ⊆ S.arrows c d :=
   by
@@ -449,6 +520,7 @@ theorem IsNormal.generatedNormal_le {S : Subgroupoid C} (Sn : S.IsNormal) :
     apply @sInf_le (subgroupoid C) _
     exact ⟨h, Sn⟩
 #align category_theory.subgroupoid.is_normal.generated_normal_le CategoryTheory.Subgroupoid.IsNormal.generatedNormal_le
+-/
 
 end GeneratedSubgroupoid
 
@@ -471,10 +543,13 @@ def comap (S : Subgroupoid D) : Subgroupoid C
 #align category_theory.subgroupoid.comap CategoryTheory.Subgroupoid.comap
 -/
 
+#print CategoryTheory.Subgroupoid.comap_mono /-
 theorem comap_mono (S T : Subgroupoid D) : S ≤ T → comap φ S ≤ comap φ T := fun ST ⟨c, d, p⟩ =>
   @ST ⟨_, _, _⟩
 #align category_theory.subgroupoid.comap_mono CategoryTheory.Subgroupoid.comap_mono
+-/
 
+#print CategoryTheory.Subgroupoid.isNormal_comap /-
 theorem isNormal_comap {S : Subgroupoid D} (Sn : IsNormal S) : IsNormal (comap φ S) :=
   { wide := fun c => by rw [comap, mem_set_of, Functor.map_id]; apply Sn.wide
     conj := fun c d f γ hγ =>
@@ -482,11 +557,14 @@ theorem isNormal_comap {S : Subgroupoid D} (Sn : IsNormal S) : IsNormal (comap 
       simp_rw [inv_eq_inv f, comap, mem_set_of, functor.map_comp, functor.map_inv, ← inv_eq_inv]
       exact Sn.conj _ hγ }
 #align category_theory.subgroupoid.is_normal_comap CategoryTheory.Subgroupoid.isNormal_comap
+-/
 
+#print CategoryTheory.Subgroupoid.comap_comp /-
 @[simp]
 theorem comap_comp {E : Type _} [Groupoid E] (ψ : D ⥤ E) : comap (φ ⋙ ψ) = comap φ ∘ comap ψ :=
   rfl
 #align category_theory.subgroupoid.comap_comp CategoryTheory.Subgroupoid.comap_comp
+-/
 
 #print CategoryTheory.Subgroupoid.ker /-
 /-- The kernel of a functor between subgroupoid is the preimage. -/
@@ -495,25 +573,34 @@ def ker : Subgroupoid C :=
 #align category_theory.subgroupoid.ker CategoryTheory.Subgroupoid.ker
 -/
 
+#print CategoryTheory.Subgroupoid.mem_ker_iff /-
 theorem mem_ker_iff {c d : C} (f : c ⟶ d) :
     f ∈ (ker φ).arrows c d ↔ ∃ h : φ.obj c = φ.obj d, φ.map f = eqToHom h :=
   mem_discrete_iff (φ.map f)
 #align category_theory.subgroupoid.mem_ker_iff CategoryTheory.Subgroupoid.mem_ker_iff
+-/
 
+#print CategoryTheory.Subgroupoid.ker_isNormal /-
 theorem ker_isNormal : (ker φ).IsNormal :=
   isNormal_comap φ discrete_isNormal
 #align category_theory.subgroupoid.ker_is_normal CategoryTheory.Subgroupoid.ker_isNormal
+-/
 
+#print CategoryTheory.Subgroupoid.ker_comp /-
 @[simp]
 theorem ker_comp {E : Type _} [Groupoid E] (ψ : D ⥤ E) : ker (φ ⋙ ψ) = comap φ (ker ψ) :=
   rfl
 #align category_theory.subgroupoid.ker_comp CategoryTheory.Subgroupoid.ker_comp
+-/
 
+#print CategoryTheory.Subgroupoid.Map.Arrows /-
 /-- The family of arrows of the image of a subgroupoid under a functor injective on objects -/
 inductive Map.Arrows (hφ : Function.Injective φ.obj) (S : Subgroupoid C) : ∀ c d : D, (c ⟶ d) → Prop
   | im {c d : C} (f : c ⟶ d) (hf : f ∈ S.arrows c d) : map.arrows (φ.obj c) (φ.obj d) (φ.map f)
 #align category_theory.subgroupoid.map.arrows CategoryTheory.Subgroupoid.Map.Arrows
+-/
 
+#print CategoryTheory.Subgroupoid.Map.arrows_iff /-
 theorem Map.arrows_iff (hφ : Function.Injective φ.obj) (S : Subgroupoid C) {c d : D} (f : c ⟶ d) :
     Map.Arrows φ hφ S c d f ↔
       ∃ (a b : C) (g : a ⟶ b) (ha : φ.obj a = c) (hb : φ.obj b = d) (hg : g ∈ S.arrows a b),
@@ -523,7 +610,9 @@ theorem Map.arrows_iff (hφ : Function.Injective φ.obj) (S : Subgroupoid C) {c
   · rintro ⟨g, hg⟩; exact ⟨_, _, g, rfl, rfl, hg, eq_conj_eq_to_hom _⟩
   · rintro ⟨a, b, g, rfl, rfl, hg, rfl⟩; rw [← eq_conj_eq_to_hom]; constructor; exact hg
 #align category_theory.subgroupoid.map.arrows_iff CategoryTheory.Subgroupoid.Map.arrows_iff
+-/
 
+#print CategoryTheory.Subgroupoid.map /-
 /-- The "forward" image of a subgroupoid under a functor injective on objects -/
 def map (hφ : Function.Injective φ.obj) (S : Subgroupoid C) : Subgroupoid D
     where
@@ -538,14 +627,18 @@ def map (hφ : Function.Injective φ.obj) (S : Subgroupoid C) : Subgroupoid D
     cases hφ he; rw [gq, ← eq_conj_eq_to_hom, ← φ.map_comp]
     constructor; exact S.mul hf hg
 #align category_theory.subgroupoid.map CategoryTheory.Subgroupoid.map
+-/
 
+#print CategoryTheory.Subgroupoid.mem_map_iff /-
 theorem mem_map_iff (hφ : Function.Injective φ.obj) (S : Subgroupoid C) {c d : D} (f : c ⟶ d) :
     f ∈ (map φ hφ S).arrows c d ↔
       ∃ (a b : C) (g : a ⟶ b) (ha : φ.obj a = c) (hb : φ.obj b = d) (hg : g ∈ S.arrows a b),
         f = eqToHom ha.symm ≫ φ.map g ≫ eqToHom hb :=
   Map.arrows_iff φ hφ S f
 #align category_theory.subgroupoid.mem_map_iff CategoryTheory.Subgroupoid.mem_map_iff
+-/
 
+#print CategoryTheory.Subgroupoid.galoisConnection_map_comap /-
 theorem galoisConnection_map_comap (hφ : Function.Injective φ.obj) :
     GaloisConnection (map φ hφ) (comap φ) :=
   by
@@ -554,26 +647,36 @@ theorem galoisConnection_map_comap (hφ : Function.Injective φ.obj) :
   · rintro h _ _ g ⟨a, gφS⟩
     exact h gφS
 #align category_theory.subgroupoid.galois_connection_map_comap CategoryTheory.Subgroupoid.galoisConnection_map_comap
+-/
 
+#print CategoryTheory.Subgroupoid.map_mono /-
 theorem map_mono (hφ : Function.Injective φ.obj) (S T : Subgroupoid C) :
     S ≤ T → map φ hφ S ≤ map φ hφ T := fun h => (galoisConnection_map_comap φ hφ).monotone_l h
 #align category_theory.subgroupoid.map_mono CategoryTheory.Subgroupoid.map_mono
+-/
 
+#print CategoryTheory.Subgroupoid.le_comap_map /-
 theorem le_comap_map (hφ : Function.Injective φ.obj) (S : Subgroupoid C) :
     S ≤ comap φ (map φ hφ S) :=
   (galoisConnection_map_comap φ hφ).le_u_l S
 #align category_theory.subgroupoid.le_comap_map CategoryTheory.Subgroupoid.le_comap_map
+-/
 
+#print CategoryTheory.Subgroupoid.map_comap_le /-
 theorem map_comap_le (hφ : Function.Injective φ.obj) (T : Subgroupoid D) :
     map φ hφ (comap φ T) ≤ T :=
   (galoisConnection_map_comap φ hφ).l_u_le T
 #align category_theory.subgroupoid.map_comap_le CategoryTheory.Subgroupoid.map_comap_le
+-/
 
+#print CategoryTheory.Subgroupoid.map_le_iff_le_comap /-
 theorem map_le_iff_le_comap (hφ : Function.Injective φ.obj) (S : Subgroupoid C)
     (T : Subgroupoid D) : map φ hφ S ≤ T ↔ S ≤ comap φ T :=
   (galoisConnection_map_comap φ hφ).le_iff_le
 #align category_theory.subgroupoid.map_le_iff_le_comap CategoryTheory.Subgroupoid.map_le_iff_le_comap
+-/
 
+#print CategoryTheory.Subgroupoid.mem_map_objs_iff /-
 theorem mem_map_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
     d ∈ (map φ hφ S).objs ↔ ∃ c ∈ S.objs, φ.obj c = d :=
   by
@@ -586,36 +689,48 @@ theorem mem_map_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
   · rintro ⟨c, ⟨γ, γS⟩, rfl⟩
     exact ⟨φ.map γ, ⟨γ, γS⟩⟩
 #align category_theory.subgroupoid.mem_map_objs_iff CategoryTheory.Subgroupoid.mem_map_objs_iff
+-/
 
+#print CategoryTheory.Subgroupoid.map_objs_eq /-
 @[simp]
 theorem map_objs_eq (hφ : Function.Injective φ.obj) : (map φ hφ S).objs = φ.obj '' S.objs := by ext;
   convert mem_map_objs_iff S φ hφ x; simp only [mem_image, exists_prop]
 #align category_theory.subgroupoid.map_objs_eq CategoryTheory.Subgroupoid.map_objs_eq
+-/
 
+#print CategoryTheory.Subgroupoid.im /-
 /-- The image of a functor injective on objects -/
 def im (hφ : Function.Injective φ.obj) :=
   map φ hφ ⊤
 #align category_theory.subgroupoid.im CategoryTheory.Subgroupoid.im
+-/
 
+#print CategoryTheory.Subgroupoid.mem_im_iff /-
 theorem mem_im_iff (hφ : Function.Injective φ.obj) {c d : D} (f : c ⟶ d) :
     f ∈ (im φ hφ).arrows c d ↔
       ∃ (a b : C) (g : a ⟶ b) (ha : φ.obj a = c) (hb : φ.obj b = d),
         f = eqToHom ha.symm ≫ φ.map g ≫ eqToHom hb :=
   by convert map.arrows_iff φ hφ ⊤ f; simp only [Top.top, mem_univ, exists_true_left]
 #align category_theory.subgroupoid.mem_im_iff CategoryTheory.Subgroupoid.mem_im_iff
+-/
 
+#print CategoryTheory.Subgroupoid.mem_im_objs_iff /-
 theorem mem_im_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
     d ∈ (im φ hφ).objs ↔ ∃ c : C, φ.obj c = d := by
   simp only [im, mem_map_objs_iff, mem_top_objs, exists_true_left]
 #align category_theory.subgroupoid.mem_im_objs_iff CategoryTheory.Subgroupoid.mem_im_objs_iff
+-/
 
+#print CategoryTheory.Subgroupoid.obj_surjective_of_im_eq_top /-
 theorem obj_surjective_of_im_eq_top (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤) :
     Function.Surjective φ.obj := by
   rintro d
   rw [← mem_im_objs_iff, hφ']
   apply mem_top_objs
 #align category_theory.subgroupoid.obj_surjective_of_im_eq_top CategoryTheory.Subgroupoid.obj_surjective_of_im_eq_top
+-/
 
+#print CategoryTheory.Subgroupoid.isNormal_map /-
 theorem isNormal_map (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤) (Sn : S.IsNormal) :
     (map φ hφ S).IsNormal :=
   { wide := fun d => by
@@ -637,6 +752,7 @@ theorem isNormal_map (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤)
         simp only [inv_eq_inv, functor.map_comp, functor.map_inv] at this ; exact this
       · constructor; apply Sn.conj f γS }
 #align category_theory.subgroupoid.is_normal_map CategoryTheory.Subgroupoid.isNormal_map
+-/
 
 end Hom
 
@@ -649,8 +765,10 @@ abbrev IsThin :=
 #align category_theory.subgroupoid.is_thin CategoryTheory.Subgroupoid.IsThin
 -/
 
+#print CategoryTheory.Subgroupoid.isThin_iff /-
 theorem isThin_iff : S.IsThin ↔ ∀ c : S.objs, Subsingleton (S.arrows c c) := by apply is_thin_iff
 #align category_theory.subgroupoid.is_thin_iff CategoryTheory.Subgroupoid.isThin_iff
+-/
 
 end Thin
 
@@ -663,6 +781,7 @@ abbrev IsTotallyDisconnected :=
 #align category_theory.subgroupoid.is_totally_disconnected CategoryTheory.Subgroupoid.IsTotallyDisconnected
 -/
 
+#print CategoryTheory.Subgroupoid.isTotallyDisconnected_iff /-
 theorem isTotallyDisconnected_iff :
     S.IsTotallyDisconnected ↔ ∀ c d, (S.arrows c d).Nonempty → c = d :=
   by
@@ -674,6 +793,7 @@ theorem isTotallyDisconnected_iff :
     simp only [Subtype.mk_eq_mk]
     exact h c d ⟨f, fS⟩
 #align category_theory.subgroupoid.is_totally_disconnected_iff CategoryTheory.Subgroupoid.isTotallyDisconnected_iff
+-/
 
 #print CategoryTheory.Subgroupoid.disconnect /-
 /-- The isotropy subgroupoid of `S` -/
@@ -685,26 +805,36 @@ def disconnect : Subgroupoid C
 #align category_theory.subgroupoid.disconnect CategoryTheory.Subgroupoid.disconnect
 -/
 
+#print CategoryTheory.Subgroupoid.disconnect_le /-
 theorem disconnect_le : S.disconnect ≤ S := by rw [le_iff]; rintro _ _ _ ⟨⟩; assumption
 #align category_theory.subgroupoid.disconnect_le CategoryTheory.Subgroupoid.disconnect_le
+-/
 
+#print CategoryTheory.Subgroupoid.disconnect_normal /-
 theorem disconnect_normal (Sn : S.IsNormal) : S.disconnect.IsNormal :=
   { wide := fun c => ⟨rfl, Sn.wide c⟩
     conj := fun c d p γ ⟨_, h'⟩ => ⟨rfl, Sn.conj _ h'⟩ }
 #align category_theory.subgroupoid.disconnect_normal CategoryTheory.Subgroupoid.disconnect_normal
+-/
 
+#print CategoryTheory.Subgroupoid.mem_disconnect_objs_iff /-
 @[simp]
 theorem mem_disconnect_objs_iff {c : C} : c ∈ S.disconnect.objs ↔ c ∈ S.objs :=
   ⟨fun ⟨γ, h, γS⟩ => ⟨γ, γS⟩, fun ⟨γ, γS⟩ => ⟨γ, rfl, γS⟩⟩
 #align category_theory.subgroupoid.mem_disconnect_objs_iff CategoryTheory.Subgroupoid.mem_disconnect_objs_iff
+-/
 
+#print CategoryTheory.Subgroupoid.disconnect_objs /-
 theorem disconnect_objs : S.disconnect.objs = S.objs := by apply Set.ext;
   apply mem_disconnect_objs_iff
 #align category_theory.subgroupoid.disconnect_objs CategoryTheory.Subgroupoid.disconnect_objs
+-/
 
+#print CategoryTheory.Subgroupoid.disconnect_isTotallyDisconnected /-
 theorem disconnect_isTotallyDisconnected : S.disconnect.IsTotallyDisconnected := by
   rw [is_totally_disconnected_iff]; exact fun c d ⟨f, h, fS⟩ => h
 #align category_theory.subgroupoid.disconnect_is_totally_disconnected CategoryTheory.Subgroupoid.disconnect_isTotallyDisconnected
+-/
 
 end Disconnected
 
@@ -721,29 +851,40 @@ def full : Subgroupoid C where
 #align category_theory.subgroupoid.full CategoryTheory.Subgroupoid.full
 -/
 
+#print CategoryTheory.Subgroupoid.full_objs /-
 theorem full_objs : (full D).objs = D :=
   Set.ext fun _ => ⟨fun ⟨f, h, _⟩ => h, fun h => ⟨𝟙 _, h, h⟩⟩
 #align category_theory.subgroupoid.full_objs CategoryTheory.Subgroupoid.full_objs
+-/
 
+#print CategoryTheory.Subgroupoid.mem_full_iff /-
 @[simp]
 theorem mem_full_iff {c d : C} {f : c ⟶ d} : f ∈ (full D).arrows c d ↔ c ∈ D ∧ d ∈ D :=
   Iff.rfl
 #align category_theory.subgroupoid.mem_full_iff CategoryTheory.Subgroupoid.mem_full_iff
+-/
 
+#print CategoryTheory.Subgroupoid.mem_full_objs_iff /-
 @[simp]
 theorem mem_full_objs_iff {c : C} : c ∈ (full D).objs ↔ c ∈ D := by rw [full_objs]
 #align category_theory.subgroupoid.mem_full_objs_iff CategoryTheory.Subgroupoid.mem_full_objs_iff
+-/
 
+#print CategoryTheory.Subgroupoid.full_empty /-
 @[simp]
 theorem full_empty : full ∅ = (⊥ : Subgroupoid C) := by ext;
   simp only [Bot.bot, mem_full_iff, mem_empty_iff_false, and_self_iff]
 #align category_theory.subgroupoid.full_empty CategoryTheory.Subgroupoid.full_empty
+-/
 
+#print CategoryTheory.Subgroupoid.full_univ /-
 @[simp]
 theorem full_univ : full Set.univ = (⊤ : Subgroupoid C) := by ext;
   simp only [mem_full_iff, mem_univ, and_self_iff, true_iff_iff]
 #align category_theory.subgroupoid.full_univ CategoryTheory.Subgroupoid.full_univ
+-/
 
+#print CategoryTheory.Subgroupoid.full_mono /-
 theorem full_mono {D E : Set C} (h : D ≤ E) : full D ≤ full E :=
   by
   rw [le_iff]
@@ -751,10 +892,13 @@ theorem full_mono {D E : Set C} (h : D ≤ E) : full D ≤ full E :=
   simp only [mem_full_iff]
   exact fun ⟨hc, hd⟩ => ⟨h hc, h hd⟩
 #align category_theory.subgroupoid.full_mono CategoryTheory.Subgroupoid.full_mono
+-/
 
+#print CategoryTheory.Subgroupoid.full_arrow_eq_iff /-
 theorem full_arrow_eq_iff {c d : (full D).objs} {f g : c ⟶ d} : f = g ↔ (↑f : c.val ⟶ d.val) = ↑g :=
   by apply Subtype.ext_iff
 #align category_theory.subgroupoid.full_arrow_eq_iff CategoryTheory.Subgroupoid.full_arrow_eq_iff
+-/
 
 end Full
 
Diff
@@ -70,6 +70,7 @@ universe u v
 
 variable {C : Type u} [Groupoid C]
 
+#print CategoryTheory.Subgroupoid /-
 /-- A sugroupoid of `C` consists of a choice of arrows for each pair of vertices, closed
 under composition and inverses.
 -/
@@ -79,6 +80,7 @@ structure Subgroupoid (C : Type u) [Groupoid C] where
   inv : ∀ {c d} {p : c ⟶ d} (hp : p ∈ arrows c d), inv p ∈ arrows d c
   mul : ∀ {c d e} {p} (hp : p ∈ arrows c d) {q} (hq : q ∈ arrows d e), p ≫ q ∈ arrows c e
 #align category_theory.subgroupoid CategoryTheory.Subgroupoid
+-/
 
 attribute [protected] subgroupoid.inv subgroupoid.mul
 
@@ -117,10 +119,12 @@ theorem mul_mem_cancel_right {c d e : C} {f : c ⟶ d} {g : d ⟶ e} (hg : g ∈
   · exact fun hf => S.mul hf hg
 #align category_theory.subgroupoid.mul_mem_cancel_right CategoryTheory.Subgroupoid.mul_mem_cancel_right
 
+#print CategoryTheory.Subgroupoid.objs /-
 /-- The vertices of `C` on which `S` has non-trivial isotropy -/
 def objs : Set C :=
   {c : C | (S.arrows c c).Nonempty}
 #align category_theory.subgroupoid.objs CategoryTheory.Subgroupoid.objs
+-/
 
 theorem mem_objs_of_src {c d : C} {f : c ⟶ d} (h : f ∈ S.arrows c d) : c ∈ S.objs :=
   ⟨f ≫ inv f, S.mul h (S.inv h)⟩
@@ -145,11 +149,14 @@ theorem id_mem_of_tgt {c d : C} {f : c ⟶ d} (h : f ∈ S.arrows c d) : 𝟙 d
   id_mem_of_nonempty_isotropy S d (mem_objs_of_tgt S h)
 #align category_theory.subgroupoid.id_mem_of_tgt CategoryTheory.Subgroupoid.id_mem_of_tgt
 
+#print CategoryTheory.Subgroupoid.asWideQuiver /-
 /-- A subgroupoid seen as a quiver on vertex set `C` -/
 def asWideQuiver : Quiver C :=
   ⟨fun c d => Subtype <| S.arrows c d⟩
 #align category_theory.subgroupoid.as_wide_quiver CategoryTheory.Subgroupoid.asWideQuiver
+-/
 
+#print CategoryTheory.Subgroupoid.coe /-
 /-- The coercion of a subgroupoid as a groupoid -/
 @[simps to_category_comp_coe, simps (config := lemmasOnly) inv_coe]
 instance coe : Groupoid S.objs where
@@ -163,6 +170,7 @@ instance coe : Groupoid S.objs where
   inv_comp' := fun a b ⟨p, hp⟩ => by simp only [inv_comp]
   comp_inv' := fun a b ⟨p, hp⟩ => by simp only [comp_inv]
 #align category_theory.subgroupoid.coe CategoryTheory.Subgroupoid.coe
+-/
 
 @[simp]
 theorem coe_inv_coe' {c d : S.objs} (p : c ⟶ d) :
@@ -170,6 +178,7 @@ theorem coe_inv_coe' {c d : S.objs} (p : c ⟶ d) :
   simp only [Subtype.val_eq_coe, ← inv_eq_inv, coe_inv_coe]
 #align category_theory.subgroupoid.coe_inv_coe' CategoryTheory.Subgroupoid.coe_inv_coe'
 
+#print CategoryTheory.Subgroupoid.hom /-
 /-- The embedding of the coerced subgroupoid to its parent-/
 def hom : S.objs ⥤ C where
   obj c := c.val
@@ -177,6 +186,7 @@ def hom : S.objs ⥤ C where
   map_id' c := rfl
   map_comp' c d e f g := rfl
 #align category_theory.subgroupoid.hom CategoryTheory.Subgroupoid.hom
+-/
 
 theorem hom.inj_on_objects : Function.Injective (hom S).obj := by rintro ⟨c, hc⟩ ⟨d, hd⟩ hcd;
   simp only [Subtype.mk_eq_mk]; exact hcd
@@ -186,6 +196,7 @@ theorem hom.faithful : ∀ c d, Function.Injective fun f : c ⟶ d => (hom S).ma
   rintro ⟨c, hc⟩ ⟨d, hd⟩ ⟨f, hf⟩ ⟨g, hg⟩ hfg; simp only [Subtype.mk_eq_mk]; exact hfg
 #align category_theory.subgroupoid.hom.faithful CategoryTheory.Subgroupoid.hom.faithful
 
+#print CategoryTheory.Subgroupoid.vertexSubgroup /-
 /-- The subgroup of the vertex group at `c` given by the subgroupoid -/
 def vertexSubgroup {c : C} (hc : c ∈ S.objs) : Subgroup (c ⟶ c)
     where
@@ -194,6 +205,7 @@ def vertexSubgroup {c : C} (hc : c ∈ S.objs) : Subgroup (c ⟶ c)
   one_mem' := id_mem_of_nonempty_isotropy _ _ hc
   inv_mem' f hf := S.inv hf
 #align category_theory.subgroupoid.vertex_subgroup CategoryTheory.Subgroupoid.vertexSubgroup
+-/
 
 instance : SetLike (Subgroupoid C) (Σ c d : C, c ⟶ d)
     where
@@ -294,27 +306,33 @@ theorem inclusion_comp_embedding {S T : Subgroupoid C} (h : S ≤ T) : inclusion
   rfl
 #align category_theory.subgroupoid.inclusion_comp_embedding CategoryTheory.Subgroupoid.inclusion_comp_embedding
 
+#print CategoryTheory.Subgroupoid.Discrete.Arrows /-
 /-- The family of arrows of the discrete groupoid -/
 inductive Discrete.Arrows : ∀ c d : C, (c ⟶ d) → Prop
   | id (c : C) : discrete.arrows c c (𝟙 c)
 #align category_theory.subgroupoid.discrete.arrows CategoryTheory.Subgroupoid.Discrete.Arrows
+-/
 
+#print CategoryTheory.Subgroupoid.discrete /-
 /-- The only arrows of the discrete groupoid are the identity arrows. -/
 def discrete : Subgroupoid C where
   arrows := Discrete.Arrows
   inv := by rintro _ _ _ ⟨⟩; simp only [inv_eq_inv, is_iso.inv_id]; constructor
   mul := by rintro _ _ _ _ ⟨⟩ _ ⟨⟩; rw [category.comp_id]; constructor
 #align category_theory.subgroupoid.discrete CategoryTheory.Subgroupoid.discrete
+-/
 
 theorem mem_discrete_iff {c d : C} (f : c ⟶ d) :
     f ∈ discrete.arrows c d ↔ ∃ h : c = d, f = eqToHom h :=
   ⟨by rintro ⟨⟩; exact ⟨rfl, rfl⟩, by rintro ⟨rfl, rfl⟩; constructor⟩
 #align category_theory.subgroupoid.mem_discrete_iff CategoryTheory.Subgroupoid.mem_discrete_iff
 
+#print CategoryTheory.Subgroupoid.IsWide /-
 /-- A subgroupoid is wide if its carrier set is all of `C`-/
 structure IsWide : Prop where
   wide : ∀ c, 𝟙 c ∈ S.arrows c c
 #align category_theory.subgroupoid.is_wide CategoryTheory.Subgroupoid.IsWide
+-/
 
 theorem isWide_iff_objs_eq_univ : S.IsWide ↔ S.objs = Set.univ :=
   by
@@ -336,10 +354,12 @@ theorem IsWide.eqToHom_mem {S : Subgroupoid C} (Sw : S.IsWide) {c d : C} (h : c
     eqToHom h ∈ S.arrows c d := by cases h; simp only [eq_to_hom_refl]; apply Sw.id_mem c
 #align category_theory.subgroupoid.is_wide.eq_to_hom_mem CategoryTheory.Subgroupoid.IsWide.eqToHom_mem
 
+#print CategoryTheory.Subgroupoid.IsNormal /-
 /-- A subgroupoid is normal if it is wide and satisfies the expected stability under conjugacy. -/
 structure IsNormal extends IsWide S : Prop where
   conj : ∀ {c d} (p : c ⟶ d) {γ : c ⟶ c} (hs : γ ∈ S.arrows c c), inv p ≫ γ ≫ p ∈ S.arrows d d
 #align category_theory.subgroupoid.is_normal CategoryTheory.Subgroupoid.IsNormal
+-/
 
 theorem IsNormal.conj' {S : Subgroupoid C} (Sn : IsNormal S) :
     ∀ {c d} (p : d ⟶ c) {γ : c ⟶ c} (hs : γ ∈ S.arrows c c), p ≫ γ ≫ inv p ∈ S.arrows d d :=
@@ -386,10 +406,12 @@ section GeneratedSubgroupoid
 -- TODO: proof that generated is just "words in X" and generated_normal is similarly
 variable (X : ∀ c d : C, Set (c ⟶ d))
 
+#print CategoryTheory.Subgroupoid.generated /-
 /-- The subgropoid generated by the set of arrows `X` -/
 def generated : Subgroupoid C :=
   sInf {S : Subgroupoid C | ∀ c d, X c d ⊆ S.arrows c d}
 #align category_theory.subgroupoid.generated CategoryTheory.Subgroupoid.generated
+-/
 
 theorem subset_generated (c d : C) : X c d ⊆ (generated X).arrows c d :=
   by
@@ -398,10 +420,12 @@ theorem subset_generated (c d : C) : X c d ⊆ (generated X).arrows c d :=
   exact fun S hS f fS => hS _ _ fS
 #align category_theory.subgroupoid.subset_generated CategoryTheory.Subgroupoid.subset_generated
 
+#print CategoryTheory.Subgroupoid.generatedNormal /-
 /-- The normal sugroupoid generated by the set of arrows `X` -/
 def generatedNormal : Subgroupoid C :=
   sInf {S : Subgroupoid C | (∀ c d, X c d ⊆ S.arrows c d) ∧ S.IsNormal}
 #align category_theory.subgroupoid.generated_normal CategoryTheory.Subgroupoid.generatedNormal
+-/
 
 theorem generated_le_generatedNormal : generated X ≤ generatedNormal X :=
   by
@@ -432,6 +456,7 @@ section Hom
 
 variable {D : Type _} [Groupoid D] (φ : C ⥤ D)
 
+#print CategoryTheory.Subgroupoid.comap /-
 /-- A functor between groupoid defines a map of subgroupoids in the reverse direction
 by taking preimages.
  -/
@@ -444,6 +469,7 @@ def comap (S : Subgroupoid D) : Subgroupoid C
     simp only [mem_set_of, functor.map_comp]
     apply S.mul <;> assumption
 #align category_theory.subgroupoid.comap CategoryTheory.Subgroupoid.comap
+-/
 
 theorem comap_mono (S T : Subgroupoid D) : S ≤ T → comap φ S ≤ comap φ T := fun ST ⟨c, d, p⟩ =>
   @ST ⟨_, _, _⟩
@@ -462,10 +488,12 @@ theorem comap_comp {E : Type _} [Groupoid E] (ψ : D ⥤ E) : comap (φ ⋙ ψ)
   rfl
 #align category_theory.subgroupoid.comap_comp CategoryTheory.Subgroupoid.comap_comp
 
+#print CategoryTheory.Subgroupoid.ker /-
 /-- The kernel of a functor between subgroupoid is the preimage. -/
 def ker : Subgroupoid C :=
   comap φ discrete
 #align category_theory.subgroupoid.ker CategoryTheory.Subgroupoid.ker
+-/
 
 theorem mem_ker_iff {c d : C} (f : c ⟶ d) :
     f ∈ (ker φ).arrows c d ↔ ∃ h : φ.obj c = φ.obj d, φ.map f = eqToHom h :=
@@ -614,10 +642,12 @@ end Hom
 
 section Thin
 
+#print CategoryTheory.Subgroupoid.IsThin /-
 /-- A subgroupoid `is_thin` if it has at most one arrow between any two vertices. -/
 abbrev IsThin :=
   Quiver.IsThin S.objs
 #align category_theory.subgroupoid.is_thin CategoryTheory.Subgroupoid.IsThin
+-/
 
 theorem isThin_iff : S.IsThin ↔ ∀ c : S.objs, Subsingleton (S.arrows c c) := by apply is_thin_iff
 #align category_theory.subgroupoid.is_thin_iff CategoryTheory.Subgroupoid.isThin_iff
@@ -626,10 +656,12 @@ end Thin
 
 section Disconnected
 
+#print CategoryTheory.Subgroupoid.IsTotallyDisconnected /-
 /-- A subgroupoid `is_totally_disconnected` if it has only isotropy arrows. -/
 abbrev IsTotallyDisconnected :=
   IsTotallyDisconnected S.objs
 #align category_theory.subgroupoid.is_totally_disconnected CategoryTheory.Subgroupoid.IsTotallyDisconnected
+-/
 
 theorem isTotallyDisconnected_iff :
     S.IsTotallyDisconnected ↔ ∀ c d, (S.arrows c d).Nonempty → c = d :=
@@ -643,6 +675,7 @@ theorem isTotallyDisconnected_iff :
     exact h c d ⟨f, fS⟩
 #align category_theory.subgroupoid.is_totally_disconnected_iff CategoryTheory.Subgroupoid.isTotallyDisconnected_iff
 
+#print CategoryTheory.Subgroupoid.disconnect /-
 /-- The isotropy subgroupoid of `S` -/
 def disconnect : Subgroupoid C
     where
@@ -650,6 +683,7 @@ def disconnect : Subgroupoid C
   inv := by rintro _ _ _ ⟨rfl, h⟩; exact ⟨rfl, S.inv h⟩
   mul := by rintro _ _ _ _ ⟨rfl, h⟩ _ ⟨rfl, h'⟩; exact ⟨rfl, S.mul h h'⟩
 #align category_theory.subgroupoid.disconnect CategoryTheory.Subgroupoid.disconnect
+-/
 
 theorem disconnect_le : S.disconnect ≤ S := by rw [le_iff]; rintro _ _ _ ⟨⟩; assumption
 #align category_theory.subgroupoid.disconnect_le CategoryTheory.Subgroupoid.disconnect_le
@@ -678,12 +712,14 @@ section Full
 
 variable (D : Set C)
 
+#print CategoryTheory.Subgroupoid.full /-
 /-- The full subgroupoid on a set `D : set C` -/
 def full : Subgroupoid C where
   arrows c d _ := c ∈ D ∧ d ∈ D
   inv := by rintro _ _ _ ⟨⟩; constructor <;> assumption
   mul := by rintro _ _ _ _ ⟨⟩ _ ⟨⟩; constructor <;> assumption
 #align category_theory.subgroupoid.full CategoryTheory.Subgroupoid.full
+-/
 
 theorem full_objs : (full D).objs = D :=
   Set.ext fun _ => ⟨fun ⟨f, h, _⟩ => h, fun h => ⟨𝟙 _, h, h⟩⟩
Diff
@@ -119,7 +119,7 @@ theorem mul_mem_cancel_right {c d e : C} {f : c ⟶ d} {g : d ⟶ e} (hg : g ∈
 
 /-- The vertices of `C` on which `S` has non-trivial isotropy -/
 def objs : Set C :=
-  { c : C | (S.arrows c c).Nonempty }
+  {c : C | (S.arrows c c).Nonempty}
 #align category_theory.subgroupoid.objs CategoryTheory.Subgroupoid.objs
 
 theorem mem_objs_of_src {c d : C} {f : c ⟶ d} (h : f ∈ S.arrows c d) : c ∈ S.objs :=
@@ -197,7 +197,7 @@ def vertexSubgroup {c : C} (hc : c ∈ S.objs) : Subgroup (c ⟶ c)
 
 instance : SetLike (Subgroupoid C) (Σ c d : C, c ⟶ d)
     where
-  coe S := { F | F.2.2 ∈ S.arrows F.1 F.2.1 }
+  coe S := {F | F.2.2 ∈ S.arrows F.1 F.2.1}
   coe_injective' := fun ⟨S, _, _⟩ ⟨T, _, _⟩ h => by ext (c d f); apply Set.ext_iff.1 h ⟨c, d, f⟩
 
 theorem mem_iff (S : Subgroupoid C) (F : Σ c d, c ⟶ d) : F ∈ S ↔ F.2.2 ∈ S.arrows F.1 F.2.1 :=
@@ -388,7 +388,7 @@ variable (X : ∀ c d : C, Set (c ⟶ d))
 
 /-- The subgropoid generated by the set of arrows `X` -/
 def generated : Subgroupoid C :=
-  sInf { S : Subgroupoid C | ∀ c d, X c d ⊆ S.arrows c d }
+  sInf {S : Subgroupoid C | ∀ c d, X c d ⊆ S.arrows c d}
 #align category_theory.subgroupoid.generated CategoryTheory.Subgroupoid.generated
 
 theorem subset_generated (c d : C) : X c d ⊆ (generated X).arrows c d :=
@@ -400,7 +400,7 @@ theorem subset_generated (c d : C) : X c d ⊆ (generated X).arrows c d :=
 
 /-- The normal sugroupoid generated by the set of arrows `X` -/
 def generatedNormal : Subgroupoid C :=
-  sInf { S : Subgroupoid C | (∀ c d, X c d ⊆ S.arrows c d) ∧ S.IsNormal }
+  sInf {S : Subgroupoid C | (∀ c d, X c d ⊆ S.arrows c d) ∧ S.IsNormal}
 #align category_theory.subgroupoid.generated_normal CategoryTheory.Subgroupoid.generatedNormal
 
 theorem generated_le_generatedNormal : generated X ≤ generatedNormal X :=
@@ -437,7 +437,7 @@ by taking preimages.
  -/
 def comap (S : Subgroupoid D) : Subgroupoid C
     where
-  arrows c d := { f : c ⟶ d | φ.map f ∈ S.arrows (φ.obj c) (φ.obj d) }
+  arrows c d := {f : c ⟶ d | φ.map f ∈ S.arrows (φ.obj c) (φ.obj d)}
   inv c d p hp := by rw [mem_set_of, inv_eq_inv, φ.map_inv p, ← inv_eq_inv]; exact S.inv hp
   mul := by
     rintro
Diff
@@ -195,12 +195,12 @@ def vertexSubgroup {c : C} (hc : c ∈ S.objs) : Subgroup (c ⟶ c)
   inv_mem' f hf := S.inv hf
 #align category_theory.subgroupoid.vertex_subgroup CategoryTheory.Subgroupoid.vertexSubgroup
 
-instance : SetLike (Subgroupoid C) (Σc d : C, c ⟶ d)
+instance : SetLike (Subgroupoid C) (Σ c d : C, c ⟶ d)
     where
   coe S := { F | F.2.2 ∈ S.arrows F.1 F.2.1 }
   coe_injective' := fun ⟨S, _, _⟩ ⟨T, _, _⟩ h => by ext (c d f); apply Set.ext_iff.1 h ⟨c, d, f⟩
 
-theorem mem_iff (S : Subgroupoid C) (F : Σc d, c ⟶ d) : F ∈ S ↔ F.2.2 ∈ S.arrows F.1 F.2.1 :=
+theorem mem_iff (S : Subgroupoid C) (F : Σ c d, c ⟶ d) : F ∈ S ↔ F.2.2 ∈ S.arrows F.1 F.2.1 :=
   Iff.rfl
 #align category_theory.subgroupoid.mem_iff CategoryTheory.Subgroupoid.mem_iff
 
@@ -238,8 +238,8 @@ instance : Inf (Subgroupoid C) :=
 instance : InfSet (Subgroupoid C) :=
   ⟨fun s =>
     { arrows := fun c d => ⋂ S ∈ s, Subgroupoid.arrows S c d
-      inv := by intros ; rw [mem_Inter₂] at hp⊢; exact fun S hS => S.inv (hp S hS)
-      mul := by intros ; rw [mem_Inter₂] at hp hq⊢; exact fun S hS => S.mul (hp S hS) (hq S hS) }⟩
+      inv := by intros; rw [mem_Inter₂] at hp ⊢; exact fun S hS => S.inv (hp S hS)
+      mul := by intros; rw [mem_Inter₂] at hp hq ⊢; exact fun S hS => S.mul (hp S hS) (hq S hS) }⟩
 
 instance : CompleteLattice (Subgroupoid C) :=
   {
@@ -247,7 +247,7 @@ instance : CompleteLattice (Subgroupoid C) :=
       (by
         refine' fun s => ⟨fun S Ss F => _, fun T Tl F fT => _⟩ <;>
           simp only [Inf, mem_iff, mem_Inter]
-        exacts[fun hp => hp S Ss, fun S Ss =>
+        exacts [fun hp => hp S Ss, fun S Ss =>
           Tl Ss fT]) with
     bot := ⊥
     bot_le := fun S => empty_subset _
@@ -419,7 +419,7 @@ theorem IsNormal.generatedNormal_le {S : Subgroupoid C} (Sn : S.IsNormal) :
   constructor
   · rintro h c d
     let h' := generated_le_generated_normal X
-    rw [le_iff] at h h'
+    rw [le_iff] at h h' 
     exact ((subset_generated X c d).trans (@h' c d)).trans (@h c d)
   · rintro h
     apply @sInf_le (subgroupoid C) _
@@ -488,7 +488,7 @@ inductive Map.Arrows (hφ : Function.Injective φ.obj) (S : Subgroupoid C) : ∀
 
 theorem Map.arrows_iff (hφ : Function.Injective φ.obj) (S : Subgroupoid C) {c d : D} (f : c ⟶ d) :
     Map.Arrows φ hφ S c d f ↔
-      ∃ (a b : C)(g : a ⟶ b)(ha : φ.obj a = c)(hb : φ.obj b = d)(hg : g ∈ S.arrows a b),
+      ∃ (a b : C) (g : a ⟶ b) (ha : φ.obj a = c) (hb : φ.obj b = d) (hg : g ∈ S.arrows a b),
         f = eqToHom ha.symm ≫ φ.map g ≫ eqToHom hb :=
   by
   constructor
@@ -513,7 +513,7 @@ def map (hφ : Function.Injective φ.obj) (S : Subgroupoid C) : Subgroupoid D
 
 theorem mem_map_iff (hφ : Function.Injective φ.obj) (S : Subgroupoid C) {c d : D} (f : c ⟶ d) :
     f ∈ (map φ hφ S).arrows c d ↔
-      ∃ (a b : C)(g : a ⟶ b)(ha : φ.obj a = c)(hb : φ.obj b = d)(hg : g ∈ S.arrows a b),
+      ∃ (a b : C) (g : a ⟶ b) (ha : φ.obj a = c) (hb : φ.obj b = d) (hg : g ∈ S.arrows a b),
         f = eqToHom ha.symm ≫ φ.map g ≫ eqToHom hb :=
   Map.arrows_iff φ hφ S f
 #align category_theory.subgroupoid.mem_map_iff CategoryTheory.Subgroupoid.mem_map_iff
@@ -552,7 +552,7 @@ theorem mem_map_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
   dsimp [objs, map]
   constructor
   · rintro ⟨f, hf⟩
-    change map.arrows φ hφ S d d f at hf; rw [map.arrows_iff] at hf
+    change map.arrows φ hφ S d d f at hf ; rw [map.arrows_iff] at hf 
     obtain ⟨c, d, g, ec, ed, eg, gS, eg⟩ := hf
     exact ⟨c, ⟨mem_objs_of_src S eg, ec⟩⟩
   · rintro ⟨c, ⟨γ, γS⟩, rfl⟩
@@ -571,7 +571,7 @@ def im (hφ : Function.Injective φ.obj) :=
 
 theorem mem_im_iff (hφ : Function.Injective φ.obj) {c d : D} (f : c ⟶ d) :
     f ∈ (im φ hφ).arrows c d ↔
-      ∃ (a b : C)(g : a ⟶ b)(ha : φ.obj a = c)(hb : φ.obj b = d),
+      ∃ (a b : C) (g : a ⟶ b) (ha : φ.obj a = c) (hb : φ.obj b = d),
         f = eqToHom ha.symm ≫ φ.map g ≫ eqToHom hb :=
   by convert map.arrows_iff φ hφ ⊤ f; simp only [Top.top, mem_univ, exists_true_left]
 #align category_theory.subgroupoid.mem_im_iff CategoryTheory.Subgroupoid.mem_im_iff
@@ -595,18 +595,18 @@ theorem isNormal_map (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤)
       change map.arrows φ hφ S _ _ (𝟙 _); rw [← Functor.map_id]
       constructor; exact Sn.wide c
     conj := fun d d' g δ hδ => by
-      rw [mem_map_iff] at hδ
+      rw [mem_map_iff] at hδ 
       obtain ⟨c, c', γ, cd, cd', γS, hγ⟩ := hδ; subst_vars; cases hφ cd'
       have : d' ∈ (im φ hφ).objs := by rw [hφ']; apply mem_top_objs
-      rw [mem_im_objs_iff] at this
+      rw [mem_im_objs_iff] at this 
       obtain ⟨c', rfl⟩ := this
       have : g ∈ (im φ hφ).arrows (φ.obj c) (φ.obj c') := by rw [hφ']; trivial
-      rw [mem_im_iff] at this
+      rw [mem_im_iff] at this 
       obtain ⟨b, b', f, hb, hb', _, hf⟩ := this; subst_vars; cases hφ hb; cases hφ hb'
       change map.arrows φ hφ S (φ.obj c') (φ.obj c') _
       simp only [eq_to_hom_refl, category.comp_id, category.id_comp, inv_eq_inv]
       suffices map.arrows φ hφ S (φ.obj c') (φ.obj c') (φ.map <| inv f ≫ γ ≫ f) by
-        simp only [inv_eq_inv, functor.map_comp, functor.map_inv] at this; exact this
+        simp only [inv_eq_inv, functor.map_comp, functor.map_inv] at this ; exact this
       · constructor; apply Sn.conj f γS }
 #align category_theory.subgroupoid.is_normal_map CategoryTheory.Subgroupoid.isNormal_map
 
Diff
@@ -178,18 +178,12 @@ def hom : S.objs ⥤ C where
   map_comp' c d e f g := rfl
 #align category_theory.subgroupoid.hom CategoryTheory.Subgroupoid.hom
 
-theorem hom.inj_on_objects : Function.Injective (hom S).obj :=
-  by
-  rintro ⟨c, hc⟩ ⟨d, hd⟩ hcd
-  simp only [Subtype.mk_eq_mk]
-  exact hcd
+theorem hom.inj_on_objects : Function.Injective (hom S).obj := by rintro ⟨c, hc⟩ ⟨d, hd⟩ hcd;
+  simp only [Subtype.mk_eq_mk]; exact hcd
 #align category_theory.subgroupoid.hom.inj_on_objects CategoryTheory.Subgroupoid.hom.inj_on_objects
 
-theorem hom.faithful : ∀ c d, Function.Injective fun f : c ⟶ d => (hom S).map f :=
-  by
-  rintro ⟨c, hc⟩ ⟨d, hd⟩ ⟨f, hf⟩ ⟨g, hg⟩ hfg
-  simp only [Subtype.mk_eq_mk]
-  exact hfg
+theorem hom.faithful : ∀ c d, Function.Injective fun f : c ⟶ d => (hom S).map f := by
+  rintro ⟨c, hc⟩ ⟨d, hd⟩ ⟨f, hf⟩ ⟨g, hg⟩ hfg; simp only [Subtype.mk_eq_mk]; exact hfg
 #align category_theory.subgroupoid.hom.faithful CategoryTheory.Subgroupoid.hom.faithful
 
 /-- The subgroup of the vertex group at `c` given by the subgroupoid -/
@@ -204,37 +198,26 @@ def vertexSubgroup {c : C} (hc : c ∈ S.objs) : Subgroup (c ⟶ c)
 instance : SetLike (Subgroupoid C) (Σc d : C, c ⟶ d)
     where
   coe S := { F | F.2.2 ∈ S.arrows F.1 F.2.1 }
-  coe_injective' := fun ⟨S, _, _⟩ ⟨T, _, _⟩ h =>
-    by
-    ext (c d f)
-    apply Set.ext_iff.1 h ⟨c, d, f⟩
+  coe_injective' := fun ⟨S, _, _⟩ ⟨T, _, _⟩ h => by ext (c d f); apply Set.ext_iff.1 h ⟨c, d, f⟩
 
 theorem mem_iff (S : Subgroupoid C) (F : Σc d, c ⟶ d) : F ∈ S ↔ F.2.2 ∈ S.arrows F.1 F.2.1 :=
   Iff.rfl
 #align category_theory.subgroupoid.mem_iff CategoryTheory.Subgroupoid.mem_iff
 
-theorem le_iff (S T : Subgroupoid C) : S ≤ T ↔ ∀ {c d}, S.arrows c d ⊆ T.arrows c d :=
-  by
-  rw [SetLike.le_def, Sigma.forall]
-  exact forall_congr' fun c => Sigma.forall
+theorem le_iff (S T : Subgroupoid C) : S ≤ T ↔ ∀ {c d}, S.arrows c d ⊆ T.arrows c d := by
+  rw [SetLike.le_def, Sigma.forall]; exact forall_congr' fun c => Sigma.forall
 #align category_theory.subgroupoid.le_iff CategoryTheory.Subgroupoid.le_iff
 
 instance : Top (Subgroupoid C) :=
   ⟨{  arrows := fun _ _ => Set.univ
-      mul := by
-        rintro
-        trivial
-      inv := by
-        rintro
-        trivial }⟩
+      mul := by rintro; trivial
+      inv := by rintro; trivial }⟩
 
 theorem mem_top {c d : C} (f : c ⟶ d) : f ∈ (⊤ : Subgroupoid C).arrows c d :=
   trivial
 #align category_theory.subgroupoid.mem_top CategoryTheory.Subgroupoid.mem_top
 
-theorem mem_top_objs (c : C) : c ∈ (⊤ : Subgroupoid C).objs :=
-  by
-  dsimp [Top.top, objs]
+theorem mem_top_objs (c : C) : c ∈ (⊤ : Subgroupoid C).objs := by dsimp [Top.top, objs];
   simp only [univ_nonempty]
 #align category_theory.subgroupoid.mem_top_objs CategoryTheory.Subgroupoid.mem_top_objs
 
@@ -249,24 +232,14 @@ instance : Inhabited (Subgroupoid C) :=
 instance : Inf (Subgroupoid C) :=
   ⟨fun S T =>
     { arrows := fun c d => S.arrows c d ∩ T.arrows c d
-      inv := by
-        rintro
-        exact ⟨S.inv hp.1, T.inv hp.2⟩
-      mul := by
-        rintro
-        exact ⟨S.mul hp.1 hq.1, T.mul hp.2 hq.2⟩ }⟩
+      inv := by rintro; exact ⟨S.inv hp.1, T.inv hp.2⟩
+      mul := by rintro; exact ⟨S.mul hp.1 hq.1, T.mul hp.2 hq.2⟩ }⟩
 
 instance : InfSet (Subgroupoid C) :=
   ⟨fun s =>
     { arrows := fun c d => ⋂ S ∈ s, Subgroupoid.arrows S c d
-      inv := by
-        intros
-        rw [mem_Inter₂] at hp⊢
-        exact fun S hS => S.inv (hp S hS)
-      mul := by
-        intros
-        rw [mem_Inter₂] at hp hq⊢
-        exact fun S hS => S.mul (hp S hS) (hq S hS) }⟩
+      inv := by intros ; rw [mem_Inter₂] at hp⊢; exact fun S hS => S.inv (hp S hS)
+      mul := by intros ; rw [mem_Inter₂] at hp hq⊢; exact fun S hS => S.mul (hp S hS) (hq S hS) }⟩
 
 instance : CompleteLattice (Subgroupoid C) :=
   {
@@ -304,10 +277,8 @@ theorem inclusion_inj_on_objects {S T : Subgroupoid C} (h : S ≤ T) :
 #align category_theory.subgroupoid.inclusion_inj_on_objects CategoryTheory.Subgroupoid.inclusion_inj_on_objects
 
 theorem inclusion_faithful {S T : Subgroupoid C} (h : S ≤ T) (s t : S.objs) :
-    Function.Injective fun f : s ⟶ t => (inclusion h).map f := fun ⟨f, hf⟩ ⟨g, hg⟩ =>
-  by
-  dsimp only [inclusion]
-  simpa only [Subtype.mk_eq_mk] using id
+    Function.Injective fun f : s ⟶ t => (inclusion h).map f := fun ⟨f, hf⟩ ⟨g, hg⟩ => by
+  dsimp only [inclusion]; simpa only [Subtype.mk_eq_mk] using id
 #align category_theory.subgroupoid.inclusion_faithful CategoryTheory.Subgroupoid.inclusion_faithful
 
 theorem inclusion_refl {S : Subgroupoid C} : inclusion (le_refl S) = 𝟭 S.objs :=
@@ -331,23 +302,13 @@ inductive Discrete.Arrows : ∀ c d : C, (c ⟶ d) → Prop
 /-- The only arrows of the discrete groupoid are the identity arrows. -/
 def discrete : Subgroupoid C where
   arrows := Discrete.Arrows
-  inv := by
-    rintro _ _ _ ⟨⟩
-    simp only [inv_eq_inv, is_iso.inv_id]
-    constructor
-  mul := by
-    rintro _ _ _ _ ⟨⟩ _ ⟨⟩
-    rw [category.comp_id]
-    constructor
+  inv := by rintro _ _ _ ⟨⟩; simp only [inv_eq_inv, is_iso.inv_id]; constructor
+  mul := by rintro _ _ _ _ ⟨⟩ _ ⟨⟩; rw [category.comp_id]; constructor
 #align category_theory.subgroupoid.discrete CategoryTheory.Subgroupoid.discrete
 
 theorem mem_discrete_iff {c d : C} (f : c ⟶ d) :
     f ∈ discrete.arrows c d ↔ ∃ h : c = d, f = eqToHom h :=
-  ⟨by
-    rintro ⟨⟩
-    exact ⟨rfl, rfl⟩, by
-    rintro ⟨rfl, rfl⟩
-    constructor⟩
+  ⟨by rintro ⟨⟩; exact ⟨rfl, rfl⟩, by rintro ⟨rfl, rfl⟩; constructor⟩
 #align category_theory.subgroupoid.mem_discrete_iff CategoryTheory.Subgroupoid.mem_discrete_iff
 
 /-- A subgroupoid is wide if its carrier set is all of `C`-/
@@ -359,8 +320,7 @@ theorem isWide_iff_objs_eq_univ : S.IsWide ↔ S.objs = Set.univ :=
   by
   constructor
   · rintro h
-    ext
-    constructor <;> simp only [top_eq_univ, mem_univ, imp_true_iff, forall_true_left]
+    ext; constructor <;> simp only [top_eq_univ, mem_univ, imp_true_iff, forall_true_left]
     apply mem_objs_of_src S (h.wide x)
   · rintro h
     refine' ⟨fun c => _⟩
@@ -373,10 +333,7 @@ theorem IsWide.id_mem {S : Subgroupoid C} (Sw : S.IsWide) (c : C) : 𝟙 c ∈ S
 #align category_theory.subgroupoid.is_wide.id_mem CategoryTheory.Subgroupoid.IsWide.id_mem
 
 theorem IsWide.eqToHom_mem {S : Subgroupoid C} (Sw : S.IsWide) {c d : C} (h : c = d) :
-    eqToHom h ∈ S.arrows c d := by
-  cases h
-  simp only [eq_to_hom_refl]
-  apply Sw.id_mem c
+    eqToHom h ∈ S.arrows c d := by cases h; simp only [eq_to_hom_refl]; apply Sw.id_mem c
 #align category_theory.subgroupoid.is_wide.eq_to_hom_mem CategoryTheory.Subgroupoid.IsWide.eqToHom_mem
 
 /-- A subgroupoid is normal if it is wide and satisfies the expected stability under conjugacy. -/
@@ -386,9 +343,7 @@ structure IsNormal extends IsWide S : Prop where
 
 theorem IsNormal.conj' {S : Subgroupoid C} (Sn : IsNormal S) :
     ∀ {c d} (p : d ⟶ c) {γ : c ⟶ c} (hs : γ ∈ S.arrows c c), p ≫ γ ≫ inv p ∈ S.arrows d d :=
-  fun c d p γ hs => by
-  convert Sn.conj (inv p) hs
-  simp
+  fun c d p γ hs => by convert Sn.conj (inv p) hs; simp
 #align category_theory.subgroupoid.is_normal.conj' CategoryTheory.Subgroupoid.IsNormal.conj'
 
 theorem IsNormal.conjugation_bij (Sn : IsNormal S) {c d} (p : c ⟶ d) :
@@ -411,28 +366,19 @@ theorem top_isNormal : IsNormal (⊤ : Subgroupoid C) :=
 #align category_theory.subgroupoid.top_is_normal CategoryTheory.Subgroupoid.top_isNormal
 
 theorem sInf_isNormal (s : Set <| Subgroupoid C) (sn : ∀ S ∈ s, IsNormal S) : IsNormal (sInf s) :=
-  { wide := by
-      simp_rw [Inf, mem_Inter₂]
-      exact fun c S Ss => (sn S Ss).wide c
-    conj := by
-      simp_rw [Inf, mem_Inter₂]
-      exact fun c d p γ hγ S Ss => (sn S Ss).conj p (hγ S Ss) }
+  { wide := by simp_rw [Inf, mem_Inter₂]; exact fun c S Ss => (sn S Ss).wide c
+    conj := by simp_rw [Inf, mem_Inter₂]; exact fun c d p γ hγ S Ss => (sn S Ss).conj p (hγ S Ss) }
 #align category_theory.subgroupoid.Inf_is_normal CategoryTheory.Subgroupoid.sInf_isNormal
 
 theorem discrete_isNormal : (@discrete C _).IsNormal :=
   { wide := fun c => by constructor
-    conj := fun c d f γ hγ => by
-      cases hγ
-      simp only [inv_eq_inv, category.id_comp, is_iso.inv_hom_id]
-      constructor }
+    conj := fun c d f γ hγ => by cases hγ;
+      simp only [inv_eq_inv, category.id_comp, is_iso.inv_hom_id]; constructor }
 #align category_theory.subgroupoid.discrete_is_normal CategoryTheory.Subgroupoid.discrete_isNormal
 
 theorem IsNormal.vertexSubgroup (Sn : IsNormal S) (c : C) (cS : c ∈ S.objs) :
     (S.vertexSubgroup cS).Normal :=
-  {
-    conj_mem := fun x hx y => by
-      rw [mul_assoc]
-      exact Sn.conj' y hx }
+  { conj_mem := fun x hx y => by rw [mul_assoc]; exact Sn.conj' y hx }
 #align category_theory.subgroupoid.is_normal.vertex_subgroup CategoryTheory.Subgroupoid.IsNormal.vertexSubgroup
 
 section GeneratedSubgroupoid
@@ -492,9 +438,7 @@ by taking preimages.
 def comap (S : Subgroupoid D) : Subgroupoid C
     where
   arrows c d := { f : c ⟶ d | φ.map f ∈ S.arrows (φ.obj c) (φ.obj d) }
-  inv c d p hp := by
-    rw [mem_set_of, inv_eq_inv, φ.map_inv p, ← inv_eq_inv]
-    exact S.inv hp
+  inv c d p hp := by rw [mem_set_of, inv_eq_inv, φ.map_inv p, ← inv_eq_inv]; exact S.inv hp
   mul := by
     rintro
     simp only [mem_set_of, functor.map_comp]
@@ -506,9 +450,7 @@ theorem comap_mono (S T : Subgroupoid D) : S ≤ T → comap φ S ≤ comap φ T
 #align category_theory.subgroupoid.comap_mono CategoryTheory.Subgroupoid.comap_mono
 
 theorem isNormal_comap {S : Subgroupoid D} (Sn : IsNormal S) : IsNormal (comap φ S) :=
-  { wide := fun c => by
-      rw [comap, mem_set_of, Functor.map_id]
-      apply Sn.wide
+  { wide := fun c => by rw [comap, mem_set_of, Functor.map_id]; apply Sn.wide
     conj := fun c d f γ hγ =>
       by
       simp_rw [inv_eq_inv f, comap, mem_set_of, functor.map_comp, functor.map_inv, ← inv_eq_inv]
@@ -550,12 +492,8 @@ theorem Map.arrows_iff (hφ : Function.Injective φ.obj) (S : Subgroupoid C) {c
         f = eqToHom ha.symm ≫ φ.map g ≫ eqToHom hb :=
   by
   constructor
-  · rintro ⟨g, hg⟩
-    exact ⟨_, _, g, rfl, rfl, hg, eq_conj_eq_to_hom _⟩
-  · rintro ⟨a, b, g, rfl, rfl, hg, rfl⟩
-    rw [← eq_conj_eq_to_hom]
-    constructor
-    exact hg
+  · rintro ⟨g, hg⟩; exact ⟨_, _, g, rfl, rfl, hg, eq_conj_eq_to_hom _⟩
+  · rintro ⟨a, b, g, rfl, rfl, hg, rfl⟩; rw [← eq_conj_eq_to_hom]; constructor; exact hg
 #align category_theory.subgroupoid.map.arrows_iff CategoryTheory.Subgroupoid.Map.arrows_iff
 
 /-- The "forward" image of a subgroupoid under a functor injective on objects -/
@@ -614,8 +552,7 @@ theorem mem_map_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
   dsimp [objs, map]
   constructor
   · rintro ⟨f, hf⟩
-    change map.arrows φ hφ S d d f at hf
-    rw [map.arrows_iff] at hf
+    change map.arrows φ hφ S d d f at hf; rw [map.arrows_iff] at hf
     obtain ⟨c, d, g, ec, ed, eg, gS, eg⟩ := hf
     exact ⟨c, ⟨mem_objs_of_src S eg, ec⟩⟩
   · rintro ⟨c, ⟨γ, γS⟩, rfl⟩
@@ -623,11 +560,8 @@ theorem mem_map_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
 #align category_theory.subgroupoid.mem_map_objs_iff CategoryTheory.Subgroupoid.mem_map_objs_iff
 
 @[simp]
-theorem map_objs_eq (hφ : Function.Injective φ.obj) : (map φ hφ S).objs = φ.obj '' S.objs :=
-  by
-  ext
-  convert mem_map_objs_iff S φ hφ x
-  simp only [mem_image, exists_prop]
+theorem map_objs_eq (hφ : Function.Injective φ.obj) : (map φ hφ S).objs = φ.obj '' S.objs := by ext;
+  convert mem_map_objs_iff S φ hφ x; simp only [mem_image, exists_prop]
 #align category_theory.subgroupoid.map_objs_eq CategoryTheory.Subgroupoid.map_objs_eq
 
 /-- The image of a functor injective on objects -/
@@ -639,9 +573,7 @@ theorem mem_im_iff (hφ : Function.Injective φ.obj) {c d : D} (f : c ⟶ d) :
     f ∈ (im φ hφ).arrows c d ↔
       ∃ (a b : C)(g : a ⟶ b)(ha : φ.obj a = c)(hb : φ.obj b = d),
         f = eqToHom ha.symm ≫ φ.map g ≫ eqToHom hb :=
-  by
-  convert map.arrows_iff φ hφ ⊤ f
-  simp only [Top.top, mem_univ, exists_true_left]
+  by convert map.arrows_iff φ hφ ⊤ f; simp only [Top.top, mem_univ, exists_true_left]
 #align category_theory.subgroupoid.mem_im_iff CategoryTheory.Subgroupoid.mem_im_iff
 
 theorem mem_im_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
@@ -660,37 +592,22 @@ theorem isNormal_map (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤)
     (map φ hφ S).IsNormal :=
   { wide := fun d => by
       obtain ⟨c, rfl⟩ := obj_surjective_of_im_eq_top φ hφ hφ' d
-      change map.arrows φ hφ S _ _ (𝟙 _)
-      rw [← Functor.map_id]
-      constructor
-      exact Sn.wide c
+      change map.arrows φ hφ S _ _ (𝟙 _); rw [← Functor.map_id]
+      constructor; exact Sn.wide c
     conj := fun d d' g δ hδ => by
       rw [mem_map_iff] at hδ
-      obtain ⟨c, c', γ, cd, cd', γS, hγ⟩ := hδ
-      subst_vars
-      cases hφ cd'
-      have : d' ∈ (im φ hφ).objs := by
-        rw [hφ']
-        apply mem_top_objs
+      obtain ⟨c, c', γ, cd, cd', γS, hγ⟩ := hδ; subst_vars; cases hφ cd'
+      have : d' ∈ (im φ hφ).objs := by rw [hφ']; apply mem_top_objs
       rw [mem_im_objs_iff] at this
       obtain ⟨c', rfl⟩ := this
-      have : g ∈ (im φ hφ).arrows (φ.obj c) (φ.obj c') :=
-        by
-        rw [hφ']
-        trivial
+      have : g ∈ (im φ hφ).arrows (φ.obj c) (φ.obj c') := by rw [hφ']; trivial
       rw [mem_im_iff] at this
-      obtain ⟨b, b', f, hb, hb', _, hf⟩ := this
-      subst_vars
-      cases hφ hb
-      cases hφ hb'
+      obtain ⟨b, b', f, hb, hb', _, hf⟩ := this; subst_vars; cases hφ hb; cases hφ hb'
       change map.arrows φ hφ S (φ.obj c') (φ.obj c') _
       simp only [eq_to_hom_refl, category.comp_id, category.id_comp, inv_eq_inv]
-      suffices map.arrows φ hφ S (φ.obj c') (φ.obj c') (φ.map <| inv f ≫ γ ≫ f)
-        by
-        simp only [inv_eq_inv, functor.map_comp, functor.map_inv] at this
-        exact this
-      · constructor
-        apply Sn.conj f γS }
+      suffices map.arrows φ hφ S (φ.obj c') (φ.obj c') (φ.map <| inv f ≫ γ ≫ f) by
+        simp only [inv_eq_inv, functor.map_comp, functor.map_inv] at this; exact this
+      · constructor; apply Sn.conj f γS }
 #align category_theory.subgroupoid.is_normal_map CategoryTheory.Subgroupoid.isNormal_map
 
 end Hom
@@ -730,18 +647,11 @@ theorem isTotallyDisconnected_iff :
 def disconnect : Subgroupoid C
     where
   arrows c d f := c = d ∧ f ∈ S.arrows c d
-  inv := by
-    rintro _ _ _ ⟨rfl, h⟩
-    exact ⟨rfl, S.inv h⟩
-  mul := by
-    rintro _ _ _ _ ⟨rfl, h⟩ _ ⟨rfl, h'⟩
-    exact ⟨rfl, S.mul h h'⟩
+  inv := by rintro _ _ _ ⟨rfl, h⟩; exact ⟨rfl, S.inv h⟩
+  mul := by rintro _ _ _ _ ⟨rfl, h⟩ _ ⟨rfl, h'⟩; exact ⟨rfl, S.mul h h'⟩
 #align category_theory.subgroupoid.disconnect CategoryTheory.Subgroupoid.disconnect
 
-theorem disconnect_le : S.disconnect ≤ S := by
-  rw [le_iff]
-  rintro _ _ _ ⟨⟩
-  assumption
+theorem disconnect_le : S.disconnect ≤ S := by rw [le_iff]; rintro _ _ _ ⟨⟩; assumption
 #align category_theory.subgroupoid.disconnect_le CategoryTheory.Subgroupoid.disconnect_le
 
 theorem disconnect_normal (Sn : S.IsNormal) : S.disconnect.IsNormal :=
@@ -754,16 +664,12 @@ theorem mem_disconnect_objs_iff {c : C} : c ∈ S.disconnect.objs ↔ c ∈ S.ob
   ⟨fun ⟨γ, h, γS⟩ => ⟨γ, γS⟩, fun ⟨γ, γS⟩ => ⟨γ, rfl, γS⟩⟩
 #align category_theory.subgroupoid.mem_disconnect_objs_iff CategoryTheory.Subgroupoid.mem_disconnect_objs_iff
 
-theorem disconnect_objs : S.disconnect.objs = S.objs :=
-  by
-  apply Set.ext
+theorem disconnect_objs : S.disconnect.objs = S.objs := by apply Set.ext;
   apply mem_disconnect_objs_iff
 #align category_theory.subgroupoid.disconnect_objs CategoryTheory.Subgroupoid.disconnect_objs
 
-theorem disconnect_isTotallyDisconnected : S.disconnect.IsTotallyDisconnected :=
-  by
-  rw [is_totally_disconnected_iff]
-  exact fun c d ⟨f, h, fS⟩ => h
+theorem disconnect_isTotallyDisconnected : S.disconnect.IsTotallyDisconnected := by
+  rw [is_totally_disconnected_iff]; exact fun c d ⟨f, h, fS⟩ => h
 #align category_theory.subgroupoid.disconnect_is_totally_disconnected CategoryTheory.Subgroupoid.disconnect_isTotallyDisconnected
 
 end Disconnected
@@ -775,12 +681,8 @@ variable (D : Set C)
 /-- The full subgroupoid on a set `D : set C` -/
 def full : Subgroupoid C where
   arrows c d _ := c ∈ D ∧ d ∈ D
-  inv := by
-    rintro _ _ _ ⟨⟩
-    constructor <;> assumption
-  mul := by
-    rintro _ _ _ _ ⟨⟩ _ ⟨⟩
-    constructor <;> assumption
+  inv := by rintro _ _ _ ⟨⟩; constructor <;> assumption
+  mul := by rintro _ _ _ _ ⟨⟩ _ ⟨⟩; constructor <;> assumption
 #align category_theory.subgroupoid.full CategoryTheory.Subgroupoid.full
 
 theorem full_objs : (full D).objs = D :=
@@ -797,16 +699,12 @@ theorem mem_full_objs_iff {c : C} : c ∈ (full D).objs ↔ c ∈ D := by rw [fu
 #align category_theory.subgroupoid.mem_full_objs_iff CategoryTheory.Subgroupoid.mem_full_objs_iff
 
 @[simp]
-theorem full_empty : full ∅ = (⊥ : Subgroupoid C) :=
-  by
-  ext
+theorem full_empty : full ∅ = (⊥ : Subgroupoid C) := by ext;
   simp only [Bot.bot, mem_full_iff, mem_empty_iff_false, and_self_iff]
 #align category_theory.subgroupoid.full_empty CategoryTheory.Subgroupoid.full_empty
 
 @[simp]
-theorem full_univ : full Set.univ = (⊤ : Subgroupoid C) :=
-  by
-  ext
+theorem full_univ : full Set.univ = (⊤ : Subgroupoid C) := by ext;
   simp only [mem_full_iff, mem_univ, and_self_iff, true_iff_iff]
 #align category_theory.subgroupoid.full_univ CategoryTheory.Subgroupoid.full_univ
 
Diff
@@ -410,14 +410,14 @@ theorem top_isNormal : IsNormal (⊤ : Subgroupoid C) :=
     conj := fun a b c d e => trivial }
 #align category_theory.subgroupoid.top_is_normal CategoryTheory.Subgroupoid.top_isNormal
 
-theorem infₛ_isNormal (s : Set <| Subgroupoid C) (sn : ∀ S ∈ s, IsNormal S) : IsNormal (infₛ s) :=
+theorem sInf_isNormal (s : Set <| Subgroupoid C) (sn : ∀ S ∈ s, IsNormal S) : IsNormal (sInf s) :=
   { wide := by
       simp_rw [Inf, mem_Inter₂]
       exact fun c S Ss => (sn S Ss).wide c
     conj := by
       simp_rw [Inf, mem_Inter₂]
       exact fun c d p γ hγ S Ss => (sn S Ss).conj p (hγ S Ss) }
-#align category_theory.subgroupoid.Inf_is_normal CategoryTheory.Subgroupoid.infₛ_isNormal
+#align category_theory.subgroupoid.Inf_is_normal CategoryTheory.Subgroupoid.sInf_isNormal
 
 theorem discrete_isNormal : (@discrete C _).IsNormal :=
   { wide := fun c => by constructor
@@ -442,7 +442,7 @@ variable (X : ∀ c d : C, Set (c ⟶ d))
 
 /-- The subgropoid generated by the set of arrows `X` -/
 def generated : Subgroupoid C :=
-  infₛ { S : Subgroupoid C | ∀ c d, X c d ⊆ S.arrows c d }
+  sInf { S : Subgroupoid C | ∀ c d, X c d ⊆ S.arrows c d }
 #align category_theory.subgroupoid.generated CategoryTheory.Subgroupoid.generated
 
 theorem subset_generated (c d : C) : X c d ⊆ (generated X).arrows c d :=
@@ -454,17 +454,17 @@ theorem subset_generated (c d : C) : X c d ⊆ (generated X).arrows c d :=
 
 /-- The normal sugroupoid generated by the set of arrows `X` -/
 def generatedNormal : Subgroupoid C :=
-  infₛ { S : Subgroupoid C | (∀ c d, X c d ⊆ S.arrows c d) ∧ S.IsNormal }
+  sInf { S : Subgroupoid C | (∀ c d, X c d ⊆ S.arrows c d) ∧ S.IsNormal }
 #align category_theory.subgroupoid.generated_normal CategoryTheory.Subgroupoid.generatedNormal
 
 theorem generated_le_generatedNormal : generated X ≤ generatedNormal X :=
   by
-  apply @infₛ_le_infₛ (subgroupoid C) _
+  apply @sInf_le_sInf (subgroupoid C) _
   exact fun S ⟨h, _⟩ => h
 #align category_theory.subgroupoid.generated_le_generated_normal CategoryTheory.Subgroupoid.generated_le_generatedNormal
 
 theorem generatedNormal_isNormal : (generatedNormal X).IsNormal :=
-  infₛ_isNormal _ fun S h => h.right
+  sInf_isNormal _ fun S h => h.right
 #align category_theory.subgroupoid.generated_normal_is_normal CategoryTheory.Subgroupoid.generatedNormal_isNormal
 
 theorem IsNormal.generatedNormal_le {S : Subgroupoid C} (Sn : S.IsNormal) :
@@ -476,7 +476,7 @@ theorem IsNormal.generatedNormal_le {S : Subgroupoid C} (Sn : S.IsNormal) :
     rw [le_iff] at h h'
     exact ((subset_generated X c d).trans (@h' c d)).trans (@h c d)
   · rintro h
-    apply @infₛ_le (subgroupoid C) _
+    apply @sInf_le (subgroupoid C) _
     exact ⟨h, Sn⟩
 #align category_theory.subgroupoid.is_normal.generated_normal_le CategoryTheory.Subgroupoid.IsNormal.generatedNormal_le
 
Diff
@@ -246,7 +246,7 @@ instance : Bot (Subgroupoid C) :=
 instance : Inhabited (Subgroupoid C) :=
   ⟨⊤⟩
 
-instance : HasInf (Subgroupoid C) :=
+instance : Inf (Subgroupoid C) :=
   ⟨fun S T =>
     { arrows := fun c d => S.arrows c d ∩ T.arrows c d
       inv := by

Changes in mathlib4

mathlib3
mathlib4
chore: remove unnecessary cdots (#12417)

These · are scoping when there is a single active goal.

These were found using a modification of the linter at #12339.

Diff
@@ -94,7 +94,7 @@ theorem mul_mem_cancel_left {c d e : C} {f : c ⟶ d} {g : d ⟶ e} (hf : f ∈
   · rintro h
     suffices Groupoid.inv f ≫ f ≫ g ∈ S.arrows d e by
       simpa only [inv_eq_inv, IsIso.inv_hom_id_assoc] using this
-    · apply S.mul (S.inv hf) h
+    apply S.mul (S.inv hf) h
   · apply S.mul hf
 #align category_theory.subgroupoid.mul_mem_cancel_left CategoryTheory.Subgroupoid.mul_mem_cancel_left
 
@@ -104,7 +104,7 @@ theorem mul_mem_cancel_right {c d e : C} {f : c ⟶ d} {g : d ⟶ e} (hg : g ∈
   · rintro h
     suffices (f ≫ g) ≫ Groupoid.inv g ∈ S.arrows c d by
       simpa only [inv_eq_inv, IsIso.hom_inv_id, Category.comp_id, Category.assoc] using this
-    · apply S.mul h (S.inv hg)
+    apply S.mul h (S.inv hg)
   · exact fun hf => S.mul hf hg
 #align category_theory.subgroupoid.mul_mem_cancel_right CategoryTheory.Subgroupoid.mul_mem_cancel_right
 
@@ -590,7 +590,7 @@ theorem isNormal_map (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤)
       simp only [eqToHom_refl, Category.comp_id, Category.id_comp, inv_eq_inv]
       suffices Map.Arrows φ hφ S (φ.obj c') (φ.obj c') (φ.map <| Groupoid.inv f ≫ γ ≫ f) by
         simp only [inv_eq_inv, Functor.map_comp, Functor.map_inv] at this; exact this
-      · constructor; apply Sn.conj f γS }
+      constructor; apply Sn.conj f γS }
 #align category_theory.subgroupoid.is_normal_map CategoryTheory.Subgroupoid.isNormal_map
 
 end Hom
chore: remove tactics (#11365)

More tactics that are not used, found using the linter at #11308.

The PR consists of tactic removals, whitespace changes and replacing a porting note by an explanation.

Diff
@@ -585,7 +585,7 @@ theorem isNormal_map (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤)
       obtain ⟨c', rfl⟩ := this
       have : g ∈ (im φ hφ).arrows (φ.obj c) (φ.obj c') := by rw [hφ']; trivial
       rw [mem_im_iff] at this
-      obtain ⟨b, b', f, hb, hb', _, hf⟩ := this; subst_vars; cases hφ hb; cases hφ hb'
+      obtain ⟨b, b', f, hb, hb', _, hf⟩ := this; cases hφ hb; cases hφ hb'
       change Map.Arrows φ hφ S (φ.obj c') (φ.obj c') _
       simp only [eqToHom_refl, Category.comp_id, Category.id_comp, inv_eq_inv]
       suffices Map.Arrows φ hφ S (φ.obj c') (φ.obj c') (φ.map <| Groupoid.inv f ≫ γ ≫ f) by
chore: classify new lemma porting notes (#11217)

Classifies by adding issue number #10756 to porting notes claiming anything semantically equivalent to:

  • "new lemma"
  • "added lemma"
Diff
@@ -232,7 +232,7 @@ instance : InfSet (Subgroupoid C) :=
         rw [mem_iInter₂] at hp hq ⊢;
         exact fun S hS => S.mul (hp S hS) (hq S hS) }⟩
 
--- Porting note: new lemma
+-- Porting note (#10756): new lemma
 theorem mem_sInf_arrows {s : Set (Subgroupoid C)} {c d : C} {p : c ⟶ d} :
     p ∈ (sInf s).arrows c d ↔ ∀ S ∈ s, p ∈ S.arrows c d :=
   mem_iInter₂
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -232,7 +232,7 @@ instance : InfSet (Subgroupoid C) :=
         rw [mem_iInter₂] at hp hq ⊢;
         exact fun S hS => S.mul (hp S hS) (hq S hS) }⟩
 
--- porting note: new lemma
+-- Porting note: new lemma
 theorem mem_sInf_arrows {s : Set (Subgroupoid C)} {c d : C} {p : c ⟶ d} :
     p ∈ (sInf s).arrows c d ↔ ∀ S ∈ s, p ∈ S.arrows c d :=
   mem_iInter₂
@@ -273,7 +273,7 @@ theorem inclusion_inj_on_objects {S T : Subgroupoid C} (h : S ≤ T) :
 
 theorem inclusion_faithful {S T : Subgroupoid C} (h : S ≤ T) (s t : S.objs) :
     Function.Injective fun f : s ⟶ t => (inclusion h).map f := fun ⟨f, hf⟩ ⟨g, hg⟩ => by
-  -- porting note: was `...; simpa only [Subtype.mk_eq_mk] using id`
+  -- Porting note: was `...; simpa only [Subtype.mk_eq_mk] using id`
   dsimp only [inclusion]; rw [Subtype.mk_eq_mk, Subtype.mk_eq_mk]; exact id
 #align category_theory.subgroupoid.inclusion_faithful CategoryTheory.Subgroupoid.inclusion_faithful
 
@@ -698,7 +698,7 @@ theorem full_mono {D E : Set C} (h : D ≤ E) : full D ≤ full E := by
   exact fun ⟨hc, hd⟩ => ⟨h hc, h hd⟩
 #align category_theory.subgroupoid.full_mono CategoryTheory.Subgroupoid.full_mono
 
--- porting note: using `.1` instead of `↑`
+-- Porting note: using `.1` instead of `↑`
 theorem full_arrow_eq_iff {c d : (full D).objs} {f g : c ⟶ d} :
     f = g ↔ (f.1 : c.val ⟶ d.val) = g.1 :=
   Subtype.ext_iff
chore: bump to v4.3.0-rc2 (#8366)

PR contents

This is the supremum of

along with some minor fixes from failures on nightly-testing as Mathlib master is merged into it.

Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.

I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0 branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

We can get rid of all the

local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)

macros across Mathlib (and in any projects that want to write natural number powers of reals).

leanprover/lean4#2722

Changes the default behaviour of simp to (config := {decide := false}). This makes simp (and consequentially norm_num) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp or norm_num to decide or rfl, or adding (config := {decide := true}).

leanprover/lean4#2783

This changed the behaviour of simp so that simp [f] will only unfold "fully applied" occurrences of f. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true }). We may in future add a syntax for this, e.g. simp [!f]; please provide feedback! In the meantime, we have made the following changes:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[eqns] to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp and Function.flip.

This change in Lean may require further changes down the line (e.g. adding the !f syntax, and/or upstreaming the special treatment for Function.comp and Function.flip, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!

Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>

Diff
@@ -688,7 +688,7 @@ theorem full_empty : full ∅ = (⊥ : Subgroupoid C) := by
 @[simp]
 theorem full_univ : full Set.univ = (⊤ : Subgroupoid C) := by
   ext
-  simp only [mem_full_iff, mem_univ, mem_top]
+  simp only [mem_full_iff, mem_univ, and_self, mem_top]
 #align category_theory.subgroupoid.full_univ CategoryTheory.Subgroupoid.full_univ
 
 theorem full_mono {D E : Set C} (h : D ≤ E) : full D ≤ full E := by
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -419,7 +419,7 @@ end GeneratedSubgroupoid
 
 section Hom
 
-variable {D : Type _} [Groupoid D] (φ : C ⥤ D)
+variable {D : Type*} [Groupoid D] (φ : C ⥤ D)
 
 /-- A functor between groupoid defines a map of subgroupoids in the reverse direction
 by taking preimages.
@@ -445,7 +445,7 @@ theorem isNormal_comap {S : Subgroupoid D} (Sn : IsNormal S) : IsNormal (comap 
 #align category_theory.subgroupoid.is_normal_comap CategoryTheory.Subgroupoid.isNormal_comap
 
 @[simp]
-theorem comap_comp {E : Type _} [Groupoid E] (ψ : D ⥤ E) : comap (φ ⋙ ψ) = comap φ ∘ comap ψ :=
+theorem comap_comp {E : Type*} [Groupoid E] (ψ : D ⥤ E) : comap (φ ⋙ ψ) = comap φ ∘ comap ψ :=
   rfl
 #align category_theory.subgroupoid.comap_comp CategoryTheory.Subgroupoid.comap_comp
 
@@ -464,7 +464,7 @@ theorem ker_isNormal : (ker φ).IsNormal :=
 #align category_theory.subgroupoid.ker_is_normal CategoryTheory.Subgroupoid.ker_isNormal
 
 @[simp]
-theorem ker_comp {E : Type _} [Groupoid E] (ψ : D ⥤ E) : ker (φ ⋙ ψ) = comap φ (ker ψ) :=
+theorem ker_comp {E : Type*} [Groupoid E] (ψ : D ⥤ E) : ker (φ ⋙ ψ) = comap φ (ker ψ) :=
   rfl
 #align category_theory.subgroupoid.ker_comp CategoryTheory.Subgroupoid.ker_comp
 
chore: fix some Set defeq abuse, golf (#6114)
  • Use {x | p x} instead of fun x ↦ p x to define a set here and there.
  • Golf some proofs.
  • Replace Con.ker_apply_eq_preimage with Con.ker_apply. The old version used to abuse definitional equality between Set M and M → Prop.
  • Fix Submonoid.mk* lemmas to use ⟨_, _⟩, not ⟨⟨_, _⟩, _⟩.
Diff
@@ -484,7 +484,7 @@ theorem Map.arrows_iff (hφ : Function.Injective φ.obj) (S : Subgroupoid C) {c
 
 /-- The "forward" image of a subgroupoid under a functor injective on objects -/
 def map (hφ : Function.Injective φ.obj) (S : Subgroupoid C) : Subgroupoid D where
-  arrows := Map.Arrows φ hφ S
+  arrows c d := {x | Map.Arrows φ hφ S c d x}
   inv := by
     rintro _ _ _ ⟨⟩
     rw [inv_eq_inv, ← Functor.map_inv, ← inv_eq_inv]
@@ -628,7 +628,7 @@ theorem isTotallyDisconnected_iff :
 
 /-- The isotropy subgroupoid of `S` -/
 def disconnect : Subgroupoid C where
-  arrows c d f := c = d ∧ f ∈ S.arrows c d
+  arrows c d := {f | c = d ∧ f ∈ S.arrows c d}
   inv := by rintro _ _ _ ⟨rfl, h⟩; exact ⟨rfl, S.inv h⟩
   mul := by rintro _ _ _ _ ⟨rfl, h⟩ _ ⟨rfl, h'⟩; exact ⟨rfl, S.mul h h'⟩
 #align category_theory.subgroupoid.disconnect CategoryTheory.Subgroupoid.disconnect
@@ -661,7 +661,7 @@ variable (D : Set C)
 
 /-- The full subgroupoid on a set `D : Set C` -/
 def full : Subgroupoid C where
-  arrows c d _ := c ∈ D ∧ d ∈ D
+  arrows c d := {_f | c ∈ D ∧ d ∈ D}
   inv := by rintro _ _ _ ⟨⟩; constructor <;> assumption
   mul := by rintro _ _ _ _ ⟨⟩ _ ⟨⟩; constructor <;> assumption
 #align category_theory.subgroupoid.full CategoryTheory.Subgroupoid.full
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,11 +2,6 @@
 Copyright (c) 2022 Rémi Bottinelli. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Rémi Bottinelli, Junyan Xu
-
-! This file was ported from Lean 3 source module category_theory.groupoid.subgroupoid
-! leanprover-community/mathlib commit 70fd9563a21e7b963887c9360bd29b2393e6225a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Groupoid.VertexGroup
 import Mathlib.CategoryTheory.Groupoid.Basic
@@ -16,6 +11,8 @@ import Mathlib.Data.Set.Lattice
 import Mathlib.GroupTheory.Subgroup.Basic
 import Mathlib.Order.GaloisConnection
 
+#align_import category_theory.groupoid.subgroupoid from "leanprover-community/mathlib"@"70fd9563a21e7b963887c9360bd29b2393e6225a"
+
 /-!
 # Subgroupoid
 
chore: cleanup whitespace (#5988)

Grepping for [^ .:{-] [^ :] and reviewing the results. Once I started I couldn't stop. :-)

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

Diff
@@ -172,7 +172,7 @@ theorem hom.inj_on_objects : Function.Injective (hom S).obj := by
 #align category_theory.subgroupoid.hom.inj_on_objects CategoryTheory.Subgroupoid.hom.inj_on_objects
 
 theorem hom.faithful : ∀ c d, Function.Injective fun f : c ⟶ d => (hom S).map f := by
-  rintro ⟨c, hc⟩ ⟨d, hd⟩ ⟨f, hf⟩ ⟨g, hg⟩ hfg; exact Subtype.eq  hfg
+  rintro ⟨c, hc⟩ ⟨d, hd⟩ ⟨f, hf⟩ ⟨g, hg⟩ hfg; exact Subtype.eq hfg
 #align category_theory.subgroupoid.hom.faithful CategoryTheory.Subgroupoid.hom.faithful
 
 /-- The subgroup of the vertex group at `c` given by the subgroupoid -/
chore: remove occurrences of semicolon after space (#5713)

This is the second half of the changes originally in #5699, removing all occurrences of ; after a space and implementing a linter rule to enforce it.

In most cases this 2-character substring has a space after it, so the following command was run first:

find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;

The remaining cases were few enough in number that they were done manually.

Diff
@@ -538,7 +538,7 @@ theorem mem_map_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
   dsimp [objs, map]
   constructor
   · rintro ⟨f, hf⟩
-    change Map.Arrows φ hφ S d d f at hf ; rw [Map.arrows_iff] at hf
+    change Map.Arrows φ hφ S d d f at hf; rw [Map.arrows_iff] at hf
     obtain ⟨c, d, g, ec, ed, eg, gS, eg⟩ := hf
     exact ⟨c, ⟨mem_objs_of_src S eg, ec⟩⟩
   · rintro ⟨c, ⟨γ, γS⟩, rfl⟩
@@ -592,7 +592,7 @@ theorem isNormal_map (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤)
       change Map.Arrows φ hφ S (φ.obj c') (φ.obj c') _
       simp only [eqToHom_refl, Category.comp_id, Category.id_comp, inv_eq_inv]
       suffices Map.Arrows φ hφ S (φ.obj c') (φ.obj c') (φ.map <| Groupoid.inv f ≫ γ ≫ f) by
-        simp only [inv_eq_inv, Functor.map_comp, Functor.map_inv] at this ; exact this
+        simp only [inv_eq_inv, Functor.map_comp, Functor.map_inv] at this; exact this
       · constructor; apply Sn.conj f γS }
 #align category_theory.subgroupoid.is_normal_map CategoryTheory.Subgroupoid.isNormal_map
 
chore: tidy various files (#5233)
Diff
@@ -45,8 +45,8 @@ Given a type `C` with associated `groupoid C` instance.
 
 ## Implementation details
 
-The structure of this file is copied from/inspired by `Mathlib/GroupTheory.Subgroup.Basic`
-and `Mathlib/Combinatorics/SimpleGraph/Subgraph`.
+The structure of this file is copied from/inspired by `Mathlib/GroupTheory/Subgroup/Basic.lean`
+and `Mathlib/Combinatorics/SimpleGraph/Subgraph.lean`.
 
 ## TODO
 
@@ -411,7 +411,7 @@ theorem IsNormal.generatedNormal_le {S : Subgroupoid C} (Sn : S.IsNormal) :
   constructor
   · rintro h c d
     have h' := generated_le_generatedNormal X
-    rw [le_iff] at h h' 
+    rw [le_iff] at h h'
     exact ((subset_generated X c d).trans (@h' c d)).trans (@h c d)
   · rintro h
     apply @sInf_le (Subgroupoid C) _
@@ -538,7 +538,7 @@ theorem mem_map_objs_iff (hφ : Function.Injective φ.obj) (d : D) :
   dsimp [objs, map]
   constructor
   · rintro ⟨f, hf⟩
-    change Map.Arrows φ hφ S d d f at hf ; rw [Map.arrows_iff] at hf 
+    change Map.Arrows φ hφ S d d f at hf ; rw [Map.arrows_iff] at hf
     obtain ⟨c, d, g, ec, ed, eg, gS, eg⟩ := hf
     exact ⟨c, ⟨mem_objs_of_src S eg, ec⟩⟩
   · rintro ⟨c, ⟨γ, γS⟩, rfl⟩
@@ -581,13 +581,13 @@ theorem isNormal_map (hφ : Function.Injective φ.obj) (hφ' : im φ hφ = ⊤)
       change Map.Arrows φ hφ S _ _ (𝟙 _); rw [← Functor.map_id]
       constructor; exact Sn.wide c
     conj := fun {d d'} g δ hδ => by
-      rw [mem_map_iff] at hδ 
+      rw [mem_map_iff] at hδ
       obtain ⟨c, c', γ, cd, cd', γS, hγ⟩ := hδ; subst_vars; cases hφ cd'
       have : d' ∈ (im φ hφ).objs := by rw [hφ']; apply mem_top_objs
-      rw [mem_im_objs_iff] at this 
+      rw [mem_im_objs_iff] at this
       obtain ⟨c', rfl⟩ := this
       have : g ∈ (im φ hφ).arrows (φ.obj c) (φ.obj c') := by rw [hφ']; trivial
-      rw [mem_im_iff] at this 
+      rw [mem_im_iff] at this
       obtain ⟨b, b', f, hb, hb', _, hf⟩ := this; subst_vars; cases hφ hb; cases hφ hb'
       change Map.Arrows φ hφ S (φ.obj c') (φ.obj c') _
       simp only [eqToHom_refl, Category.comp_id, Category.id_comp, inv_eq_inv]
@@ -712,4 +712,3 @@ end Full
 end Subgroupoid
 
 end CategoryTheory
-
feat: port CategoryTheory.Groupoid.Subgroupoid (#4975)

Dependencies 4 + 230

231 files ported (98.3%)
93240 lines ported (98.8%)
Show graph

The unported dependencies are