Skip to content

Commit 85595a2

Browse files
authored
Merge branch 'master' into eric-wieser/BilinForm.baseChange
2 parents 8d25855 + 75bcb18 commit 85595a2

496 files changed

Lines changed: 7446 additions & 1717 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Archive/Imo/Imo2011Q3.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ theorem imo2011_q3 (f : ℝ → ℝ) (hf : ∀ x y, f (x + y) ≤ y * f x + f (f
5454
· suffices 0 ≤ f 0 from le_antisymm (h_f_nonpos 0) this
5555
have hno : f (-1) = 0 := h_fx_zero_of_neg (-1) neg_one_lt_zero
5656
have hp := hxt (-1) (-1)
57-
rw [hno] at hp
57+
rw [hno] at hp
5858
linarith
5959
#align imo2011_q3 imo2011_q3
6060

Cache/IO.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import Lean.Data.RBMap
99
import Lean.Data.RBTree
1010
import Lean.Data.Json.Printer
1111

12+
set_option autoImplicit true
13+
1214
/-- Removes a parent path from the beginning of a path -/
1315
def System.FilePath.withoutParent (path parent : FilePath) : FilePath :=
1416
let rec aux : List String → List String → List String

Cache/Requests.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Authors: Arthur Paulino
66
import Lean.Data.Json.Parser
77
import Cache.Hashing
88

9+
set_option autoImplicit true
10+
911
namespace Cache.Requests
1012

1113
/-- Azure blob URL -/

Mathlib.lean

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Mathlib.Algebra.Algebra.Equiv
66
import Mathlib.Algebra.Algebra.Hom
77
import Mathlib.Algebra.Algebra.NonUnitalSubalgebra
88
import Mathlib.Algebra.Algebra.Operations
9+
import Mathlib.Algebra.Algebra.Opposite
910
import Mathlib.Algebra.Algebra.Pi
1011
import Mathlib.Algebra.Algebra.Prod
1112
import Mathlib.Algebra.Algebra.RestrictScalars
@@ -71,6 +72,7 @@ import Mathlib.Algebra.Category.ModuleCat.Limits
7172
import Mathlib.Algebra.Category.ModuleCat.Monoidal.Basic
7273
import Mathlib.Algebra.Category.ModuleCat.Monoidal.Closed
7374
import Mathlib.Algebra.Category.ModuleCat.Monoidal.Symmetric
75+
import Mathlib.Algebra.Category.ModuleCat.Presheaf
7476
import Mathlib.Algebra.Category.ModuleCat.Products
7577
import Mathlib.Algebra.Category.ModuleCat.Projective
7678
import Mathlib.Algebra.Category.ModuleCat.Simple
@@ -136,6 +138,7 @@ import Mathlib.Algebra.EuclideanDomain.Instances
136138
import Mathlib.Algebra.Expr
137139
import Mathlib.Algebra.Field.Basic
138140
import Mathlib.Algebra.Field.Defs
141+
import Mathlib.Algebra.Field.MinimalAxioms
139142
import Mathlib.Algebra.Field.Opposite
140143
import Mathlib.Algebra.Field.Power
141144
import Mathlib.Algebra.Field.ULift
@@ -400,6 +403,7 @@ import Mathlib.Algebra.Ring.Equiv
400403
import Mathlib.Algebra.Ring.Fin
401404
import Mathlib.Algebra.Ring.Idempotents
402405
import Mathlib.Algebra.Ring.InjSurj
406+
import Mathlib.Algebra.Ring.MinimalAxioms
403407
import Mathlib.Algebra.Ring.Opposite
404408
import Mathlib.Algebra.Ring.OrderSynonym
405409
import Mathlib.Algebra.Ring.Pi
@@ -473,6 +477,7 @@ import Mathlib.AlgebraicTopology.CechNerve
473477
import Mathlib.AlgebraicTopology.DoldKan.Compatibility
474478
import Mathlib.AlgebraicTopology.DoldKan.Decomposition
475479
import Mathlib.AlgebraicTopology.DoldKan.Degeneracies
480+
import Mathlib.AlgebraicTopology.DoldKan.Equivalence
476481
import Mathlib.AlgebraicTopology.DoldKan.EquivalenceAdditive
477482
import Mathlib.AlgebraicTopology.DoldKan.EquivalencePseudoabelian
478483
import Mathlib.AlgebraicTopology.DoldKan.Faces
@@ -736,6 +741,7 @@ import Mathlib.Analysis.NormedSpace.Extend
736741
import Mathlib.Analysis.NormedSpace.Extr
737742
import Mathlib.Analysis.NormedSpace.FiniteDimension
738743
import Mathlib.Analysis.NormedSpace.HahnBanach.Extension
744+
import Mathlib.Analysis.NormedSpace.HahnBanach.SeparatingDual
739745
import Mathlib.Analysis.NormedSpace.HahnBanach.Separation
740746
import Mathlib.Analysis.NormedSpace.HomeomorphBall
741747
import Mathlib.Analysis.NormedSpace.IndicatorFunction
@@ -765,6 +771,7 @@ import Mathlib.Analysis.NormedSpace.Star.Unitization
765771
import Mathlib.Analysis.NormedSpace.TrivSqZeroExt
766772
import Mathlib.Analysis.NormedSpace.Units
767773
import Mathlib.Analysis.NormedSpace.WeakDual
774+
import Mathlib.Analysis.NormedSpace.WithLp
768775
import Mathlib.Analysis.NormedSpace.lpSpace
769776
import Mathlib.Analysis.ODE.Gronwall
770777
import Mathlib.Analysis.ODE.PicardLindelof
@@ -1213,6 +1220,7 @@ import Mathlib.Combinatorics.Quiver.Arborescence
12131220
import Mathlib.Combinatorics.Quiver.Basic
12141221
import Mathlib.Combinatorics.Quiver.Cast
12151222
import Mathlib.Combinatorics.Quiver.ConnectedComponent
1223+
import Mathlib.Combinatorics.Quiver.Covering
12161224
import Mathlib.Combinatorics.Quiver.Path
12171225
import Mathlib.Combinatorics.Quiver.Push
12181226
import Mathlib.Combinatorics.Quiver.SingleObj
@@ -1231,6 +1239,7 @@ import Mathlib.Combinatorics.SimpleGraph.Basic
12311239
import Mathlib.Combinatorics.SimpleGraph.Clique
12321240
import Mathlib.Combinatorics.SimpleGraph.Coloring
12331241
import Mathlib.Combinatorics.SimpleGraph.Connectivity
1242+
import Mathlib.Combinatorics.SimpleGraph.Connectivity.Subgraph
12341243
import Mathlib.Combinatorics.SimpleGraph.DegreeSum
12351244
import Mathlib.Combinatorics.SimpleGraph.Density
12361245
import Mathlib.Combinatorics.SimpleGraph.Ends.Defs
@@ -1883,6 +1892,7 @@ import Mathlib.FieldTheory.IsAlgClosed.AlgebraicClosure
18831892
import Mathlib.FieldTheory.IsAlgClosed.Basic
18841893
import Mathlib.FieldTheory.IsAlgClosed.Classification
18851894
import Mathlib.FieldTheory.IsAlgClosed.Spectrum
1895+
import Mathlib.FieldTheory.IsSepClosed
18861896
import Mathlib.FieldTheory.KrullTopology
18871897
import Mathlib.FieldTheory.Laurent
18881898
import Mathlib.FieldTheory.Minpoly.Basic
@@ -1891,6 +1901,7 @@ import Mathlib.FieldTheory.Minpoly.IsIntegrallyClosed
18911901
import Mathlib.FieldTheory.MvPolynomial
18921902
import Mathlib.FieldTheory.Normal
18931903
import Mathlib.FieldTheory.NormalClosure
1904+
import Mathlib.FieldTheory.Perfect
18941905
import Mathlib.FieldTheory.PerfectClosure
18951906
import Mathlib.FieldTheory.PolynomialGaloisGroup
18961907
import Mathlib.FieldTheory.PrimitiveElement
@@ -1954,6 +1965,7 @@ import Mathlib.Geometry.Manifold.VectorBundle.Tangent
19541965
import Mathlib.Geometry.Manifold.WhitneyEmbedding
19551966
import Mathlib.GroupTheory.Abelianization
19561967
import Mathlib.GroupTheory.Archimedean
1968+
import Mathlib.GroupTheory.ClassEquation
19571969
import Mathlib.GroupTheory.Commensurable
19581970
import Mathlib.GroupTheory.Commutator
19591971
import Mathlib.GroupTheory.CommutingProbability
@@ -2806,7 +2818,7 @@ import Mathlib.RingTheory.Localization.Integral
28062818
import Mathlib.RingTheory.Localization.InvSubmonoid
28072819
import Mathlib.RingTheory.Localization.LocalizationLocalization
28082820
import Mathlib.RingTheory.Localization.Module
2809-
import Mathlib.RingTheory.Localization.Norm
2821+
import Mathlib.RingTheory.Localization.NormTrace
28102822
import Mathlib.RingTheory.Localization.NumDen
28112823
import Mathlib.RingTheory.Localization.Submodule
28122824
import Mathlib.RingTheory.MatrixAlgebra

Mathlib/Algebra/AddTorsor.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ multiplicative group actions).
3939
4040
-/
4141

42+
set_option autoImplicit true
43+
4244

4345
/-- An `AddTorsor G P` gives a structure to the nonempty type `P`,
4446
acted on by an `AddGroup G` with a transitive and free action given

Mathlib/Algebra/Algebra/Basic.lean

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ See the implementation notes for remarks about non-associative and non-unital al
4343
* `algebraNat`
4444
* `algebraInt`
4545
* `algebraRat`
46-
* `mul_opposite.algebra`
4746
* `module.End.algebra`
4847
4948
## Implementation notes
@@ -594,25 +593,6 @@ end Algebra
594593

595594
open scoped Algebra
596595

597-
namespace MulOpposite
598-
599-
variable {R A : Type*} [CommSemiring R] [Semiring A] [Algebra R A]
600-
601-
instance instAlgebraMulOpposite : Algebra R Aᵐᵒᵖ where
602-
toRingHom := (algebraMap R A).toOpposite fun x y => Algebra.commutes _ _
603-
smul_def' c x := unop_injective <| by
604-
simp only [unop_smul, RingHom.toOpposite_apply, Function.comp_apply, unop_mul, op_mul,
605-
Algebra.smul_def, Algebra.commutes, op_unop, unop_op]
606-
commutes' r := MulOpposite.rec' fun x => by
607-
simp only [RingHom.toOpposite_apply, Function.comp_apply, ← op_mul, Algebra.commutes]
608-
609-
@[simp]
610-
theorem algebraMap_apply (c : R) : algebraMap R Aᵐᵒᵖ c = op (algebraMap R A c) :=
611-
rfl
612-
#align mul_opposite.algebra_map_apply MulOpposite.algebraMap_apply
613-
614-
end MulOpposite
615-
616596
namespace Module
617597

618598
variable (R : Type u) (S : Type v) (M : Type w)
@@ -940,10 +920,3 @@ end Module
940920
example {R A} [CommSemiring R] [Semiring A] [Module R A] [SMulCommClass R A A]
941921
[IsScalarTower R A A] : Algebra R A :=
942922
Algebra.ofModule smul_mul_assoc mul_smul_comm
943-
944-
-- porting note: disable `dupNamespace` linter for aux lemmas
945-
open Lean in
946-
run_cmd do
947-
for i in List.range 12 do
948-
Elab.Command.elabCommand (← `(attribute [nolint dupNamespace]
949-
$(mkCIdent (.num `Mathlib.Algebra.Algebra.Basic._auxLemma (i + 1)))))

