/usr/share/axiom-20170501/src/algebra/ABELMON.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | )abbrev category ABELMON AbelianMonoid
++ Description:
++ The class of multiplicative monoids, that is, semigroups with an
++ additive identity element.
++
++ Axioms\br
++ \tab{5}\spad{leftIdentity("+":(%,%)->%,0)}\tab{5}\spad{0+x=x}\br
++ \tab{5}\spad{rightIdentity("+":(%,%)->%,0)}\tab{4}\spad{x+0=x}
-- following domain must be compiled with subsumption disabled
-- define SourceLevelSubset to be EQUAL
AbelianMonoid() : Category == SIG where
SIG ==> AbelianSemiGroup with
0 : constant -> %
++ \spad{0} is the additive identity element.
sample : constant -> %
++ sample yields a value of type %
zero? : % -> Boolean
++ zero?(x) tests if x is equal to 0.
"*" : (NonNegativeInteger,%) -> %
++ n * x is left-multiplication by a non negative integer
add
import RepeatedDoubling(%)
zero? x == x = 0
n:PositiveInteger * x:% == (n::NonNegativeInteger) * x
sample() == 0
if not (% has Ring) then
n:NonNegativeInteger * x:% ==
zero? n => 0
double(n pretend PositiveInteger,x)
|