## quotients of PIR are PIR:
[ IsResidueClassRingOfTheIntegers, "implies", IsPrincipalIdealRing ],
##---------------------------- ## IsKaplanskyHermite implies: ## (Def: a commutative ring for which each GL(2,R)-orbit of 1x2-rows ## has an element of the form (d,0), cf. [Lam06, Appendix of I.4, Prop. 4.24]) ##
## by definition
[ IsKaplanskyHermite, "implies", IsCommutative ],
##---------------------- ## IsBezoutRing implies: ## (a commutative ring in which every f.g. ideal is principal ## (e.g. the ring of entire functions on \C), cf. [Lam06, Example I.4.7,(5)])
## by definition
[ IsBezoutRing, "implies", IsCommutative ],
## [Weibel, Kbook.I.pdf Examples on p. 18]:
[ IsDedekindDomain, "and", IsLocal, "imply", IsDiscreteValuationRing ],
## the Steinitz theory
[ IsDedekindDomain, "and", IsFiniteFreePresentationRing, "imply", IsPrincipalIdealRing ],
##--------------------------------- ## IsDiscreteValuationRing implies: ## (a valuation ring with valuation group = Z, ## cf. [Hart, Definition and Theorem I.6.2A]):
## by definition
[ IsDiscreteValuationRing, "implies", IsCommutative ],
## by definition
[ IsDiscreteValuationRing, "implies", IsIntegralDomain ],
[ IsCommutative, "implies", AreUnitsCentral ], ## by definition
## IsLocal (a single maximal left/right/ideal)
[ IsLocal, "implies", IsSemiLocalRing ], ## trivial
[ IsLocal, "implies", HasInvariantBasisProperty ], ## [Lam06, bottom of p. 26]
## IsSemiLocalRing ## commutative def.: finitely many maximal ideals [Lam06, bottom of p. 20], general def. R/rad R is left or eq. right artinian [Lam06, top of p. 28]
[ IsSemiLocalRing, "implies", IsHermite ], ## [Lam06, Example I.4.7,(3)], with the correct notion of semilocal, commutativity is not essential, as Lam noted.
## IsSimpleRing: CAUTION: IsSimple does not imply IsSemiSimple; the Weyl algebra is a counter example
##
InstallTrueMethod( IsLeftPrincipalIdealRing, IsHomalgRing and IsEuclideanRing );
#################################### # # immediate methods for properties: # ####################################
##
InstallImmediateMethod( IsZero,
IsHomalgRing and HasIsNonZeroRing, 0,
function( R )
return not IsNonZeroRing( R );
end );
##
InstallImmediateMethod( IsNonZeroRing,
IsHomalgRing and HasIsZero, 0,
function( R )
return not IsZero( R );
end );
##
InstallImmediateMethod( HasInvariantBasisProperty,
IsHomalgRing and IsZero, 0,
function( R )
return false;
end );
##
InstallImmediateMethod( IsZero,
IsHomalgRing and HasContainsAField, 0,
function( R )
if ContainsAField( R ) then
return false; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsFinite,
IsFieldForHomalg and HasCharacteristic, 0,
function( R )
if Characteristic( R ) = 0then
return false; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsFinite,
IsFieldForHomalg and HasCharacteristic and HasDegreeOverPrimeField, 0,
function( R )
if Characteristic( R ) > 0then
return IsInt( DegreeOverPrimeField( R ) ); fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsFinite,
IsFieldForHomalg and HasRationalParameters, 0,
function( R )
## FIXME: get rid of IsBound( R!.MinimalPolynomialOfPrimitiveElement ) if Length( RationalParameters( R ) ) > 0 and
not IsBound( R!.MinimalPolynomialOfPrimitiveElement ) then
return false; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsZero,
IsHomalgRing and HasCharacteristic, 0,
function( R )
return Characteristic( R ) = 1;
end );
##
InstallImmediateMethod( IsZero,
IsHomalgRingElement and IsOne, 0,
function( r )
local R;
if IsBound( r!.ring ) then
R := HomalgRing( r ); if HasIsZero( R ) then
return IsZero( R ); fi; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsZero,
IsHomalgRingElement and IsMinusOne, 0,
function( r )
local R;
if IsBound( r!.ring ) then
R := HomalgRing( r ); if HasIsZero( R ) then
return IsZero( R ); fi; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsLeftRegular,
IsHomalgRingElement and HasIsZero, 0,
function( r )
local R;
if IsZero( r ) then
return false; fi;
if IsBound( r!.ring ) then
R := HomalgRing( r ); if HasIsIntegralDomain( R ) and IsIntegralDomain( R ) then
return not IsZero( r ); fi; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsLeftRegular,
IsHomalgRingElement and HasIsRightRegular, 0,
function( r )
local R;
if IsBound( r!.ring ) then
R := HomalgRing( r ); if HasIsCommutative( R ) and IsCommutative( R ) then
return IsRightRegular( r ); fi; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsRightRegular,
IsHomalgRingElement and HasIsZero, 0,
function( r )
local R;
if IsZero( r ) then
return false; fi;
if IsBound( r!.ring ) then
R := HomalgRing( r ); if HasIsIntegralDomain( R ) and IsIntegralDomain( R ) then
return not IsZero( r ); fi; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsRightRegular,
IsHomalgRingElement and HasIsLeftRegular, 0,
function( r )
local R;
if IsBound( r!.ring ) then
R := HomalgRing( r ); if HasIsCommutative( R ) and IsCommutative( R ) then
return IsLeftRegular( r ); fi; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsLeftGlobalDimensionFinite,
IsHomalgRing and HasLeftGlobalDimension, 0,
function( R )
return LeftGlobalDimension( R ) < infinity;
end );
##
InstallImmediateMethod( IsRightGlobalDimensionFinite,
IsHomalgRing and HasRightGlobalDimension, 0,
function( R )
return RightGlobalDimension( R ) < infinity;
end );
##
InstallImmediateMethod( IsResidueClassRingOfTheIntegers,
IsHomalgRing and HasAmbientRing, 0,
function( R )
if HasIsResidueClassRingOfTheIntegers( AmbientRing( R ) ) and IsResidueClassRingOfTheIntegers( AmbientRing( R ) ) then
return true; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsCommutative,
IsHomalgRing and HasAmbientRing, 0,
function( R )
if HasIsCommutative( AmbientRing( R ) ) and IsCommutative( AmbientRing( R ) ) then
return true; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsLeftPrincipalIdealRing,
IsHomalgRing and HasAmbientRing, 0,
function( R )
if HasIsLeftPrincipalIdealRing( AmbientRing( R ) ) and IsLeftPrincipalIdealRing( AmbientRing( R ) ) then
return true; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsRightPrincipalIdealRing,
IsHomalgRing and HasAmbientRing, 0,
function( R )
if HasIsRightPrincipalIdealRing( AmbientRing( R ) ) and IsRightPrincipalIdealRing( AmbientRing( R ) ) then
return true; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsLeftNoetherian,
IsHomalgRing and HasAmbientRing, 0,
function( R )
if HasIsLeftNoetherian( AmbientRing( R ) ) and IsLeftNoetherian( AmbientRing( R ) ) then
return true; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( IsRightNoetherian,
IsHomalgRing and HasAmbientRing, 0,
function( R )
if HasIsRightNoetherian( AmbientRing( R ) ) and IsRightNoetherian( AmbientRing( R ) ) then
return true; fi;
TryNextMethod( );
end );
#################################### # # immediate methods for attributes: # ####################################
##
InstallImmediateMethod( LeftGlobalDimension,
IsHomalgRing and IsLeftPrincipalIdealRing and IsIntegralDomain and HasIsDivisionRingForHomalg, 0,
function( R )
if IsDivisionRingForHomalg( R ) then
return 0; else
return 1; fi;
end );
##
InstallImmediateMethod( RightGlobalDimension,
IsHomalgRing and IsRightPrincipalIdealRing and IsIntegralDomain and HasIsDivisionRingForHomalg, 0,
function( R )
if IsDivisionRingForHomalg( R ) then
return 0; else
return 1; fi;
end );
##
InstallImmediateMethod( LeftGlobalDimension,
IsHomalgRing and HasIsLeftGlobalDimensionFinite, 0,
function( R )
if IsLeftGlobalDimensionFinite( R ) then
TryNextMethod( ); fi;
return infinity;
end );
##
InstallImmediateMethod( RightGlobalDimension,
IsHomalgRing and HasIsRightGlobalDimensionFinite, 0,
function( R )
if IsRightGlobalDimensionFinite( R ) then
TryNextMethod( ); fi;
return infinity;
end );
##
InstallImmediateMethod( GlobalDimension,
IsHomalgRing and IsDedekindDomain and HasIsFieldForHomalg, 0, ## hence by Serre's theorem: IsDedekindDomain implies GlobalDimension <= 1 < infinity implies IsRegular
function( R )
if IsFieldForHomalg( R ) then
return 0; else
return 1; fi;
end );
##
InstallImmediateMethod( GlobalDimension,
IsHomalgRing and IsFieldForHomalg, 1001,
function( R )
return 0;
end );
##
InstallImmediateMethod( GlobalDimension,
IsHomalgRing and IsDivisionRingForHomalg, 1001,
function( R )
return 0;
end );
## FIXME: this should be obsolete by the next method
InstallImmediateMethod( KrullDimension,
IsHomalgRing and IsPrincipalIdealRing and IsIntegralDomain and IsCommutative and HasIsFieldForHomalg, 0,
function( R )
if not IsFieldForHomalg( R ) then
return 1; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( KrullDimension,
IsHomalgRing and IsDedekindDomain and HasIsFieldForHomalg, 0,
function( R )
if not IsFieldForHomalg( R ) then
return 1; fi;
TryNextMethod( );
end );
##
InstallImmediateMethod( KrullDimension,
IsHomalgRing and IsFieldForHomalg, 1001,
function( R )
return 0;
end );
##
InstallImmediateMethod( Center,
IsHomalgRing and IsCommutative, 0,
function( R )
return R;
end );
#################################### # # methods for properties: # ####################################
##
InstallMethod( IsZero, "LIRNG: for homalg rings",
[ IsHomalgRing ],
function( R )
return IsZero( One( R ) );
end );
##
InstallMethod( IsNonZeroRing, "LIRNG: for homalg rings",
[ IsHomalgRing ],
function( R )
return not IsZero( R );
end );
##
InstallMethod( HasInvariantBasisProperty, "LIRNG: for homalg rings",
[ IsHomalgRing and IsCommutative ],
function( R )
return IsNonZeroRing( R );
end );
##
InstallMethod( IsMonic, "LIRNG: for homalg ring elements",
[ IsHomalgRingElement ],
function( r )
if IsZero( r ) then
return false; fi;
return IsOne( LeadingCoefficient( r ) );
end );
##
InstallMethod( IsMonicUptoUnit, "for homalg ring elements",
[ IsHomalgRingElement ],
function( r )
if IsZero( r ) then
return false; fi;
return IsUnit( LeadingCoefficient( r ) );
end );
##
InstallMethod( IsLeftRegular, "LIRNG: for homalg ring elements",
[ IsHomalgRingElement ],
function( r )
return IsLeftRegular( HomalgMatrix( [ r ], 1, 1, HomalgRing( r ) ) );
end );
##
InstallMethod( IsLeftRegular, "LIRNG: for homalg ring elements",
[ IsHomalgRingElement ], 10001,
function( r )
local R;
if IsZero( r ) then
return false; fi;
R := HomalgRing( r );
if HasIsIntegralDomain( R ) and IsIntegralDomain( R ) then
return not IsZero( r ); fi;
TryNextMethod( );
end );
##
InstallMethod( IsRightRegular, "LIRNG: for homalg ring elements",
[ IsHomalgRingElement ],
function( r )
return IsRightRegular( HomalgMatrix( [ r ], 1, 1, HomalgRing( r ) ) );
end );
##
InstallMethod( IsRightRegular, "LIRNG: for homalg ring elements",
[ IsHomalgRingElement ], 10001,
function( r )
local R;
if IsZero( r ) then
return false; fi;
R := HomalgRing( r );
if HasIsIntegralDomain( R ) and IsIntegralDomain( R ) then
return not IsZero( r ); fi;
TryNextMethod( );
end );
##
InstallMethod( IsRegular, "LIRNG: for homalg ring elements",
[ IsHomalgRingElement ],
function( r )
local r_mat;
r_mat := HomalgMatrix( [ r ], 1, 1, HomalgRing( r ) );
return ( ( HasIsLeftRegular( r ) and IsLeftRegular( r ) ) or
IsLeftRegular( r_mat ) ) and
( ( HasIsRightRegular( r ) and IsRightRegular( r ) ) or
IsRightRegular( r_mat ) );
end );
##
InstallMethod( IsIrreducibleHomalgRingElement, "for a homalg ring",
[ IsHomalgRingElement ],
function( r )
local R, RP;
R := HomalgRing( r );
RP := homalgTable( R );
if IsBound(RP!.IsIrreducible) then
return RP!.IsIrreducible( r ); fi;
TryNextMethod( );
end );
##
InstallMethod( IsIrreducible, "for a homalg ring",
[ IsHomalgRingElement ],
function( r )
return IsIrreducibleHomalgRingElement( r );
end );
##
InstallMethod( IsIntegralDomain, "for a homalg ring",
[ IsHomalgRing and HasAmbientRing ],
function( R )
return IsPrime( DefiningIdeal( R ) );
end );
#################################### # # methods for attributes: # ####################################
#################################### # # methods for operations: # ####################################
##
InstallMethod( \*, ## check if both elements reside in the same ring "LIRNG: for two homalg ring element",
[ IsHomalgRingElement, IsHomalgRingElement ], 10001,
function( r, s )
if not IsIdenticalObj( HomalgRing( r ), HomalgRing( s ) ) then
Error( "the two ring elements are not defined over identically the same ring\n" ); fi;
TryNextMethod( );
end );
##
InstallMethod( \*, "of homalg matrices with ring elements",
[ IsHomalgRingElement and IsZero, IsHomalgRingElement ], 1001,
##
InstallMethod( \+, ## check if both elements reside in the same ring "LIRNG: for two homalg ring element",
[ IsHomalgRingElement, IsHomalgRingElement ], 10001,
function( r, s )
if not IsIdenticalObj( HomalgRing( r ), HomalgRing( s ) ) then
Error( "the two ring elements are not defined over identically the same ring\n" ); fi;
TryNextMethod( );
end );
##
InstallMethod( \+, "LIRNG: for two homalg ring element",
[ IsHomalgRingElement and IsOne, IsHomalgRingElement and IsMinusOne ], 1001,
function( r, s )
return Zero( r );
end );
##
InstallMethod( \+, "LIRNG: for two homalg ring element",
[ IsHomalgRingElement and IsMinusOne, IsHomalgRingElement and IsOne ], 1001,
function( r, s )
return Zero( r );
end );
##
InstallMethod( \+, "LIRNG: for two homalg ring element",
[ IsHomalgRingElement, IsHomalgRingElement and IsZero ], 1001,
function( r, z )
return r;
end );
##
InstallMethod( \+, "LIRNG: for two homalg ring element",
[ IsHomalgRingElement and IsZero, IsHomalgRingElement ], 1001,
function( z, r )
return r;
end );
##
InstallMethod( \-, ## check if both elements reside in the same ring "LIRNG: for two homalg ring element",
[ IsHomalgRingElement, IsHomalgRingElement ], 10001,
function( r, s )
if not IsIdenticalObj( HomalgRing( r ), HomalgRing( s ) ) then
Error( "the two ring elements are not defined over identically the same ring\n" ); fi;
TryNextMethod( );
end );
##
InstallMethod( \-, "LIRNG: for two homalg ring element",
[ IsHomalgRingElement, IsHomalgRingElement ], 1001,
function( r, s )
if IsIdenticalObj( r, s ) then
return Zero( r ); fi;
TryNextMethod( );
end );
##
InstallMethod( \-, "LIRNG: for two homalg ring element",
[ IsHomalgRingElement, IsHomalgRingElement and IsZero ], 1001,
function( r, z )
return r;
end );
##
InstallMethod( \-, "LIRNG: for two homalg ring element",
[ IsHomalgRingElement and IsZero, IsHomalgRingElement ], 1001,
function( z, r )
return -r;
end );
## a method for -Zero( R ) -> Zero( R ) is somehow installed
## a synonym of `-<elm>':
InstallMethod( AdditiveInverseMutable, "LIRNG: for homalg ring elements",
[ IsHomalgRingElement and IsOne ],
function( r )
return MinusOneMutable( r );
end );
## a synonym of `-<elm>':
InstallMethod( AdditiveInverseMutable, "LIRNG: for homalg ring elements",
[ IsHomalgRingElement and IsMinusOne ],
function( r )
return One( r );
end );
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.37Bemerkung:
(vorverarbeitet am 2026-10-12)
¤