linear_algebra.multilinear.finite_dimensionalMathlib.LinearAlgebra.Multilinear.FiniteDimensional

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2022 Oliver Nash. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Oliver Nash
 -/
-import Mathbin.LinearAlgebra.Multilinear.Basic
-import Mathbin.LinearAlgebra.FreeModule.Finite.Matrix
+import LinearAlgebra.Multilinear.Basic
+import LinearAlgebra.FreeModule.Finite.Matrix
 
 #align_import linear_algebra.multilinear.finite_dimensional from "leanprover-community/mathlib"@"50251fd6309cca5ca2e747882ffecd2729f38c5d"
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2022 Oliver Nash. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Oliver Nash
-
-! This file was ported from Lean 3 source module linear_algebra.multilinear.finite_dimensional
-! leanprover-community/mathlib commit 50251fd6309cca5ca2e747882ffecd2729f38c5d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.LinearAlgebra.Multilinear.Basic
 import Mathbin.LinearAlgebra.FreeModule.Finite.Matrix
 
+#align_import linear_algebra.multilinear.finite_dimensional from "leanprover-community/mathlib"@"50251fd6309cca5ca2e747882ffecd2729f38c5d"
+
 /-! # Multilinear maps over finite dimensional spaces
 
 > THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
Diff
@@ -73,13 +73,17 @@ private theorem free_and_finite :
     cases ih fun i => N i.succ
     exact ⟨Module.Free.linearMap _ _ _, Module.Finite.linearMap _ _⟩
 
+#print Module.Finite.multilinearMap /-
 instance Module.Finite.multilinearMap : Module.Finite R (MultilinearMap R M₁ M₂) :=
   free_and_finite.2
 #align module.finite.multilinear_map Module.Finite.multilinearMap
+-/
 
+#print Module.Free.multilinearMap /-
 instance Module.Free.multilinearMap : Module.Free R (MultilinearMap R M₁ M₂) :=
   free_and_finite.1
 #align module.free.multilinear_map Module.Free.multilinearMap
+-/
 
 end MultilinearMap
 
Diff
@@ -73,22 +73,10 @@ private theorem free_and_finite :
     cases ih fun i => N i.succ
     exact ⟨Module.Free.linearMap _ _ _, Module.Finite.linearMap _ _⟩
 
