field_theory.towerMathlib.FieldTheory.Tower

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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]
Diff
@@ -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
Diff
@@ -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"
 
Diff
@@ -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
 
Diff
@@ -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 
Diff
@@ -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'
 -/
 
Diff
@@ -41,7 +41,7 @@ tower law
 
 universe u v w u₁ v₁ w₁
 
-open Classical BigOperators
+open scoped Classical BigOperators
 
 open FiniteDimensional
 
Diff
@@ -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 :=
Diff
@@ -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)$.
Diff
@@ -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ₓ'. -/
Diff
@@ -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)$.
Diff
@@ -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₁`.
Diff
@@ -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
 
Diff
@@ -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
Diff
@@ -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`.
Diff
@@ -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] :
Diff
@@ -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
 
Diff
@@ -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
 
Diff
@@ -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'

Changes in mathlib4

mathlib3
mathlib4
chore: move 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

Diff
@@ -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.)
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


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

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

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

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -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
chore(FiniteDimensional): rename lemmas (#10188)

Rename lemmas to enable new-style dot notation or drop repeating FiniteDimensional.finiteDimensional_*. Restore old names as deprecated aliases.

Diff
@@ -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
feat(LinearAlgebra): generalize results about Module.rank of LinearMap. (#9677)

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

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

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

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

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

Diff
@@ -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
feat: generalize 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

Zulip

Co-authored-by: Junyan Xu <junyanxu.math@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -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)⟩⟩
chore: drop 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).

Diff
@@ -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
 
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -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
refactor(LinearAlgebra): Ensure 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>

Diff
@@ -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
chore: remove duplicate lemma FiniteDimensional.eq_top_of_finrank_eq (#6304)

The lemma is a perfect duplicate of Submodule.eq_top_of_finrank_eq.

Diff
@@ -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)
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,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
 
chore: reenable eta, bump to nightly 2023-05-16 (#3414)

Now that leanprover/lean4#2210 has been merged, this PR:

  • removes all the set_option synthInstance.etaExperiment true commands (and some etaExperiment% term elaborators)
  • removes many but not quite all set_option maxHeartbeats commands
  • makes various other changes required to cope with leanprover/lean4#2210.

Co-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>

Diff
@@ -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 :=
feat: port FieldTheory.Tower (#3716)

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>

Dependencies 10 + 521

522 files ported (98.1%)
217533 lines ported (98.5%)
Show graph

The unported dependencies are