linear_algebra.multilinear.finite_dimensional
⟷
Mathlib.LinearAlgebra.Multilinear.FiniteDimensional
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/f8c79b0a623404854a2902b836eac32156fd7712
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
@@ -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₂]
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -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 _ _⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
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)
@@ -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
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>
@@ -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)]
Semiring
(#7284)
Also cleanup FunLike
-related code
and move code about Semiring
s 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.
@@ -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₂) :=
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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
@@ -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
The unported dependencies are