-/- warning: module.finite.multilinear_map -> Module.Finite.multilinearMap is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {R : Type.{u2}} {M₂ : Type.{u3}} {M₁ : ι -> Type.{u4}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : CommRing.{u2} R] [_inst_3 : AddCommGroup.{u3} M₂] [_inst_4 : Module.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)] [_inst_5 : forall (i : ι), AddCommGroup.{u4} (M₁ i)] [_inst_6 : forall (i : ι), Module.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i))] [_inst_7 : Module.Finite.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_8 : Module.Free.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_9 : forall (i : ι), Module.Finite.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (_inst_6 i)] [_inst_10 : forall (i : ι), Module.Free.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (_inst_6 i)], Module.Finite.{u2, max u1 u4 u3} R (MultilinearMap.{u2, u4, u3, u1} R ι M₁ M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_6 i) _inst_4) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (MultilinearMap.addCommMonoid.{u2, u4, u3, u1} R ι M₁ M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_6 i) _inst_4) (MultilinearMap.module.{u4, u3, u1, u2, u2} ι M₁ M₂ (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) R R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => _inst_6 i) _inst_4 _inst_4 (smulCommClass_self.{u2, u3} R M₂ (CommRing.toCommMonoid.{u2} R _inst_2) (MulActionWithZero.toMulAction.{u2, u3} R M₂ (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2))) (AddZeroClass.toHasZero.{u3} M₂ (AddMonoid.toAddZeroClass.{u3} M₂ (AddCommMonoid.toAddMonoid.{u3} M₂ (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)))) (Module.toMulActionWithZero.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4))))
-but is expected to have type
-  forall {ι : Type.{u1}} {R : Type.{u2}} {M₂ : Type.{u3}} {M₁ : ι -> Type.{u4}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : CommRing.{u2} R] [_inst_3 : AddCommGroup.{u3} M₂] [_inst_4 : Module.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)] [_inst_5 : Module.Finite.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_6 : Module.Free.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_7 : forall (i : ι), AddCommGroup.{u4} (M₁ i)] [_inst_8 : forall (i : ι), Module.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i))] [_inst_9 : forall (i : ι), Module.Finite.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (_inst_8 i)] [_inst_10 : forall (i : ι), Module.Free.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (_inst_8 i)], Module.Finite.{u2, max (max u1 u3) u4} R (MultilinearMap.{u2, u4, u3, u1} R ι M₁ M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_8 i) _inst_4) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (MultilinearMap.addCommMonoid.{u2, u4, u3, u1} R ι M₁ M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_8 i) _inst_4) (MultilinearMap.instModuleMultilinearMapAddCommMonoid.{u4, u3, u1, u2, u2} ι M₁ M₂ (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => _inst_8 i) _inst_4 _inst_4 (smulCommClass_self.{u2, u3} R M₂ (CommRing.toCommMonoid.{u2} R _inst_2) (MulActionWithZero.toMulAction.{u2, u3} R M₂ (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2))) (NegZeroClass.toZero.{u3} M₂ (SubNegZeroMonoid.toNegZeroClass.{u3} M₂ (SubtractionMonoid.toSubNegZeroMonoid.{u3} M₂ (SubtractionCommMonoid.toSubtractionMonoid.{u3} M₂ (AddCommGroup.toDivisionAddCommMonoid.{u3} M₂ _inst_3))))) (Module.toMulActionWithZero.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4))))
-Case conversion may be inaccurate. Consider using '#align module.finite.multilinear_map Module.Finite.multilinearMapₓ'. -/
 instance Module.Finite.multilinearMap : Module.Finite R (MultilinearMap R M₁ M₂) :=
   free_and_finite.2
 #align module.finite.multilinear_map Module.Finite.multilinearMap
 
-/- warning: module.free.multilinear_map -> Module.Free.multilinearMap is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {R : Type.{u2}} {M₂ : Type.{u3}} {M₁ : ι -> Type.{u4}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : CommRing.{u2} R] [_inst_3 : AddCommGroup.{u3} M₂] [_inst_4 : Module.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)] [_inst_5 : forall (i : ι), AddCommGroup.{u4} (M₁ i)] [_inst_6 : forall (i : ι), Module.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i))] [_inst_7 : Module.Finite.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_8 : Module.Free.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_9 : forall (i : ι), Module.Finite.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (_inst_6 i)] [_inst_10 : forall (i : ι), Module.Free.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (_inst_6 i)], Module.Free.{u2, max u1 u4 u3} R (MultilinearMap.{u2, u4, u3, u1} R ι M₁ M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_6 i) _inst_4) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (MultilinearMap.addCommMonoid.{u2, u4, u3, u1} R ι M₁ M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_6 i) _inst_4) (MultilinearMap.module.{u4, u3, u1, u2, u2} ι M₁ M₂ (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) R R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => _inst_6 i) _inst_4 _inst_4 (smulCommClass_self.{u2, u3} R M₂ (CommRing.toCommMonoid.{u2} R _inst_2) (MulActionWithZero.toMulAction.{u2, u3} R M₂ (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2))) (AddZeroClass.toHasZero.{u3} M₂ (AddMonoid.toAddZeroClass.{u3} M₂ (AddCommMonoid.toAddMonoid.{u3} M₂ (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)))) (Module.toMulActionWithZero.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4))))
-but is expected to have type
-  forall {ι : Type.{u1}} {R : Type.{u2}} {M₂ : Type.{u3}} {M₁ : ι -> Type.{u4}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : CommRing.{u2} R] [_inst_3 : AddCommGroup.{u3} M₂] [_inst_4 : Module.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)] [_inst_5 : Module.Finite.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_6 : Module.Free.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_7 : forall (i : ι), AddCommGroup.{u4} (M₁ i)] [_inst_8 : forall (i : ι), Module.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i))] [_inst_9 : forall (i : ι), Module.Finite.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (_inst_8 i)] [_inst_10 : forall (i : ι), Module.Free.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (_inst_8 i)], Module.Free.{u2, max (max u1 u3) u4} R (MultilinearMap.{u2, u4, u3, u1} R ι M₁ M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_8 i) _inst_4) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (MultilinearMap.addCommMonoid.{u2, u4, u3, u1} R ι M₁ M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_8 i) _inst_4) (MultilinearMap.instModuleMultilinearMapAddCommMonoid.{u4, u3, u1, u2, u2} ι M₁ M₂ (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => _inst_8 i) _inst_4 _inst_4 (smulCommClass_self.{u2, u3} R M₂ (CommRing.toCommMonoid.{u2} R _inst_2) (MulActionWithZero.toMulAction.{u2, u3} R M₂ (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2))) (NegZeroClass.toZero.{u3} M₂ (SubNegZeroMonoid.toNegZeroClass.{u3} M₂ (SubtractionMonoid.toSubNegZeroMonoid.{u3} M₂ (SubtractionCommMonoid.toSubtractionMonoid.{u3} M₂ (AddCommGroup.toDivisionAddCommMonoid.{u3} M₂ _inst_3))))) (Module.toMulActionWithZero.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4))))
-Case conversion may be inaccurate. Consider using '#align module.free.multilinear_map Module.Free.multilinearMapₓ'. -/
 instance Module.Free.multilinearMap : Module.Free R (MultilinearMap R M₁ M₂) :=
   free_and_finite.1
 #align module.free.multilinear_map Module.Free.multilinearMap