Mathlib/Algebra/Algebra/Equiv.lean

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ This file defines bundled isomorphisms of `R`-algebras.
2121
* `A ≃ₐ[R] B` : `R`-algebra equivalence from `A` to `B`.
2222
-/
2323

24+
set_option autoImplicit true
25+
2426

2527
open BigOperators
2628

@@ -81,13 +83,18 @@ end AlgEquivClass
8183

8284
namespace AlgEquiv
8385

84-
variable {R : Type u} {A₁ : Type v} {A₂ : Type w} {A₃ : Type u₁}
86+
universe uR uA₁ uA₂ uA₃ uA₁' uA₂' uA₃'
87+
variable {R : Type uR}
88+
variable {A₁ : Type uA₁} {A₂ : Type uA₂} {A₃ : Type uA₃}
89+
variable {A₁' : Type uA₁'} {A₂' : Type uA₂'} {A₃' : Type uA₃'}
8590

8691
section Semiring
8792

8893
variable [CommSemiring R] [Semiring A₁] [Semiring A₂] [Semiring A₃]
94+
variable [Semiring A₁'] [Semiring A₂'] [Semiring A₃']
8995

9096
variable [Algebra R A₁] [Algebra R A₂] [Algebra R A₃]
97+
variable [Algebra R A₁'] [Algebra R A₂'] [Algebra R A₃']
9198

9299
variable (e : A₁ ≃ₐ[R] A₂)
93100

@@ -436,9 +443,8 @@ theorem rightInverse_symm (e : A₁ ≃ₐ[R] A₂) : Function.RightInverse e.sy
436443

437444
/-- If `A₁` is equivalent to `A₁'` and `A₂` is equivalent to `A₂'`, then the type of maps
438445
`A₁ →ₐ[R] A₂` is equivalent to the type of maps `A₁' →ₐ[R] A₂'`. -/
439-
def arrowCongr {A₁' A₂' : Type*} [Semiring A₁'] [Semiring A₂'] [Algebra R A₁'] [Algebra R A₂']
440-
(e₁ : A₁ ≃ₐ[R] A₁') (e₂ : A₂ ≃ₐ[R] A₂') : (A₁ →ₐ[R] A₂) ≃ (A₁' →ₐ[R] A₂')
441-
where
446+
@[simps apply]
447+
def arrowCongr (e₁ : A₁ ≃ₐ[R] A₁') (e₂ : A₂ ≃ₐ[R] A₂') : (A₁ →ₐ[R] A₂) ≃ (A₁' →ₐ[R] A₂') where
442448
toFun f := (e₂.toAlgHom.comp f).comp e₁.symm.toAlgHom
443449
invFun f := (e₂.symm.toAlgHom.comp f).comp e₁.toAlgHom
444450
left_inv f := by
@@ -449,8 +455,7 @@ def arrowCongr {A₁' A₂' : Type*} [Semiring A₁'] [Semiring A₂'] [Algebra
449455
simp only [← AlgHom.comp_assoc, comp_symm, AlgHom.id_comp, AlgHom.comp_id]
450456
#align alg_equiv.arrow_congr AlgEquiv.arrowCongr
451457

452-
theorem arrowCongr_comp {A₁' A₂' A₃' : Type*} [Semiring A₁'] [Semiring A₂'] [Semiring A₃']
453-
[Algebra R A₁'] [Algebra R A₂'] [Algebra R A₃'] (e₁ : A₁ ≃ₐ[R] A₁') (e₂ : A₂ ≃ₐ[R] A₂')
458+
theorem arrowCongr_comp (e₁ : A₁ ≃ₐ[R] A₁') (e₂ : A₂ ≃ₐ[R] A₂')
454459
(e₃ : A₃ ≃ₐ[R] A₃') (f : A₁ →ₐ[R] A₂) (g : A₂ →ₐ[R] A₃) :
455460
arrowCongr e₁ e₃ (g.comp f) = (arrowCongr e₂ e₃ g).comp (arrowCongr e₁ e₂ f) := by
456461
ext
@@ -466,22 +471,52 @@ theorem arrowCongr_refl : arrowCongr AlgEquiv.refl AlgEquiv.refl = Equiv.refl (A
466471
#align alg_equiv.arrow_congr_refl AlgEquiv.arrowCongr_refl
467472

468473
@[simp]
469-
theorem arrowCongr_trans {A₁' A₂' A₃' : Type*} [Semiring A₁'] [Semiring A₂'] [Semiring A₃']
470-
[Algebra R A₁'] [Algebra R A₂'] [Algebra R A₃'] (e₁ : A₁ ≃ₐ[R] A₂) (e₁' : A₁' ≃ₐ[R] A₂')
474+
theorem arrowCongr_trans (e₁ : A₁ ≃ₐ[R] A₂) (e₁' : A₁' ≃ₐ[R] A₂')
471475
(e₂ : A₂ ≃ₐ[R] A₃) (e₂' : A₂' ≃ₐ[R] A₃') :
472476
arrowCongr (e₁.trans e₂) (e₁'.trans e₂') = (arrowCongr e₁ e₁').trans (arrowCongr e₂ e₂') := by
473477
ext
474478
rfl
475479
#align alg_equiv.arrow_congr_trans AlgEquiv.arrowCongr_trans
476480

477481
@[simp]
478-
theorem arrowCongr_symm {A₁' A₂' : Type*} [Semiring A₁'] [Semiring A₂'] [Algebra R A₁']
479-
[Algebra R A₂'] (e₁ : A₁ ≃ₐ[R] A₁') (e₂ : A₂ ≃ₐ[R] A₂') :
482+
theorem arrowCongr_symm (e₁ : A₁ ≃ₐ[R] A₁') (e₂ : A₂ ≃ₐ[R] A₂') :
480483
(arrowCongr e₁ e₂).symm = arrowCongr e₁.symm e₂.symm := by
481484
ext
482485
rfl
483486
#align alg_equiv.arrow_congr_symm AlgEquiv.arrowCongr_symm
484487

488+
/-- If `A₁` is equivalent to `A₂` and `A₁'` is equivalent to `A₂'`, then the type of maps
489+
`A₁ ≃ₐ[R] A₁'` is equivalent to the type of maps `A₂ ≃ ₐ[R] A₂'`.
490+
491+
This is the `AlgEquiv` version of `AlgEquiv.arrowCongr`. -/
492+
@[simps apply]
493+
def equivCongr (e : A₁ ≃ₐ[R] A₂) (e' : A₁' ≃ₐ[R] A₂') : (A₁ ≃ₐ[R] A₁') ≃ A₂ ≃ₐ[R] A₂' where
494+
toFun ψ := e.symm.trans (ψ.trans e')
495+
invFun ψ := e.trans (ψ.trans e'.symm)
496+
left_inv ψ := by
497+
ext
498+
simp_rw [trans_apply, symm_apply_apply]
499+
right_inv ψ := by
500+
ext
501+
simp_rw [trans_apply, apply_symm_apply]
502+
503+
@[simp]
504+
theorem equivCongr_refl : equivCongr AlgEquiv.refl AlgEquiv.refl = Equiv.refl (A₁ ≃ₐ[R] A₁') := by
505+
ext
506+
rfl
507+
508+
@[simp]
509+
theorem equivCongr_symm (e : A₁ ≃ₐ[R] A₂) (e' : A₁' ≃ₐ[R] A₂') :
510+
(equivCongr e e').symm = equivCongr e.symm e'.symm :=
511+
rfl
512+
513+
@[simp]
514+
theorem equivCongr_trans (e₁₂ : A₁ ≃ₐ[R] A₂) (e₁₂' : A₁' ≃ₐ[R] A₂')
515+
(e₂₃ : A₂ ≃ₐ[R] A₃) (e₂₃' : A₂' ≃ₐ[R] A₃') :
516+
(equivCongr e₁₂ e₁₂').trans (equivCongr e₂₃ e₂₃') =
517+
equivCongr (e₁₂.trans e₂₃) (e₁₂'.trans e₂₃') :=
518+
rfl
519+
485520
/-- If an algebra morphism has an inverse, it is an algebra isomorphism. -/
486521
def ofAlgHom (f : A₁ →ₐ[R] A₂) (g : A₂ →ₐ[R] A₁) (h₁ : f.comp g = AlgHom.id R A₂)
487522
(h₂ : g.comp f = AlgHom.id R A₁) : A₁ ≃ₐ[R] A₂ :=
@@ -525,20 +560,13 @@ theorem ofBijective_apply {f : A₁ →ₐ[R] A₂} {hf : Function.Bijective f}
525560
#align alg_equiv.of_bijective_apply AlgEquiv.ofBijective_apply
526561

527562
/-- Forgetting the multiplicative structures, an equivalence of algebras is a linear equivalence. -/
528-
-- Porting note: writing the `@[simps apply]`-generated lemma by hand
529-
-- Maybe fixed by the changes in #2435?
563+
@[simps apply]
530564
def toLinearEquiv (e : A₁ ≃ₐ[R] A₂) : A₁ ≃ₗ[R] A₂ :=
531565
{ e with
532566
toFun := e
533567
map_smul' := e.map_smul
534568
invFun := e.symm }
535569
#align alg_equiv.to_linear_equiv AlgEquiv.toLinearEquiv
536-
537-
-- Porting note: writing the `@[simps apply]`-generated lemma by hand
538-
-- Maybe fixed by the changes in #2435?
539-
@[simp]
540-
theorem toLinearEquiv_apply : e.toLinearEquiv x = e x :=
541-
rfl
542570
#align alg_equiv.to_linear_equiv_apply AlgEquiv.toLinearEquiv_apply
543571

544572
@[simp]
@@ -673,17 +701,14 @@ theorem mul_apply (e₁ e₂ : A₁ ≃ₐ[R] A₁) (x : A₁) : (e₁ * e₂) x
673701
rfl
674702
#align alg_equiv.mul_apply AlgEquiv.mul_apply
675703

676-
/-- An algebra isomorphism induces a group isomorphism between automorphism groups -/
704+
/-- An algebra isomorphism induces a group isomorphism between automorphism groups.
705+
706+
This is a more bundled version of `AlgEquiv.equivCongr`. -/
677707
@[simps apply]
678708
def autCongr (ϕ : A₁ ≃ₐ[R] A₂) : (A₁ ≃ₐ[R] A₁) ≃* A₂ ≃ₐ[R] A₂ where
709+
__ := equivCongr ϕ ϕ
679710
toFun ψ := ϕ.symm.trans (ψ.trans ϕ)
680711
invFun ψ := ϕ.trans (ψ.trans ϕ.symm)
681-
left_inv ψ := by
682-
ext
683-
simp_rw [trans_apply, symm_apply_apply]
684-
right_inv ψ := by
685-
ext
686-
simp_rw [trans_apply, apply_symm_apply]
687712
map_mul' ψ χ := by
688713
ext
689714
simp only [mul_apply, trans_apply, symm_apply_apply]

Mathlib/Algebra/Algebra/Hom.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ This file defines bundled homomorphisms of `R`-algebras.
2222
* `A →ₐ[R] B` : `R`-algebra homomorphism from `A` to `B`.
2323
-/
2424

25+
set_option autoImplicit true
26+
2527

2628
open BigOperators
2729

Mathlib/Algebra/Algebra/NonUnitalSubalgebra.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ theorem map_map (S : NonUnitalSubalgebra R A) (g : B →ₙₐ[R] C) (f : A →
315315
(S.map f).map g = S.map (g.comp f) :=
316316
SetLike.coe_injective <| Set.image_image _ _ _
317317

318+
@[simp]
318319
theorem mem_map {S : NonUnitalSubalgebra R A} {f : F} {y : B} : y ∈ map f S ↔ ∃ x ∈ S, f x = y :=
319320
NonUnitalSubsemiring.mem_map
320321

Mathlib/Algebra/Algebra/Operations.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Kenny Lau
55
-/
66
import Mathlib.Algebra.Algebra.Bilinear
77
import Mathlib.Algebra.Algebra.Equiv
8+
import Mathlib.Algebra.Algebra.Opposite
89
import Mathlib.Algebra.Module.Submodule.Pointwise
910
import Mathlib.Algebra.Module.Submodule.Bilinear
1011
import Mathlib.Algebra.Module.Opposites

0 commit comments

Comments
 (0)