Multiplicative properties of Hahn series #
If Γ
is ordered and R
has zero, then HahnSeries Γ R
consists of formal series over Γ
with
coefficients in R
, whose supports are partially well-ordered. With further structure on R
and
Γ
, we can add further structure on HahnSeries Γ R
. We prove some facts about multiplying
Hahn series.
Main Definitions #
HahnModule
is a type alias forHahnSeries
, which we use for defining scalar multiplication ofHahnSeries Γ R
onHahnModule Γ' R V
for anR
-moduleV
, whereΓ'
admits an ordered cancellative vector addition operation fromΓ
.
Main results #
- If
R
is a (commutative) (semi-)ring, then so isHahnSeries Γ R
. - If
V
is anR
-module, thenHahnModule Γ' R V
is aHahnSeries Γ R
-module.
TODO #
- Scalar tower instances
References #
- [J. van der Hoeven, Operators on Generalized Power Series][van_der_hoeven]
Equations
- HahnSeries.instOne = { one := (HahnSeries.single 0) 1 }
We introduce a type alias for HahnSeries
in order to work with scalar multiplication by
series. If we wrote a SMul (HahnSeries Γ R) (HahnSeries Γ V)
instance, then when
V = HahnSeries Γ R
, we would have two different actions of HahnSeries Γ R
on HahnSeries Γ V
.
See Mathlib.Algebra.Polynomial.Module
for more discussion on this problem.
Equations
- HahnModule Γ R V = HahnSeries Γ V
Instances For
The casting function to the type synonym.
Equations
- HahnModule.of R = Equiv.refl (HahnSeries Γ V)
Instances For
Recursion principle to reduce a result about the synonym to the original type.
Equations
- HahnModule.rec h x = h ((HahnModule.of R).symm x)
Instances For
Equations
- HahnModule.instAddCommMonoid = inferInstanceAs (AddCommMonoid (HahnSeries Γ V))
Equations
- HahnModule.instBaseSMul = inferInstanceAs (SMul R (HahnSeries Γ V))
Equations
- One or more equations did not get rendered due to their size.
Equations
- HahnModule.instBaseSMulZeroClass = inferInstanceAs (SMulZeroClass R (HahnSeries Γ V))
Equations
- HahnModule.instSMulZeroClass = SMulZeroClass.mk ⋯
Equations
- HahnModule.instDistribSMul = DistribSMul.mk ⋯
Equations
- HahnSeries.instMul = { mul := fun (x y : HahnSeries Γ R) => (HahnModule.of R).symm (x • (HahnModule.of R) y) }
Equations
- HahnSeries.instDistrib = let __src := inferInstanceAs (Mul (HahnSeries Γ R)); let __src_1 := inferInstanceAs (Add (HahnSeries Γ R)); Distrib.mk ⋯ ⋯
Equations
- One or more equations did not get rendered due to their size.
Equations
- HahnSeries.instNonUnitalSemiring = let __src := inferInstanceAs (NonUnitalNonAssocSemiring (HahnSeries Γ R)); NonUnitalSemiring.mk ⋯
Equations
- HahnSeries.instNonAssocSemiring = let __src := AddMonoidWithOne.unary; let __src_1 := inferInstanceAs (NonUnitalNonAssocSemiring (HahnSeries Γ R)); NonAssocSemiring.mk ⋯ ⋯ ⋯ ⋯
Equations
- HahnSeries.instSemiring = let __src := inferInstanceAs (NonAssocSemiring (HahnSeries Γ R)); let __src_1 := inferInstanceAs (NonUnitalSemiring (HahnSeries Γ R)); Semiring.mk ⋯ ⋯ ⋯ ⋯ npowRec ⋯ ⋯
Equations
- HahnSeries.instNonUnitalCommSemiring = let __spread.0 := inferInstance; NonUnitalCommSemiring.mk ⋯
Equations
- HahnSeries.instCommSemiring = let __src := inferInstanceAs (NonUnitalCommSemiring (HahnSeries Γ R)); let __src_1 := inferInstanceAs (Semiring (HahnSeries Γ R)); CommSemiring.mk ⋯
Equations
- One or more equations did not get rendered due to their size.
Equations
- HahnSeries.instNonUnitalRing = let __src := inferInstanceAs (NonUnitalNonAssocRing (HahnSeries Γ R)); let __src_1 := inferInstanceAs (NonUnitalSemiring (HahnSeries Γ R)); NonUnitalRing.mk ⋯
Equations
- One or more equations did not get rendered due to their size.
Equations
- HahnSeries.instRing = let __src := inferInstanceAs (Semiring (HahnSeries Γ R)); let __src_1 := inferInstanceAs (AddCommGroup (HahnSeries Γ R)); Ring.mk ⋯ SubNegMonoid.zsmul ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Equations
- HahnSeries.instNonUnitalCommRing = let __src := inferInstanceAs (NonUnitalCommSemiring (HahnSeries Γ R)); let __src_1 := inferInstanceAs (NonUnitalRing (HahnSeries Γ R)); NonUnitalCommRing.mk ⋯
Equations
- HahnSeries.instCommRing = let __src := inferInstanceAs (CommSemiring (HahnSeries Γ R)); let __src_1 := inferInstanceAs (Ring (HahnSeries Γ R)); CommRing.mk ⋯
Equations
- HahnModule.instBaseModule = inferInstanceAs (Module R (HahnSeries Γ' V))
Equations
- HahnModule.instModule = let __src := inferInstanceAs (DistribSMul (HahnSeries Γ R) (HahnModule Γ' R V)); Module.mk ⋯ ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
C a
is the constant Hahn Series a
. C
is provided as a ring homomorphism.
Equations
- HahnSeries.C = { toFun := ⇑(HahnSeries.single 0), map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Extending the domain of Hahn series is a ring homomorphism.
Equations
- HahnSeries.embDomainRingHom f hfi hf = { toFun := HahnSeries.embDomain { toFun := ⇑f, inj' := hfi, map_rel_iff' := ⋯ }, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Equations
- HahnSeries.instAlgebra = Algebra.mk (HahnSeries.C.comp (algebraMap R A)) ⋯ ⋯
Equations
- ⋯ = ⋯
Extending the domain of Hahn series is an algebra homomorphism.
Equations
- HahnSeries.embDomainAlgHom f hfi hf = let __src := HahnSeries.embDomainRingHom f hfi hf; { toRingHom := __src, commutes' := ⋯ }