Diff
@@ -72,7 +72,6 @@ private theorem free_and_finite :
           Module.Finite.equiv (multilinearCurryLeftEquiv R N M₂)⟩
     cases ih fun i => N i.succ
     exact ⟨Module.Free.linearMap _ _ _, Module.Finite.linearMap _ _⟩
-#align multilinear_map.free_and_finite multilinear_map.free_and_finite
 
 /- warning: module.finite.multilinear_map -> Module.Finite.multilinearMap is a dubious translation:
 lean 3 declaration is
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Oliver Nash
 
 ! This file was ported from Lean 3 source module linear_algebra.multilinear.finite_dimensional
-! leanprover-community/mathlib commit ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
+! leanprover-community/mathlib commit 50251fd6309cca5ca2e747882ffecd2729f38c5d
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -13,6 +13,9 @@ import Mathbin.LinearAlgebra.FreeModule.Finite.Matrix
 
 /-! # Multilinear maps over finite dimensional spaces
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 The main results are that multilinear maps over finitely-generated, free modules are
 finitely-generated and free.
 
Diff
@@ -71,10 +71,22 @@ private theorem free_and_finite :
     exact ⟨Module.Free.linearMap _ _ _, Module.Finite.linearMap _ _⟩
 #align multilinear_map.free_and_finite multilinear_map.free_and_finite
 
