category_theory.groupoid.free_groupoidMathlib.CategoryTheory.Groupoid.FreeGroupoid

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
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
 -/
-import Mathbin.CategoryTheory.Category.Basic
-import Mathbin.CategoryTheory.Functor.Basic
-import Mathbin.CategoryTheory.Groupoid
+import CategoryTheory.Category.Basic
+import CategoryTheory.Functor.Basic
+import CategoryTheory.Groupoid
 import Mathbin.Tactic.NthRewrite.Default
-import Mathbin.CategoryTheory.PathCategory
-import Mathbin.CategoryTheory.Quotient
-import Mathbin.Combinatorics.Quiver.Symmetric
+import CategoryTheory.PathCategory
+import CategoryTheory.Quotient
+import Combinatorics.Quiver.Symmetric
 
 #align_import category_theory.groupoid.free_groupoid from "leanprover-community/mathlib"@"33c67ae661dd8988516ff7f247b0be3018cdd952"
 
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
-
-! This file was ported from Lean 3 source module category_theory.groupoid.free_groupoid
-! leanprover-community/mathlib commit 33c67ae661dd8988516ff7f247b0be3018cdd952
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.CategoryTheory.Category.Basic
 import Mathbin.CategoryTheory.Functor.Basic
@@ -16,6 +11,8 @@ import Mathbin.CategoryTheory.PathCategory
 import Mathbin.CategoryTheory.Quotient
 import Mathbin.Combinatorics.Quiver.Symmetric
 
+#align_import category_theory.groupoid.free_groupoid from "leanprover-community/mathlib"@"33c67ae661dd8988516ff7f247b0be3018cdd952"
+
 /-!
 # Free groupoid on a quiver
 
Diff
@@ -52,7 +52,7 @@ namespace CategoryTheory
 
 namespace Groupoid
 
-namespace Free
+namespace free
 
 universe u v u' v' u'' v''
 
