field_theory.tower
⟷
Mathlib.FieldTheory.Tower
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)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -173,7 +173,6 @@ theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Alg
#align finite_dimensional.subalgebra.is_simple_order_of_finrank_prime FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime
-/
-#print LinearMap.finite_dimensional'' /-
-- TODO: `intermediate_field` version
-- TODO: generalize by removing [finite_dimensional F K]
-- V = ⊕F,
@@ -183,7 +182,6 @@ instance LinearMap.finite_dimensional'' (F : Type u) (K : Type v) (V : Type w) [
FiniteDimensional K (V →ₗ[F] K) :=
right F _ _
#align linear_map.finite_dimensional'' LinearMap.finite_dimensional''
--/
#print FiniteDimensional.finrank_linear_map' /-
theorem finrank_linear_map' (F : Type u) (K : Type v) (V : Type w) [Field F] [Field K] [Algebra F K]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -82,10 +82,12 @@ theorem rank_mul_rank (F : Type u) (K A : Type v) [CommRing F] [Ring K] [AddComm
#align rank_mul_rank rank_mul_rank
-/
-#print FiniteDimensional.finrank_mul_finrank' /-
+/- warning: finite_dimensional.finrank_mul_finrank' clashes with finite_dimensional.finrank_mul_finrank -> FiniteDimensional.finrank_mul_finrank
+Case conversion may be inaccurate. Consider using '#align finite_dimensional.finrank_mul_finrank' FiniteDimensional.finrank_mul_finrankₓ'. -/
+#print FiniteDimensional.finrank_mul_finrank /-
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
-theorem FiniteDimensional.finrank_mul_finrank' [Nontrivial K] [Module.Finite F K]
+theorem FiniteDimensional.finrank_mul_finrank [Nontrivial K] [Module.Finite F K]
[Module.Finite K A] : finrank F K * finrank K A = finrank F A :=
by
letI := nontrivial_of_invariantBasisNumber F
@@ -93,7 +95,7 @@ theorem FiniteDimensional.finrank_mul_finrank' [Nontrivial K] [Module.Finite F K
let c := Module.Free.chooseBasis K A
rw [finrank_eq_card_basis b, finrank_eq_card_basis c, finrank_eq_card_basis (b.smul c),
Fintype.card_prod]
-#align finite_dimensional.finrank_mul_finrank' FiniteDimensional.finrank_mul_finrank'
+#align finite_dimensional.finrank_mul_finrank' FiniteDimensional.finrank_mul_finrank
-/
end Ring
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2020 Kenny Lau. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
-/
-import Mathbin.Data.Nat.Prime
-import Mathbin.RingTheory.AlgebraTower
-import Mathbin.LinearAlgebra.FiniteDimensional
-import Mathbin.LinearAlgebra.FreeModule.Finite.Matrix
+import Data.Nat.Prime
+import RingTheory.AlgebraTower
+import LinearAlgebra.FiniteDimensional
+import LinearAlgebra.FreeModule.Finite.Matrix
#align_import field_theory.tower from "leanprover-community/mathlib"@"ef55335933293309ff8c0b1d20ffffeecbe5c39f"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2020 Kenny Lau. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
-
-! This file was ported from Lean 3 source module field_theory.tower
-! leanprover-community/mathlib commit ef55335933293309ff8c0b1d20ffffeecbe5c39f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Nat.Prime
import Mathbin.RingTheory.AlgebraTower
import Mathbin.LinearAlgebra.FiniteDimensional
import Mathbin.LinearAlgebra.FreeModule.Finite.Matrix
+#align_import field_theory.tower from "leanprover-community/mathlib"@"ef55335933293309ff8c0b1d20ffffeecbe5c39f"
+
/-!
# Tower of field extensions
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -57,6 +57,7 @@ variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
variable [StrongRankCondition F] [StrongRankCondition K] [Module.Free F K] [Module.Free K A]
+#print lift_rank_mul_lift_rank /-
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
theorem lift_rank_mul_lift_rank :
@@ -69,7 +70,9 @@ theorem lift_rank_mul_lift_rank :
lift_umax.{w, v}, ← (b.smul c).mk_eq_rank, mk_prod, lift_mul, lift_lift, lift_lift, lift_lift,
lift_lift, lift_umax]
#align lift_rank_mul_lift_rank lift_rank_mul_lift_rank
+-/
+#print rank_mul_rank /-
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.
@@ -80,6 +83,7 @@ theorem rank_mul_rank (F : Type u) (K A : Type v) [CommRing F] [Ring K] [AddComm
Module.rank F K * Module.rank K A = Module.rank F A := by
convert lift_rank_mul_lift_rank F K A <;> rw [lift_id]
#align rank_mul_rank rank_mul_rank
+-/
#print FiniteDimensional.finrank_mul_finrank' /-
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
@@ -113,6 +117,7 @@ theorem trans [FiniteDimensional F K] [FiniteDimensional K A] : FiniteDimensiona
#align finite_dimensional.trans FiniteDimensional.trans
-/
+#print FiniteDimensional.left /-
/-- In a tower of field extensions `L / K / F`, if `L / F` is finite, so is `K / F`.
(In fact, it suffices that `L` is a nontrivial ring.)
@@ -123,6 +128,7 @@ theorem left (K L : Type _) [Field K] [Algebra F K] [Ring L] [Nontrivial L] [Alg
[Algebra K L] [IsScalarTower F K L] [FiniteDimensional F L] : FiniteDimensional F K :=
FiniteDimensional.of_injective (IsScalarTower.toAlgHom F K L).toLinearMap (RingHom.injective _)
#align finite_dimensional.left FiniteDimensional.left
+-/
#print FiniteDimensional.right /-
theorem right [hf : FiniteDimensional F A] : FiniteDimensional K A :=
@@ -150,6 +156,7 @@ theorem finrank_mul_finrank [FiniteDimensional F K] : finrank F K * finrank K A
#align finite_dimensional.finrank_mul_finrank FiniteDimensional.finrank_mul_finrank
-/
+#print FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime /-
theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Algebra F A]
(hp : (finrank F A).Prime) : IsSimpleOrder (Subalgebra F A) :=
{ to_nontrivial :=
@@ -165,6 +172,7 @@ theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Alg
exact
Algebra.toSubmodule_eq_top.1 (eq_top_of_finrank_eq <| K.finrank_to_submodule.trans h) }
#align finite_dimensional.subalgebra.is_simple_order_of_finrank_prime FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime
+-/
#print LinearMap.finite_dimensional'' /-
-- TODO: `intermediate_field` version
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -187,7 +187,6 @@ theorem finrank_linear_map' (F : Type u) (K : Type v) (V : Type w) [Field F] [Fi
finrank F K * finrank K (V →ₗ[F] K) = finrank F (V →ₗ[F] K) := finrank_mul_finrank _ _ _
_ = finrank F V * finrank F K := (finrank_linearMap F V K)
_ = finrank F K * finrank F V := mul_comm _ _
-
#align finite_dimensional.finrank_linear_map' FiniteDimensional.finrank_linear_map'
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -41,7 +41,7 @@ tower law
universe u v w u₁ v₁ w₁
-open Classical BigOperators
+open scoped Classical BigOperators
open FiniteDimensional
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -57,9 +57,6 @@ variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
variable [StrongRankCondition F] [StrongRankCondition K] [Module.Free F K] [Module.Free K A]
-/- warning: lift_rank_mul_lift_rank -> lift_rank_mul_lift_rank is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align lift_rank_mul_lift_rank lift_rank_mul_lift_rankₓ'. -/
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
theorem lift_rank_mul_lift_rank :
@@ -73,9 +70,6 @@ theorem lift_rank_mul_lift_rank :
lift_lift, lift_umax]
#align lift_rank_mul_lift_rank lift_rank_mul_lift_rank
-/- warning: rank_mul_rank -> rank_mul_rank is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align rank_mul_rank rank_mul_rankₓ'. -/
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.
@@ -119,12 +113,6 @@ theorem trans [FiniteDimensional F K] [FiniteDimensional K A] : FiniteDimensiona
#align finite_dimensional.trans FiniteDimensional.trans
-/
-/- warning: finite_dimensional.left -> FiniteDimensional.left is a dubious translation:
-lean 3 declaration is
- forall (F : Type.{u1}) [_inst_1 : Field.{u1} F] (K : Type.{u2}) (L : Type.{u3}) [_inst_8 : Field.{u2} K] [_inst_9 : Algebra.{u1, u2} F K (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8)))] [_inst_10 : Ring.{u3} L] [_inst_11 : Nontrivial.{u3} L] [_inst_12 : Algebra.{u1, u3} F L (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u3} L _inst_10)] [_inst_13 : Algebra.{u2, u3} K L (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)) (Ring.toSemiring.{u3} L _inst_10)] [_inst_14 : IsScalarTower.{u1, u2, u3} F K L (SMulZeroClass.toHasSmul.{u1, u2} F K (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} F K (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1))))))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F K (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))))))))) (Module.toMulActionWithZero.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8)))))) (Algebra.toModule.{u1, u2} F K (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))) _inst_9))))) (SMulZeroClass.toHasSmul.{u2, u3} K L (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (SMulWithZero.toSmulZeroClass.{u2, u3} K L (MulZeroClass.toHasZero.{u2} K (MulZeroOneClass.toMulZeroClass.{u2} K (MonoidWithZero.toMulZeroOneClass.{u2} K (Semiring.toMonoidWithZero.{u2} K (CommSemiring.toSemiring.{u2} K (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8))))))) (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (MulActionWithZero.toSMulWithZero.{u2, u3} K L (Semiring.toMonoidWithZero.{u2} K (CommSemiring.toSemiring.{u2} K (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)))) (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (Module.toMulActionWithZero.{u2, u3} K L (CommSemiring.toSemiring.{u2} K (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10)))) (Algebra.toModule.{u2, u3} K L (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)) (Ring.toSemiring.{u3} L _inst_10) _inst_13))))) (SMulZeroClass.toHasSmul.{u1, u3} F L (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (SMulWithZero.toSmulZeroClass.{u1, u3} F L (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1))))))) (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (MulActionWithZero.toSMulWithZero.{u1, u3} F L (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)))) (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (Module.toMulActionWithZero.{u1, u3} F L (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10)))) (Algebra.toModule.{u1, u3} F L (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u3} L _inst_10) _inst_12)))))] [_inst_15 : FiniteDimensional.{u1, u3} F L (Field.toDivisionRing.{u1} F _inst_1) (NonUnitalNonAssocRing.toAddCommGroup.{u3} L (NonAssocRing.toNonUnitalNonAssocRing.{u3} L (Ring.toNonAssocRing.{u3} L _inst_10))) (Algebra.toModule.{u1, u3} F L (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u3} L _inst_10) _inst_12)], FiniteDimensional.{u1, u2} F K (Field.toDivisionRing.{u1} F _inst_1) (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))))) (Algebra.toModule.{u1, u2} F K (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))) _inst_9)
-but is expected to have type
- forall (F : Type.{u3}) [_inst_1 : Field.{u3} F] (K : Type.{u2}) (L : Type.{u1}) [_inst_8 : Field.{u2} K] [_inst_9 : Algebra.{u3, u2} F K (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (DivisionSemiring.toSemiring.{u2} K (Semifield.toDivisionSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)))] [_inst_10 : Ring.{u1} L] [_inst_11 : Nontrivial.{u1} L] [_inst_12 : Algebra.{u3, u1} F L (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (Ring.toSemiring.{u1} L _inst_10)] [_inst_13 : Algebra.{u2, u1} K L (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)) (Ring.toSemiring.{u1} L _inst_10)] [_inst_14 : IsScalarTower.{u3, u2, u1} F K L (Algebra.toSMul.{u3, u2} F K (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (DivisionSemiring.toSemiring.{u2} K (Semifield.toDivisionSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8))) _inst_9) (Algebra.toSMul.{u2, u1} K L (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)) (Ring.toSemiring.{u1} L _inst_10) _inst_13) (Algebra.toSMul.{u3, u1} F L (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (Ring.toSemiring.{u1} L _inst_10) _inst_12)] [_inst_15 : FiniteDimensional.{u3, u1} F L (Field.toDivisionRing.{u3} F _inst_1) (Ring.toAddCommGroup.{u1} L _inst_10) (Algebra.toModule.{u3, u1} F L (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (Ring.toSemiring.{u1} L _inst_10) _inst_12)], FiniteDimensional.{u3, u2} F K (Field.toDivisionRing.{u3} F _inst_1) (Ring.toAddCommGroup.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))) (Algebra.toModule.{u3, u2} F K (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (DivisionSemiring.toSemiring.{u2} K (Semifield.toDivisionSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8))) _inst_9)
-Case conversion may be inaccurate. Consider using '#align finite_dimensional.left FiniteDimensional.leftₓ'. -/
/-- In a tower of field extensions `L / K / F`, if `L / F` is finite, so is `K / F`.
(In fact, it suffices that `L` is a nontrivial ring.)
@@ -162,12 +150,6 @@ theorem finrank_mul_finrank [FiniteDimensional F K] : finrank F K * finrank K A
#align finite_dimensional.finrank_mul_finrank FiniteDimensional.finrank_mul_finrank
-/
-/- warning: finite_dimensional.subalgebra.is_simple_order_of_finrank_prime -> FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime is a dubious translation:
-lean 3 declaration is
- forall (F : Type.{u1}) [_inst_1 : Field.{u1} F] (A : Type.{u2}) [_inst_8 : Ring.{u2} A] [_inst_9 : IsDomain.{u2} A (Ring.toSemiring.{u2} A _inst_8)] [_inst_10 : Algebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8)], (Nat.Prime (FiniteDimensional.finrank.{u1, u2} F A (Ring.toSemiring.{u1} F (DivisionRing.toRing.{u1} F (Field.toDivisionRing.{u1} F _inst_1))) (NonUnitalNonAssocRing.toAddCommGroup.{u2} A (NonAssocRing.toNonUnitalNonAssocRing.{u2} A (Ring.toNonAssocRing.{u2} A _inst_8))) (Algebra.toModule.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10))) -> (IsSimpleOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Algebra.Subalgebra.completeLattice.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10))))) (CompleteLattice.toBoundedOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Algebra.Subalgebra.completeLattice.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10)))
-but is expected to have type
- forall (F : Type.{u2}) [_inst_1 : Field.{u2} F] (A : Type.{u1}) [_inst_8 : Ring.{u1} A] [_inst_9 : IsDomain.{u1} A (Ring.toSemiring.{u1} A _inst_8)] [_inst_10 : Algebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8)], (Nat.Prime (FiniteDimensional.finrank.{u2, u1} F A (DivisionSemiring.toSemiring.{u2} F (Semifield.toDivisionSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1))) (Ring.toAddCommGroup.{u1} A _inst_8) (Algebra.toModule.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10))) -> (IsSimpleOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10))))) (CompleteLattice.toBoundedOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10)))
-Case conversion may be inaccurate. Consider using '#align finite_dimensional.subalgebra.is_simple_order_of_finrank_prime FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_primeₓ'. -/
theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Algebra F A]
(hp : (finrank F A).Prime) : IsSimpleOrder (Subalgebra F A) :=
{ to_nontrivial :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -58,10 +58,7 @@ variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
variable [StrongRankCondition F] [StrongRankCondition K] [Module.Free F K] [Module.Free K A]
/- warning: lift_rank_mul_lift_rank -> lift_rank_mul_lift_rank is a dubious translation:
-lean 3 declaration is
- forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u3}) [_inst_1 : CommRing.{u1} F] [_inst_2 : Ring.{u2} K] [_inst_3 : AddCommGroup.{u3} A] [_inst_4 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2)] [_inst_5 : Module.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_6 : Module.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_7 : IsScalarTower.{u1, u2, u3} F K A (SMulZeroClass.toHasSmul.{u1, u2} F K (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} F K (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)))))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F K (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2))))))) (Module.toMulActionWithZero.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))))) (SMulZeroClass.toHasSmul.{u2, u3} K A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (SMulWithZero.toSmulZeroClass.{u2, u3} K A (MulZeroClass.toHasZero.{u2} K (MulZeroOneClass.toMulZeroClass.{u2} K (MonoidWithZero.toMulZeroOneClass.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2))))) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (MulActionWithZero.toSMulWithZero.{u2, u3} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2)) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (Module.toMulActionWithZero.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5)))) (SMulZeroClass.toHasSmul.{u1, u3} F A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (SMulWithZero.toSmulZeroClass.{u1, u3} F A (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)))))) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (MulActionWithZero.toSMulWithZero.{u1, u3} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (Module.toMulActionWithZero.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))))] [_inst_8 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))] [_inst_9 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_2)] [_inst_10 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4)] [_inst_11 : Module.Free.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5], Eq.{succ (succ (max u2 u3))} Cardinal.{max u2 u3} (HMul.hMul.{succ (max u2 u3), succ (max u2 u3), succ (max u2 u3)} Cardinal.{max u2 u3} Cardinal.{max u2 u3} Cardinal.{max u2 u3} (instHMul.{succ (max u2 u3)} Cardinal.{max u2 u3} Cardinal.hasMul.{max u2 u3}) (Cardinal.lift.{u3, u2} (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))) (Cardinal.lift.{u2, u3} (Module.rank.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5))) (Cardinal.lift.{u2, u3} (Module.rank.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))
-but is expected to have type
- forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u3}) [_inst_1 : CommRing.{u1} F] [_inst_2 : Ring.{u2} K] [_inst_3 : AddCommGroup.{u3} A] [_inst_4 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2)] [_inst_5 : Module.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_6 : Module.{u1, u3} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_7 : IsScalarTower.{u1, u2, u3} F K A (Algebra.toSMul.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4) (SMulZeroClass.toSMul.{u2, u3} K A (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (SMulWithZero.toSMulZeroClass.{u2, u3} K A (MonoidWithZero.toZero.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (MulActionWithZero.toSMulWithZero.{u2, u3} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2)) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (Module.toMulActionWithZero.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5)))) (SMulZeroClass.toSMul.{u1, u3} F A (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (SMulWithZero.toSMulZeroClass.{u1, u3} F A (CommMonoidWithZero.toZero.{u1} F (CommSemiring.toCommMonoidWithZero.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (MulActionWithZero.toSMulWithZero.{u1, u3} F A (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (Module.toMulActionWithZero.{u1, u3} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))))] [_inst_8 : StrongRankCondition.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))] [_inst_9 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_2)] [_inst_10 : Module.Free.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4)] [_inst_11 : Module.Free.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5], Eq.{max (succ (succ u2)) (succ (succ u3))} Cardinal.{max u2 u3} (HMul.hMul.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} Cardinal.{max u2 u3} Cardinal.{max u3 u2} Cardinal.{max u2 u3} (instHMul.{max (succ u2) (succ u3)} Cardinal.{max u2 u3} Cardinal.instMulCardinal.{max u2 u3}) (Cardinal.lift.{u3, u2} (Module.rank.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))) (Cardinal.lift.{u2, u3} (Module.rank.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5))) (Cardinal.lift.{u2, u3} (Module.rank.{u1, u3} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))
+<too large>
Case conversion may be inaccurate. Consider using '#align lift_rank_mul_lift_rank lift_rank_mul_lift_rankₓ'. -/
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
@@ -77,10 +74,7 @@ theorem lift_rank_mul_lift_rank :
#align lift_rank_mul_lift_rank lift_rank_mul_lift_rank
/- warning: rank_mul_rank -> rank_mul_rank is a dubious translation:
-lean 3 declaration is
- forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u2}) [_inst_12 : CommRing.{u1} F] [_inst_13 : Ring.{u2} K] [_inst_14 : AddCommGroup.{u2} A] [_inst_15 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13)] [_inst_16 : Module.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_17 : Module.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_18 : IsScalarTower.{u1, u2, u2} F K A (SMulZeroClass.toHasSmul.{u1, u2} F K (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} F K (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)))))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F K (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13))))))) (Module.toMulActionWithZero.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15))))) (SMulZeroClass.toHasSmul.{u2, u2} K A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (SMulWithZero.toSmulZeroClass.{u2, u2} K A (MulZeroClass.toHasZero.{u2} K (MulZeroOneClass.toMulZeroClass.{u2} K (MonoidWithZero.toMulZeroOneClass.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (MulActionWithZero.toSMulWithZero.{u2, u2} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (Module.toMulActionWithZero.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)))) (SMulZeroClass.toHasSmul.{u1, u2} F A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (SMulWithZero.toSmulZeroClass.{u1, u2} F A (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (MulActionWithZero.toSMulWithZero.{u1, u2} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (Module.toMulActionWithZero.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17))))] [_inst_19 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))] [_inst_20 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_13)] [_inst_21 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)] [_inst_22 : Module.Free.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16], Eq.{succ (succ u2)} Cardinal.{u2} (HMul.hMul.{succ u2, succ u2, succ u2} Cardinal.{u2} Cardinal.{u2} Cardinal.{u2} (instHMul.{succ u2} Cardinal.{u2} Cardinal.hasMul.{u2}) (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)) (Module.rank.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)) (Module.rank.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17)
-but is expected to have type
- forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u2}) [_inst_12 : CommRing.{u1} F] [_inst_13 : Ring.{u2} K] [_inst_14 : AddCommGroup.{u2} A] [_inst_15 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13)] [_inst_16 : Module.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_17 : Module.{u1, u2} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_18 : IsScalarTower.{u1, u2, u2} F K A (Algebra.toSMul.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15) (SMulZeroClass.toSMul.{u2, u2} K A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (SMulWithZero.toSMulZeroClass.{u2, u2} K A (MonoidWithZero.toZero.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (MulActionWithZero.toSMulWithZero.{u2, u2} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13)) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (Module.toMulActionWithZero.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)))) (SMulZeroClass.toSMul.{u1, u2} F A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (SMulWithZero.toSMulZeroClass.{u1, u2} F A (CommMonoidWithZero.toZero.{u1} F (CommSemiring.toCommMonoidWithZero.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F A (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (Module.toMulActionWithZero.{u1, u2} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17))))] [_inst_19 : StrongRankCondition.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))] [_inst_20 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_13)] [_inst_21 : Module.Free.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)] [_inst_22 : Module.Free.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16], Eq.{succ (succ u2)} Cardinal.{u2} (HMul.hMul.{succ u2, succ u2, succ u2} Cardinal.{u2} Cardinal.{u2} Cardinal.{u2} (instHMul.{succ u2} Cardinal.{u2} Cardinal.instMulCardinal.{u2}) (Module.rank.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)) (Module.rank.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)) (Module.rank.{u1, u2} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17)
+<too large>
Case conversion may be inaccurate. Consider using '#align rank_mul_rank rank_mul_rankₓ'. -/
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -170,7 +170,7 @@ theorem finrank_mul_finrank [FiniteDimensional F K] : finrank F K * finrank K A
/- warning: finite_dimensional.subalgebra.is_simple_order_of_finrank_prime -> FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime is a dubious translation:
lean 3 declaration is
- forall (F : Type.{u1}) [_inst_1 : Field.{u1} F] (A : Type.{u2}) [_inst_8 : Ring.{u2} A] [_inst_9 : IsDomain.{u2} A (Ring.toSemiring.{u2} A _inst_8)] [_inst_10 : Algebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8)], (Nat.Prime (FiniteDimensional.finrank.{u1, u2} F A (Ring.toSemiring.{u1} F (DivisionRing.toRing.{u1} F (Field.toDivisionRing.{u1} F _inst_1))) (NonUnitalNonAssocRing.toAddCommGroup.{u2} A (NonAssocRing.toNonUnitalNonAssocRing.{u2} A (Ring.toNonAssocRing.{u2} A _inst_8))) (Algebra.toModule.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10))) -> (IsSimpleOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Algebra.Subalgebra.completeLattice.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10))))) (CompleteLattice.toBoundedOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Algebra.Subalgebra.completeLattice.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10)))
+ forall (F : Type.{u1}) [_inst_1 : Field.{u1} F] (A : Type.{u2}) [_inst_8 : Ring.{u2} A] [_inst_9 : IsDomain.{u2} A (Ring.toSemiring.{u2} A _inst_8)] [_inst_10 : Algebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8)], (Nat.Prime (FiniteDimensional.finrank.{u1, u2} F A (Ring.toSemiring.{u1} F (DivisionRing.toRing.{u1} F (Field.toDivisionRing.{u1} F _inst_1))) (NonUnitalNonAssocRing.toAddCommGroup.{u2} A (NonAssocRing.toNonUnitalNonAssocRing.{u2} A (Ring.toNonAssocRing.{u2} A _inst_8))) (Algebra.toModule.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10))) -> (IsSimpleOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Algebra.Subalgebra.completeLattice.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10))))) (CompleteLattice.toBoundedOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Algebra.Subalgebra.completeLattice.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10)))
but is expected to have type
forall (F : Type.{u2}) [_inst_1 : Field.{u2} F] (A : Type.{u1}) [_inst_8 : Ring.{u1} A] [_inst_9 : IsDomain.{u1} A (Ring.toSemiring.{u1} A _inst_8)] [_inst_10 : Algebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8)], (Nat.Prime (FiniteDimensional.finrank.{u2, u1} F A (DivisionSemiring.toSemiring.{u2} F (Semifield.toDivisionSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1))) (Ring.toAddCommGroup.{u1} A _inst_8) (Algebra.toModule.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10))) -> (IsSimpleOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10))))) (CompleteLattice.toBoundedOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10)))
Case conversion may be inaccurate. Consider using '#align finite_dimensional.subalgebra.is_simple_order_of_finrank_prime FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_primeₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -61,7 +61,7 @@ variable [StrongRankCondition F] [StrongRankCondition K] [Module.Free F K] [Modu
lean 3 declaration is
forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u3}) [_inst_1 : CommRing.{u1} F] [_inst_2 : Ring.{u2} K] [_inst_3 : AddCommGroup.{u3} A] [_inst_4 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2)] [_inst_5 : Module.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_6 : Module.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_7 : IsScalarTower.{u1, u2, u3} F K A (SMulZeroClass.toHasSmul.{u1, u2} F K (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} F K (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)))))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F K (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2))))))) (Module.toMulActionWithZero.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))))) (SMulZeroClass.toHasSmul.{u2, u3} K A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (SMulWithZero.toSmulZeroClass.{u2, u3} K A (MulZeroClass.toHasZero.{u2} K (MulZeroOneClass.toMulZeroClass.{u2} K (MonoidWithZero.toMulZeroOneClass.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2))))) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (MulActionWithZero.toSMulWithZero.{u2, u3} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2)) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (Module.toMulActionWithZero.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5)))) (SMulZeroClass.toHasSmul.{u1, u3} F A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (SMulWithZero.toSmulZeroClass.{u1, u3} F A (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)))))) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (MulActionWithZero.toSMulWithZero.{u1, u3} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (Module.toMulActionWithZero.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))))] [_inst_8 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))] [_inst_9 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_2)] [_inst_10 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4)] [_inst_11 : Module.Free.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5], Eq.{succ (succ (max u2 u3))} Cardinal.{max u2 u3} (HMul.hMul.{succ (max u2 u3), succ (max u2 u3), succ (max u2 u3)} Cardinal.{max u2 u3} Cardinal.{max u2 u3} Cardinal.{max u2 u3} (instHMul.{succ (max u2 u3)} Cardinal.{max u2 u3} Cardinal.hasMul.{max u2 u3}) (Cardinal.lift.{u3, u2} (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))) (Cardinal.lift.{u2, u3} (Module.rank.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5))) (Cardinal.lift.{u2, u3} (Module.rank.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))
but is expected to have type
- forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u3}) [_inst_1 : CommRing.{u1} F] [_inst_2 : Ring.{u2} K] [_inst_3 : AddCommGroup.{u3} A] [_inst_4 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2)] [_inst_5 : Module.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_6 : Module.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_7 : IsScalarTower.{u1, u2, u3} F K A (Algebra.toSMul.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4) (SMulZeroClass.toSMul.{u2, u3} K A (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (SMulWithZero.toSMulZeroClass.{u2, u3} K A (MonoidWithZero.toZero.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (MulActionWithZero.toSMulWithZero.{u2, u3} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2)) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (Module.toMulActionWithZero.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5)))) (SMulZeroClass.toSMul.{u1, u3} F A (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (SMulWithZero.toSMulZeroClass.{u1, u3} F A (CommMonoidWithZero.toZero.{u1} F (CommSemiring.toCommMonoidWithZero.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (MulActionWithZero.toSMulWithZero.{u1, u3} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (Module.toMulActionWithZero.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))))] [_inst_8 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))] [_inst_9 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_2)] [_inst_10 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4)] [_inst_11 : Module.Free.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5], Eq.{max (succ (succ u2)) (succ (succ u3))} Cardinal.{max u2 u3} (HMul.hMul.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} Cardinal.{max u2 u3} Cardinal.{max u3 u2} Cardinal.{max u2 u3} (instHMul.{max (succ u2) (succ u3)} Cardinal.{max u2 u3} Cardinal.instMulCardinal.{max u2 u3}) (Cardinal.lift.{u3, u2} (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))) (Cardinal.lift.{u2, u3} (Module.rank.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5))) (Cardinal.lift.{u2, u3} (Module.rank.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))
+ forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u3}) [_inst_1 : CommRing.{u1} F] [_inst_2 : Ring.{u2} K] [_inst_3 : AddCommGroup.{u3} A] [_inst_4 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2)] [_inst_5 : Module.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_6 : Module.{u1, u3} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_7 : IsScalarTower.{u1, u2, u3} F K A (Algebra.toSMul.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4) (SMulZeroClass.toSMul.{u2, u3} K A (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (SMulWithZero.toSMulZeroClass.{u2, u3} K A (MonoidWithZero.toZero.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (MulActionWithZero.toSMulWithZero.{u2, u3} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2)) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (Module.toMulActionWithZero.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5)))) (SMulZeroClass.toSMul.{u1, u3} F A (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (SMulWithZero.toSMulZeroClass.{u1, u3} F A (CommMonoidWithZero.toZero.{u1} F (CommSemiring.toCommMonoidWithZero.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (MulActionWithZero.toSMulWithZero.{u1, u3} F A (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (Module.toMulActionWithZero.{u1, u3} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))))] [_inst_8 : StrongRankCondition.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))] [_inst_9 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_2)] [_inst_10 : Module.Free.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4)] [_inst_11 : Module.Free.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5], Eq.{max (succ (succ u2)) (succ (succ u3))} Cardinal.{max u2 u3} (HMul.hMul.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} Cardinal.{max u2 u3} Cardinal.{max u3 u2} Cardinal.{max u2 u3} (instHMul.{max (succ u2) (succ u3)} Cardinal.{max u2 u3} Cardinal.instMulCardinal.{max u2 u3}) (Cardinal.lift.{u3, u2} (Module.rank.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))) (Cardinal.lift.{u2, u3} (Module.rank.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5))) (Cardinal.lift.{u2, u3} (Module.rank.{u1, u3} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))
Case conversion may be inaccurate. Consider using '#align lift_rank_mul_lift_rank lift_rank_mul_lift_rankₓ'. -/
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
@@ -80,7 +80,7 @@ theorem lift_rank_mul_lift_rank :
lean 3 declaration is
forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u2}) [_inst_12 : CommRing.{u1} F] [_inst_13 : Ring.{u2} K] [_inst_14 : AddCommGroup.{u2} A] [_inst_15 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13)] [_inst_16 : Module.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_17 : Module.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_18 : IsScalarTower.{u1, u2, u2} F K A (SMulZeroClass.toHasSmul.{u1, u2} F K (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} F K (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)))))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F K (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13))))))) (Module.toMulActionWithZero.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15))))) (SMulZeroClass.toHasSmul.{u2, u2} K A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (SMulWithZero.toSmulZeroClass.{u2, u2} K A (MulZeroClass.toHasZero.{u2} K (MulZeroOneClass.toMulZeroClass.{u2} K (MonoidWithZero.toMulZeroOneClass.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (MulActionWithZero.toSMulWithZero.{u2, u2} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (Module.toMulActionWithZero.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)))) (SMulZeroClass.toHasSmul.{u1, u2} F A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (SMulWithZero.toSmulZeroClass.{u1, u2} F A (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (MulActionWithZero.toSMulWithZero.{u1, u2} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (Module.toMulActionWithZero.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17))))] [_inst_19 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))] [_inst_20 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_13)] [_inst_21 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)] [_inst_22 : Module.Free.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16], Eq.{succ (succ u2)} Cardinal.{u2} (HMul.hMul.{succ u2, succ u2, succ u2} Cardinal.{u2} Cardinal.{u2} Cardinal.{u2} (instHMul.{succ u2} Cardinal.{u2} Cardinal.hasMul.{u2}) (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)) (Module.rank.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)) (Module.rank.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17)
but is expected to have type
- forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u2}) [_inst_12 : CommRing.{u1} F] [_inst_13 : Ring.{u2} K] [_inst_14 : AddCommGroup.{u2} A] [_inst_15 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13)] [_inst_16 : Module.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_17 : Module.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_18 : IsScalarTower.{u1, u2, u2} F K A (Algebra.toSMul.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15) (SMulZeroClass.toSMul.{u2, u2} K A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (SMulWithZero.toSMulZeroClass.{u2, u2} K A (MonoidWithZero.toZero.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (MulActionWithZero.toSMulWithZero.{u2, u2} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13)) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (Module.toMulActionWithZero.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)))) (SMulZeroClass.toSMul.{u1, u2} F A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (SMulWithZero.toSMulZeroClass.{u1, u2} F A (CommMonoidWithZero.toZero.{u1} F (CommSemiring.toCommMonoidWithZero.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (Module.toMulActionWithZero.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17))))] [_inst_19 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))] [_inst_20 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_13)] [_inst_21 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)] [_inst_22 : Module.Free.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16], Eq.{succ (succ u2)} Cardinal.{u2} (HMul.hMul.{succ u2, succ u2, succ u2} Cardinal.{u2} Cardinal.{u2} Cardinal.{u2} (instHMul.{succ u2} Cardinal.{u2} Cardinal.instMulCardinal.{u2}) (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)) (Module.rank.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)) (Module.rank.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17)
+ forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u2}) [_inst_12 : CommRing.{u1} F] [_inst_13 : Ring.{u2} K] [_inst_14 : AddCommGroup.{u2} A] [_inst_15 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13)] [_inst_16 : Module.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_17 : Module.{u1, u2} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_18 : IsScalarTower.{u1, u2, u2} F K A (Algebra.toSMul.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15) (SMulZeroClass.toSMul.{u2, u2} K A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (SMulWithZero.toSMulZeroClass.{u2, u2} K A (MonoidWithZero.toZero.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (MulActionWithZero.toSMulWithZero.{u2, u2} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13)) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (Module.toMulActionWithZero.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)))) (SMulZeroClass.toSMul.{u1, u2} F A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (SMulWithZero.toSMulZeroClass.{u1, u2} F A (CommMonoidWithZero.toZero.{u1} F (CommSemiring.toCommMonoidWithZero.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F A (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (Module.toMulActionWithZero.{u1, u2} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17))))] [_inst_19 : StrongRankCondition.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))] [_inst_20 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_13)] [_inst_21 : Module.Free.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)] [_inst_22 : Module.Free.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16], Eq.{succ (succ u2)} Cardinal.{u2} (HMul.hMul.{succ u2, succ u2, succ u2} Cardinal.{u2} Cardinal.{u2} Cardinal.{u2} (instHMul.{succ u2} Cardinal.{u2} Cardinal.instMulCardinal.{u2}) (Module.rank.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)) (Module.rank.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)) (Module.rank.{u1, u2} F A (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17)
Case conversion may be inaccurate. Consider using '#align rank_mul_rank rank_mul_rankₓ'. -/
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
! This file was ported from Lean 3 source module field_theory.tower
-! leanprover-community/mathlib commit c7bce2818663f456335892ddbdd1809f111a5b72
+! leanprover-community/mathlib commit ef55335933293309ff8c0b1d20ffffeecbe5c39f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.LinearAlgebra.FreeModule.Finite.Matrix
/-!
# Tower of field extensions
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we prove the tower law for arbitrary extensions and finite extensions.
Suppose `L` is a field extension of `K` and `K` is a field extension of `F`.
Then `[L:F] = [L:K] [K:F]` where `[E₁:E₂]` means the `E₂`-dimension of `E₁`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/86d04064ca33ee3d3405fbfc497d494fd2dd4796
@@ -54,6 +54,12 @@ variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
variable [StrongRankCondition F] [StrongRankCondition K] [Module.Free F K] [Module.Free K A]
+/- warning: lift_rank_mul_lift_rank -> lift_rank_mul_lift_rank is a dubious translation:
+lean 3 declaration is
+ forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u3}) [_inst_1 : CommRing.{u1} F] [_inst_2 : Ring.{u2} K] [_inst_3 : AddCommGroup.{u3} A] [_inst_4 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2)] [_inst_5 : Module.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_6 : Module.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_7 : IsScalarTower.{u1, u2, u3} F K A (SMulZeroClass.toHasSmul.{u1, u2} F K (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} F K (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)))))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F K (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2))))))) (Module.toMulActionWithZero.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))))) (SMulZeroClass.toHasSmul.{u2, u3} K A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (SMulWithZero.toSmulZeroClass.{u2, u3} K A (MulZeroClass.toHasZero.{u2} K (MulZeroOneClass.toMulZeroClass.{u2} K (MonoidWithZero.toMulZeroOneClass.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2))))) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (MulActionWithZero.toSMulWithZero.{u2, u3} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2)) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (Module.toMulActionWithZero.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5)))) (SMulZeroClass.toHasSmul.{u1, u3} F A (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (SMulWithZero.toSmulZeroClass.{u1, u3} F A (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)))))) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (MulActionWithZero.toSMulWithZero.{u1, u3} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))) (AddZeroClass.toHasZero.{u3} A (AddMonoid.toAddZeroClass.{u3} A (AddCommMonoid.toAddMonoid.{u3} A (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)))) (Module.toMulActionWithZero.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))))] [_inst_8 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))] [_inst_9 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_2)] [_inst_10 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4)] [_inst_11 : Module.Free.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5], Eq.{succ (succ (max u2 u3))} Cardinal.{max u2 u3} (HMul.hMul.{succ (max u2 u3), succ (max u2 u3), succ (max u2 u3)} Cardinal.{max u2 u3} Cardinal.{max u2 u3} Cardinal.{max u2 u3} (instHMul.{succ (max u2 u3)} Cardinal.{max u2 u3} Cardinal.hasMul.{max u2 u3}) (Cardinal.lift.{u3, u2} (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))) (Cardinal.lift.{u2, u3} (Module.rank.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5))) (Cardinal.lift.{u2, u3} (Module.rank.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))
+but is expected to have type
+ forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u3}) [_inst_1 : CommRing.{u1} F] [_inst_2 : Ring.{u2} K] [_inst_3 : AddCommGroup.{u3} A] [_inst_4 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2)] [_inst_5 : Module.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_6 : Module.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3)] [_inst_7 : IsScalarTower.{u1, u2, u3} F K A (Algebra.toSMul.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4) (SMulZeroClass.toSMul.{u2, u3} K A (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (SMulWithZero.toSMulZeroClass.{u2, u3} K A (MonoidWithZero.toZero.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (MulActionWithZero.toSMulWithZero.{u2, u3} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_2)) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (Module.toMulActionWithZero.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5)))) (SMulZeroClass.toSMul.{u1, u3} F A (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (SMulWithZero.toSMulZeroClass.{u1, u3} F A (CommMonoidWithZero.toZero.{u1} F (CommSemiring.toCommMonoidWithZero.{u1} F (CommRing.toCommSemiring.{u1} F _inst_1))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (MulActionWithZero.toSMulWithZero.{u1, u3} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))) (NegZeroClass.toZero.{u3} A (SubNegZeroMonoid.toNegZeroClass.{u3} A (SubtractionMonoid.toSubNegZeroMonoid.{u3} A (SubtractionCommMonoid.toSubtractionMonoid.{u3} A (AddCommGroup.toDivisionAddCommMonoid.{u3} A _inst_3))))) (Module.toMulActionWithZero.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))))] [_inst_8 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1))] [_inst_9 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_2)] [_inst_10 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4)] [_inst_11 : Module.Free.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5], Eq.{max (succ (succ u2)) (succ (succ u3))} Cardinal.{max u2 u3} (HMul.hMul.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} Cardinal.{max u2 u3} Cardinal.{max u3 u2} Cardinal.{max u2 u3} (instHMul.{max (succ u2) (succ u3)} Cardinal.{max u2 u3} Cardinal.instMulCardinal.{max u2 u3}) (Cardinal.lift.{u3, u2} (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_2)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_1) (Ring.toSemiring.{u2} K _inst_2) _inst_4))) (Cardinal.lift.{u2, u3} (Module.rank.{u2, u3} K A (Ring.toSemiring.{u2} K _inst_2) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_5))) (Cardinal.lift.{u2, u3} (Module.rank.{u1, u3} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_1)) (AddCommGroup.toAddCommMonoid.{u3} A _inst_3) _inst_6))
+Case conversion may be inaccurate. Consider using '#align lift_rank_mul_lift_rank lift_rank_mul_lift_rankₓ'. -/
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
theorem lift_rank_mul_lift_rank :
@@ -67,6 +73,12 @@ theorem lift_rank_mul_lift_rank :
lift_lift, lift_umax]
#align lift_rank_mul_lift_rank lift_rank_mul_lift_rank
+/- warning: rank_mul_rank -> rank_mul_rank is a dubious translation:
+lean 3 declaration is
+ forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u2}) [_inst_12 : CommRing.{u1} F] [_inst_13 : Ring.{u2} K] [_inst_14 : AddCommGroup.{u2} A] [_inst_15 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13)] [_inst_16 : Module.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_17 : Module.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_18 : IsScalarTower.{u1, u2, u2} F K A (SMulZeroClass.toHasSmul.{u1, u2} F K (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} F K (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)))))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F K (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13))))))) (Module.toMulActionWithZero.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15))))) (SMulZeroClass.toHasSmul.{u2, u2} K A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (SMulWithZero.toSmulZeroClass.{u2, u2} K A (MulZeroClass.toHasZero.{u2} K (MulZeroOneClass.toMulZeroClass.{u2} K (MonoidWithZero.toMulZeroOneClass.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (MulActionWithZero.toSMulWithZero.{u2, u2} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (Module.toMulActionWithZero.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)))) (SMulZeroClass.toHasSmul.{u1, u2} F A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (SMulWithZero.toSmulZeroClass.{u1, u2} F A (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (MulActionWithZero.toSMulWithZero.{u1, u2} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)))) (Module.toMulActionWithZero.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17))))] [_inst_19 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))] [_inst_20 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_13)] [_inst_21 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)] [_inst_22 : Module.Free.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16], Eq.{succ (succ u2)} Cardinal.{u2} (HMul.hMul.{succ u2, succ u2, succ u2} Cardinal.{u2} Cardinal.{u2} Cardinal.{u2} (instHMul.{succ u2} Cardinal.{u2} Cardinal.hasMul.{u2}) (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)) (Module.rank.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)) (Module.rank.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17)
+but is expected to have type
+ forall (F : Type.{u1}) (K : Type.{u2}) (A : Type.{u2}) [_inst_12 : CommRing.{u1} F] [_inst_13 : Ring.{u2} K] [_inst_14 : AddCommGroup.{u2} A] [_inst_15 : Algebra.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13)] [_inst_16 : Module.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_17 : Module.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14)] [_inst_18 : IsScalarTower.{u1, u2, u2} F K A (Algebra.toSMul.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15) (SMulZeroClass.toSMul.{u2, u2} K A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (SMulWithZero.toSMulZeroClass.{u2, u2} K A (MonoidWithZero.toZero.{u2} K (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (MulActionWithZero.toSMulWithZero.{u2, u2} K A (Semiring.toMonoidWithZero.{u2} K (Ring.toSemiring.{u2} K _inst_13)) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (Module.toMulActionWithZero.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)))) (SMulZeroClass.toSMul.{u1, u2} F A (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (SMulWithZero.toSMulZeroClass.{u1, u2} F A (CommMonoidWithZero.toZero.{u1} F (CommSemiring.toCommMonoidWithZero.{u1} F (CommRing.toCommSemiring.{u1} F _inst_12))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F A (Semiring.toMonoidWithZero.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))) (NegZeroClass.toZero.{u2} A (SubNegZeroMonoid.toNegZeroClass.{u2} A (SubtractionMonoid.toSubNegZeroMonoid.{u2} A (SubtractionCommMonoid.toSubtractionMonoid.{u2} A (AddCommGroup.toDivisionAddCommMonoid.{u2} A _inst_14))))) (Module.toMulActionWithZero.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17))))] [_inst_19 : StrongRankCondition.{u1} F (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12))] [_inst_20 : StrongRankCondition.{u2} K (Ring.toSemiring.{u2} K _inst_13)] [_inst_21 : Module.Free.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)] [_inst_22 : Module.Free.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16], Eq.{succ (succ u2)} Cardinal.{u2} (HMul.hMul.{succ u2, succ u2, succ u2} Cardinal.{u2} Cardinal.{u2} Cardinal.{u2} (instHMul.{succ u2} Cardinal.{u2} Cardinal.instMulCardinal.{u2}) (Module.rank.{u1, u2} F K (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K _inst_13)))) (Algebra.toModule.{u1, u2} F K (CommRing.toCommSemiring.{u1} F _inst_12) (Ring.toSemiring.{u2} K _inst_13) _inst_15)) (Module.rank.{u2, u2} K A (Ring.toSemiring.{u2} K _inst_13) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_16)) (Module.rank.{u1, u2} F A (Ring.toSemiring.{u1} F (CommRing.toRing.{u1} F _inst_12)) (AddCommGroup.toAddCommMonoid.{u2} A _inst_14) _inst_17)
+Case conversion may be inaccurate. Consider using '#align rank_mul_rank rank_mul_rankₓ'. -/
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.
@@ -78,6 +90,7 @@ theorem rank_mul_rank (F : Type u) (K A : Type v) [CommRing F] [Ring K] [AddComm
convert lift_rank_mul_lift_rank F K A <;> rw [lift_id]
#align rank_mul_rank rank_mul_rank
+#print FiniteDimensional.finrank_mul_finrank' /-
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
theorem FiniteDimensional.finrank_mul_finrank' [Nontrivial K] [Module.Finite F K]
@@ -89,6 +102,7 @@ theorem FiniteDimensional.finrank_mul_finrank' [Nontrivial K] [Module.Finite F K
rw [finrank_eq_card_basis b, finrank_eq_card_basis c, finrank_eq_card_basis (b.smul c),
Fintype.card_prod]
#align finite_dimensional.finrank_mul_finrank' FiniteDimensional.finrank_mul_finrank'
+-/
end Ring
@@ -102,10 +116,18 @@ namespace FiniteDimensional
open IsNoetherian
+#print FiniteDimensional.trans /-
theorem trans [FiniteDimensional F K] [FiniteDimensional K A] : FiniteDimensional F A :=
Module.Finite.trans K A
#align finite_dimensional.trans FiniteDimensional.trans
+-/
+/- warning: finite_dimensional.left -> FiniteDimensional.left is a dubious translation:
+lean 3 declaration is
+ forall (F : Type.{u1}) [_inst_1 : Field.{u1} F] (K : Type.{u2}) (L : Type.{u3}) [_inst_8 : Field.{u2} K] [_inst_9 : Algebra.{u1, u2} F K (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8)))] [_inst_10 : Ring.{u3} L] [_inst_11 : Nontrivial.{u3} L] [_inst_12 : Algebra.{u1, u3} F L (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u3} L _inst_10)] [_inst_13 : Algebra.{u2, u3} K L (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)) (Ring.toSemiring.{u3} L _inst_10)] [_inst_14 : IsScalarTower.{u1, u2, u3} F K L (SMulZeroClass.toHasSmul.{u1, u2} F K (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} F K (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1))))))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} F K (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)))) (AddZeroClass.toHasZero.{u2} K (AddMonoid.toAddZeroClass.{u2} K (AddCommMonoid.toAddMonoid.{u2} K (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))))))))) (Module.toMulActionWithZero.{u1, u2} F K (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} K (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} K (Semiring.toNonAssocSemiring.{u2} K (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8)))))) (Algebra.toModule.{u1, u2} F K (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))) _inst_9))))) (SMulZeroClass.toHasSmul.{u2, u3} K L (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (SMulWithZero.toSmulZeroClass.{u2, u3} K L (MulZeroClass.toHasZero.{u2} K (MulZeroOneClass.toMulZeroClass.{u2} K (MonoidWithZero.toMulZeroOneClass.{u2} K (Semiring.toMonoidWithZero.{u2} K (CommSemiring.toSemiring.{u2} K (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8))))))) (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (MulActionWithZero.toSMulWithZero.{u2, u3} K L (Semiring.toMonoidWithZero.{u2} K (CommSemiring.toSemiring.{u2} K (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)))) (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (Module.toMulActionWithZero.{u2, u3} K L (CommSemiring.toSemiring.{u2} K (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10)))) (Algebra.toModule.{u2, u3} K L (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)) (Ring.toSemiring.{u3} L _inst_10) _inst_13))))) (SMulZeroClass.toHasSmul.{u1, u3} F L (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (SMulWithZero.toSmulZeroClass.{u1, u3} F L (MulZeroClass.toHasZero.{u1} F (MulZeroOneClass.toMulZeroClass.{u1} F (MonoidWithZero.toMulZeroOneClass.{u1} F (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1))))))) (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (MulActionWithZero.toSMulWithZero.{u1, u3} F L (Semiring.toMonoidWithZero.{u1} F (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)))) (AddZeroClass.toHasZero.{u3} L (AddMonoid.toAddZeroClass.{u3} L (AddCommMonoid.toAddMonoid.{u3} L (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10))))))) (Module.toMulActionWithZero.{u1, u3} F L (CommSemiring.toSemiring.{u1} F (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1))) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} L (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} L (Semiring.toNonAssocSemiring.{u3} L (Ring.toSemiring.{u3} L _inst_10)))) (Algebra.toModule.{u1, u3} F L (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u3} L _inst_10) _inst_12)))))] [_inst_15 : FiniteDimensional.{u1, u3} F L (Field.toDivisionRing.{u1} F _inst_1) (NonUnitalNonAssocRing.toAddCommGroup.{u3} L (NonAssocRing.toNonUnitalNonAssocRing.{u3} L (Ring.toNonAssocRing.{u3} L _inst_10))) (Algebra.toModule.{u1, u3} F L (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u3} L _inst_10) _inst_12)], FiniteDimensional.{u1, u2} F K (Field.toDivisionRing.{u1} F _inst_1) (NonUnitalNonAssocRing.toAddCommGroup.{u2} K (NonAssocRing.toNonUnitalNonAssocRing.{u2} K (Ring.toNonAssocRing.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))))) (Algebra.toModule.{u1, u2} F K (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))) _inst_9)
+but is expected to have type
+ forall (F : Type.{u3}) [_inst_1 : Field.{u3} F] (K : Type.{u2}) (L : Type.{u1}) [_inst_8 : Field.{u2} K] [_inst_9 : Algebra.{u3, u2} F K (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (DivisionSemiring.toSemiring.{u2} K (Semifield.toDivisionSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)))] [_inst_10 : Ring.{u1} L] [_inst_11 : Nontrivial.{u1} L] [_inst_12 : Algebra.{u3, u1} F L (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (Ring.toSemiring.{u1} L _inst_10)] [_inst_13 : Algebra.{u2, u1} K L (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)) (Ring.toSemiring.{u1} L _inst_10)] [_inst_14 : IsScalarTower.{u3, u2, u1} F K L (Algebra.toSMul.{u3, u2} F K (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (DivisionSemiring.toSemiring.{u2} K (Semifield.toDivisionSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8))) _inst_9) (Algebra.toSMul.{u2, u1} K L (Semifield.toCommSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8)) (Ring.toSemiring.{u1} L _inst_10) _inst_13) (Algebra.toSMul.{u3, u1} F L (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (Ring.toSemiring.{u1} L _inst_10) _inst_12)] [_inst_15 : FiniteDimensional.{u3, u1} F L (Field.toDivisionRing.{u3} F _inst_1) (Ring.toAddCommGroup.{u1} L _inst_10) (Algebra.toModule.{u3, u1} F L (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (Ring.toSemiring.{u1} L _inst_10) _inst_12)], FiniteDimensional.{u3, u2} F K (Field.toDivisionRing.{u3} F _inst_1) (Ring.toAddCommGroup.{u2} K (DivisionRing.toRing.{u2} K (Field.toDivisionRing.{u2} K _inst_8))) (Algebra.toModule.{u3, u2} F K (Semifield.toCommSemiring.{u3} F (Field.toSemifield.{u3} F _inst_1)) (DivisionSemiring.toSemiring.{u2} K (Semifield.toDivisionSemiring.{u2} K (Field.toSemifield.{u2} K _inst_8))) _inst_9)
+Case conversion may be inaccurate. Consider using '#align finite_dimensional.left FiniteDimensional.leftₓ'. -/
/-- In a tower of field extensions `L / K / F`, if `L / F` is finite, so is `K / F`.
(In fact, it suffices that `L` is a nontrivial ring.)
@@ -117,6 +139,7 @@ theorem left (K L : Type _) [Field K] [Algebra F K] [Ring L] [Nontrivial L] [Alg
FiniteDimensional.of_injective (IsScalarTower.toAlgHom F K L).toLinearMap (RingHom.injective _)
#align finite_dimensional.left FiniteDimensional.left
+#print FiniteDimensional.right /-
theorem right [hf : FiniteDimensional F A] : FiniteDimensional K A :=
let ⟨⟨b, hb⟩⟩ := hf
⟨⟨b,
@@ -125,7 +148,9 @@ theorem right [hf : FiniteDimensional F A] : FiniteDimensional K A :=
rw [Submodule.restrictScalars_top, eq_top_iff, ← hb, Submodule.span_le]
exact Submodule.subset_span⟩⟩
#align finite_dimensional.right FiniteDimensional.right
+-/
+#print FiniteDimensional.finrank_mul_finrank /-
/-- Tower law: if `A` is a `K`-vector space and `K` is a field extension of `F` then
`dim_F(A) = dim_F(K) * dim_K(A)`.
@@ -138,7 +163,14 @@ theorem finrank_mul_finrank [FiniteDimensional F K] : finrank F K * finrank K A
· rw [finrank_of_infinite_dimensional hA, MulZeroClass.mul_zero, finrank_of_infinite_dimensional]
exact mt (@right F K A _ _ _ _ _ _ _) hA
#align finite_dimensional.finrank_mul_finrank FiniteDimensional.finrank_mul_finrank
+-/
+/- warning: finite_dimensional.subalgebra.is_simple_order_of_finrank_prime -> FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime is a dubious translation:
+lean 3 declaration is
+ forall (F : Type.{u1}) [_inst_1 : Field.{u1} F] (A : Type.{u2}) [_inst_8 : Ring.{u2} A] [_inst_9 : IsDomain.{u2} A (Ring.toSemiring.{u2} A _inst_8)] [_inst_10 : Algebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8)], (Nat.Prime (FiniteDimensional.finrank.{u1, u2} F A (Ring.toSemiring.{u1} F (DivisionRing.toRing.{u1} F (Field.toDivisionRing.{u1} F _inst_1))) (NonUnitalNonAssocRing.toAddCommGroup.{u2} A (NonAssocRing.toNonUnitalNonAssocRing.{u2} A (Ring.toNonAssocRing.{u2} A _inst_8))) (Algebra.toModule.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10))) -> (IsSimpleOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Algebra.Subalgebra.completeLattice.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10))))) (CompleteLattice.toBoundedOrder.{u2} (Subalgebra.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10) (Algebra.Subalgebra.completeLattice.{u1, u2} F A (Semifield.toCommSemiring.{u1} F (Field.toSemifield.{u1} F _inst_1)) (Ring.toSemiring.{u2} A _inst_8) _inst_10)))
+but is expected to have type
+ forall (F : Type.{u2}) [_inst_1 : Field.{u2} F] (A : Type.{u1}) [_inst_8 : Ring.{u1} A] [_inst_9 : IsDomain.{u1} A (Ring.toSemiring.{u1} A _inst_8)] [_inst_10 : Algebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8)], (Nat.Prime (FiniteDimensional.finrank.{u2, u1} F A (DivisionSemiring.toSemiring.{u2} F (Semifield.toDivisionSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1))) (Ring.toAddCommGroup.{u1} A _inst_8) (Algebra.toModule.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10))) -> (IsSimpleOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10))))) (CompleteLattice.toBoundedOrder.{u1} (Subalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} F A (Semifield.toCommSemiring.{u2} F (Field.toSemifield.{u2} F _inst_1)) (Ring.toSemiring.{u1} A _inst_8) _inst_10)))
+Case conversion may be inaccurate. Consider using '#align finite_dimensional.subalgebra.is_simple_order_of_finrank_prime FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_primeₓ'. -/
theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Algebra F A]
(hp : (finrank F A).Prime) : IsSimpleOrder (Subalgebra F A) :=
{ to_nontrivial :=
@@ -155,6 +187,7 @@ theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Alg
Algebra.toSubmodule_eq_top.1 (eq_top_of_finrank_eq <| K.finrank_to_submodule.trans h) }
#align finite_dimensional.subalgebra.is_simple_order_of_finrank_prime FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime
+#print LinearMap.finite_dimensional'' /-
-- TODO: `intermediate_field` version
-- TODO: generalize by removing [finite_dimensional F K]
-- V = ⊕F,
@@ -164,7 +197,9 @@ instance LinearMap.finite_dimensional'' (F : Type u) (K : Type v) (V : Type w) [
FiniteDimensional K (V →ₗ[F] K) :=
right F _ _
#align linear_map.finite_dimensional'' LinearMap.finite_dimensional''
+-/
+#print FiniteDimensional.finrank_linear_map' /-
theorem finrank_linear_map' (F : Type u) (K : Type v) (V : Type w) [Field F] [Field K] [Algebra F K]
[FiniteDimensional F K] [AddCommGroup V] [Module F V] [FiniteDimensional F V] :
finrank K (V →ₗ[F] K) = finrank F V :=
@@ -175,6 +210,7 @@ theorem finrank_linear_map' (F : Type u) (K : Type v) (V : Type w) [Field F] [Fi
_ = finrank F K * finrank F V := mul_comm _ _
#align finite_dimensional.finrank_linear_map' FiniteDimensional.finrank_linear_map'
+-/
end FiniteDimensional
mathlib commit https://github.com/leanprover-community/mathlib/commit/a4f99eae998680d3a2c240da4a2b16354c85ee49
@@ -4,14 +4,14 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
! This file was ported from Lean 3 source module field_theory.tower
-! leanprover-community/mathlib commit fa78268d4d77cb2b2fbc89f0527e2e7807763780
+! leanprover-community/mathlib commit c7bce2818663f456335892ddbdd1809f111a5b72
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Data.Nat.Prime
import Mathbin.RingTheory.AlgebraTower
-import Mathbin.LinearAlgebra.Matrix.FiniteDimensional
-import Mathbin.LinearAlgebra.Matrix.ToLin
+import Mathbin.LinearAlgebra.FiniteDimensional
+import Mathbin.LinearAlgebra.FreeModule.Finite.Matrix
/-!
# Tower of field extensions
@@ -20,8 +20,8 @@ In this file we prove the tower law for arbitrary extensions and finite extensio
Suppose `L` is a field extension of `K` and `K` is a field extension of `F`.
Then `[L:F] = [L:K] [K:F]` where `[E₁:E₂]` means the `E₂`-dimension of `E₁`.
-In fact we generalize it to vector spaces, where `L` is not necessarily a field,
-but just a vector space over `K`.
+In fact we generalize it to rings and modules, where `L` is not necessarily a field,
+but just a free module over `K`.
## Implementation notes
@@ -40,37 +40,64 @@ universe u v w u₁ v₁ w₁
open Classical BigOperators
-section Field
+open FiniteDimensional
open Cardinal
variable (F : Type u) (K : Type v) (A : Type w)
-variable [Field F] [DivisionRing K] [AddCommGroup A]
+section Ring
+
+variable [CommRing F] [Ring K] [AddCommGroup A]
variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
-/-- Tower law: if `A` is a `K`-vector space and `K` is a field extension of `F` then
-`dim_F(A) = dim_F(K) * dim_K(A)`. -/
-theorem rank_mul_rank' :
+variable [StrongRankCondition F] [StrongRankCondition K] [Module.Free F K] [Module.Free K A]
+
+/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
+$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
+theorem lift_rank_mul_lift_rank :
Cardinal.lift.{w} (Module.rank F K) * Cardinal.lift.{v} (Module.rank K A) =
Cardinal.lift.{v} (Module.rank F A) :=
by
- let b := Basis.ofVectorSpace F K
- let c := Basis.ofVectorSpace K A
+ obtain ⟨_, b⟩ := Module.Free.exists_basis F K
+ obtain ⟨_, c⟩ := Module.Free.exists_basis K A
rw [← (Module.rank F K).lift_id, ← b.mk_eq_rank, ← (Module.rank K A).lift_id, ← c.mk_eq_rank, ←
lift_umax.{w, v}, ← (b.smul c).mk_eq_rank, mk_prod, lift_mul, lift_lift, lift_lift, lift_lift,
lift_lift, lift_umax]
-#align rank_mul_rank' rank_mul_rank'
+#align lift_rank_mul_lift_rank lift_rank_mul_lift_rank
-/-- Tower law: if `A` is a `K`-vector space and `K` is a field extension of `F` then
-`dim_F(A) = dim_F(K) * dim_K(A)`. -/
-theorem rank_mul_rank (F : Type u) (K A : Type v) [Field F] [Field K] [AddCommGroup A] [Algebra F K]
- [Module K A] [Module F A] [IsScalarTower F K A] :
+/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
+$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.
+
+This is a simpler version of `lift_rank_mul_lift_rank` with `K` and `A` in the same universe. -/
+theorem rank_mul_rank (F : Type u) (K A : Type v) [CommRing F] [Ring K] [AddCommGroup A]
+ [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A] [StrongRankCondition F]
+ [StrongRankCondition K] [Module.Free F K] [Module.Free K A] :
Module.rank F K * Module.rank K A = Module.rank F A := by
- convert rank_mul_rank' F K A <;> rw [lift_id]
+ convert lift_rank_mul_lift_rank F K A <;> rw [lift_id]
#align rank_mul_rank rank_mul_rank
+/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
+$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
+theorem FiniteDimensional.finrank_mul_finrank' [Nontrivial K] [Module.Finite F K]
+ [Module.Finite K A] : finrank F K * finrank K A = finrank F A :=
+ by
+ letI := nontrivial_of_invariantBasisNumber F
+ let b := Module.Free.chooseBasis F K
+ let c := Module.Free.chooseBasis K A
+ rw [finrank_eq_card_basis b, finrank_eq_card_basis c, finrank_eq_card_basis (b.smul c),
+ Fintype.card_prod]
+#align finite_dimensional.finrank_mul_finrank' FiniteDimensional.finrank_mul_finrank'
+
+end Ring
+
+section Field
+
+variable [Field F] [DivisionRing K] [AddCommGroup A]
+
+variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
+
namespace FiniteDimensional
open IsNoetherian
@@ -99,16 +126,15 @@ theorem right [hf : FiniteDimensional F A] : FiniteDimensional K A :=
exact Submodule.subset_span⟩⟩
#align finite_dimensional.right FiniteDimensional.right
-/-- Tower law: if `A` is a `K`-algebra and `K` is a field extension of `F` then
-`dim_F(A) = dim_F(K) * dim_K(A)`. -/
+/-- Tower law: if `A` is a `K`-vector space and `K` is a field extension of `F` then
+`dim_F(A) = dim_F(K) * dim_K(A)`.
+
+This is `finite_dimensional.finrank_mul_finrank'` with one fewer finiteness assumption. -/
theorem finrank_mul_finrank [FiniteDimensional F K] : finrank F K * finrank K A = finrank F A :=
by
by_cases hA : FiniteDimensional K A
· skip
- let b := Basis.ofVectorSpace F K
- let c := Basis.ofVectorSpace K A
- rw [finrank_eq_card_basis b, finrank_eq_card_basis c, finrank_eq_card_basis (b.smul c),
- Fintype.card_prod]
+ rw [finrank_mul_finrank']
· rw [finrank_of_infinite_dimensional hA, MulZeroClass.mul_zero, finrank_of_infinite_dimensional]
exact mt (@right F K A _ _ _ _ _ _ _) hA
#align finite_dimensional.finrank_mul_finrank FiniteDimensional.finrank_mul_finrank
mathlib commit https://github.com/leanprover-community/mathlib/commit/fa78268d4d77cb2b2fbc89f0527e2e7807763780
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
! This file was ported from Lean 3 source module field_theory.tower
-! leanprover-community/mathlib commit b1c23399f01266afe392a0d8f71f599a0dad4f7b
+! leanprover-community/mathlib commit fa78268d4d77cb2b2fbc89f0527e2e7807763780
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -76,9 +76,7 @@ namespace FiniteDimensional
open IsNoetherian
theorem trans [FiniteDimensional F K] [FiniteDimensional K A] : FiniteDimensional F A :=
- let b := Basis.ofVectorSpace F K
- let c := Basis.ofVectorSpace K A
- of_fintype_basis <| b.smul c
+ Module.Finite.trans K A
#align finite_dimensional.trans FiniteDimensional.trans
/-- In a tower of field extensions `L / K / F`, if `L / F` is finite, so is `K / F`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/e05ead7993520a432bec94ac504842d90707ad63
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
! This file was ported from Lean 3 source module field_theory.tower
-! leanprover-community/mathlib commit 039a089d2a4b93c761b234f3e5f5aeb752bac60f
+! leanprover-community/mathlib commit b1c23399f01266afe392a0d8f71f599a0dad4f7b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -131,33 +131,15 @@ theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Alg
Algebra.toSubmodule_eq_top.1 (eq_top_of_finrank_eq <| K.finrank_to_submodule.trans h) }
#align finite_dimensional.subalgebra.is_simple_order_of_finrank_prime FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime
--- TODO: `intermediate_field` version
-instance linearMap (F : Type u) (V : Type v) (W : Type w) [Field F] [AddCommGroup V] [Module F V]
- [AddCommGroup W] [Module F W] [FiniteDimensional F V] [FiniteDimensional F W] :
- FiniteDimensional F (V →ₗ[F] W) :=
- let b := Basis.ofVectorSpace F V
- let c := Basis.ofVectorSpace F W
- (Matrix.toLin b c).FiniteDimensional
-#align finite_dimensional.linear_map FiniteDimensional.linearMap
-
-theorem finrank_linearMap (F : Type u) (V : Type v) (W : Type w) [Field F] [AddCommGroup V]
- [Module F V] [AddCommGroup W] [Module F W] [FiniteDimensional F V] [FiniteDimensional F W] :
- finrank F (V →ₗ[F] W) = finrank F V * finrank F W :=
- by
- let b := Basis.ofVectorSpace F V
- let c := Basis.ofVectorSpace F W
- rw [LinearEquiv.finrank_eq (LinearMap.toMatrix b c), Matrix.finrank_matrix,
- finrank_eq_card_basis b, finrank_eq_card_basis c, mul_comm]
-#align finite_dimensional.finrank_linear_map FiniteDimensional.finrank_linearMap
-
+-- TODO: `intermediate_field` version
-- TODO: generalize by removing [finite_dimensional F K]
-- V = ⊕F,
-- (V →ₗ[F] K) = ((⊕F) →ₗ[F] K) = (⊕ (F →ₗ[F] K)) = ⊕K
-instance linear_map' (F : Type u) (K : Type v) (V : Type w) [Field F] [Field K] [Algebra F K]
- [FiniteDimensional F K] [AddCommGroup V] [Module F V] [FiniteDimensional F V] :
+instance LinearMap.finite_dimensional'' (F : Type u) (K : Type v) (V : Type w) [Field F] [Field K]
+ [Algebra F K] [FiniteDimensional F K] [AddCommGroup V] [Module F V] [FiniteDimensional F V] :
FiniteDimensional K (V →ₗ[F] K) :=
right F _ _
-#align finite_dimensional.linear_map' FiniteDimensional.linear_map'
+#align linear_map.finite_dimensional'' LinearMap.finite_dimensional''
theorem finrank_linear_map' (F : Type u) (K : Type v) (V : Type w) [Field F] [Field K] [Algebra F K]
[FiniteDimensional F K] [AddCommGroup V] [Module F V] [FiniteDimensional F V] :
mathlib commit https://github.com/leanprover-community/mathlib/commit/06a655b5fcfbda03502f9158bbf6c0f1400886f9
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
! This file was ported from Lean 3 source module field_theory.tower
-! leanprover-community/mathlib commit c4658a649d216f57e99621708b09dcb3dcccbd23
+! leanprover-community/mathlib commit 039a089d2a4b93c761b234f3e5f5aeb752bac60f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -52,24 +52,24 @@ variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
/-- Tower law: if `A` is a `K`-vector space and `K` is a field extension of `F` then
`dim_F(A) = dim_F(K) * dim_K(A)`. -/
-theorem dim_mul_dim' :
+theorem rank_mul_rank' :
Cardinal.lift.{w} (Module.rank F K) * Cardinal.lift.{v} (Module.rank K A) =
Cardinal.lift.{v} (Module.rank F A) :=
by
let b := Basis.ofVectorSpace F K
let c := Basis.ofVectorSpace K A
- rw [← (Module.rank F K).lift_id, ← b.mk_eq_dim, ← (Module.rank K A).lift_id, ← c.mk_eq_dim, ←
- lift_umax.{w, v}, ← (b.smul c).mk_eq_dim, mk_prod, lift_mul, lift_lift, lift_lift, lift_lift,
+ rw [← (Module.rank F K).lift_id, ← b.mk_eq_rank, ← (Module.rank K A).lift_id, ← c.mk_eq_rank, ←
+ lift_umax.{w, v}, ← (b.smul c).mk_eq_rank, mk_prod, lift_mul, lift_lift, lift_lift, lift_lift,
lift_lift, lift_umax]
-#align dim_mul_dim' dim_mul_dim'
+#align rank_mul_rank' rank_mul_rank'
/-- Tower law: if `A` is a `K`-vector space and `K` is a field extension of `F` then
`dim_F(A) = dim_F(K) * dim_K(A)`. -/
-theorem dim_mul_dim (F : Type u) (K A : Type v) [Field F] [Field K] [AddCommGroup A] [Algebra F K]
+theorem rank_mul_rank (F : Type u) (K A : Type v) [Field F] [Field K] [AddCommGroup A] [Algebra F K]
[Module K A] [Module F A] [IsScalarTower F K A] :
Module.rank F K * Module.rank K A = Module.rank F A := by
- convert dim_mul_dim' F K A <;> rw [lift_id]
-#align dim_mul_dim dim_mul_dim
+ convert rank_mul_rank' F K A <;> rw [lift_id]
+#align rank_mul_rank rank_mul_rank
namespace FiniteDimensional
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -111,7 +111,7 @@ theorem finrank_mul_finrank [FiniteDimensional F K] : finrank F K * finrank K A
let c := Basis.ofVectorSpace K A
rw [finrank_eq_card_basis b, finrank_eq_card_basis c, finrank_eq_card_basis (b.smul c),
Fintype.card_prod]
- · rw [finrank_of_infinite_dimensional hA, mul_zero, finrank_of_infinite_dimensional]
+ · rw [finrank_of_infinite_dimensional hA, MulZeroClass.mul_zero, finrank_of_infinite_dimensional]
exact mt (@right F K A _ _ _ _ _ _ _) hA
#align finite_dimensional.finrank_mul_finrank FiniteDimensional.finrank_mul_finrank
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -165,7 +165,7 @@ theorem finrank_linear_map' (F : Type u) (K : Type v) (V : Type w) [Field F] [Fi
mul_right_injective₀ finrank_pos.ne' <|
calc
finrank F K * finrank K (V →ₗ[F] K) = finrank F (V →ₗ[F] K) := finrank_mul_finrank _ _ _
- _ = finrank F V * finrank F K := finrank_linearMap F V K
+ _ = finrank F V * finrank F K := (finrank_linearMap F V K)
_ = finrank F K * finrank F V := mul_comm _ _
#align finite_dimensional.finrank_linear_map' FiniteDimensional.finrank_linear_map'
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
FiniteDimensional.trans
higher up the import hierarchy (#12079)
@YaelDillies pointed out that the import Data.Complex.Module → FieldTheory.Tower
brings with it too many things. The only declaration from FieldTheory.Tower
needed for Data.Complex.Module
is FiniteDimensional.trans
, which we can easily move up the import hierarchy (14 imports higher, in fact). So this means we can cut the long pole of Mathlib by up to 13 files.
Specific Zulip discussion starts here: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/The.20long.20pole.20in.20mathlib/near/432796670
@@ -48,10 +48,6 @@ namespace FiniteDimensional
open IsNoetherian
-theorem trans [FiniteDimensional F K] [FiniteDimensional K A] : FiniteDimensional F A :=
- Module.Finite.trans K A
-#align finite_dimensional.trans FiniteDimensional.trans
-
/-- In a tower of field extensions `A / K / F`, if `A / F` is finite, so is `K / F`.
(In fact, it suffices that `A` is a nontrivial ring.)
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)
@@ -42,7 +42,6 @@ variable (F : Type u) (K : Type v) (A : Type w)
section Field
variable [DivisionRing F] [DivisionRing K] [AddCommGroup A]
-
variable [Module F K] [Module K A] [Module F A] [IsScalarTower F K A]
namespace FiniteDimensional
Rename lemmas to enable new-style dot notation or drop repeating FiniteDimensional.finiteDimensional_*
.
Restore old names as deprecated aliases.
@@ -78,7 +78,7 @@ theorem Subalgebra.isSimpleOrder_of_finrank_prime (F A) [Field F] [Ring A] [IsDo
⟨⟨⊥, ⊤, fun he =>
Nat.not_prime_one ((Subalgebra.bot_eq_top_iff_finrank_eq_one.1 he).subst hp)⟩⟩
eq_bot_or_eq_top := fun K => by
- haveI : FiniteDimensional _ _ := finiteDimensional_of_finrank hp.pos
+ haveI : FiniteDimensional _ _ := .of_finrank_pos hp.pos
letI := divisionRingOfFiniteDimensional F K
refine' (hp.eq_one_or_self_of_dvd _ ⟨_, (finrank_mul_finrank F K A).symm⟩).imp _ fun h => _
· exact Subalgebra.eq_bot_of_finrank_one
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>
@@ -87,23 +87,7 @@ theorem Subalgebra.isSimpleOrder_of_finrank_prime (F A) [Field F] [Ring A] [IsDo
#align finite_dimensional.subalgebra.is_simple_order_of_finrank_prime FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime
-- TODO: `IntermediateField` version
--- TODO: generalize by removing [FiniteDimensional F K]
--- V = ⊕F,
--- (V →ₗ[F] K) = ((⊕F) →ₗ[F] K) = (⊕ (F →ₗ[F] K)) = ⊕K
-instance _root_.LinearMap.finite_dimensional'' (F : Type u) (K : Type v) (V : Type w) [Field F]
- [Field K] [Algebra F K] [FiniteDimensional F K] [AddCommGroup V] [Module F V]
- [FiniteDimensional F V] : FiniteDimensional K (V →ₗ[F] K) :=
- right F _ _
-#align linear_map.finite_dimensional'' LinearMap.finite_dimensional''
-
-theorem finrank_linear_map' (F : Type u) (K : Type v) (V : Type w) [Field F] [Field K] [Algebra F K]
- [FiniteDimensional F K] [AddCommGroup V] [Module F V] [FiniteDimensional F V] :
- finrank K (V →ₗ[F] K) = finrank F V :=
- mul_right_injective₀ finrank_pos.ne' <|
- calc
- finrank F K * finrank K (V →ₗ[F] K) = finrank F (V →ₗ[F] K) := finrank_mul_finrank _ _ _
- _ = finrank F V * finrank F K := (finrank_linearMap F V K)
- _ = finrank F K * finrank F V := mul_comm _ _
+@[deprecated] alias finrank_linear_map' := FiniteDimensional.finrank_linearMap_self
#align finite_dimensional.finrank_linear_map' FiniteDimensional.finrank_linear_map'
end FiniteDimensional
FiniteDimensional.finrank_mul_finrank
(#9046)
Generalize the conditions of the tower law FiniteDimensional.finrank_mul_finrank' in FieldTheory/Tower from [CommRing F] [Algebra F K]
to [Ring F] [Module F K]
, and remove the [Module.Finite F K]
and [Module.Finite K A]
conditions.
The generalized version applies to situations when we have a tower C/B/A where the A-module structure on C is induced from the B-module structure via a RingHom from A to B, and the A-module structure on B is induced by the same RingHom. In particular, it applies when the A-module structure on B and the B-module structure on C come from two RingHoms, and the A-module structure on C comes from the composition of them, regardless of whether A and B are commutative or not.
As prerequisites, I also generalized lemmas originally introduced by @kckennylau in [mathlib3#3355](https://github.com/leanprover-community/mathlib/pull/3355/files) to prove the tower law. They were split into three PRs:
LinearAlgebra/Span #9380: add span_eq_closure
and closure_induction
which say that Submodule.span R s
is generated by R • s
as an AddSubmonoid. I feel that the existing span_induction
should be replaced by closure_induction
as the latter is stronger, and allow us to remove the commutativity condition in span_smul_of_span_eq_top
in Algebra/Tower.
Algebra/Tower #9382: switching from CommSemiring/Algebra to Semiring/Module here requires proving the curious lemma IsScalarTower.isLinearMap
which states that for a tower of modules A/S/R, any S-linear map from S to A is also R-linear. If the map is injective, we can deduce that S/S/R also form a tower. (By ringHomEquivModuleIsScalarTower
in #9381, there is therefore a canonical RingHom from R to S.)
Lemmas for free modules over rings including finrank_mul_finrank'
are moved from FieldTheory/Tower to LinearAlgebra/Dimension/Free
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -39,58 +39,11 @@ open BigOperators Cardinal Submodule
variable (F : Type u) (K : Type v) (A : Type w)
-section Ring
-
-variable [CommRing F] [Ring K] [AddCommGroup A]
-
-variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
-
-variable [StrongRankCondition F] [StrongRankCondition K]
- [Module.Free F K] [Module.Free K A]
-
-/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
-$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
-theorem lift_rank_mul_lift_rank :
- Cardinal.lift.{w} (Module.rank F K) * Cardinal.lift.{v} (Module.rank K A) =
- Cardinal.lift.{v} (Module.rank F A) := by
- -- porting note: `Module.Free.exists_basis` now has implicit arguments, but this is annoying
- -- to fix as it is a projection.
- obtain ⟨_, b⟩ := Module.Free.exists_basis (R := F) (M := K)
- obtain ⟨_, c⟩ := Module.Free.exists_basis (R := K) (M := A)
- rw [← (Module.rank F K).lift_id, ← b.mk_eq_rank, ← (Module.rank K A).lift_id, ← c.mk_eq_rank, ←
- lift_umax.{w, v}, ← (b.smul c).mk_eq_rank, mk_prod, lift_mul, lift_lift, lift_lift, lift_lift,
- lift_lift, lift_umax.{v, w}]
-#align lift_rank_mul_lift_rank lift_rank_mul_lift_rank
-
-/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
-$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.
-
-This is a simpler version of `lift_rank_mul_lift_rank` with `K` and `A` in the same universe. -/
-theorem rank_mul_rank (F : Type u) (K A : Type v) [CommRing F] [Ring K] [AddCommGroup A]
- [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A] [StrongRankCondition F]
- [StrongRankCondition K] [Module.Free F K] [Module.Free K A] :
- Module.rank F K * Module.rank K A = Module.rank F A := by
- convert lift_rank_mul_lift_rank F K A <;> rw [lift_id]
-#align rank_mul_rank rank_mul_rank
-
-/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
-$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
-theorem FiniteDimensional.finrank_mul_finrank' [Module.Finite F K]
- [Module.Finite K A] : finrank F K * finrank K A = finrank F A := by
- letI := nontrivial_of_invariantBasisNumber F
- let b := Module.Free.chooseBasis F K
- let c := Module.Free.chooseBasis K A
- rw [finrank_eq_card_basis b, finrank_eq_card_basis c, finrank_eq_card_basis (b.smul c),
- Fintype.card_prod]
-#align finite_dimensional.finrank_mul_finrank' FiniteDimensional.finrank_mul_finrank'
-
-end Ring
-
section Field
-variable [Field F] [DivisionRing K] [AddCommGroup A]
+variable [DivisionRing F] [DivisionRing K] [AddCommGroup A]
-variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
+variable [Module F K] [Module K A] [Module F A] [IsScalarTower F K A]
namespace FiniteDimensional
@@ -100,15 +53,16 @@ theorem trans [FiniteDimensional F K] [FiniteDimensional K A] : FiniteDimensiona
Module.Finite.trans K A
#align finite_dimensional.trans FiniteDimensional.trans
-/-- In a tower of field extensions `L / K / F`, if `L / F` is finite, so is `K / F`.
+/-- In a tower of field extensions `A / K / F`, if `A / F` is finite, so is `K / F`.
-(In fact, it suffices that `L` is a nontrivial ring.)
+(In fact, it suffices that `A` is a nontrivial ring.)
-Note this cannot be an instance as Lean cannot infer `L`.
+Note this cannot be an instance as Lean cannot infer `A`.
-/
-theorem left (K L : Type*) [Field K] [Algebra F K] [Ring L] [Nontrivial L] [Algebra F L]
- [Algebra K L] [IsScalarTower F K L] [FiniteDimensional F L] : FiniteDimensional F K :=
- FiniteDimensional.of_injective (IsScalarTower.toAlgHom F K L).toLinearMap (RingHom.injective _)
+theorem left [Nontrivial A] [FiniteDimensional F A] : FiniteDimensional F K :=
+ let ⟨x, hx⟩ := exists_ne (0 : A)
+ FiniteDimensional.of_injective
+ (LinearMap.ringLmapEquivSelf K ℕ A |>.symm x |>.restrictScalars F) (smul_left_injective K hx)
#align finite_dimensional.left FiniteDimensional.left
theorem right [hf : FiniteDimensional F A] : FiniteDimensional K A :=
@@ -118,20 +72,8 @@ theorem right [hf : FiniteDimensional F A] : FiniteDimensional K A :=
exact Submodule.subset_span⟩⟩
#align finite_dimensional.right FiniteDimensional.right
-/-- Tower law: if `A` is a `K`-vector space and `K` is a field extension of `F` then
-`dim_F(A) = dim_F(K) * dim_K(A)`.
-
-This is `FiniteDimensional.finrank_mul_finrank'` with one fewer finiteness assumption. -/
-theorem finrank_mul_finrank [FiniteDimensional F K] : finrank F K * finrank K A = finrank F A := by
- by_cases hA : FiniteDimensional K A
- · replace hA : FiniteDimensional K A := hA -- porting note: broken instance cache
- rw [finrank_mul_finrank']
- · rw [finrank_of_infinite_dimensional hA, mul_zero, finrank_of_infinite_dimensional]
- exact mt (@right F K A _ _ _ _ _ _ _) hA
-#align finite_dimensional.finrank_mul_finrank FiniteDimensional.finrank_mul_finrank
-
-theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Algebra F A]
- (hp : (finrank F A).Prime) : IsSimpleOrder (Subalgebra F A) :=
+theorem Subalgebra.isSimpleOrder_of_finrank_prime (F A) [Field F] [Ring A] [IsDomain A]
+ [Algebra F A] (hp : (finrank F A).Prime) : IsSimpleOrder (Subalgebra F A) :=
{ toNontrivial :=
⟨⟨⊥, ⊤, fun he =>
Nat.not_prime_one ((Subalgebra.bot_eq_top_iff_finrank_eq_one.1 he).subst hp)⟩⟩
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -126,7 +126,7 @@ theorem finrank_mul_finrank [FiniteDimensional F K] : finrank F K * finrank K A
by_cases hA : FiniteDimensional K A
· replace hA : FiniteDimensional K A := hA -- porting note: broken instance cache
rw [finrank_mul_finrank']
- · rw [finrank_of_infinite_dimensional hA, MulZeroClass.mul_zero, finrank_of_infinite_dimensional]
+ · rw [finrank_of_infinite_dimensional hA, mul_zero, finrank_of_infinite_dimensional]
exact mt (@right F K A _ _ _ _ _ _ _) hA
#align finite_dimensional.finrank_mul_finrank FiniteDimensional.finrank_mul_finrank
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -106,7 +106,7 @@ theorem trans [FiniteDimensional F K] [FiniteDimensional K A] : FiniteDimensiona
Note this cannot be an instance as Lean cannot infer `L`.
-/
-theorem left (K L : Type _) [Field K] [Algebra F K] [Ring L] [Nontrivial L] [Algebra F L]
+theorem left (K L : Type*) [Field K] [Algebra F K] [Ring L] [Nontrivial L] [Algebra F L]
[Algebra K L] [IsScalarTower F K L] [FiniteDimensional F L] : FiniteDimensional F K :=
FiniteDimensional.of_injective (IsScalarTower.toAlgHom F K L).toLinearMap (RingHom.injective _)
#align finite_dimensional.left FiniteDimensional.left
ChooseBasisIndex
is finite on trivial modules (#6322)
This also changes basisFintypeOfFiniteSpans
to use Finite
rather than Fintype
, as it was noncomputable anyway.
This means it has to be renamed to basis_finite_of_finite_spans
as it now is a proof!
Co-authored-by: Oliver Nash <github@olivernash.org>
@@ -75,7 +75,7 @@ theorem rank_mul_rank (F : Type u) (K A : Type v) [CommRing F] [Ring K] [AddComm
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
-theorem FiniteDimensional.finrank_mul_finrank' [Nontrivial K] [Module.Finite F K]
+theorem FiniteDimensional.finrank_mul_finrank' [Module.Finite F K]
[Module.Finite K A] : finrank F K * finrank K A = finrank F A := by
letI := nontrivial_of_invariantBasisNumber F
let b := Module.Free.chooseBasis F K
The lemma is a perfect duplicate of Submodule.eq_top_of_finrank_eq
.
@@ -35,7 +35,7 @@ tower law
universe u v w u₁ v₁ w₁
-open Classical BigOperators FiniteDimensional Cardinal
+open BigOperators Cardinal Submodule
variable (F : Type u) (K : Type v) (A : Type w)
@@ -2,17 +2,14 @@
Copyright (c) 2020 Kenny Lau. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kenny Lau
-
-! This file was ported from Lean 3 source module field_theory.tower
-! leanprover-community/mathlib commit c7bce2818663f456335892ddbdd1809f111a5b72
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Nat.Prime
import Mathlib.RingTheory.AlgebraTower
import Mathlib.LinearAlgebra.FiniteDimensional
import Mathlib.LinearAlgebra.FreeModule.Finite.Matrix
+#align_import field_theory.tower from "leanprover-community/mathlib"@"c7bce2818663f456335892ddbdd1809f111a5b72"
+
/-!
# Tower of field extensions
Now that leanprover/lean4#2210 has been merged, this PR:
set_option synthInstance.etaExperiment true
commands (and some etaExperiment%
term elaborators)set_option maxHeartbeats
commandsCo-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Matthew Ballard <matt@mrb.email>
@@ -49,9 +49,8 @@ variable [CommRing F] [Ring K] [AddCommGroup A]
variable [Algebra F K] [Module K A] [Module F A] [IsScalarTower F K A]
variable [StrongRankCondition F] [StrongRankCondition K]
- [eta_experiment% Module.Free F K] [Module.Free K A]
+ [Module.Free F K] [Module.Free K A]
-set_option synthInstance.etaExperiment true in
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
theorem lift_rank_mul_lift_rank :
@@ -66,7 +65,6 @@ theorem lift_rank_mul_lift_rank :
lift_lift, lift_umax.{v, w}]
#align lift_rank_mul_lift_rank lift_rank_mul_lift_rank
-set_option synthInstance.etaExperiment true in
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$.
@@ -78,7 +76,6 @@ theorem rank_mul_rank (F : Type u) (K A : Type v) [CommRing F] [Ring K] [AddComm
convert lift_rank_mul_lift_rank F K A <;> rw [lift_id]
#align rank_mul_rank rank_mul_rank
-set_option synthInstance.etaExperiment true in
/-- Tower law: if `A` is a `K`-module and `K` is an extension of `F` then
$\operatorname{rank}_F(A) = \operatorname{rank}_F(K) * \operatorname{rank}_K(A)$. -/
theorem FiniteDimensional.finrank_mul_finrank' [Nontrivial K] [Module.Finite F K]
@@ -102,12 +99,10 @@ namespace FiniteDimensional
open IsNoetherian
-set_option synthInstance.etaExperiment true in
theorem trans [FiniteDimensional F K] [FiniteDimensional K A] : FiniteDimensional F A :=
Module.Finite.trans K A
#align finite_dimensional.trans FiniteDimensional.trans
-set_option synthInstance.etaExperiment true in
/-- In a tower of field extensions `L / K / F`, if `L / F` is finite, so is `K / F`.
(In fact, it suffices that `L` is a nontrivial ring.)
@@ -119,7 +114,6 @@ theorem left (K L : Type _) [Field K] [Algebra F K] [Ring L] [Nontrivial L] [Alg
FiniteDimensional.of_injective (IsScalarTower.toAlgHom F K L).toLinearMap (RingHom.injective _)
#align finite_dimensional.left FiniteDimensional.left
-set_option synthInstance.etaExperiment true in
theorem right [hf : FiniteDimensional F A] : FiniteDimensional K A :=
let ⟨⟨b, hb⟩⟩ := hf
⟨⟨b, Submodule.restrictScalars_injective F _ _ <| by
@@ -127,7 +121,6 @@ theorem right [hf : FiniteDimensional F A] : FiniteDimensional K A :=
exact Submodule.subset_span⟩⟩
#align finite_dimensional.right FiniteDimensional.right
-set_option synthInstance.etaExperiment true in
/-- Tower law: if `A` is a `K`-vector space and `K` is a field extension of `F` then
`dim_F(A) = dim_F(K) * dim_K(A)`.
@@ -140,7 +133,6 @@ theorem finrank_mul_finrank [FiniteDimensional F K] : finrank F K * finrank K A
exact mt (@right F K A _ _ _ _ _ _ _) hA
#align finite_dimensional.finrank_mul_finrank FiniteDimensional.finrank_mul_finrank
-set_option synthInstance.etaExperiment true in
theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Algebra F A]
(hp : (finrank F A).Prime) : IsSimpleOrder (Subalgebra F A) :=
{ toNontrivial :=
@@ -156,8 +148,6 @@ theorem Subalgebra.isSimpleOrder_of_finrank_prime (A) [Ring A] [IsDomain A] [Alg
#align finite_dimensional.subalgebra.is_simple_order_of_finrank_prime FiniteDimensional.Subalgebra.isSimpleOrder_of_finrank_prime
-- TODO: `IntermediateField` version
-set_option synthInstance.maxHeartbeats 60000 in
-set_option synthInstance.etaExperiment true in
-- TODO: generalize by removing [FiniteDimensional F K]
-- V = ⊕F,
-- (V →ₗ[F] K) = ((⊕F) →ₗ[F] K) = (⊕ (F →ₗ[F] K)) = ⊕K
@@ -167,7 +157,6 @@ instance _root_.LinearMap.finite_dimensional'' (F : Type u) (K : Type v) (V : Ty
right F _ _
#align linear_map.finite_dimensional'' LinearMap.finite_dimensional''
-set_option synthInstance.etaExperiment true in
theorem finrank_linear_map' (F : Type u) (K : Type v) (V : Type w) [Field F] [Field K] [Algebra F K]
[FiniteDimensional F K] [AddCommGroup V] [Module F V] [FiniteDimensional F V] :
finrank K (V →ₗ[F] K) = finrank F V :=
The unported dependencies are