+/- warning: module.finite.multilinear_map -> Module.Finite.multilinearMap is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {R : Type.{u2}} {M₂ : Type.{u3}} {M₁ : ι -> Type.{u4}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : CommRing.{u2} R] [_inst_3 : AddCommGroup.{u3} M₂] [_inst_4 : Module.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)] [_inst_5 : forall (i : ι), AddCommGroup.{u4} (M₁ i)] [_inst_6 : forall (i : ι), Module.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i))] [_inst_7 : Module.Finite.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_8 : Module.Free.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_9 : forall (i : ι), Module.Finite.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (_inst_6 i)] [_inst_10 : forall (i : ι), Module.Free.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (_inst_6 i)], Module.Finite.{u2, max u1 u4 u3} R (MultilinearMap.{u2, u4, u3, u1} R ι M₁ M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_6 i) _inst_4) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (MultilinearMap.addCommMonoid.{u2, u4, u3, u1} R ι M₁ M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_6 i) _inst_4) (MultilinearMap.module.{u4, u3, u1, u2, u2} ι M₁ M₂ (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) R R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => _inst_6 i) _inst_4 _inst_4 (smulCommClass_self.{u2, u3} R M₂ (CommRing.toCommMonoid.{u2} R _inst_2) (MulActionWithZero.toMulAction.{u2, u3} R M₂ (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2))) (AddZeroClass.toHasZero.{u3} M₂ (AddMonoid.toAddZeroClass.{u3} M₂ (AddCommMonoid.toAddMonoid.{u3} M₂ (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)))) (Module.toMulActionWithZero.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4))))
+but is expected to have type
+  forall {ι : Type.{u1}} {R : Type.{u2}} {M₂ : Type.{u3}} {M₁ : ι -> Type.{u4}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : CommRing.{u2} R] [_inst_3 : AddCommGroup.{u3} M₂] [_inst_4 : Module.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)] [_inst_5 : Module.Finite.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_6 : Module.Free.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_7 : forall (i : ι), AddCommGroup.{u4} (M₁ i)] [_inst_8 : forall (i : ι), Module.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i))] [_inst_9 : forall (i : ι), Module.Finite.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (_inst_8 i)] [_inst_10 : forall (i : ι), Module.Free.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (_inst_8 i)], Module.Finite.{u2, max (max u1 u3) u4} R (MultilinearMap.{u2, u4, u3, u1} R ι M₁ M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_8 i) _inst_4) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (MultilinearMap.addCommMonoid.{u2, u4, u3, u1} R ι M₁ M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_8 i) _inst_4) (MultilinearMap.instModuleMultilinearMapAddCommMonoid.{u4, u3, u1, u2, u2} ι M₁ M₂ (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => _inst_8 i) _inst_4 _inst_4 (smulCommClass_self.{u2, u3} R M₂ (CommRing.toCommMonoid.{u2} R _inst_2) (MulActionWithZero.toMulAction.{u2, u3} R M₂ (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2))) (NegZeroClass.toZero.{u3} M₂ (SubNegZeroMonoid.toNegZeroClass.{u3} M₂ (SubtractionMonoid.toSubNegZeroMonoid.{u3} M₂ (SubtractionCommMonoid.toSubtractionMonoid.{u3} M₂ (AddCommGroup.toDivisionAddCommMonoid.{u3} M₂ _inst_3))))) (Module.toMulActionWithZero.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4))))
+Case conversion may be inaccurate. Consider using '#align module.finite.multilinear_map Module.Finite.multilinearMapₓ'. -/
 instance Module.Finite.multilinearMap : Module.Finite R (MultilinearMap R M₁ M₂) :=
   free_and_finite.2
 #align module.finite.multilinear_map Module.Finite.multilinearMap
 