@@ -257,7 +257,7 @@ theorem freeGroupoidFunctor_comp (φ : V ⥤q V') (φ' : V' ⥤q V'') :
 
 end Functoriality
 
-end Free
+end free
 
 end Groupoid
 
Diff
@@ -198,13 +198,16 @@ def lift (φ : V ⥤q V') : FreeGroupoid V ⥤ V' :=
 #align category_theory.groupoid.free.lift CategoryTheory.Groupoid.Free.lift
 -/
 
+#print CategoryTheory.Groupoid.Free.lift_spec /-
 theorem lift_spec (φ : V ⥤q V') : of V ⋙q (lift φ).toPrefunctor = φ :=
   by
   rw [of_eq, Prefunctor.comp_assoc, Prefunctor.comp_assoc, functor.to_prefunctor_comp]
   dsimp [lift]
   rw [quotient.lift_spec, paths.lift_spec, Quiver.Symmetrify.lift_spec]
 #align category_theory.groupoid.free.lift_spec CategoryTheory.Groupoid.Free.lift_spec
+-/
 
+#print CategoryTheory.Groupoid.Free.lift_unique /-
 theorem lift_unique (φ : V ⥤q V') (Φ : FreeGroupoid V ⥤ V') (hΦ : of V ⋙q Φ.toPrefunctor = φ) :
     Φ = lift φ := by
   apply quotient.lift_unique
@@ -219,6 +222,7 @@ theorem lift_unique (φ : V ⥤q V') (Φ : FreeGroupoid V ⥤ V') (hΦ : of V 
     have := functor.map_inv Φ ((quotient.functor red_step).toPrefunctor.map f.to_path)
     convert this <;> simp only [inv_eq_inv]
 #align category_theory.groupoid.free.lift_unique CategoryTheory.Groupoid.Free.lift_unique
+-/
 
 end UniversalProperty
 
Diff
@@ -127,8 +127,8 @@ theorem congr_comp_reverse {X Y : Paths <| Quiver.Symmetrify V} (p : X ⟶ Y) :
           (q ≫ (f.to_path ≫ (Quiver.reverse f).toPath) ≫ q.reverse) :=
         by apply quotient.comp_closure.intro; apply red_step.step
       have that : q.cons f = q.comp f.to_path := by rfl; rw [that]
-      simp only [category.assoc, category.id_comp] at this⊢
-      simp only [category_struct.comp, Quiver.Path.comp_assoc] at this⊢
+      simp only [category.assoc, category.id_comp] at this ⊢
+      simp only [category_struct.comp, Quiver.Path.comp_assoc] at this ⊢
       exact this
     · exact ih
 #align category_theory.groupoid.free.congr_comp_reverse CategoryTheory.Groupoid.Free.congr_comp_reverse
Diff
@@ -198,12 +198,6 @@ def lift (φ : V ⥤q V') : FreeGroupoid V ⥤ V' :=
 #align category_theory.groupoid.free.lift CategoryTheory.Groupoid.Free.lift
 -/
 
-/- warning: category_theory.groupoid.free.lift_spec -> CategoryTheory.Groupoid.Free.lift_spec is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} [_inst_1 : Quiver.{succ u2, u1} V] {V' : Type.{u3}} [_inst_2 : CategoryTheory.Groupoid.{u4, u3} V'] (φ : Prefunctor.{succ u2, succ u4, u1, u3} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)))), Eq.{max (max (succ u1) (succ u2) (succ u4)) (succ u1) (succ u3)} (Prefunctor.{succ u2, succ u4, u1, u3} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)))) (Prefunctor.comp.{u1, succ u2, u1, succ (max u1 u2), u3, succ u4} V _inst_1 (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, u1} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, u1} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1))) V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2))) (CategoryTheory.Groupoid.Free.of.{u1, u2} V _inst_1) (CategoryTheory.Functor.toPrefunctor.{max u1 u2, u4, u1, u3} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2) (CategoryTheory.Groupoid.Free.lift.{u1, u2, u3, u4} V _inst_1 V' _inst_2 φ))) φ
-but is expected to have type
-  forall {V : Type.{u2}} [_inst_1 : Quiver.{succ u3, u2} V] {V' : Type.{u4}} [_inst_2 : CategoryTheory.Groupoid.{u1, u4} V'] (φ : Prefunctor.{succ u3, succ u1, u2, u4} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)))), Eq.{max (max (max (succ u2) (succ u4)) (succ u3)) (succ u1)} (Prefunctor.{succ u3, succ u1, u2, u4} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)))) (Prefunctor.comp.{u2, succ u3, u2, max (succ u2) (succ u3), u4, succ u1} V _inst_1 (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, u2} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, u2} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1))) V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2))) (CategoryTheory.Groupoid.Free.of.{u2, u3} V _inst_1) (CategoryTheory.Functor.toPrefunctor.{max u2 u3, u1, u2, u4} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2) (CategoryTheory.Groupoid.Free.lift.{u2, u3, u4, u1} V _inst_1 V' _inst_2 φ))) φ
-Case conversion may be inaccurate. Consider using '#align category_theory.groupoid.free.lift_spec CategoryTheory.Groupoid.Free.lift_specₓ'. -/
 theorem lift_spec (φ : V ⥤q V') : of V ⋙q (lift φ).toPrefunctor = φ :=
   by
   rw [of_eq, Prefunctor.comp_assoc, Prefunctor.comp_assoc, functor.to_prefunctor_comp]
@@ -211,12 +205,6 @@ theorem lift_spec (φ : V ⥤q V') : of V ⋙q (lift φ).toPrefunctor = φ :=
   rw [quotient.lift_spec, paths.lift_spec, Quiver.Symmetrify.lift_spec]
 #align category_theory.groupoid.free.lift_spec CategoryTheory.Groupoid.Free.lift_spec
 
-/- warning: category_theory.groupoid.free.lift_unique -> CategoryTheory.Groupoid.Free.lift_unique is a dubious translation:
-lean 3 declaration is
-  forall {V : Type.{u1}} [_inst_1 : Quiver.{succ u2, u1} V] {V' : Type.{u3}} [_inst_2 : CategoryTheory.Groupoid.{u4, u3} V'] (φ : Prefunctor.{succ u2, succ u4, u1, u3} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)))) (Φ : CategoryTheory.Functor.{max u1 u2, u4, u1, u3} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)), (Eq.{max (max (succ u1) (succ u2) (succ u4)) (succ u1) (succ u3)} (Prefunctor.{succ u2, succ u4, u1, u3} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)))) (Prefunctor.comp.{u1, succ u2, u1, succ (max u1 u2), u3, succ u4} V _inst_1 (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, u1} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, u1} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1))) V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2))) (CategoryTheory.Groupoid.Free.of.{u1, u2} V _inst_1) (CategoryTheory.Functor.toPrefunctor.{max u1 u2, u4, u1, u3} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2) Φ)) φ) -> (Eq.{succ (max (max u1 u2) u4 u1 u3)} (CategoryTheory.Functor.{max u1 u2, u4, u1, u3} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)) Φ (CategoryTheory.Groupoid.Free.lift.{u1, u2, u3, u4} V _inst_1 V' _inst_2 φ))
-but is expected to have type
-  forall {V : Type.{u2}} [_inst_1 : Quiver.{succ u3, u2} V] {V' : Type.{u4}} [_inst_2 : CategoryTheory.Groupoid.{u1, u4} V'] (φ : Prefunctor.{succ u3, succ u1, u2, u4} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)))) (Φ : CategoryTheory.Functor.{max u2 u3, u1, u2, u4} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)), (Eq.{max (max (max (succ u2) (succ u4)) (succ u3)) (succ u1)} (Prefunctor.{succ u3, succ u1, u2, u4} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)))) (Prefunctor.comp.{u2, succ u3, u2, max (succ u2) (succ u3), u4, succ u1} V _inst_1 (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, u2} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, u2} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1))) V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2))) (CategoryTheory.Groupoid.Free.of.{u2, u3} V _inst_1) (CategoryTheory.Functor.toPrefunctor.{max u2 u3, u1, u2, u4} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2) Φ)) φ) -> (Eq.{max (max (max (succ u2) (succ u4)) (succ u3)) (succ u1)} (CategoryTheory.Functor.{max u2 u3, u1, u2, u4} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)) Φ (CategoryTheory.Groupoid.Free.lift.{u2, u3, u4, u1} V _inst_1 V' _inst_2 φ))
-Case conversion may be inaccurate. Consider using '#align category_theory.groupoid.free.lift_unique CategoryTheory.Groupoid.Free.lift_uniqueₓ'. -/
 theorem lift_unique (φ : V ⥤q V') (Φ : FreeGroupoid V ⥤ V') (hΦ : of V ⋙q Φ.toPrefunctor = φ) :
     Φ = lift φ := by
   apply quotient.lift_unique
Diff
@@ -121,16 +121,12 @@ theorem congr_comp_reverse {X Y : Paths <| Quiver.Symmetrify V} (p : X ⟶ Y) :
   · simp only [Quiver.Path.reverse]
     fapply EqvGen.trans
     · exact q ≫ q.reverse
-    · apply EqvGen.symm
-      apply EqvGen.rel
+    · apply EqvGen.symm; apply EqvGen.rel
       have :
         quotient.comp_closure red_step (q ≫ 𝟙 _ ≫ q.reverse)
           (q ≫ (f.to_path ≫ (Quiver.reverse f).toPath) ≫ q.reverse) :=
-        by
-        apply quotient.comp_closure.intro
-        apply red_step.step
-      have that : q.cons f = q.comp f.to_path := by rfl
-      rw [that]
+        by apply quotient.comp_closure.intro; apply red_step.step
+      have that : q.cons f = q.comp f.to_path := by rfl; rw [that]
       simp only [category.assoc, category.id_comp] at this⊢
       simp only [category_struct.comp, Quiver.Path.comp_assoc] at this⊢
       exact this
@@ -180,10 +176,8 @@ theorem of_eq :
       (Quiver.Symmetrify.of ⋙q Paths.of).comp (Quotient.functor <| @redStep V _).toPrefunctor :=
   by
   apply Prefunctor.ext; rotate_left
-  · rintro X
-    rfl
-  · rintro X Y f
-    rfl
+  · rintro X; rfl
+  · rintro X Y f; rfl
 #align category_theory.groupoid.free.of_eq CategoryTheory.Groupoid.Free.of_eq
 -/
 
@@ -228,10 +222,8 @@ theorem lift_unique (φ : V ⥤q V') (Φ : FreeGroupoid V ⥤ V') (hΦ : of V 
   apply quotient.lift_unique
   apply paths.lift_unique
   fapply @Quiver.Symmetrify.lift_unique _ _ _ _ _ _ _ _ _
-  · rw [← functor.to_prefunctor_comp]
-    exact hΦ
-  · constructor
-    rintro X Y f
+  · rw [← functor.to_prefunctor_comp]; exact hΦ
+  · constructor; rintro X Y f
     simp only [← functor.to_prefunctor_comp, Prefunctor.comp_map, paths.of_map, inv_eq_inv]
     change
       Φ.map (inv ((quotient.functor red_step).toPrefunctor.map f.to_path)) =
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Rémi Bottinelli
 
 ! This file was ported from Lean 3 source module category_theory.groupoid.free_groupoid
-! leanprover-community/mathlib commit 706d88f2b8fdfeb0b22796433d7a6c1a010af9f2
+! leanprover-community/mathlib commit 33c67ae661dd8988516ff7f247b0be3018cdd952
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -19,6 +19,9 @@ import Mathbin.Combinatorics.Quiver.Symmetric
 /-!
 # Free groupoid on a quiver
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file defines the free groupoid on a quiver, the lifting of a prefunctor to its unique
 extension as a functor from the free groupoid, and proves uniqueness of this extension.
 
Diff
@@ -55,33 +55,42 @@ universe u v u' v' u'' v''
 
 variable {V : Type u} [Quiver.{v + 1} V]
 
+#print Quiver.Hom.toPosPath /-
 /-- Shorthand for the "forward" arrow corresponding to `f` in `paths $ symmetrify V` -/
 abbrev Quiver.Hom.toPosPath {X Y : V} (f : X ⟶ Y) :
     (CategoryTheory.Paths.categoryPaths <| Quiver.Symmetrify V).Hom X Y :=
   f.toPos.toPath
-#align category_theory.groupoid.free.quiver.hom.to_pos_path CategoryTheory.Groupoid.Free.Quiver.Hom.toPosPath
+#align category_theory.groupoid.free.quiver.hom.to_pos_path Quiver.Hom.toPosPath
+-/
 
+#print Quiver.Hom.toNegPath /-
 /-- Shorthand for the "forward" arrow corresponding to `f` in `paths $ symmetrify V` -/
 abbrev Quiver.Hom.toNegPath {X Y : V} (f : X ⟶ Y) :
     (CategoryTheory.Paths.categoryPaths <| Quiver.Symmetrify V).Hom Y X :=
   f.toNeg.toPath
-#align category_theory.groupoid.free.quiver.hom.to_neg_path CategoryTheory.Groupoid.Free.Quiver.Hom.toNegPath
+#align category_theory.groupoid.free.quiver.hom.to_neg_path Quiver.Hom.toNegPath
+-/
 
+#print CategoryTheory.Groupoid.Free.redStep /-
 /-- The "reduction" relation -/
 inductive redStep : HomRel (Paths (Quiver.Symmetrify V))
   |
   step (X Z : Quiver.Symmetrify V) (f : X ⟶ Z) :
     red_step (𝟙 X) (f.toPath ≫ (Quiver.reverse f).toPath)
 #align category_theory.groupoid.free.red_step CategoryTheory.Groupoid.Free.redStep
+-/
 
+#print CategoryTheory.FreeGroupoid /-
 /-- The underlying vertices of the free groupoid -/
 def CategoryTheory.FreeGroupoid (V) [Q : Quiver V] :=
   Quotient (@redStep V Q)
 #align category_theory.free_groupoid CategoryTheory.FreeGroupoid
+-/
 
 instance {V} [Q : Quiver V] [h : Nonempty V] : Nonempty (FreeGroupoid V) :=
   ⟨⟨h.some⟩⟩
 
+#print CategoryTheory.Groupoid.Free.congr_reverse /-
 theorem congr_reverse {X Y : Paths <| Quiver.Symmetrify V} (p q : X ⟶ Y) :
     Quotient.CompClosure redStep p q → Quotient.CompClosure redStep p.reverse q.reverse :=
   by
@@ -96,7 +105,9 @@ theorem congr_reverse {X Y : Paths <| Quiver.Symmetrify V} (p q : X ⟶ Y) :
     Quiver.Path.reverse_comp, Quiver.reverse_reverse, Quiver.Path.reverse_toPath,
     Quiver.Path.comp_assoc] using this
 #align category_theory.groupoid.free.congr_reverse CategoryTheory.Groupoid.Free.congr_reverse
+-/
 
+#print CategoryTheory.Groupoid.Free.congr_comp_reverse /-
 theorem congr_comp_reverse {X Y : Paths <| Quiver.Symmetrify V} (p : X ⟶ Y) :
     Quot.mk (@Quotient.CompClosure _ _ redStep _ _) (p ≫ p.reverse) =
       Quot.mk (@Quotient.CompClosure _ _ redStep _ _) (𝟙 X) :=
@@ -122,7 +133,9 @@ theorem congr_comp_reverse {X Y : Paths <| Quiver.Symmetrify V} (p : X ⟶ Y) :
       exact this
     · exact ih
 #align category_theory.groupoid.free.congr_comp_reverse CategoryTheory.Groupoid.Free.congr_comp_reverse
+-/
 
+#print CategoryTheory.Groupoid.Free.congr_reverse_comp /-
 theorem congr_reverse_comp {X Y : Paths <| Quiver.Symmetrify V} (p : X ⟶ Y) :
     Quot.mk (@Quotient.CompClosure _ _ redStep _ _) (p.reverse ≫ p) =
       Quot.mk (@Quotient.CompClosure _ _ redStep _ _) (𝟙 Y) :=
@@ -130,15 +143,18 @@ theorem congr_reverse_comp {X Y : Paths <| Quiver.Symmetrify V} (p : X ⟶ Y) :
   nth_rw 2 [← Quiver.Path.reverse_reverse p]
   apply congr_comp_reverse
 #align category_theory.groupoid.free.congr_reverse_comp CategoryTheory.Groupoid.Free.congr_reverse_comp
+-/
 
 instance : Category (FreeGroupoid V) :=
   Quotient.category redStep
 
+#print CategoryTheory.Groupoid.Free.quotInv /-
 /-- The inverse of an arrow in the free groupoid -/
 def quotInv {X Y : FreeGroupoid V} (f : X ⟶ Y) : Y ⟶ X :=
   Quot.liftOn f (fun pp => Quot.mk _ <| pp.reverse) fun pp qq con =>
     Quot.sound <| congr_reverse pp qq Con
 #align category_theory.groupoid.free.quot_inv CategoryTheory.Groupoid.Free.quotInv
+-/
 
 instance : Groupoid (FreeGroupoid V)
     where
@@ -146,13 +162,16 @@ instance : Groupoid (FreeGroupoid V)
   inv_comp' X Y p := Quot.inductionOn p fun pp => congr_reverse_comp pp
   comp_inv' X Y p := Quot.inductionOn p fun pp => congr_comp_reverse pp
 
+#print CategoryTheory.Groupoid.Free.of /-
 /-- The inclusion of the quiver on `V` to the underlying quiver on `free_groupoid V`-/
 def of (V) [Quiver V] : V ⥤q FreeGroupoid V
     where
   obj X := ⟨X⟩
   map X Y f := Quot.mk _ f.toPosPath
 #align category_theory.groupoid.free.of CategoryTheory.Groupoid.Free.of
+-/
 
+#print CategoryTheory.Groupoid.Free.of_eq /-
 theorem of_eq :
     of V =
       (Quiver.Symmetrify.of ⋙q Paths.of).comp (Quotient.functor <| @redStep V _).toPrefunctor :=
@@ -163,11 +182,13 @@ theorem of_eq :
   · rintro X Y f
     rfl
 #align category_theory.groupoid.free.of_eq CategoryTheory.Groupoid.Free.of_eq
+-/
 
 section UniversalProperty
 
 variable {V' : Type u'} [Groupoid V'] (φ : V ⥤q V')
 
+#print CategoryTheory.Groupoid.Free.lift /-
 /-- The lift of a prefunctor to a groupoid, to a functor from `free_groupoid V` -/
 def lift (φ : V ⥤q V') : FreeGroupoid V ⥤ V' :=
   Quotient.lift _ (Paths.lift <| Quiver.Symmetrify.lift φ)
@@ -178,7 +199,14 @@ def lift (φ : V ⥤q V') : FreeGroupoid V ⥤ V' :=
       symm
       apply groupoid.comp_inv)
 #align category_theory.groupoid.free.lift CategoryTheory.Groupoid.Free.lift
+-/
 
+/- warning: category_theory.groupoid.free.lift_spec -> CategoryTheory.Groupoid.Free.lift_spec is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} [_inst_1 : Quiver.{succ u2, u1} V] {V' : Type.{u3}} [_inst_2 : CategoryTheory.Groupoid.{u4, u3} V'] (φ : Prefunctor.{succ u2, succ u4, u1, u3} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)))), Eq.{max (max (succ u1) (succ u2) (succ u4)) (succ u1) (succ u3)} (Prefunctor.{succ u2, succ u4, u1, u3} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)))) (Prefunctor.comp.{u1, succ u2, u1, succ (max u1 u2), u3, succ u4} V _inst_1 (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, u1} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, u1} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1))) V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2))) (CategoryTheory.Groupoid.Free.of.{u1, u2} V _inst_1) (CategoryTheory.Functor.toPrefunctor.{max u1 u2, u4, u1, u3} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2) (CategoryTheory.Groupoid.Free.lift.{u1, u2, u3, u4} V _inst_1 V' _inst_2 φ))) φ
+but is expected to have type
+  forall {V : Type.{u2}} [_inst_1 : Quiver.{succ u3, u2} V] {V' : Type.{u4}} [_inst_2 : CategoryTheory.Groupoid.{u1, u4} V'] (φ : Prefunctor.{succ u3, succ u1, u2, u4} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)))), Eq.{max (max (max (succ u2) (succ u4)) (succ u3)) (succ u1)} (Prefunctor.{succ u3, succ u1, u2, u4} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)))) (Prefunctor.comp.{u2, succ u3, u2, max (succ u2) (succ u3), u4, succ u1} V _inst_1 (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, u2} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, u2} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1))) V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2))) (CategoryTheory.Groupoid.Free.of.{u2, u3} V _inst_1) (CategoryTheory.Functor.toPrefunctor.{max u2 u3, u1, u2, u4} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2) (CategoryTheory.Groupoid.Free.lift.{u2, u3, u4, u1} V _inst_1 V' _inst_2 φ))) φ
+Case conversion may be inaccurate. Consider using '#align category_theory.groupoid.free.lift_spec CategoryTheory.Groupoid.Free.lift_specₓ'. -/
 theorem lift_spec (φ : V ⥤q V') : of V ⋙q (lift φ).toPrefunctor = φ :=
   by
   rw [of_eq, Prefunctor.comp_assoc, Prefunctor.comp_assoc, functor.to_prefunctor_comp]
@@ -186,6 +214,12 @@ theorem lift_spec (φ : V ⥤q V') : of V ⋙q (lift φ).toPrefunctor = φ :=
   rw [quotient.lift_spec, paths.lift_spec, Quiver.Symmetrify.lift_spec]
 #align category_theory.groupoid.free.lift_spec CategoryTheory.Groupoid.Free.lift_spec
 
+/- warning: category_theory.groupoid.free.lift_unique -> CategoryTheory.Groupoid.Free.lift_unique is a dubious translation:
+lean 3 declaration is
+  forall {V : Type.{u1}} [_inst_1 : Quiver.{succ u2, u1} V] {V' : Type.{u3}} [_inst_2 : CategoryTheory.Groupoid.{u4, u3} V'] (φ : Prefunctor.{succ u2, succ u4, u1, u3} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)))) (Φ : CategoryTheory.Functor.{max u1 u2, u4, u1, u3} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)), (Eq.{max (max (succ u1) (succ u2) (succ u4)) (succ u1) (succ u3)} (Prefunctor.{succ u2, succ u4, u1, u3} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)))) (Prefunctor.comp.{u1, succ u2, u1, succ (max u1 u2), u3, succ u4} V _inst_1 (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max u1 u2, u1} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Category.toCategoryStruct.{max u1 u2, u1} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1))) V' (CategoryTheory.CategoryStruct.toQuiver.{u4, u3} V' (CategoryTheory.Category.toCategoryStruct.{u4, u3} V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2))) (CategoryTheory.Groupoid.Free.of.{u1, u2} V _inst_1) (CategoryTheory.Functor.toPrefunctor.{max u1 u2, u4, u1, u3} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2) Φ)) φ) -> (Eq.{succ (max (max u1 u2) u4 u1 u3)} (CategoryTheory.Functor.{max u1 u2, u4, u1, u3} (CategoryTheory.FreeGroupoid.{u1, u2} V _inst_1) (CategoryTheory.Groupoid.Free.CategoryTheory.FreeGroupoid.CategoryTheory.category.{u1, u2} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u4, u3} V' _inst_2)) Φ (CategoryTheory.Groupoid.Free.lift.{u1, u2, u3, u4} V _inst_1 V' _inst_2 φ))
+but is expected to have type
+  forall {V : Type.{u2}} [_inst_1 : Quiver.{succ u3, u2} V] {V' : Type.{u4}} [_inst_2 : CategoryTheory.Groupoid.{u1, u4} V'] (φ : Prefunctor.{succ u3, succ u1, u2, u4} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)))) (Φ : CategoryTheory.Functor.{max u2 u3, u1, u2, u4} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)), (Eq.{max (max (max (succ u2) (succ u4)) (succ u3)) (succ u1)} (Prefunctor.{succ u3, succ u1, u2, u4} V _inst_1 V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)))) (Prefunctor.comp.{u2, succ u3, u2, max (succ u2) (succ u3), u4, succ u1} V _inst_1 (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.CategoryStruct.toQuiver.{max u2 u3, u2} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Category.toCategoryStruct.{max u2 u3, u2} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1))) V' (CategoryTheory.CategoryStruct.toQuiver.{u1, u4} V' (CategoryTheory.Category.toCategoryStruct.{u1, u4} V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2))) (CategoryTheory.Groupoid.Free.of.{u2, u3} V _inst_1) (CategoryTheory.Functor.toPrefunctor.{max u2 u3, u1, u2, u4} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2) Φ)) φ) -> (Eq.{max (max (max (succ u2) (succ u4)) (succ u3)) (succ u1)} (CategoryTheory.Functor.{max u2 u3, u1, u2, u4} (CategoryTheory.FreeGroupoid.{u2, u3} V _inst_1) (CategoryTheory.Groupoid.Free.instCategoryFreeGroupoid.{u2, u3} V _inst_1) V' (CategoryTheory.Groupoid.toCategory.{u1, u4} V' _inst_2)) Φ (CategoryTheory.Groupoid.Free.lift.{u2, u3, u4, u1} V _inst_1 V' _inst_2 φ))
+Case conversion may be inaccurate. Consider using '#align category_theory.groupoid.free.lift_unique CategoryTheory.Groupoid.Free.lift_uniqueₓ'. -/
 theorem lift_unique (φ : V ⥤q V') (Φ : FreeGroupoid V ⥤ V') (hΦ : of V ⋙q Φ.toPrefunctor = φ) :
     Φ = lift φ := by
   apply quotient.lift_unique
@@ -209,24 +243,30 @@ section Functoriality
 
 variable {V' : Type u'} [Quiver.{v' + 1} V'] {V'' : Type u''} [Quiver.{v'' + 1} V'']
 
+#print CategoryTheory.freeGroupoidFunctor /-
 /-- The functor of free groupoid induced by a prefunctor of quivers -/
 def CategoryTheory.freeGroupoidFunctor (φ : V ⥤q V') : FreeGroupoid V ⥤ FreeGroupoid V' :=
   lift (φ ⋙q of V')
 #align category_theory.free_groupoid_functor CategoryTheory.freeGroupoidFunctor
+-/
 
+#print CategoryTheory.Groupoid.Free.freeGroupoidFunctor_id /-
 theorem freeGroupoidFunctor_id :
     freeGroupoidFunctor (Prefunctor.id V) = Functor.id (FreeGroupoid V) :=
   by
   dsimp only [free_groupoid_functor]; symm
   apply lift_unique; rfl
 #align category_theory.groupoid.free.free_groupoid_functor_id CategoryTheory.Groupoid.Free.freeGroupoidFunctor_id
+-/
 
+#print CategoryTheory.Groupoid.Free.freeGroupoidFunctor_comp /-
 theorem freeGroupoidFunctor_comp (φ : V ⥤q V') (φ' : V' ⥤q V'') :
     freeGroupoidFunctor (φ ⋙q φ') = freeGroupoidFunctor φ ⋙ freeGroupoidFunctor φ' :=
   by
   dsimp only [free_groupoid_functor]; symm
   apply lift_unique; rfl
 #align category_theory.groupoid.free.free_groupoid_functor_comp CategoryTheory.Groupoid.Free.freeGroupoidFunctor_comp
+-/
 
 end Functoriality
 

Changes in mathlib4

mathlib3
mathlib4
style: reduce spacing variation in "porting note" comments (#10886)

In this pull request, I have systematically eliminated the leading whitespace preceding the colon (:) within all unlabelled or unclassified porting notes. This adjustment facilitates a more efficient review process for the remaining notes by ensuring no entries are overlooked due to formatting inconsistencies.

Diff
@@ -98,7 +98,7 @@ theorem congr_comp_reverse {X Y : Paths <| Quiver.Symmetrify V} (p : X ⟶ Y) :
   · apply EqvGen.refl
   · simp only [Quiver.Path.reverse]
     fapply EqvGen.trans
-    -- Porting note : `Quiver.Path.*` and `Quiver.Hom.*` notation not working
+    -- Porting note: `Quiver.Path.*` and `Quiver.Hom.*` notation not working
     · exact q ≫ Quiver.Path.reverse q
     · apply EqvGen.symm
       apply EqvGen.rel
@@ -108,7 +108,7 @@ theorem congr_comp_reverse {X Y : Paths <| Quiver.Symmetrify V} (p : X ⟶ Y) :
         apply Quotient.CompClosure.intro
         apply redStep.step
       simp only [Category.assoc, Category.id_comp] at this ⊢
-      -- Porting note : `simp` cannot see how `Quiver.Path.comp_assoc` is relevant, so change to
+      -- Porting note: `simp` cannot see how `Quiver.Path.comp_assoc` is relevant, so change to
       -- category notation
       change Quotient.CompClosure redStep (q ≫ Quiver.Path.reverse q)
         (Quiver.Path.cons q f ≫ (Quiver.Hom.toPath (Quiver.reverse f)) ≫ (Quiver.Path.reverse q))
chore(*): replace $ with <| (#9319)

See Zulip thread for the discussion.

Diff
@@ -52,13 +52,13 @@ universe u v u' v' u'' v''
 
 variable {V : Type u} [Quiver.{v + 1} V]
 
-/-- Shorthand for the "forward" arrow corresponding to `f` in `paths $ symmetrify V` -/
+/-- Shorthand for the "forward" arrow corresponding to `f` in `paths <| symmetrify V` -/
 abbrev _root_.Quiver.Hom.toPosPath {X Y : V} (f : X ⟶ Y) :
     (CategoryTheory.Paths.categoryPaths <| Quiver.Symmetrify V).Hom X Y :=
   f.toPos.toPath
 #align category_theory.groupoid.free.quiver.hom.to_pos_path Quiver.Hom.toPosPath
 
-/-- Shorthand for the "forward" arrow corresponding to `f` in `paths $ symmetrify V` -/
+/-- Shorthand for the "forward" arrow corresponding to `f` in `paths <| symmetrify V` -/
 abbrev _root_.Quiver.Hom.toNegPath {X Y : V} (f : X ⟶ Y) :
     (CategoryTheory.Paths.categoryPaths <| Quiver.Symmetrify V).Hom Y X :=
   f.toNeg.toPath
chore: space after (#8178)

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

Diff
@@ -112,7 +112,7 @@ theorem congr_comp_reverse {X Y : Paths <| Quiver.Symmetrify V} (p : X ⟶ Y) :
       -- category notation
       change Quotient.CompClosure redStep (q ≫ Quiver.Path.reverse q)
         (Quiver.Path.cons q f ≫ (Quiver.Hom.toPath (Quiver.reverse f)) ≫ (Quiver.Path.reverse q))
-      simp only [←Category.assoc] at this ⊢
+      simp only [← Category.assoc] at this ⊢
       exact this
     · exact ih
 #align category_theory.groupoid.free.congr_comp_reverse CategoryTheory.Groupoid.Free.congr_comp_reverse
chore: tidy various files (#5999)
Diff
@@ -23,10 +23,10 @@ extension as a functor from the free groupoid, and proves uniqueness of this ext
 
 Given the type `V` and a quiver instance on `V`:
 
-- `free_groupoid V`: a type synonym for `V`.
-- `free_groupoid_groupoid`: the `groupoid` instance on `free_groupoid V`.
+- `FreeGroupoid V`: a type synonym for `V`.
+- `FreeGroupoid.instGroupoid`: the `Groupoid` instance on `FreeGroupoid V`.
 - `lift`: the lifting of a prefunctor from `V` to `V'` where `V'` is a groupoid, to a functor.
-  `free_groupoid V ⥤ V'`.
+  `FreeGroupoid V ⥤ V'`.
 - `lift_spec` and `lift_unique`: the proofs that, respectively, `lift` indeed is a lifting
   and is the unique one.
 
@@ -133,12 +133,13 @@ def quotInv {X Y : FreeGroupoid V} (f : X ⟶ Y) : Y ⟶ X :=
     Quot.sound <| congr_reverse pp qq con
 #align category_theory.groupoid.free.quot_inv CategoryTheory.Groupoid.Free.quotInv
 
-instance : Groupoid (FreeGroupoid V) where
+instance _root_.CategoryTheory.FreeGroupoid.instGroupoid : Groupoid (FreeGroupoid V) where
   inv := quotInv
   inv_comp p := Quot.inductionOn p fun pp => congr_reverse_comp pp
   comp_inv p := Quot.inductionOn p fun pp => congr_comp_reverse pp
+#align category_theory.groupoid.free.category_theory.free_groupoid.category_theory.groupoid CategoryTheory.FreeGroupoid.instGroupoid
 
-/-- The inclusion of the quiver on `V` to the underlying quiver on `free_groupoid V`-/
+/-- The inclusion of the quiver on `V` to the underlying quiver on `FreeGroupoid V`-/
 def of (V) [Quiver V] : V ⥤q FreeGroupoid V where
   obj X := ⟨X⟩
   map f := Quot.mk _ f.toPosPath
@@ -153,7 +154,7 @@ section UniversalProperty
 
 variable {V' : Type u'} [Groupoid V'] (φ : V ⥤q V')
 
-/-- The lift of a prefunctor to a groupoid, to a functor from `free_groupoid V` -/
+/-- The lift of a prefunctor to a groupoid, to a functor from `FreeGroupoid V` -/
 def lift (φ : V ⥤q V') : FreeGroupoid V ⥤ V' :=
   Quotient.lift _ (Paths.lift <| Quiver.Symmetrify.lift φ) <| by
     rintro _ _ _ _ ⟨X, Y, f⟩
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
-
-! This file was ported from Lean 3 source module category_theory.groupoid.free_groupoid
-! leanprover-community/mathlib commit 706d88f2b8fdfeb0b22796433d7a6c1a010af9f2
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.CategoryTheory.Category.Basic
 import Mathlib.CategoryTheory.Functor.Basic
@@ -16,6 +11,8 @@ import Mathlib.CategoryTheory.PathCategory
 import Mathlib.CategoryTheory.Quotient
 import Mathlib.Combinatorics.Quiver.Symmetric
 
+#align_import category_theory.groupoid.free_groupoid from "leanprover-community/mathlib"@"706d88f2b8fdfeb0b22796433d7a6c1a010af9f2"
+
 /-!
 # Free groupoid on a quiver
 
feat: port CategoryTheory.Groupoid.FreeGroupoid (#3347)

Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com>

Dependencies 50

51 files ported (100.0%)
17372 lines ported (100.0%)

All dependencies are ported!