linear_algebra.multilinear.basis
⟷
Mathlib.LinearAlgebra.Multilinear.Basis
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) 2021 Joseph Myers. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Myers
-/
-import Mathbin.LinearAlgebra.Basis
-import Mathbin.LinearAlgebra.Multilinear.Basic
+import LinearAlgebra.Basis
+import LinearAlgebra.Multilinear.Basic
#align_import linear_algebra.multilinear.basis from "leanprover-community/mathlib"@"19cb3751e5e9b3d97adb51023949c50c13b5fdfd"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2021 Joseph Myers. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Myers
-
-! This file was ported from Lean 3 source module linear_algebra.multilinear.basis
-! leanprover-community/mathlib commit 19cb3751e5e9b3d97adb51023949c50c13b5fdfd
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.LinearAlgebra.Basis
import Mathbin.LinearAlgebra.Multilinear.Basic
+#align_import linear_algebra.multilinear.basis from "leanprover-community/mathlib"@"19cb3751e5e9b3d97adb51023949c50c13b5fdfd"
+
/-!
# Multilinear maps in relation to bases.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -35,6 +35,7 @@ variable [CommSemiring R] [AddCommMonoid M₂] [AddCommMonoid M₃] [∀ i, AddC
variable [∀ i, Module R (M i)] [Module R M₂] [Module R M₃]
+#print Basis.ext_multilinear_fin /-
/-- Two multilinear maps indexed by `fin n` are equal if they are equal when all arguments are
basis vectors. -/
theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n → Type _}
@@ -57,7 +58,9 @@ theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n
dsimp [Fin.tail]
rw [Fin.cons_succ, Fin.cons_succ]
#align basis.ext_multilinear_fin Basis.ext_multilinear_fin
+-/
+#print Basis.ext_multilinear /-
/-- Two multilinear maps indexed by a `fintype` are equal if they are equal when all arguments
are basis vectors. Unlike `basis.ext_multilinear_fin`, this only uses a single basis; a
dependently-typed version would still be true, but the proof would need a dependently-typed
@@ -69,4 +72,5 @@ theorem Basis.ext_multilinear [Finite ι] {f g : MultilinearMap R (fun i : ι =>
(dom_dom_congr_eq_iff (Fintype.equivFin ι) f g).mp
(Basis.ext_multilinear_fin (fun i => e) fun i => h (i ∘ _))
#align basis.ext_multilinear Basis.ext_multilinear
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -35,9 +35,6 @@ variable [CommSemiring R] [AddCommMonoid M₂] [AddCommMonoid M₃] [∀ i, AddC
variable [∀ i, Module R (M i)] [Module R M₂] [Module R M₃]
-/- warning: basis.ext_multilinear_fin -> Basis.ext_multilinear_fin is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align basis.ext_multilinear_fin Basis.ext_multilinear_finₓ'. -/
/-- Two multilinear maps indexed by `fin n` are equal if they are equal when all arguments are
basis vectors. -/
theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n → Type _}
@@ -61,9 +58,6 @@ theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n
rw [Fin.cons_succ, Fin.cons_succ]
#align basis.ext_multilinear_fin Basis.ext_multilinear_fin
-/- warning: basis.ext_multilinear -> Basis.ext_multilinear is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align basis.ext_multilinear Basis.ext_multilinearₓ'. -/
/-- Two multilinear maps indexed by a `fintype` are equal if they are equal when all arguments
are basis vectors. Unlike `basis.ext_multilinear_fin`, this only uses a single basis; a
dependently-typed version would still be true, but the proof would need a dependently-typed
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -69,9 +69,8 @@ are basis vectors. Unlike `basis.ext_multilinear_fin`, this only uses a single b
dependently-typed version would still be true, but the proof would need a dependently-typed
version of `dom_dom_congr`. -/
theorem Basis.ext_multilinear [Finite ι] {f g : MultilinearMap R (fun i : ι => M₂) M₃} {ι₁ : Type _}
- (e : Basis ι₁ R M₂) (h : ∀ v : ι → ι₁, (f fun i => e (v i)) = g fun i => e (v i)) : f = g :=
- by
- cases nonempty_fintype ι
+ (e : Basis ι₁ R M₂) (h : ∀ v : ι → ι₁, (f fun i => e (v i)) = g fun i => e (v i)) : f = g := by
+ cases nonempty_fintype ι;
exact
(dom_dom_congr_eq_iff (Fintype.equivFin ι) f g).mp
(Basis.ext_multilinear_fin (fun i => e) fun i => h (i ∘ _))
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -36,10 +36,7 @@ variable [CommSemiring R] [AddCommMonoid M₂] [AddCommMonoid M₃] [∀ i, AddC
variable [∀ i, Module R (M i)] [Module R M₂] [Module R M₃]
/- warning: basis.ext_multilinear_fin -> Basis.ext_multilinear_fin is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {n : Nat} {M : (Fin n) -> Type.{u2}} {M₂ : Type.{u3}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_4 : forall (i : Fin n), AddCommMonoid.{u2} (M i)] [_inst_5 : forall (i : Fin n), Module.{u1, u2} R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i)] [_inst_6 : Module.{u1, u3} R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] {f : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {g : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {ι₁ : (Fin n) -> Type.{u4}} (e : forall (i : Fin n), Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)), (forall (v : forall (i : Fin n), ι₁ i), Eq.{succ u3} M₂ (coeFn.{max 1 (succ u2) (succ u3), max (succ u2) (succ u3)} (MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (fun (f : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) => (forall (i : Fin n), M i) -> M₂) (MultilinearMap.hasCoeToFun.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f (fun (i : Fin n) => coeFn.{max (succ u4) (succ u1) (succ u2), max (succ u4) (succ u2)} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (fun (_x : Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) => (ι₁ i) -> (M i)) (FunLike.hasCoeToFun.{max (succ u4) (succ u1) (succ u2), succ u4, succ u2} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => M i) (Basis.funLike.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i))) (e i) (v i))) (coeFn.{max 1 (succ u2) (succ u3), max (succ u2) (succ u3)} (MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (fun (f : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) => (forall (i : Fin n), M i) -> M₂) (MultilinearMap.hasCoeToFun.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) g (fun (i : Fin n) => coeFn.{max (succ u4) (succ u1) (succ u2), max (succ u4) (succ u2)} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (fun (_x : Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) => (ι₁ i) -> (M i)) (FunLike.hasCoeToFun.{max (succ u4) (succ u1) (succ u2), succ u4, succ u2} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => M i) (Basis.funLike.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i))) (e i) (v i)))) -> (Eq.{max 1 (succ u2) (succ u3)} (MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f g)
-but is expected to have type
- forall {R : Type.{u4}} {n : Nat} {M : (Fin n) -> Type.{u3}} {M₂ : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u2} M₂] [_inst_4 : forall (i : Fin n), AddCommMonoid.{u3} (M i)] [_inst_5 : forall (i : Fin n), Module.{u4, u3} R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i)] [_inst_6 : Module.{u4, u2} R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] {f : MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {g : MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {ι₁ : (Fin n) -> Type.{u1}} (e : forall (i : Fin n), Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)), (forall (v : forall (i : Fin n), ι₁ i), Eq.{succ u2} ((fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : forall (i : Fin n), M i) => M₂) (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (a : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) a) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i))) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (forall (i : Fin n), M i) (fun (f : forall (i : Fin n), M i) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : forall (i : Fin n), M i) => M₂) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) _x) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i))) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (forall (i : Fin n), M i) (fun (f : forall (i : Fin n), M i) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : forall (i : Fin n), M i) => M₂) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) g (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) _x) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i)))) -> (Eq.{max (succ u3) (succ u2)} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f g)
+<too large>
Case conversion may be inaccurate. Consider using '#align basis.ext_multilinear_fin Basis.ext_multilinear_finₓ'. -/
/-- Two multilinear maps indexed by `fin n` are equal if they are equal when all arguments are
basis vectors. -/
@@ -65,10 +62,7 @@ theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n
#align basis.ext_multilinear_fin Basis.ext_multilinear_fin
/- warning: basis.ext_multilinear -> Basis.ext_multilinear is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {ι : Type.{u2}} {M₂ : Type.{u3}} {M₃ : Type.{u4}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_3 : AddCommMonoid.{u4} M₃] [_inst_6 : Module.{u1, u3} R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_7 : Module.{u1, u4} R M₃ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3] [_inst_8 : Finite.{succ u2} ι] {f : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {g : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {ι₁ : Type.{u5}} (e : Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6), (forall (v : ι -> ι₁), Eq.{succ u4} M₃ (coeFn.{max (succ u2) (succ u3) (succ u4), max (max (succ u2) (succ u3)) (succ u4)} (MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (fun (f : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) => (ι -> M₂) -> M₃) (MultilinearMap.hasCoeToFun.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f (fun (i : ι) => coeFn.{max (succ u5) (succ u1) (succ u3), max (succ u5) (succ u3)} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) (fun (_x : Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) => ι₁ -> M₂) (FunLike.hasCoeToFun.{max (succ u5) (succ u1) (succ u3), succ u5, succ u3} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => M₂) (Basis.funLike.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6)) e (v i))) (coeFn.{max (succ u2) (succ u3) (succ u4), max (max (succ u2) (succ u3)) (succ u4)} (MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (fun (f : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) => (ι -> M₂) -> M₃) (MultilinearMap.hasCoeToFun.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) g (fun (i : ι) => coeFn.{max (succ u5) (succ u1) (succ u3), max (succ u5) (succ u3)} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) (fun (_x : Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) => ι₁ -> M₂) (FunLike.hasCoeToFun.{max (succ u5) (succ u1) (succ u3), succ u5, succ u3} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => M₂) (Basis.funLike.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6)) e (v i)))) -> (Eq.{max (succ u2) (succ u3) (succ u4)} (MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f g)
-but is expected to have type
- forall {R : Type.{u4}} {ι : Type.{u5}} {M₂ : Type.{u3}} {M₃ : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_3 : AddCommMonoid.{u2} M₃] [_inst_6 : Module.{u4, u3} R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] [_inst_7 : Module.{u4, u2} R M₃ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3] [_inst_8 : Finite.{succ u5} ι] {f : MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {g : MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {ι₁ : Type.{u1}} (e : Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6), (forall (v : ι -> ι₁), Eq.{succ u2} ((fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : ι -> M₂) => M₃) (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (a : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) a) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i))) (FunLike.coe.{max (max (succ u5) (succ u3)) (succ u2), max (succ u5) (succ u3), succ u2} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basis._hyg.901 : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (ι -> M₂) (fun (f : ι -> M₂) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : ι -> M₂) => M₃) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) _x) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i))) (FunLike.coe.{max (max (succ u5) (succ u3)) (succ u2), max (succ u5) (succ u3), succ u2} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basis._hyg.913 : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (ι -> M₂) (fun (f : ι -> M₂) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : ι -> M₂) => M₃) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) g (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) _x) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i)))) -> (Eq.{max (max (succ u5) (succ u3)) (succ u2)} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f g)
+<too large>
Case conversion may be inaccurate. Consider using '#align basis.ext_multilinear Basis.ext_multilinearₓ'. -/
/-- Two multilinear maps indexed by a `fintype` are equal if they are equal when all arguments
are basis vectors. Unlike `basis.ext_multilinear_fin`, this only uses a single basis; a
mathlib commit https://github.com/leanprover-community/mathlib/commit/09079525fd01b3dda35e96adaa08d2f943e1648c
@@ -39,7 +39,7 @@ variable [∀ i, Module R (M i)] [Module R M₂] [Module R M₃]
lean 3 declaration is
forall {R : Type.{u1}} {n : Nat} {M : (Fin n) -> Type.{u2}} {M₂ : Type.{u3}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_4 : forall (i : Fin n), AddCommMonoid.{u2} (M i)] [_inst_5 : forall (i : Fin n), Module.{u1, u2} R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i)] [_inst_6 : Module.{u1, u3} R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] {f : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {g : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {ι₁ : (Fin n) -> Type.{u4}} (e : forall (i : Fin n), Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)), (forall (v : forall (i : Fin n), ι₁ i), Eq.{succ u3} M₂ (coeFn.{max 1 (succ u2) (succ u3), max (succ u2) (succ u3)} (MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (fun (f : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) => (forall (i : Fin n), M i) -> M₂) (MultilinearMap.hasCoeToFun.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f (fun (i : Fin n) => coeFn.{max (succ u4) (succ u1) (succ u2), max (succ u4) (succ u2)} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (fun (_x : Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) => (ι₁ i) -> (M i)) (FunLike.hasCoeToFun.{max (succ u4) (succ u1) (succ u2), succ u4, succ u2} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => M i) (Basis.funLike.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i))) (e i) (v i))) (coeFn.{max 1 (succ u2) (succ u3), max (succ u2) (succ u3)} (MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (fun (f : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) => (forall (i : Fin n), M i) -> M₂) (MultilinearMap.hasCoeToFun.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) g (fun (i : Fin n) => coeFn.{max (succ u4) (succ u1) (succ u2), max (succ u4) (succ u2)} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (fun (_x : Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) => (ι₁ i) -> (M i)) (FunLike.hasCoeToFun.{max (succ u4) (succ u1) (succ u2), succ u4, succ u2} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => M i) (Basis.funLike.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i))) (e i) (v i)))) -> (Eq.{max 1 (succ u2) (succ u3)} (MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f g)
but is expected to have type
- forall {R : Type.{u4}} {n : Nat} {M : (Fin n) -> Type.{u3}} {M₂ : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u2} M₂] [_inst_4 : forall (i : Fin n), AddCommMonoid.{u3} (M i)] [_inst_5 : forall (i : Fin n), Module.{u4, u3} R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i)] [_inst_6 : Module.{u4, u2} R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] {f : MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {g : MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {ι₁ : (Fin n) -> Type.{u1}} (e : forall (i : Fin n), Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)), (forall (v : forall (i : Fin n), ι₁ i), Eq.{succ u2} ((fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : forall (i : Fin n), M i) => M₂) (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (a : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) a) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i))) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (forall (i : Fin n), M i) (fun (f : forall (i : Fin n), M i) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : forall (i : Fin n), M i) => M₂) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) _x) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i))) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (forall (i : Fin n), M i) (fun (f : forall (i : Fin n), M i) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : forall (i : Fin n), M i) => M₂) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) g (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) _x) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i)))) -> (Eq.{max (succ u3) (succ u2)} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f g)
+ forall {R : Type.{u4}} {n : Nat} {M : (Fin n) -> Type.{u3}} {M₂ : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u2} M₂] [_inst_4 : forall (i : Fin n), AddCommMonoid.{u3} (M i)] [_inst_5 : forall (i : Fin n), Module.{u4, u3} R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i)] [_inst_6 : Module.{u4, u2} R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] {f : MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {g : MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {ι₁ : (Fin n) -> Type.{u1}} (e : forall (i : Fin n), Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)), (forall (v : forall (i : Fin n), ι₁ i), Eq.{succ u2} ((fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : forall (i : Fin n), M i) => M₂) (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (a : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) a) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i))) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (forall (i : Fin n), M i) (fun (f : forall (i : Fin n), M i) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : forall (i : Fin n), M i) => M₂) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) _x) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i))) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (forall (i : Fin n), M i) (fun (f : forall (i : Fin n), M i) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : forall (i : Fin n), M i) => M₂) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) g (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) _x) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i)))) -> (Eq.{max (succ u3) (succ u2)} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f g)
Case conversion may be inaccurate. Consider using '#align basis.ext_multilinear_fin Basis.ext_multilinear_finₓ'. -/
/-- Two multilinear maps indexed by `fin n` are equal if they are equal when all arguments are
basis vectors. -/
@@ -68,7 +68,7 @@ theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n
lean 3 declaration is
forall {R : Type.{u1}} {ι : Type.{u2}} {M₂ : Type.{u3}} {M₃ : Type.{u4}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_3 : AddCommMonoid.{u4} M₃] [_inst_6 : Module.{u1, u3} R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_7 : Module.{u1, u4} R M₃ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3] [_inst_8 : Finite.{succ u2} ι] {f : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {g : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {ι₁ : Type.{u5}} (e : Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6), (forall (v : ι -> ι₁), Eq.{succ u4} M₃ (coeFn.{max (succ u2) (succ u3) (succ u4), max (max (succ u2) (succ u3)) (succ u4)} (MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (fun (f : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) => (ι -> M₂) -> M₃) (MultilinearMap.hasCoeToFun.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f (fun (i : ι) => coeFn.{max (succ u5) (succ u1) (succ u3), max (succ u5) (succ u3)} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) (fun (_x : Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) => ι₁ -> M₂) (FunLike.hasCoeToFun.{max (succ u5) (succ u1) (succ u3), succ u5, succ u3} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => M₂) (Basis.funLike.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6)) e (v i))) (coeFn.{max (succ u2) (succ u3) (succ u4), max (max (succ u2) (succ u3)) (succ u4)} (MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (fun (f : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) => (ι -> M₂) -> M₃) (MultilinearMap.hasCoeToFun.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) g (fun (i : ι) => coeFn.{max (succ u5) (succ u1) (succ u3), max (succ u5) (succ u3)} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) (fun (_x : Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) => ι₁ -> M₂) (FunLike.hasCoeToFun.{max (succ u5) (succ u1) (succ u3), succ u5, succ u3} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => M₂) (Basis.funLike.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6)) e (v i)))) -> (Eq.{max (succ u2) (succ u3) (succ u4)} (MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f g)
but is expected to have type
- forall {R : Type.{u4}} {ι : Type.{u5}} {M₂ : Type.{u3}} {M₃ : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_3 : AddCommMonoid.{u2} M₃] [_inst_6 : Module.{u4, u3} R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] [_inst_7 : Module.{u4, u2} R M₃ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3] [_inst_8 : Finite.{succ u5} ι] {f : MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {g : MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {ι₁ : Type.{u1}} (e : Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6), (forall (v : ι -> ι₁), Eq.{succ u2} ((fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : ι -> M₂) => M₃) (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (a : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) a) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i))) (FunLike.coe.{max (max (succ u5) (succ u3)) (succ u2), max (succ u5) (succ u3), succ u2} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basis._hyg.901 : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (ι -> M₂) (fun (f : ι -> M₂) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : ι -> M₂) => M₃) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) _x) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i))) (FunLike.coe.{max (max (succ u5) (succ u3)) (succ u2), max (succ u5) (succ u3), succ u2} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basis._hyg.913 : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (ι -> M₂) (fun (f : ι -> M₂) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : ι -> M₂) => M₃) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) g (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) _x) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i)))) -> (Eq.{max (max (succ u5) (succ u3)) (succ u2)} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f g)
+ forall {R : Type.{u4}} {ι : Type.{u5}} {M₂ : Type.{u3}} {M₃ : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_3 : AddCommMonoid.{u2} M₃] [_inst_6 : Module.{u4, u3} R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] [_inst_7 : Module.{u4, u2} R M₃ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3] [_inst_8 : Finite.{succ u5} ι] {f : MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {g : MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {ι₁ : Type.{u1}} (e : Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6), (forall (v : ι -> ι₁), Eq.{succ u2} ((fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : ι -> M₂) => M₃) (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (a : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) a) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i))) (FunLike.coe.{max (max (succ u5) (succ u3)) (succ u2), max (succ u5) (succ u3), succ u2} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basis._hyg.901 : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (ι -> M₂) (fun (f : ι -> M₂) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : ι -> M₂) => M₃) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) _x) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i))) (FunLike.coe.{max (max (succ u5) (succ u3)) (succ u2), max (succ u5) (succ u3), succ u2} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basis._hyg.913 : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (ι -> M₂) (fun (f : ι -> M₂) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.418 : ι -> M₂) => M₃) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) g (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) _x) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i)))) -> (Eq.{max (max (succ u5) (succ u3)) (succ u2)} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f g)
Case conversion may be inaccurate. Consider using '#align basis.ext_multilinear Basis.ext_multilinearₓ'. -/
/-- Two multilinear maps indexed by a `fintype` are equal if they are equal when all arguments
are basis vectors. Unlike `basis.ext_multilinear_fin`, this only uses a single basis; a
mathlib commit https://github.com/leanprover-community/mathlib/commit/284fdd2962e67d2932fa3a79ce19fcf92d38e228
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Myers
! This file was ported from Lean 3 source module linear_algebra.multilinear.basis
-! leanprover-community/mathlib commit ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
+! leanprover-community/mathlib commit 19cb3751e5e9b3d97adb51023949c50c13b5fdfd
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.LinearAlgebra.Multilinear.Basic
/-!
# Multilinear maps in relation to bases.
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file proves lemmas about the action of multilinear maps on basis vectors.
## TODO
mathlib commit https://github.com/leanprover-community/mathlib/commit/5ec62c8106221a3f9160e4e4fcc3eed79fe213e9
@@ -32,6 +32,12 @@ variable [CommSemiring R] [AddCommMonoid M₂] [AddCommMonoid M₃] [∀ i, AddC
variable [∀ i, Module R (M i)] [Module R M₂] [Module R M₃]
+/- warning: basis.ext_multilinear_fin -> Basis.ext_multilinear_fin is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {n : Nat} {M : (Fin n) -> Type.{u2}} {M₂ : Type.{u3}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_4 : forall (i : Fin n), AddCommMonoid.{u2} (M i)] [_inst_5 : forall (i : Fin n), Module.{u1, u2} R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i)] [_inst_6 : Module.{u1, u3} R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] {f : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {g : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {ι₁ : (Fin n) -> Type.{u4}} (e : forall (i : Fin n), Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)), (forall (v : forall (i : Fin n), ι₁ i), Eq.{succ u3} M₂ (coeFn.{max 1 (succ u2) (succ u3), max (succ u2) (succ u3)} (MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (fun (f : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) => (forall (i : Fin n), M i) -> M₂) (MultilinearMap.hasCoeToFun.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f (fun (i : Fin n) => coeFn.{max (succ u4) (succ u1) (succ u2), max (succ u4) (succ u2)} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (fun (_x : Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) => (ι₁ i) -> (M i)) (FunLike.hasCoeToFun.{max (succ u4) (succ u1) (succ u2), succ u4, succ u2} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => M i) (Basis.funLike.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i))) (e i) (v i))) (coeFn.{max 1 (succ u2) (succ u3), max (succ u2) (succ u3)} (MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (fun (f : MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) => (forall (i : Fin n), M i) -> M₂) (MultilinearMap.hasCoeToFun.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) g (fun (i : Fin n) => coeFn.{max (succ u4) (succ u1) (succ u2), max (succ u4) (succ u2)} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (fun (_x : Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) => (ι₁ i) -> (M i)) (FunLike.hasCoeToFun.{max (succ u4) (succ u1) (succ u2), succ u4, succ u2} (Basis.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => M i) (Basis.funLike.{u4, u1, u2} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u1} R _inst_1) (_inst_4 i) (_inst_5 i))) (e i) (v i)))) -> (Eq.{max 1 (succ u2) (succ u3)} (MultilinearMap.{u1, u2, u3, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f g)
+but is expected to have type
+ forall {R : Type.{u4}} {n : Nat} {M : (Fin n) -> Type.{u3}} {M₂ : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u2} M₂] [_inst_4 : forall (i : Fin n), AddCommMonoid.{u3} (M i)] [_inst_5 : forall (i : Fin n), Module.{u4, u3} R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i)] [_inst_6 : Module.{u4, u2} R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] {f : MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {g : MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6} {ι₁ : (Fin n) -> Type.{u1}} (e : forall (i : Fin n), Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)), (forall (v : forall (i : Fin n), ι₁ i), Eq.{succ u2} ((fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : forall (i : Fin n), M i) => M₂) (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (a : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) a) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i))) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (forall (i : Fin n), M i) (fun (f : forall (i : Fin n), M i) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : forall (i : Fin n), M i) => M₂) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) _x) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i))) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) (forall (i : Fin n), M i) (fun (f : forall (i : Fin n), M i) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : forall (i : Fin n), M i) => M₂) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) g (fun (i : Fin n) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (ι₁ i) (fun (_x : ι₁ i) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁ i) => M i) _x) (Basis.funLike.{u1, u4, u3} (ι₁ i) R (M i) (CommSemiring.toSemiring.{u4} R _inst_1) (_inst_4 i) (_inst_5 i)) (e i) (v i)))) -> (Eq.{max (succ u3) (succ u2)} (MultilinearMap.{u4, u3, u2, 0} R (Fin n) M M₂ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : Fin n) => _inst_4 i) _inst_2 (fun (i : Fin n) => _inst_5 i) _inst_6) f g)
+Case conversion may be inaccurate. Consider using '#align basis.ext_multilinear_fin Basis.ext_multilinear_finₓ'. -/
/-- Two multilinear maps indexed by `fin n` are equal if they are equal when all arguments are
basis vectors. -/
theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n → Type _}
@@ -55,6 +61,12 @@ theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n
rw [Fin.cons_succ, Fin.cons_succ]
#align basis.ext_multilinear_fin Basis.ext_multilinear_fin
+/- warning: basis.ext_multilinear -> Basis.ext_multilinear is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {ι : Type.{u2}} {M₂ : Type.{u3}} {M₃ : Type.{u4}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_3 : AddCommMonoid.{u4} M₃] [_inst_6 : Module.{u1, u3} R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_7 : Module.{u1, u4} R M₃ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3] [_inst_8 : Finite.{succ u2} ι] {f : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {g : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {ι₁ : Type.{u5}} (e : Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6), (forall (v : ι -> ι₁), Eq.{succ u4} M₃ (coeFn.{max (succ u2) (succ u3) (succ u4), max (max (succ u2) (succ u3)) (succ u4)} (MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (fun (f : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) => (ι -> M₂) -> M₃) (MultilinearMap.hasCoeToFun.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f (fun (i : ι) => coeFn.{max (succ u5) (succ u1) (succ u3), max (succ u5) (succ u3)} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) (fun (_x : Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) => ι₁ -> M₂) (FunLike.hasCoeToFun.{max (succ u5) (succ u1) (succ u3), succ u5, succ u3} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => M₂) (Basis.funLike.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6)) e (v i))) (coeFn.{max (succ u2) (succ u3) (succ u4), max (max (succ u2) (succ u3)) (succ u4)} (MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (fun (f : MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) => (ι -> M₂) -> M₃) (MultilinearMap.hasCoeToFun.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) g (fun (i : ι) => coeFn.{max (succ u5) (succ u1) (succ u3), max (succ u5) (succ u3)} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) (fun (_x : Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) => ι₁ -> M₂) (FunLike.hasCoeToFun.{max (succ u5) (succ u1) (succ u3), succ u5, succ u3} (Basis.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => M₂) (Basis.funLike.{u5, u1, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_6)) e (v i)))) -> (Eq.{max (succ u2) (succ u3) (succ u4)} (MultilinearMap.{u1, u3, u4, u2} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u1} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f g)
+but is expected to have type
+ forall {R : Type.{u4}} {ι : Type.{u5}} {M₂ : Type.{u3}} {M₃ : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u3} M₂] [_inst_3 : AddCommMonoid.{u2} M₃] [_inst_6 : Module.{u4, u3} R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] [_inst_7 : Module.{u4, u2} R M₃ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3] [_inst_8 : Finite.{succ u5} ι] {f : MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {g : MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7} {ι₁ : Type.{u1}} (e : Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6), (forall (v : ι -> ι₁), Eq.{succ u2} ((fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : ι -> M₂) => M₃) (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (a : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) a) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i))) (FunLike.coe.{max (max (succ u5) (succ u3)) (succ u2), max (succ u5) (succ u3), succ u2} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basis._hyg.901 : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (ι -> M₂) (fun (f : ι -> M₂) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : ι -> M₂) => M₃) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) _x) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i))) (FunLike.coe.{max (max (succ u5) (succ u3)) (succ u2), max (succ u5) (succ u3), succ u2} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basis._hyg.913 : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) (ι -> M₂) (fun (f : ι -> M₂) => (fun (x._@.Mathlib.LinearAlgebra.Multilinear.Basic._hyg.419 : ι -> M₂) => M₃) f) (MultilinearMap.instFunLikeMultilinearMapForAll.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) g (fun (i : ι) => FunLike.coe.{max (max (succ u4) (succ u3)) (succ u1), succ u1, succ u3} (Basis.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) ι₁ (fun (_x : ι₁) => (fun (x._@.Mathlib.LinearAlgebra.Basis._hyg.548 : ι₁) => M₂) _x) (Basis.funLike.{u1, u4, u3} ι₁ R M₂ (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_6) e (v i)))) -> (Eq.{max (max (succ u5) (succ u3)) (succ u2)} (MultilinearMap.{u4, u3, u2, u5} R ι (fun (i : ι) => M₂) M₃ (CommSemiring.toSemiring.{u4} R _inst_1) (fun (i : ι) => _inst_2) _inst_3 (fun (i : ι) => _inst_6) _inst_7) f g)
+Case conversion may be inaccurate. Consider using '#align basis.ext_multilinear Basis.ext_multilinearₓ'. -/
/-- Two multilinear maps indexed by a `fintype` are equal if they are equal when all arguments
are basis vectors. Unlike `basis.ext_multilinear_fin`, this only uses a single basis; a
dependently-typed version would still be true, but the proof would need a dependently-typed
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: Joseph Myers
! This file was ported from Lean 3 source module linear_algebra.multilinear.basis
-! leanprover-community/mathlib commit 1cfdf5f34e1044ecb65d10be753008baaf118edf
+! leanprover-community/mathlib commit ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -59,9 +59,8 @@ theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n
are basis vectors. Unlike `basis.ext_multilinear_fin`, this only uses a single basis; a
dependently-typed version would still be true, but the proof would need a dependently-typed
version of `dom_dom_congr`. -/
-theorem Basis.ext_multilinear [DecidableEq ι] [Finite ι]
- {f g : MultilinearMap R (fun i : ι => M₂) M₃} {ι₁ : Type _} (e : Basis ι₁ R M₂)
- (h : ∀ v : ι → ι₁, (f fun i => e (v i)) = g fun i => e (v i)) : f = g :=
+theorem Basis.ext_multilinear [Finite ι] {f g : MultilinearMap R (fun i : ι => M₂) M₃} {ι₁ : Type _}
+ (e : Basis ι₁ R M₂) (h : ∀ v : ι → ι₁, (f fun i => e (v i)) = g fun i => e (v i)) : f = g :=
by
cases nonempty_fintype ι
exact
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,9 +24,7 @@ This file proves lemmas about the action of multilinear maps on basis vectors.
open MultilinearMap
variable {R : Type*} {ι : Type*} {n : ℕ} {M : Fin n → Type*} {M₂ : Type*} {M₃ : Type*}
-
variable [CommSemiring R] [AddCommMonoid M₂] [AddCommMonoid M₃] [∀ i, AddCommMonoid (M i)]
-
variable [∀ i, Module R (M i)] [Module R M₂] [Module R M₃]
/-- Two multilinear maps indexed by `Fin n` are equal if they are equal when all arguments are
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 @@ This file proves lemmas about the action of multilinear maps on basis vectors.
open MultilinearMap
-variable {R : Type _} {ι : Type _} {n : ℕ} {M : Fin n → Type _} {M₂ : Type _} {M₃ : Type _}
+variable {R : Type*} {ι : Type*} {n : ℕ} {M : Fin n → Type*} {M₂ : Type*} {M₃ : Type*}
variable [CommSemiring R] [AddCommMonoid M₂] [AddCommMonoid M₃] [∀ i, AddCommMonoid (M i)]
@@ -31,7 +31,7 @@ variable [∀ i, Module R (M i)] [Module R M₂] [Module R M₃]
/-- Two multilinear maps indexed by `Fin n` are equal if they are equal when all arguments are
basis vectors. -/
-theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n → Type _}
+theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n → Type*}
(e : ∀ i, Basis (ι₁ i) R (M i))
(h : ∀ v : ∀ i, ι₁ i, (f fun i => e i (v i)) = g fun i => e i (v i)) : f = g := by
induction' n with m hm
@@ -55,7 +55,7 @@ theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n
are basis vectors. Unlike `Basis.ext_multilinear_fin`, this only uses a single basis; a
dependently-typed version would still be true, but the proof would need a dependently-typed
version of `dom_dom_congr`. -/
-theorem Basis.ext_multilinear [Finite ι] {f g : MultilinearMap R (fun _ : ι => M₂) M₃} {ι₁ : Type _}
+theorem Basis.ext_multilinear [Finite ι] {f g : MultilinearMap R (fun _ : ι => M₂) M₃} {ι₁ : Type*}
(e : Basis ι₁ R M₂) (h : ∀ v : ι → ι₁, (f fun i => e (v i)) = g fun i => e (v i)) : f = g := by
cases nonempty_fintype ι
exact
@@ -2,15 +2,12 @@
Copyright (c) 2021 Joseph Myers. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Myers
-
-! This file was ported from Lean 3 source module linear_algebra.multilinear.basis
-! 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.Basis
import Mathlib.LinearAlgebra.Multilinear.Basic
+#align_import linear_algebra.multilinear.basis from "leanprover-community/mathlib"@"ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a"
+
/-!
# Multilinear maps in relation to bases.
Co-authored-by: Komyyy <pol_tta@outlook.jp> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com>
@@ -39,10 +39,7 @@ theorem Basis.ext_multilinear_fin {f g : MultilinearMap R M M₂} {ι₁ : Fin n
(h : ∀ v : ∀ i, ι₁ i, (f fun i => e i (v i)) = g fun i => e i (v i)) : f = g := by
induction' n with m hm
· ext x
- convert h finZeroElim <;>
- -- Porting note: added below
- · rename_i x
- apply finZeroElim x
+ convert h finZeroElim
· apply Function.LeftInverse.injective uncurry_curryLeft
refine' Basis.ext (e 0) _
intro i
The unported dependencies are