+/- warning: module.free.multilinear_map -> Module.Free.multilinearMap is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {R : Type.{u2}} {M₂ : Type.{u3}} {M₁ : ι -> Type.{u4}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : CommRing.{u2} R] [_inst_3 : AddCommGroup.{u3} M₂] [_inst_4 : Module.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)] [_inst_5 : forall (i : ι), AddCommGroup.{u4} (M₁ i)] [_inst_6 : forall (i : ι), Module.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i))] [_inst_7 : Module.Finite.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_8 : Module.Free.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_9 : forall (i : ι), Module.Finite.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (_inst_6 i)] [_inst_10 : forall (i : ι), Module.Free.{u2, u4} R (M₁ i) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (_inst_6 i)], Module.Free.{u2, max u1 u4 u3} R (MultilinearMap.{u2, u4, u3, u1} R ι M₁ M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_6 i) _inst_4) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (MultilinearMap.addCommMonoid.{u2, u4, u3, u1} R ι M₁ M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_6 i) _inst_4) (MultilinearMap.module.{u4, u3, u1, u2, u2} ι M₁ M₂ (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_5 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) R R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (fun (i : ι) => _inst_6 i) _inst_4 _inst_4 (smulCommClass_self.{u2, u3} R M₂ (CommRing.toCommMonoid.{u2} R _inst_2) (MulActionWithZero.toMulAction.{u2, u3} R M₂ (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2))) (AddZeroClass.toHasZero.{u3} M₂ (AddMonoid.toAddZeroClass.{u3} M₂ (AddCommMonoid.toAddMonoid.{u3} M₂ (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)))) (Module.toMulActionWithZero.{u2, u3} R M₂ (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4))))
+but is expected to have type
+  forall {ι : Type.{u1}} {R : Type.{u2}} {M₂ : Type.{u3}} {M₁ : ι -> Type.{u4}} [_inst_1 : Finite.{succ u1} ι] [_inst_2 : CommRing.{u2} R] [_inst_3 : AddCommGroup.{u3} M₂] [_inst_4 : Module.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3)] [_inst_5 : Module.Finite.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_6 : Module.Free.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4] [_inst_7 : forall (i : ι), AddCommGroup.{u4} (M₁ i)] [_inst_8 : forall (i : ι), Module.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i))] [_inst_9 : forall (i : ι), Module.Finite.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (_inst_8 i)] [_inst_10 : forall (i : ι), Module.Free.{u2, u4} R (M₁ i) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (_inst_8 i)], Module.Free.{u2, max (max u1 u3) u4} R (MultilinearMap.{u2, u4, u3, u1} R ι M₁ M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_8 i) _inst_4) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (MultilinearMap.addCommMonoid.{u2, u4, u3, u1} R ι M₁ M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) (fun (i : ι) => _inst_8 i) _inst_4) (MultilinearMap.instModuleMultilinearMapAddCommMonoid.{u4, u3, u1, u2, u2} ι M₁ M₂ (fun (i : ι) => AddCommGroup.toAddCommMonoid.{u4} (M₁ i) (_inst_7 i)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (fun (i : ι) => _inst_8 i) _inst_4 _inst_4 (smulCommClass_self.{u2, u3} R M₂ (CommRing.toCommMonoid.{u2} R _inst_2) (MulActionWithZero.toMulAction.{u2, u3} R M₂ (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2))) (NegZeroClass.toZero.{u3} M₂ (SubNegZeroMonoid.toNegZeroClass.{u3} M₂ (SubtractionMonoid.toSubNegZeroMonoid.{u3} M₂ (SubtractionCommMonoid.toSubtractionMonoid.{u3} M₂ (AddCommGroup.toDivisionAddCommMonoid.{u3} M₂ _inst_3))))) (Module.toMulActionWithZero.{u2, u3} R M₂ (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_2)) (AddCommGroup.toAddCommMonoid.{u3} M₂ _inst_3) _inst_4))))
+Case conversion may be inaccurate. Consider using '#align module.free.multilinear_map Module.Free.multilinearMapₓ'. -/
 instance Module.Free.multilinearMap : Module.Free R (MultilinearMap R M₁ M₂) :=
   free_and_finite.1
 #align module.free.multilinear_map Module.Free.multilinearMap
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Oliver Nash
 
 ! This file was ported from Lean 3 source module linear_algebra.multilinear.finite_dimensional
-! leanprover-community/mathlib commit bf2a9e0156cc11bf44893ea1b4b2da8ae655c901
+! leanprover-community/mathlib commit ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -28,7 +28,7 @@ namespace MultilinearMap
 
 variable {ι R M₂ : Type _} {M₁ : ι → Type _}
 
-variable [DecidableEq ι] [Finite ι]
+variable [Finite ι]
 
 variable [CommRing R] [AddCommGroup M₂] [Module R M₂]
 
Diff
@@ -52,12 +52,12 @@ private theorem free_and_finite :
     cases nonempty_fintype ι
     cases this _ (M₁ ∘ (Fintype.equivFin ι).symm)
     have e := dom_dom_congr_linear_equiv' R M₁ M₂ (Fintype.equivFin ι)
