/-
From https://leanprover.zulipchat.com/#narrow/stream/113489-new-members/topic/Lean4.20autocomplete
Will have to keep on fiddling the topic of meta-programming, syntax and dealing with files in Lean
related:
- https://github.com/utensil/LeanBlueprintExample/blob/main/Exe/Decls.lean
- https://leanprover.zulipchat.com/#narrow/stream/270676-lean4/topic/get.20filename.20.2B.20pos
-/
import Lean.Meta.Tactic.TryThis
import Lean.Data.FuzzyMatching
open Lean.Meta.Tactic
namespace Mathlib.Tactic.imp
open Lean Elab Command System
open Lean.FuzzyMatching
Infer module name of source file name.
def moduleNameOfFileName (fname : FilePath) (rootDir : Option FilePath) : IO Name := do
Lean.initSearchPath (<- Lean.findSysroot) [(<-IO.currentDir) / "lake-packages/mathlib/"]
let fname β IO.FS.realPath fname
let rootDir β match rootDir with
| some rootDir => pure rootDir
| none => IO.currentDir
let mut rootDir β IO.FS.realPath rootDir
-- v4.32: `realPathNormalized` was removed; normalize explicitly
rootDir := rootDir.normalize
if !rootDir.toString.endsWith System.FilePath.pathSeparator.toString then
rootDir := β¨rootDir.toString ++ System.FilePath.pathSeparator.toStringβ©
if !rootDir.toString.isPrefixOf fname.normalize.toString then
throw $ IO.userError s!"input file '{fname}' must be contained in root directory ({rootDir})"
-- NOTE: use `fname` instead of `fname.normalize` to preserve casing on all platforms
let fnameSuffixComponents := fname.withExtension "" |>.components.drop (rootDir.components.length + 1)
let modName := fnameSuffixComponents.foldl Name.mkStr Name.anonymous
pure modName
A syntax that allows strings to be printed without surrounding them by guillemets Β«...Β».
declare_syntax_cat write_me_output_stx @[inherit_doc] syntax "import "Warning: Parser.Category.write_me_output_stx does not have a doc stringident :ident: Parser.Parserwrite_me_output_stxwrite_me_output_stx: Parser.Category
imp <string> tries to find a file matching Mathlib.<string>.
It prints a list of candidates, taking the names from Mathlib.lean.
If there is only one candidate, it suggests import Mathlib.<uniqueCandidate> as a Try this.
Using imp! <string> uses fuzzy-matching, rather than exact matching.
elab (name :=commandImp!)commandImp!: ParserDescr:"imp"Warning: Variable name `tk` is not explicitly referenced. The binding can be removed (if unused) or named `_` (if used implicitly). Note: This linter can be disabled with `set_option linter.unusedVariables false`fz:("!")?fz: Option (TSyntax Name.anonymous)na:(na: TSyntax `identcolGtcolGt: optParam String "checkColGt" β Parser.Parserident) :ident: Parser.Parsercommand => do letcommand: Parser.Categoryinp :=inp: Stringna.na: TSyntax `identgetId.getId: Ident β NametoString -- v4.32: `String.drop` returns `String.Slice` (convert with `toString`), and mathlib's -- `Mathlib.lean` now uses `public import Mathlib.` (22 chars) instead of `import Mathlib.` (15) lettoString: Name β optParam Bool true β Stringdat :=dat: Array String(β(β IO.FS.lines ".lake/packages/mathlib/Mathlib.lean"): Array StringIO.FS.linesIO.FS.lines: FilePath β IO (Array String)(β IO.FS.lines ".lake/packages/mathlib/Mathlib.lean"): Array String".lake/packages/mathlib/Mathlib.lean"".lake/packages/mathlib/Mathlib.lean": String).(β IO.FS.lines ".lake/packages/mathlib/Mathlib.lean"): Array Stringmap (funmap: {Ξ± Ξ² : Type} β (Ξ± β Ξ²) β Array Ξ± β Array Ξ²l => (l: Stringl.l: Stringdropdrop: String β Nat β String.Slice22).22: NattoString) lettoString: String.Slice β Stringcands :=cands: Array Stringdat.dat: Array Stringfilter <| (iffilter: {Ξ± : Type} β (Ξ± β Bool) β (as : Array Ξ±) β optParam Nat 0 β optParam Nat as.size β Array Ξ±fz.fz: Option (TSyntax Name.anonymous)isSome thenisSome: {Ξ± : Type} β Option Ξ± β BoolfuzzyMatch elsefuzzyMatch: String β String β optParam Float 0.2 β BoolString.isPrefixOf)String.isPrefixOf: String β String β Boolinpinp: StringliftTermElabM doliftTermElabM: {Ξ± : Type} β TermElabM Ξ± β CommandElabM Ξ±cands.cands: Array StringtoList.toList: {Ξ± : Type} β Array Ξ± β List Ξ±forM funforM: {m : Type β Type} β [Monad m] β {Ξ± : Type} β List Ξ± β (Ξ± β m PUnit) β m PUnitimp => do letimp: StringimpS βimpS: NamemoduleNameOfFileName (moduleNameOfFileName: FilePath β Option FilePath β IO Name".lake/packages/mathlib/Mathlib/" ++".lake/packages/mathlib/Mathlib/": Stringimp.imp: Stringreplacereplace: {Ο : Type} β {Ο : String.Slice β Type} β [inst : (s : String.Slice) β Std.Iterator (Ο s) Id (String.Slice.Pattern.SearchStep s)] β [(s : String.Slice) β Std.IteratorLoop (Ο s) Id Id] β {Ξ± : Type} β [String.ToSlice Ξ±] β String β (pattern : Ο) β [String.Slice.Pattern.ToForwardSearcher pattern Ο] β Ξ± β String"."".": String"/" ++"/": String".lean")".lean": String".lake/packages/mathlib/" let".lake/packages/mathlib/": Stringimp :imp: TSyntax `write_me_output_stxTSyntaxTSyntax: SyntaxNodeKinds β Type`write_me_output_stx β `(write_me_output_stx| import $(`write_me_output_stx: NamemkIdentmkIdent: Name β IdentimpS)) letimpS: Namestx βstx: SyntaxgetRef -- v4.32: `addSuggestion` takes a `Suggestion`; wrap the syntax in `SuggestionText`getRef: {m : Type β Type} β [self : MonadRef m] β m SyntaxTryThis.addSuggestionTryThis.addSuggestion: Syntax β TryThis.Suggestion β optParam (Option Syntax) none β optParam String "Try this:" β optParam (Option String) none β optParam Meta.Hint.DiffGranularity Meta.Hint.DiffGranularity.none β optParam MessageData MessageData.nil β CoreM Unitstx (stx: SyntaxTryThis.SuggestionText.tsyntaxTryThis.SuggestionText.tsyntax: {kind : SyntaxNodeKind} β TSyntax kind β TryThis.SuggestionTextimp) @[inherit_docimp: TSyntax `write_me_output_stx] macro "imp!"Warning: commandImp! does not have a doc stringna:(na: TSyntax `identcolGtcolGt: optParam String "checkColGt" β Parser.Parserident) :ident: Parser.Parsercommand => `(command: Parser.Categorycommand| imp ! $command: Parser.Categoryna) end Mathlib.Tactic.impna: TSyntax `identTry this: [apply] import Ideal.Quotient.IndexTry this: [apply] import Sheaves.CommRingCatTry this: [apply] import Ideal.Quotient.NoetherianTry this: [apply] import Ideal.Quotient.OperationsTry this: [apply] import Algebra.IsSimpleRingTry this: [apply] import BigOperators.Ring.FinsetTry this: [apply] import BigOperators.Ring.ListTry this: [apply] import BigOperators.Ring.MultisetTry this: [apply] import BigOperators.Ring.NatTry this: [apply] import BigOperators.RingEquivTry this: [apply] import Category.BoolRingTry this: [apply] import Category.ModuleCat.ChangeOfRingsTry this: [apply] import Category.ModuleCat.ChangeOfRingsExactTry this: [apply] import Category.ModuleCat.Presheaf.ChangeOfRingsTry this: [apply] import Category.ModuleCat.Sheaf.ChangeOfRingsTry this: [apply] import Category.Ring.AdjunctionsTry this: [apply] import Category.Ring.BasicTry this: [apply] import Category.Ring.ColimitsTry this: [apply] import Category.Ring.ConstructionsTry this: [apply] import Category.Ring.EpiTry this: [apply] import Category.Ring.EqualizerPushoutTry this: [apply] import Category.Ring.FilteredColimitsTry this: [apply] import Category.Ring.FinitePresentationTry this: [apply] import Category.Ring.InstancesTry this: [apply] import Category.Ring.LimitsTry this: [apply] import Category.Ring.LinearAlgebraTry this: [apply] import Category.Ring.SmallTry this: [apply] import Category.Ring.TopologyTry this: [apply] import Category.Ring.Under.BasicTry this: [apply] import Category.Ring.Under.LimitsTry this: [apply] import Category.Ring.Under.PropertyTry this: [apply] import CharP.LocalRingTry this: [apply] import Colimit.RingTry this: [apply] import DirectSum.RingTry this: [apply] import LieRinehartAlgebra.DefsTry this: [apply] import LieRinehartAlgebra.SubalgebraTry this: [apply] import Module.LinearMap.DivisionRingTry this: [apply] import Module.RingHomTry this: [apply] import MvPolynomial.CommRingTry this: [apply] import Order.BigOperators.Ring.FinsetTry this: [apply] import Order.BigOperators.Ring.ListTry this: [apply] import Order.BigOperators.Ring.MultisetTry this: [apply] import Order.Floor.RingTry this: [apply] import Order.Hom.RingTry this: [apply] import Order.Nonneg.RingTry this: [apply] import Order.Positive.RingTry this: [apply] import Order.Ring.AbsTry this: [apply] import Order.Ring.ArchimedeanTry this: [apply] import Order.Ring.BasicTry this: [apply] import Order.Ring.CanonicalTry this: [apply] import Order.Ring.CastTry this: [apply] import Order.Ring.ConeTry this: [apply] import Order.Ring.DefsTry this: [apply] import Order.Ring.FinsetTry this: [apply] import Order.Ring.GeomSumTry this: [apply] import Order.Ring.IdempotentTry this: [apply] import Order.Ring.InjSurjTry this: [apply] import Order.Ring.IntTry this: [apply] import Order.Ring.IntervalTry this: [apply] import Order.Ring.IsNonarchimedeanTry this: [apply] import Order.Ring.NatTry this: [apply] import Order.Ring.OppositeTry this: [apply] import Order.Ring.Ordering.BasicTry this: [apply] import Order.Ring.Ordering.DefsTry this: [apply] import Order.Ring.PowTry this: [apply] import Order.Ring.ProdTry this: [apply] import Order.Ring.RatTry this: [apply] import Order.Ring.StandardPartTry this: [apply] import Order.Ring.StarTry this: [apply] import Order.Ring.SynonymTry this: [apply] import Order.Ring.Unbundled.BasicTry this: [apply] import Order.Ring.Unbundled.RatTry this: [apply] import Order.Ring.UnitsTry this: [apply] import Order.Ring.WithTopTry this: [apply] import Polynomial.GroupRingActionTry this: [apply] import Polynomial.RingDivisionTry this: [apply] import Ring.Action.BasicTry this: [apply] import Ring.Action.ConjActTry this: [apply] import Ring.Action.EndTry this: [apply] import Ring.Action.FieldTry this: [apply] import Ring.Action.GroupTry this: [apply] import Ring.Action.InvariantTry this: [apply] import Ring.Action.Pointwise.FinsetTry this: [apply] import Ring.Action.Pointwise.SetTry this: [apply] import Ring.Action.RatTry this: [apply] import Ring.Action.SubmonoidTry this: [apply] import Ring.Action.SubobjectsTry this: [apply] import Ring.AddAutTry this: [apply] import Ring.AssociatedTry this: [apply] import Ring.AssociatorTry this: [apply] import Ring.AutTry this: [apply] import Ring.BasicTry this: [apply] import Ring.BooleanRingTry this: [apply] import Ring.CenterTry this: [apply] import Ring.CentralizerTry this: [apply] import Ring.CentroidHomTry this: [apply] import Ring.CharZeroTry this: [apply] import Ring.CommuteTry this: [apply] import Ring.CompTypeclassesTry this: [apply] import Ring.DefsTry this: [apply] import Ring.Divisibility.BasicTry this: [apply] import Ring.Divisibility.LemmasTry this: [apply] import Ring.EquivTry this: [apply] import Ring.ExtTry this: [apply] import Ring.FinTry this: [apply] import Ring.GeomSumTry this: [apply] import Ring.GrindInstancesTry this: [apply] import Ring.Hom.DefsTry this: [apply] import Ring.Hom.InjSurjTry this: [apply] import Ring.IdempotentTry this: [apply] import Ring.IdentitiesTry this: [apply] import Ring.InjSurjTry this: [apply] import Ring.Int.DefsTry this: [apply] import Ring.Int.FieldTry this: [apply] import Ring.Int.ParityTry this: [apply] import Ring.Int.UnitsTry this: [apply] import Ring.InvertibleTry this: [apply] import Ring.IsFormallyRealTry this: [apply] import Ring.MinimalAxiomsTry this: [apply] import Ring.NatTry this: [apply] import Ring.NegOnePowTry this: [apply] import Ring.NonZeroDivisorsTry this: [apply] import Ring.OppositeTry this: [apply] import Ring.PUnitTry this: [apply] import Ring.ParityTry this: [apply] import Ring.PeriodicTry this: [apply] import Ring.PiTry this: [apply] import Ring.Pointwise.FinsetTry this: [apply] import Ring.Pointwise.SetTry this: [apply] import Ring.ProdTry this: [apply] import Ring.RatTry this: [apply] import Ring.RegularTry this: [apply] import Ring.SemiconjTry this: [apply] import Ring.Semireal.DefsTry this: [apply] import Ring.ShrinkTry this: [apply] import Ring.SubgroupTry this: [apply] import Ring.Submonoid.BasicTry this: [apply] import Ring.Submonoid.PointwiseTry this: [apply] import Ring.Subring.BasicTry this: [apply] import Ring.Subring.DefsTry this: [apply] import Ring.Subring.IntPolynomialTry this: [apply] import Ring.Subring.MulOppositeTry this: [apply] import Ring.Subring.OrderTry this: [apply] import Ring.Subring.PointwiseTry this: [apply] import Ring.Subring.UnitsTry this: [apply] import Ring.Subsemiring.BasicTry this: [apply] import Ring.Subsemiring.DefsTry this: [apply] import Ring.Subsemiring.MulOppositeTry this: [apply] import Ring.Subsemiring.OrderTry this: [apply] import Ring.Subsemiring.PointwiseTry this: [apply] import Ring.SumsOfSquaresTry this: [apply] import Ring.TorsionTry this: [apply] import Ring.TransferInstanceTry this: [apply] import Ring.ULiftTry this: [apply] import Ring.UnitsTry this: [apply] import Ring.WithZeroTry this: [apply] import RingQuotTry this: [apply] import Star.RingQuotTry this: [apply] import Star.StarRingHomTry this: [apply] import Morphisms.RingHomPropertiesTry this: [apply] import RelativeGluingTry this: [apply] import Complex.RemovableSingularityTry this: [apply] import Complex.RiemannMappingTry this: [apply] import InnerProductSpace.ReproducingTry this: [apply] import Normed.Ring.BasicTry this: [apply] import Normed.Ring.FiniteTry this: [apply] import Normed.Ring.InfiniteProdTry this: [apply] import Normed.Ring.InfiniteSumTry this: [apply] import Normed.Ring.IntTry this: [apply] import Normed.Ring.LemmasTry this: [apply] import Normed.Ring.TransferInstanceTry this: [apply] import Normed.Ring.UltraTry this: [apply] import Normed.Ring.UnitsTry this: [apply] import Normed.Ring.WithAbsTry this: [apply] import Normed.Unbundled.RingSeminormTry this: [apply] import SpecialFunctions.ContinuousFunctionalCalculus.Rpow.RingInverseOrderTry this: [apply] import Monoidal.Cartesian.RingTry this: [apply] import Monoidal.RingTry this: [apply] import Additive.RuzsaCoveringTry this: [apply] import FunLike.RingTry this: [apply] import Nat.Cast.Order.RingTry this: [apply] import Real.EmbeddingTry this: [apply] import ZMod.QuotientRingTry this: [apply] import Manifold.Sheaf.LocallyRingedSpaceTry this: [apply] import RingedSpace.BasicTry this: [apply] import RingedSpace.LocallyRingedSpaceTry this: [apply] import RingedSpace.LocallyRingedSpace.HasColimitsTry this: [apply] import RingedSpace.LocallyRingedSpace.ResidueFieldTry this: [apply] import RingedSpace.OpenImmersionTry this: [apply] import RingedSpace.PresheafedSpaceTry this: [apply] import RingedSpace.PresheafedSpace.GluingTry this: [apply] import RingedSpace.PresheafedSpace.HasColimitsTry this: [apply] import RingedSpace.SheafedSpaceTry this: [apply] import RingedSpace.StalksTry this: [apply] import GroupAction.RingTry this: [apply] import Dimension.DivisionRingTry this: [apply] import RootSystem.RootPairingCatTry this: [apply] import Algebra.Ring.BasicTry this: [apply] import Algebra.Ring.DefinabilityTry this: [apply] import Algebra.Ring.FreeCommRingTry this: [apply] import HeckeRing.DefsTry this: [apply] import ModularForms.LevelOne.GradedRingTry this: [apply] import NumberField.AdeleRingTry this: [apply] import NumberField.InfiniteAdeleRingTry this: [apply] import Padics.RingHomsTry this: [apply] import Filter.AtTopBot.RingTry this: [apply] import Filter.RingTry this: [apply] import FinGroupCharZeroTry this: [apply] import Homological.GroupCohomology.LongExactSequenceTry this: [apply] import Homological.GroupHomology.LongExactSequenceTry this: [apply] import IntertwiningTry this: [apply] import AdicCompletion.AlgebraTry this: [apply] import AdicCompletion.AsTensorProductTry this: [apply] import AdicCompletion.BasicTry this: [apply] import AdicCompletion.CompletenessTry this: [apply] import AdicCompletion.ExactnessTry this: [apply] import AdicCompletion.FunctorialityTry this: [apply] import AdicCompletion.LocalRingTry this: [apply] import AdicCompletion.NoetherianTry this: [apply] import AdicCompletion.RingHomTry this: [apply] import AdicCompletion.TopologyTry this: [apply] import Adjoin.BasicTry this: [apply] import Adjoin.DimensionTry this: [apply] import Adjoin.FGTry this: [apply] import Adjoin.FGBaseChangeTry this: [apply] import Adjoin.FieldTry this: [apply] import Adjoin.PolynomialTry this: [apply] import Adjoin.Polynomial.BasicTry this: [apply] import Adjoin.Polynomial.BivariateTry this: [apply] import Adjoin.PowerBasisTry this: [apply] import Adjoin.SingletonTry this: [apply] import Adjoin.TowerTry this: [apply] import AdjoinRootTry this: [apply] import AlgebraTowerTry this: [apply] import Algebraic.BasicTry this: [apply] import Algebraic.CardinalityTry this: [apply] import Algebraic.DefsTry this: [apply] import Algebraic.IntegralTry this: [apply] import Algebraic.LinearIndependentTry this: [apply] import Algebraic.MvPolynomialTry this: [apply] import Algebraic.PiTry this: [apply] import Algebraic.StronglyTranscendentalTry this: [apply] import AlgebraicIndependent.AdjoinTry this: [apply] import AlgebraicIndependent.AlgebraicClosureTry this: [apply] import AlgebraicIndependent.BasicTry this: [apply] import AlgebraicIndependent.DefsTry this: [apply] import AlgebraicIndependent.RankAndCardinalityTry this: [apply] import AlgebraicIndependent.TranscendenceBasisTry this: [apply] import AlgebraicIndependent.TranscendentalTry this: [apply] import Artinian.AlgebraTry this: [apply] import Artinian.DefsTry this: [apply] import Artinian.InstancesTry this: [apply] import Artinian.ModuleTry this: [apply] import Artinian.RingTry this: [apply] import BezoutTry this: [apply] import Bialgebra.BasicTry this: [apply] import Bialgebra.ConvolutionTry this: [apply] import Bialgebra.EquivTry this: [apply] import Bialgebra.GroupLikeTry this: [apply] import Bialgebra.HomTry this: [apply] import Bialgebra.MonoidAlgebraTry this: [apply] import Bialgebra.QuotientTry this: [apply] import Bialgebra.SymmetricAlgebraTry this: [apply] import Bialgebra.TensorProductTry this: [apply] import BinomialTry this: [apply] import ChainOfDivisorsTry this: [apply] import ClassGroupTry this: [apply] import ClassGroup.BasicTry this: [apply] import ClassGroup.ExtendedHomTry this: [apply] import Coalgebra.BasicTry this: [apply] import Coalgebra.CoassocSimpsTry this: [apply] import Coalgebra.ConvolutionTry this: [apply] import Coalgebra.EquivTry this: [apply] import Coalgebra.GroupLikeTry this: [apply] import Coalgebra.HomTry this: [apply] import Coalgebra.MonoidAlgebraTry this: [apply] import Coalgebra.MulOppositeTry this: [apply] import Coalgebra.QuotientTry this: [apply] import Coalgebra.TensorProductTry this: [apply] import ComplexTry this: [apply] import ConductorTry this: [apply] import Congruence.BasicTry this: [apply] import Congruence.BigOperatorsTry this: [apply] import Congruence.DefsTry this: [apply] import Congruence.HomTry this: [apply] import Congruence.OppositeTry this: [apply] import Congruence.StarTry this: [apply] import Coprime.BasicTry this: [apply] import Coprime.IdealTry this: [apply] import Coprime.LemmasTry this: [apply] import DedekindDomain.AdicValuationTry this: [apply] import DedekindDomain.BasicTry this: [apply] import DedekindDomain.DifferentTry this: [apply] import DedekindDomain.DvrTry this: [apply] import DedekindDomain.FactorizationTry this: [apply] import DedekindDomain.FiniteAdeleRingTry this: [apply] import DedekindDomain.GaussLemmaTry this: [apply] import DedekindDomain.Ideal.BasicTry this: [apply] import DedekindDomain.Ideal.LemmasTry this: [apply] import DedekindDomain.InstancesTry this: [apply] import DedekindDomain.IntegralClosureTry this: [apply] import DedekindDomain.LinearDisjointTry this: [apply] import DedekindDomain.PIDTry this: [apply] import DedekindDomain.SIntegerTry this: [apply] import DedekindDomain.SelmerGroupTry this: [apply] import Depth.ReesTry this: [apply] import Derivation.BasicTry this: [apply] import Derivation.DifferentialRingTry this: [apply] import Derivation.LieTry this: [apply] import Derivation.MapCoeffsTry this: [apply] import Derivation.ToSquareZeroTry this: [apply] import DiscreteValuationRing.BasicTry this: [apply] import DiscreteValuationRing.TFAETry this: [apply] import DiscriminantTry this: [apply] import DividedPowerAlgebra.InitTry this: [apply] import DividedPowers.BasicTry this: [apply] import DividedPowers.DPMorphismTry this: [apply] import DividedPowers.PadicTry this: [apply] import DividedPowers.RatAlgebraTry this: [apply] import DividedPowers.SubDPIdealTry this: [apply] import DualNumberTry this: [apply] import EssentialFinitenessTry this: [apply] import Etale.BasicTry this: [apply] import Etale.DescentTry this: [apply] import Etale.FieldTry this: [apply] import Etale.FiniteTry this: [apply] import Etale.KaehlerTry this: [apply] import Etale.LocusTry this: [apply] import Etale.PiTry this: [apply] import Etale.QuasiFiniteTry this: [apply] import Etale.StandardEtaleTry this: [apply] import Etale.WeaklyTry this: [apply] import EuclideanDomainTry this: [apply] import Extension.BasicTry this: [apply] import Extension.Cotangent.BaseChangeTry this: [apply] import Extension.Cotangent.BasicTry this: [apply] import Extension.Cotangent.BasisTry this: [apply] import Extension.Cotangent.FreeTry this: [apply] import Extension.Cotangent.LocalizationAwayTry this: [apply] import Extension.ExtendScalarsTry this: [apply] import Extension.GeneratorsTry this: [apply] import Extension.Presentation.BasicTry this: [apply] import Extension.Presentation.CoreTry this: [apply] import Extension.Presentation.SubmersiveTry this: [apply] import FilteredAlgebra.BasicTry this: [apply] import FiltrationTry this: [apply] import FiniteLengthTry this: [apply] import FinitePresentationTry this: [apply] import FiniteStabilityTry this: [apply] import FiniteTypeTry this: [apply] import Finiteness.BasicTry this: [apply] import Finiteness.BilinearTry this: [apply] import Finiteness.CardinalityTry this: [apply] import Finiteness.CofiniteTry this: [apply] import Finiteness.DefsTry this: [apply] import Finiteness.DescentTry this: [apply] import Finiteness.FinitePresentationLocalTry this: [apply] import Finiteness.FiniteTypeLocalTry this: [apply] import Finiteness.FinsuppTry this: [apply] import Finiteness.IdealTry this: [apply] import Finiteness.LatticeTry this: [apply] import Finiteness.ModuleFinitePresentationTry this: [apply] import Finiteness.NakayamaTry this: [apply] import Finiteness.NilpotentTry this: [apply] import Finiteness.NilpotentKerTry this: [apply] import Finiteness.ProdTry this: [apply] import Finiteness.ProjectiveTry this: [apply] import Finiteness.QuotientTry this: [apply] import Finiteness.SmallTry this: [apply] import Finiteness.SubalgebraTry this: [apply] import FintypeTry this: [apply] import Flat.BasicTry this: [apply] import Flat.CategoryTheoryTry this: [apply] import Flat.DomainTry this: [apply] import Flat.EqualizerTry this: [apply] import Flat.EquationalCriterionTry this: [apply] import Flat.FaithfullyFlat.AlgebraTry this: [apply] import Flat.FaithfullyFlat.BasicTry this: [apply] import Flat.FaithfullyFlat.DescentTry this: [apply] import Flat.IsBaseChangeTry this: [apply] import Flat.LocalizationTry this: [apply] import Flat.LocallyFreeTry this: [apply] import Flat.RankTry this: [apply] import Flat.StabilityTry this: [apply] import Flat.TensorTry this: [apply] import Flat.TorsionFreeTry this: [apply] import FormalGroup.BasicTry this: [apply] import FractionalIdeal.BasicTry this: [apply] import FractionalIdeal.ExtendedTry this: [apply] import FractionalIdeal.InverseTry this: [apply] import FractionalIdeal.NormTry this: [apply] import FractionalIdeal.OperationsTry this: [apply] import FreeCommRingTry this: [apply] import FreeRingTry this: [apply] import FrobeniusTry this: [apply] import GradedAlgebra.AlgHomTry this: [apply] import GradedAlgebra.BasicTry this: [apply] import GradedAlgebra.FiniteTypeTry this: [apply] import GradedAlgebra.Homogeneous.IdealTry this: [apply] import GradedAlgebra.Homogeneous.MapsTry this: [apply] import GradedAlgebra.Homogeneous.SubmoduleTry this: [apply] import GradedAlgebra.Homogeneous.SubsemiringTry this: [apply] import GradedAlgebra.HomogeneousLocalizationTry this: [apply] import GradedAlgebra.NoetherianTry this: [apply] import GradedAlgebra.RadicalTry this: [apply] import GradedAlgebra.RingHomTry this: [apply] import GradedAlgebra.TensorProductTry this: [apply] import GrassmannianTry this: [apply] import HahnSeries.AdditionTry this: [apply] import HahnSeries.BasicTry this: [apply] import HahnSeries.BinomialTry this: [apply] import HahnSeries.CardinalTry this: [apply] import HahnSeries.HEvalTry this: [apply] import HahnSeries.HahnEmbeddingTry this: [apply] import HahnSeries.LexTry this: [apply] import HahnSeries.MultiplicationTry this: [apply] import HahnSeries.PowerSeriesTry this: [apply] import HahnSeries.SummableTry this: [apply] import HahnSeries.ValuationTry this: [apply] import HenselianTry this: [apply] import HopfAlgebra.BasicTry this: [apply] import HopfAlgebra.ConvolutionTry this: [apply] import HopfAlgebra.GroupLikeTry this: [apply] import HopfAlgebra.MonoidAlgebraTry this: [apply] import HopfAlgebra.QuotientTry this: [apply] import HopfAlgebra.TensorProductTry this: [apply] import HopkinsLevitzkiTry this: [apply] import Ideal.AssociatedPrime.BasicTry this: [apply] import Ideal.AssociatedPrime.FinitenessTry this: [apply] import Ideal.AssociatedPrime.LocalizationTry this: [apply] import Ideal.BasicTry this: [apply] import Ideal.BasisTry this: [apply] import Ideal.BigOperatorsTry this: [apply] import Ideal.ColonTry this: [apply] import Ideal.CotangentTry this: [apply] import Ideal.CotangentBaseChangeTry this: [apply] import Ideal.DefsTry this: [apply] import Ideal.FinsuppTry this: [apply] import Ideal.GoingDownTry this: [apply] import Ideal.GoingUpTry this: [apply] import Ideal.HeightTry this: [apply] import Ideal.IdempotentFGTry this: [apply] import Ideal.IntTry this: [apply] import Ideal.IsAugmentationTry this: [apply] import Ideal.IsPrimaryTry this: [apply] import Ideal.IsPrincipalTry this: [apply] import Ideal.IsPrincipalPowQuotientTry this: [apply] import Ideal.KrullsHeightTheoremTry this: [apply] import Ideal.LatticeTry this: [apply] import Ideal.MapsTry this: [apply] import Ideal.MaximalTry this: [apply] import Ideal.MinimalPrime.BasicTry this: [apply] import Ideal.MinimalPrime.ColonTry this: [apply] import Ideal.MinimalPrime.LocalizationTry this: [apply] import Ideal.MinimalPrime.NoetherianTry this: [apply] import Ideal.MonicSpanTry this: [apply] import Ideal.NatIntTry this: [apply] import Ideal.NonunitsTry this: [apply] import Ideal.Norm.AbsNormTry this: [apply] import Ideal.Norm.RelNormTry this: [apply] import Ideal.OkaTry this: [apply] import Ideal.OperationsTry this: [apply] import Ideal.OverTry this: [apply] import Ideal.PointwiseTry this: [apply] import Ideal.PrimeTry this: [apply] import Ideal.ProdTry this: [apply] import Ideal.PureTry this: [apply] import Ideal.Quotient.BasicTry this: [apply] import Ideal.Quotient.ChineseRemainderTry this: [apply] import Ideal.Quotient.DefsTry this: [apply] import Ideal.Quotient.HasFiniteQuotientsTry this: [apply] import Ideal.Quotient.NilpotentTry this: [apply] import PowerSeries.BinomialTry this: [apply] import Ideal.Quotient.OverTry this: [apply] import Ideal.Quotient.PowTransitionTry this: [apply] import Ideal.SpanTry this: [apply] import Ideal.UFDTry this: [apply] import IdealFilter.BasicTry this: [apply] import IdealFilter.TopologyTry this: [apply] import IdempotentsTry this: [apply] import Int.BasicTry this: [apply] import IntegralClosure.Algebra.BasicTry this: [apply] import IntegralClosure.Algebra.DefsTry this: [apply] import IntegralClosure.Algebra.IdealTry this: [apply] import IntegralClosure.GoingDownTry this: [apply] import IntegralClosure.IntegralRestrictTry this: [apply] import IntegralClosure.IntegrallyClosedTry this: [apply] import IntegralClosure.IsIntegral.AlmostIntegralTry this: [apply] import IntegralClosure.IsIntegral.BasicTry this: [apply] import IntegralClosure.IsIntegral.DefsTry this: [apply] import IntegralClosure.IsIntegralClosure.BasicTry this: [apply] import IntegralClosure.IsIntegralClosure.DefsTry this: [apply] import IntegralDomainTry this: [apply] import Invariant.BasicTry this: [apply] import Invariant.DefsTry this: [apply] import Invariant.GaloisTry this: [apply] import Invariant.ProfiniteTry this: [apply] import IsAdjoinRootTry this: [apply] import IsGaloisGroup.BasicTry this: [apply] import IsGaloisGroup.DefsTry this: [apply] import IsPrimaryTry this: [apply] import IsTensorProductTry this: [apply] import Jacobson.ArtinianTry this: [apply] import Jacobson.IdealTry this: [apply] import Jacobson.PolynomialTry this: [apply] import Jacobson.RadicalTry this: [apply] import Jacobson.RingTry this: [apply] import Jacobson.SemiprimaryTry this: [apply] import Kaehler.BasicTry this: [apply] import Kaehler.JacobiZariskiTry this: [apply] import Kaehler.PolynomialTry this: [apply] import Kaehler.TensorProductTry this: [apply] import KrullDimension.BasicTry this: [apply] import KrullDimension.FieldTry this: [apply] import KrullDimension.LocalRingTry this: [apply] import KrullDimension.ModuleTry this: [apply] import KrullDimension.NonZeroDivisorsTry this: [apply] import KrullDimension.PIDTry this: [apply] import KrullDimension.PolynomialTry this: [apply] import KrullDimension.RegularTry this: [apply] import KrullDimension.ZeroTry this: [apply] import LaskerTry this: [apply] import LaurentSeriesTry this: [apply] import LengthTry this: [apply] import LinearDisjointTry this: [apply] import LittleWedderburnTry this: [apply] import LocalIsoTry this: [apply] import LocalProperties.BasicTry this: [apply] import LocalProperties.ExactnessTry this: [apply] import LocalProperties.FinitePresentationTry this: [apply] import LocalProperties.InjectiveTry this: [apply] import LocalProperties.InjectiveDimensionTry this: [apply] import LocalProperties.IntegrallyClosedTry this: [apply] import LocalProperties.ProjectiveTry this: [apply] import LocalProperties.ProjectiveDimensionTry this: [apply] import LocalProperties.ReducedTry this: [apply] import LocalProperties.SemilocalTry this: [apply] import LocalProperties.SubmoduleTry this: [apply] import LocalRing.BasicTry this: [apply] import LocalRing.DefsTry this: [apply] import LocalRing.EtaleTry this: [apply] import LocalRing.LengthTry this: [apply] import LocalRing.LocalSubringTry this: [apply] import LocalRing.MaximalIdeal.BasicTry this: [apply] import LocalRing.MaximalIdeal.DefsTry this: [apply] import LocalRing.MaximalIdeal.SquareTry this: [apply] import LocalRing.ModuleTry this: [apply] import LocalRing.NonLocalRingTry this: [apply] import LocalRing.PullbackTry this: [apply] import LocalRing.QuotientTry this: [apply] import LocalRing.ResidueField.BasicTry this: [apply] import LocalRing.ResidueField.DefsTry this: [apply] import LocalRing.ResidueField.FiberTry this: [apply] import LocalRing.ResidueField.IdealTry this: [apply] import LocalRing.ResidueField.InstancesTry this: [apply] import LocalRing.ResidueField.PolynomialTry this: [apply] import LocalRing.RingHom.BasicTry this: [apply] import LocalRing.SubringTry this: [apply] import Localization.AlgebraTry this: [apply] import Localization.AsSubringTry this: [apply] import Localization.AtPrime.BasicTry this: [apply] import Localization.AtPrime.ExtensionTry this: [apply] import Localization.Away.AdjoinRootTry this: [apply] import Localization.Away.BasicTry this: [apply] import Localization.Away.LemmasTry this: [apply] import Localization.BaseChangeTry this: [apply] import Localization.BasicTry this: [apply] import Localization.CardinalityTry this: [apply] import Localization.DefsTry this: [apply] import Localization.FinitenessTry this: [apply] import Localization.FractionRingTry this: [apply] import Localization.FreeTry this: [apply] import Localization.IdealTry this: [apply] import Localization.IntegerTry this: [apply] import Localization.IntegralTry this: [apply] import Localization.InvSubmonoidTry this: [apply] import Localization.LocalizationLocalizationTry this: [apply] import Localization.ModuleTry this: [apply] import Localization.NormTraceTry this: [apply] import Localization.NumDenTry this: [apply] import Localization.PiTry this: [apply] import Localization.RatTry this: [apply] import Localization.SubmoduleTry this: [apply] import MatrixAlgebraTry this: [apply] import MatrixPolynomialAlgebraTry this: [apply] import Morita.BasicTry this: [apply] import Morita.MatrixTry this: [apply] import MultiplicityTry this: [apply] import MvPolynomialTry this: [apply] import MvPolynomial.BasicTry this: [apply] import MvPolynomial.EulerIdentityTry this: [apply] import MvPolynomial.ExpandTry this: [apply] import MvPolynomial.FreeCommRingTry this: [apply] import MvPolynomial.GroebnerTry this: [apply] import MvPolynomial.HomogeneousTry this: [apply] import MvPolynomial.IdealTry this: [apply] import MvPolynomial.IrreducibleQuadraticTry this: [apply] import MvPolynomial.LocalizationTry this: [apply] import MvPolynomial.MonomialOrderTry this: [apply] import MvPolynomial.MonomialOrder.DegLexTry this: [apply] import MvPolynomial.Symmetric.DefsTry this: [apply] import MvPolynomial.Symmetric.FundamentalTheoremTry this: [apply] import MvPolynomial.Symmetric.NewtonIdentitiesTry this: [apply] import MvPolynomial.TowerTry this: [apply] import MvPolynomial.WeightedHomogeneousTry this: [apply] import MvPowerSeries.BasicTry this: [apply] import MvPowerSeries.EquivTry this: [apply] import MvPowerSeries.EvaluationTry this: [apply] import MvPowerSeries.ExpandTry this: [apply] import MvPowerSeries.GaussNormTry this: [apply] import MvPowerSeries.InverseTry this: [apply] import MvPowerSeries.LexOrderTry this: [apply] import MvPowerSeries.LinearTopologyTry this: [apply] import MvPowerSeries.NoZeroDivisorsTry this: [apply] import MvPowerSeries.OrderTry this: [apply] import MvPowerSeries.PiTopologyTry this: [apply] import MvPowerSeries.RenameTry this: [apply] import MvPowerSeries.RestrictedTry this: [apply] import MvPowerSeries.SubstitutionTry this: [apply] import MvPowerSeries.TruncTry this: [apply] import NakayamaTry this: [apply] import Nilpotent.BasicTry this: [apply] import Nilpotent.DefsTry this: [apply] import Nilpotent.ExpTry this: [apply] import Nilpotent.GeometricallyReducedTry this: [apply] import Nilpotent.LemmasTry this: [apply] import NoetherNormalizationTry this: [apply] import Noetherian.BasicTry this: [apply] import Noetherian.DefsTry this: [apply] import Noetherian.FilterTry this: [apply] import Noetherian.NilpotentTry this: [apply] import Noetherian.OfPrimeTry this: [apply] import Noetherian.OrzechTry this: [apply] import Noetherian.UniqueFactorizationDomainTry this: [apply] import NonUnitalSubring.BasicTry this: [apply] import NonUnitalSubring.DefsTry this: [apply] import NonUnitalSubsemiring.BasicTry this: [apply] import NonUnitalSubsemiring.DefsTry this: [apply] import Norm.BasicTry this: [apply] import Norm.DefsTry this: [apply] import Norm.TransitivityTry this: [apply] import NormTraceTry this: [apply] import NormalClosureTry this: [apply] import NullstellensatzTry this: [apply] import OrderOfVanishing.BasicTry this: [apply] import OrderOfVanishing.NoetherianTry this: [apply] import OreLocalization.BasicTry this: [apply] import OreLocalization.CardinalityTry this: [apply] import OreLocalization.NonZeroDivisorsTry this: [apply] import OreLocalization.OreSetTry this: [apply] import OreLocalization.RingTry this: [apply] import OrzechPropertyTry this: [apply] import PerfectionTry this: [apply] import Perfectoid.BDeRhamTry this: [apply] import Perfectoid.FontaineThetaTry this: [apply] import Perfectoid.UntiltTry this: [apply] import PiTensorProductTry this: [apply] import PicardGroupTry this: [apply] import Polynomial.BasicTry this: [apply] import Polynomial.BernsteinTry this: [apply] import Polynomial.ChebyshevTry this: [apply] import Polynomial.ContentTry this: [apply] import Polynomial.ContentIdealTry this: [apply] import Polynomial.Cyclotomic.BasicTry this: [apply] import Polynomial.Cyclotomic.EvalTry this: [apply] import Polynomial.Cyclotomic.ExpandTry this: [apply] import Polynomial.Cyclotomic.FactorizationTry this: [apply] import Polynomial.Cyclotomic.RootsTry this: [apply] import Polynomial.DegreeLTTry this: [apply] import Polynomial.DicksonTry this: [apply] import Polynomial.Eisenstein.BasicTry this: [apply] import Polynomial.Eisenstein.CriterionTry this: [apply] import Polynomial.Eisenstein.DistinguishedTry this: [apply] import Polynomial.Eisenstein.IsIntegralTry this: [apply] import Polynomial.GaussLemmaTry this: [apply] import Polynomial.GaussNormTry this: [apply] import Polynomial.Hermite.BasicTry this: [apply] import Polynomial.Hermite.GaussianTry this: [apply] import Polynomial.HilbertPolyTry this: [apply] import Polynomial.IdealTry this: [apply] import Polynomial.IntegralNormalizationTry this: [apply] import Polynomial.IrreducibleRingTry this: [apply] import Polynomial.IsIntegralTry this: [apply] import Polynomial.MorseTry this: [apply] import Polynomial.NilpotentTry this: [apply] import Polynomial.OppositesTry this: [apply] import Polynomial.PochhammerTry this: [apply] import Polynomial.QuotientTry this: [apply] import Polynomial.RadicalTry this: [apply] import Polynomial.RationalRootTry this: [apply] import Polynomial.Resultant.BasicTry this: [apply] import Polynomial.ScaleRootsTry this: [apply] import Polynomial.SelmerTry this: [apply] import Polynomial.SeparableDegreeTry this: [apply] import Polynomial.ShiftedLegendreTry this: [apply] import Polynomial.SmallDegreeVietaTry this: [apply] import Polynomial.SubringTry this: [apply] import Polynomial.TowerTry this: [apply] import Polynomial.UniqueFactorizationTry this: [apply] import Polynomial.UniversalFactorizationRingTry this: [apply] import Polynomial.VietaTry this: [apply] import Polynomial.WronskianTry this: [apply] import PolynomialAlgebraTry this: [apply] import PolynomialLaw.BasicTry this: [apply] import PowerBasisTry this: [apply] import PowerSeries.BasicTry this: [apply] import Spectrum.Prime.PolynomialTry this: [apply] import PowerSeries.CatalanTry this: [apply] import PowerSeries.CoeffMulMemTry this: [apply] import PowerSeries.DerivativeTry this: [apply] import PowerSeries.EvaluationTry this: [apply] import PowerSeries.ExpTry this: [apply] import PowerSeries.ExpandTry this: [apply] import PowerSeries.GaussNormTry this: [apply] import PowerSeries.IdealTry this: [apply] import PowerSeries.InverseTry this: [apply] import PowerSeries.LogTry this: [apply] import PowerSeries.NoZeroDivisorsTry this: [apply] import PowerSeries.OrderTry this: [apply] import PowerSeries.PiTopologyTry this: [apply] import PowerSeries.RestrictedTry this: [apply] import PowerSeries.SchroderTry this: [apply] import PowerSeries.SubstitutionTry this: [apply] import PowerSeries.TruncTry this: [apply] import PowerSeries.WeierstrassPreparationTry this: [apply] import PowerSeries.WellKnownTry this: [apply] import PrimeTry this: [apply] import PrincipalIdealDomainTry this: [apply] import PrincipalIdealDomainOfPrimeTry this: [apply] import QuasiFinite.BasicTry this: [apply] import QuasiFinite.PolynomialTry this: [apply] import QuasiFinite.WeaklyTry this: [apply] import QuotSMulTopTry this: [apply] import RadicalTry this: [apply] import Radical.BasicTry this: [apply] import Radical.NatIntTry this: [apply] import RamificationInertia.BasicTry this: [apply] import RamificationInertia.InertiaTry this: [apply] import RamificationInertia.RamificationTry this: [apply] import ReesAlgebraTry this: [apply] import Regular.CategoryTry this: [apply] import Regular.DepthTry this: [apply] import Regular.FlatTry this: [apply] import Regular.FreeTry this: [apply] import Regular.IsSMulRegularTry this: [apply] import Regular.LinearMapTry this: [apply] import Regular.ProjectiveDimensionTry this: [apply] import Regular.RegularSequenceTry this: [apply] import RegularLocalRing.DefsTry this: [apply] import RegularLocalRing.PolynomialTry this: [apply] import RingHom.BijectiveTry this: [apply] import RingHom.EssFiniteTypeTry this: [apply] import RingHom.EtaleTry this: [apply] import RingHom.FaithfullyFlatTry this: [apply] import RingHom.FiniteTry this: [apply] import RingHom.FinitePresentationTry this: [apply] import RingHom.FiniteTypeTry this: [apply] import RingHom.FlatTry this: [apply] import RingHom.InjectiveTry this: [apply] import RingHom.IntegralTry this: [apply] import RingHom.LocallyTry this: [apply] import RingHom.LocallyStandardSmoothTry this: [apply] import RingHom.OpenImmersionTry this: [apply] import RingHom.PurelyInseparableTry this: [apply] import RingHom.QuasiFiniteTry this: [apply] import RingHom.SmoothTry this: [apply] import RingHom.StandardSmoothTry this: [apply] import RingHom.SurjectiveTry this: [apply] import RingHom.UnramifiedTry this: [apply] import RingHomPropertiesTry this: [apply] import RingInvoTry this: [apply] import RootsOfUnity.AlgebraicallyClosedTry this: [apply] import RootsOfUnity.BasicTry this: [apply] import RootsOfUnity.ComplexTry this: [apply] import RootsOfUnity.CyclotomicUnitsTry this: [apply] import RootsOfUnity.EnoughRootsOfUnityTry this: [apply] import RootsOfUnity.LemmasTry this: [apply] import RootsOfUnity.MinpolyTry this: [apply] import RootsOfUnity.PrimitiveRootsTry this: [apply] import SimpleModule.BasicTry this: [apply] import SimpleModule.InjectiveProjectiveTry this: [apply] import SimpleModule.IsAlgClosedTry this: [apply] import SimpleModule.IsotypicTry this: [apply] import SimpleModule.RankTry this: [apply] import SimpleModule.WedderburnArtinTry this: [apply] import SimpleRing.BasicTry this: [apply] import SimpleRing.CongrTry this: [apply] import SimpleRing.DefsTry this: [apply] import SimpleRing.DivisionRingTry this: [apply] import SimpleRing.FieldTry this: [apply] import SimpleRing.MatrixTry this: [apply] import SimpleRing.PrincipalTry this: [apply] import Smooth.AdicCompletionTry this: [apply] import Smooth.BasicTry this: [apply] import Smooth.FiberTry this: [apply] import Smooth.FieldTry this: [apply] import Smooth.FlatTry this: [apply] import Smooth.IntegralClosureTry this: [apply] import Smooth.KaehlerTry this: [apply] import Smooth.LocalTry this: [apply] import Smooth.LocusTry this: [apply] import Smooth.NoetherianDescentTry this: [apply] import Smooth.PiTry this: [apply] import Smooth.QuotientTry this: [apply] import Smooth.StandardSmoothTry this: [apply] import Smooth.StandardSmoothCotangentTry this: [apply] import Smooth.StandardSmoothOfFreeTry this: [apply] import Spectrum.Maximal.BasicTry this: [apply] import Spectrum.Maximal.DefsTry this: [apply] import Spectrum.Maximal.LocalizationTry this: [apply] import Spectrum.Maximal.TopologyTry this: [apply] import Spectrum.Prime.BasicTry this: [apply] import Spectrum.Prime.ChevalleyTry this: [apply] import Spectrum.Prime.ChevalleyComplexityTry this: [apply] import Spectrum.Prime.ConstructibleSetTry this: [apply] import Spectrum.Prime.DefsTry this: [apply] import Spectrum.Prime.FreeLocusTry this: [apply] import Spectrum.Prime.HomeomorphTry this: [apply] import Spectrum.Prime.IsOpenComapCTry this: [apply] import Spectrum.Prime.JacobsonTry this: [apply] import Spectrum.Prime.LTSeriesTry this: [apply] import Spectrum.Prime.ModuleTry this: [apply] import Spectrum.Prime.NoetherianTry this: [apply] import Valuation.Discrete.IsDiscreteValuationRingTry this: [apply] import Spectrum.Prime.RingHomTry this: [apply] import Spectrum.Prime.TensorProductTry this: [apply] import Spectrum.Prime.TopologyTry this: [apply] import SupportTry this: [apply] import SurjectiveOnStalksTry this: [apply] import TeichmullerTry this: [apply] import TensorProduct.BasicTry this: [apply] import TensorProduct.DirectLimitFGTry this: [apply] import TensorProduct.FiniteTry this: [apply] import TensorProduct.FreeTry this: [apply] import TensorProduct.IncludeLeftSubRightTry this: [apply] import TensorProduct.IsBaseChangeFreeTry this: [apply] import TensorProduct.IsBaseChangeHomTry this: [apply] import TensorProduct.IsBaseChangePiTry this: [apply] import TensorProduct.IsBaseChangeRightExactTry this: [apply] import TensorProduct.MapsTry this: [apply] import TensorProduct.MonoidAlgebraTry this: [apply] import TensorProduct.MvPolynomialTry this: [apply] import TensorProduct.NontrivialTry this: [apply] import TensorProduct.PiTry this: [apply] import TensorProduct.QuotientTry this: [apply] import TotallySplitTry this: [apply] import Trace.BasicTry this: [apply] import Trace.DefsTry this: [apply] import Trace.QuotientTry this: [apply] import TwoSidedIdeal.BasicTry this: [apply] import TwoSidedIdeal.BigOperatorsTry this: [apply] import TwoSidedIdeal.InstancesTry this: [apply] import TwoSidedIdeal.KernelTry this: [apply] import TwoSidedIdeal.LatticeTry this: [apply] import TwoSidedIdeal.OperationsTry this: [apply] import UniqueFactorizationDomain.BasicTry this: [apply] import UniqueFactorizationDomain.ClassGroupTry this: [apply] import UniqueFactorizationDomain.DefsTry this: [apply] import UniqueFactorizationDomain.FactorSetTry this: [apply] import UniqueFactorizationDomain.FiniteTry this: [apply] import UniqueFactorizationDomain.FinsuppTry this: [apply] import UniqueFactorizationDomain.GCDMonoidTry this: [apply] import UniqueFactorizationDomain.IdealTry this: [apply] import UniqueFactorizationDomain.KaplanskyTry this: [apply] import UniqueFactorizationDomain.LocalizationTry this: [apply] import UniqueFactorizationDomain.MoebiusTry this: [apply] import UniqueFactorizationDomain.MultiplicativeTry this: [apply] import UniqueFactorizationDomain.MultiplicityTry this: [apply] import UniqueFactorizationDomain.NatTry this: [apply] import UniqueFactorizationDomain.NormalizedFactorsTry this: [apply] import Unramified.BasicTry this: [apply] import Unramified.DedekindTry this: [apply] import Unramified.FieldTry this: [apply] import Unramified.FiniteTry this: [apply] import Unramified.LocalRingTry this: [apply] import Unramified.LocalStructureTry this: [apply] import Unramified.LocusTry this: [apply] import Unramified.PiTry this: [apply] import Valuation.AlgebraInstancesTry this: [apply] import Valuation.ArchimedeanTry this: [apply] import Valuation.BasicTry this: [apply] import Valuation.Discrete.BasicTry this: [apply] import WittVector.IsPolyTry this: [apply] import Valuation.Discrete.RankOneTry this: [apply] import Valuation.DiscreteValuativeRelTry this: [apply] import Valuation.ExtendToLocalizationTry this: [apply] import Valuation.ExtensionTry this: [apply] import Valuation.FiniteFieldTry this: [apply] import Valuation.IntegersTry this: [apply] import Valuation.IntegralTry this: [apply] import Valuation.IsTrivialOnTry this: [apply] import Valuation.LocalSubringTry this: [apply] import Valuation.MinpolyTry this: [apply] import Valuation.PrimeMultiplicityTry this: [apply] import Valuation.QuotientTry this: [apply] import Valuation.RamificationGroupTry this: [apply] import Valuation.RankOneTry this: [apply] import Valuation.ValuationRingTry this: [apply] import Valuation.ValuationSubringTry this: [apply] import Valuation.ValuativeRel.BasicTry this: [apply] import Valuation.ValuativeRel.TrivialTry this: [apply] import WittVector.BasicTry this: [apply] import WittVector.CompareTry this: [apply] import WittVector.CompleteTry this: [apply] import WittVector.DefsTry this: [apply] import WittVector.DiscreteValuationRingTry this: [apply] import WittVector.DomainTry this: [apply] import WittVector.FrobeniusTry this: [apply] import WittVector.FrobeniusFractionFieldTry this: [apply] import WittVector.IdentitiesTry this: [apply] import WittVector.InitTailTry this: [apply] import RingTry this: [apply] import WittVector.IsocrystalTry this: [apply] import WittVector.MulCoeffTry this: [apply] import WittVector.MulPTry this: [apply] import WittVector.StructurePolynomialTry this: [apply] import WittVector.TeichmullerTry this: [apply] import WittVector.TeichmullerSeriesTry this: [apply] import WittVector.TruncatedTry this: [apply] import WittVector.VerschiebungTry this: [apply] import WittVector.WittPolynomialTry this: [apply] import ZModTry this: [apply] import ZMod.TorsionTry this: [apply] import ZMod.UnitsCyclicTry this: [apply] import ZariskisMainTheoremTry this: [apply] import NoncommRingTry this: [apply] import Ring.RingNFTry this: [apply] import Ring.BasicTry this: [apply] import Ring.CommonTry this: [apply] import Ring.CompareTry this: [apply] import Ring.NamePolyVarsTry this: [apply] import Ring.NamePowerVarsTry this: [apply] import Ring.PNatTry this: [apply] import Algebra.Ring.IdealTry this: [apply] import Algebra.InfiniteSum.RingTry this: [apply] import Algebra.Ring.BasicTry this: [apply] import Algebra.Ring.CompactTry this: [apply] import Algebra.UniformRingTry this: [apply] import Algebra.Ring.RealTry this: [apply] import Category.TopCommRingCat