-    exact ⟨Module.Free.ofEquiv e.symm, Module.Finite.equiv e.symm⟩
+    exact ⟨Module.Free.of_equiv e.symm, Module.Finite.equiv e.symm⟩
   intro n N _ _ _ _
   induction' n with n ih
   ·
     exact
-      ⟨Module.Free.ofEquiv (const_linear_equiv_of_is_empty R N M₂),
+      ⟨Module.Free.of_equiv (const_linear_equiv_of_is_empty R N M₂),
         Module.Finite.equiv (const_linear_equiv_of_is_empty R N M₂)⟩
   · suffices
       Module.Free R (N 0 →ₗ[R] MultilinearMap R (fun i : Fin n => N i.succ) M₂) ∧
@@ -65,7 +65,7 @@ private theorem free_and_finite :
       by
       cases this
       exact
-        ⟨Module.Free.ofEquiv (multilinearCurryLeftEquiv R N M₂),
+        ⟨Module.Free.of_equiv (multilinearCurryLeftEquiv R N M₂),
           Module.Finite.equiv (multilinearCurryLeftEquiv R N M₂)⟩
     cases ih fun i => N i.succ
     exact ⟨Module.Free.linearMap _ _ _, Module.Finite.linearMap _ _⟩

Changes in mathlib4

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

Empty lines were removed by executing the following Python script twice

import os
import re


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

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

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

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -24,11 +24,8 @@ there.
 namespace MultilinearMap
 
 variable {ι R M₂ : Type*} {M₁ : ι → Type*}
-
 variable [Finite ι]
-
 variable [CommRing R] [AddCommGroup M₂] [Module R M₂]
-
 variable [Module.Finite R M₂] [Module.Free R M₂]
 
 -- Porting note: split out from `free_and_finite` because of inscrutable typeclass errors
@@ -51,7 +48,6 @@ private theorem free_and_finite_fin (n : ℕ) (N : Fin n → Type*) [∀ i, AddC
     exact ⟨Module.Free.linearMap _ _ _ _, Module.Finite.linearMap _ _ _ _⟩
 
 variable [∀ i, AddCommGroup (M₁ i)] [∀ i, Module R (M₁ i)]
-
 variable [∀ i, Module.Finite R (M₁ i)] [∀ i, Module.Free R (M₁ i)]
 
 -- the induction requires us to show both at once
feat(LinearAlgebra): generalize results about Module.rank of LinearMap. (#9677)

LinearAlgebra/LinearIndependent: generalize linearIndependent_algHom_toLinearMap(') to allow different domain and codomain of the AlgHom.

LinearAlgebra/Basic: add LinearEquiv.congrLeft that works for two rings with commuting actions on the codomain.

LinearAlgebra/FreeModule/Finite/Matrix: generalize Module.Free.linearMap, Module.Finite.linearMap, and FiniteDimensional.finrank_linearMap to work with two different rings that may be noncommutative. Add FiniteDimensional.rank_linearMap, FiniteDimensional.(fin)rank_linearMap_self, and card/cardinal_mk_algHom_le_rank.

FieldTheory/Tower: remove the instance LinearMap.finite_dimensional'' which becomes redundant; mark finrank_linear_map' as deprecated (superseded by finrank_linearMap_self.

Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>

Diff
@@ -48,7 +48,7 @@ private theorem free_and_finite_fin (n : ℕ) (N : Fin n → Type*) [∀ i, AddC
         ⟨Module.Free.of_equiv (multilinearCurryLeftEquiv R N M₂),
           Module.Finite.equiv (multilinearCurryLeftEquiv R N M₂)⟩
     cases ih fun i => N i.succ
-    exact ⟨Module.Free.linearMap _ _ _, Module.Finite.linearMap _ _⟩
+    exact ⟨Module.Free.linearMap _ _ _ _, Module.Finite.linearMap _ _ _ _⟩
 
 variable [∀ i, AddCommGroup (M₁ i)] [∀ i, Module R (M₁ i)]
 
feat(LinearAlgebra/Multilinear): generalize some defs to Semiring (#7284)

Also cleanup FunLike-related code and move code about Semirings to a new section.

For linear equivalences, generalization to a Semiring required introducing a new Semiring argument, so that R-linear objects are related by an S-linear equivalence.

Diff
@@ -38,8 +38,8 @@ private theorem free_and_finite_fin (n : ℕ) (N : Fin n → Type*) [∀ i, AddC
   induction' n with n ih
   · haveI : IsEmpty (Fin Nat.zero) := inferInstanceAs (IsEmpty (Fin 0))
     exact
-      ⟨Module.Free.of_equiv (constLinearEquivOfIsEmpty R N M₂),
-        Module.Finite.equiv (constLinearEquivOfIsEmpty R N M₂)⟩
+      ⟨Module.Free.of_equiv (constLinearEquivOfIsEmpty R R N M₂),
+        Module.Finite.equiv (constLinearEquivOfIsEmpty R R N M₂)⟩
   · suffices
       Module.Free R (N 0 →ₗ[R] MultilinearMap R (fun i : Fin n => N i.succ) M₂) ∧
         Module.Finite R (N 0 →ₗ[R] MultilinearMap R (fun i : Fin n => N i.succ) M₂) by
@@ -61,7 +61,7 @@ private theorem free_and_finite :
   have := @free_and_finite_fin R M₂ _ _ _ _ _ (Fintype.card ι)
     (fun x => M₁ ((Fintype.equivFin ι).symm x))
   cases' this with l r
-  have e := domDomCongrLinearEquiv' R M₁ M₂ (Fintype.equivFin ι)
+  have e := domDomCongrLinearEquiv' R R M₁ M₂ (Fintype.equivFin ι)
   exact ⟨Module.Free.of_equiv e.symm, Module.Finite.equiv e.symm⟩
 
 instance _root_.Module.Finite.multilinearMap : Module.Finite R (MultilinearMap R M₁ M₂) :=
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
@@ -23,7 +23,7 @@ there.
 
 namespace MultilinearMap
 
-variable {ι R M₂ : Type _} {M₁ : ι → Type _}
+variable {ι R M₂ : Type*} {M₁ : ι → Type*}
 
 variable [Finite ι]
 
@@ -32,7 +32,7 @@ variable [CommRing R] [AddCommGroup M₂] [Module R M₂]
 variable [Module.Finite R M₂] [Module.Free R M₂]
 
 -- Porting note: split out from `free_and_finite` because of inscrutable typeclass errors
-private theorem free_and_finite_fin (n : ℕ) (N : Fin n → Type _) [∀ i, AddCommGroup (N i)]
+private theorem free_and_finite_fin (n : ℕ) (N : Fin n → Type*) [∀ i, AddCommGroup (N i)]
     [∀ i, Module R (N i)] [∀ i, Module.Finite R (N i)] [∀ i, Module.Free R (N i)] :
     Module.Free R (MultilinearMap R N M₂) ∧ Module.Finite R (MultilinearMap R N M₂) := by
   induction' n with n ih
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2022 Oliver Nash. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Oliver Nash
-
-! This file was ported from Lean 3 source module linear_algebra.multilinear.finite_dimensional
-! leanprover-community/mathlib commit ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.LinearAlgebra.Multilinear.Basic
 import Mathlib.LinearAlgebra.FreeModule.Finite.Matrix
 
+#align_import linear_algebra.multilinear.finite_dimensional from "leanprover-community/mathlib"@"ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a"
+
 /-! # Multilinear maps over finite dimensional spaces
 
 The main results are that multilinear maps over finitely-generated, free modules are
feat: port LinearAlgebra.Multilinear.FiniteDimensional (#3822)

Dependencies 10 + 520

521 files ported (98.1%)
216636 lines ported (98.4%)
Show graph

The unported dependencies are