Library LinAlg.support.more_syntax
Require Export Module_cat.
In this file we introduce more syntax to make the development
more readable. Since we will be working in a commutative (abelian)
setting most of the time, we introduce the notation +' for the
"sgroup_law" and zero (instead of "one" or "unit") for the
monoid-unit. In fact, since in rings we also have a multiplicative
unit (called ring_unit), we can reserve the notation one for
that. Note also that the syntax defined in this files leaves implicit
the structures on which the notions are derived; that is to say, e.g.,
+' is defined in sgroups, but the notation a +' b does not mention
the sgroup where a and b are taken from. (Just like 'normal'
mathematics)
I found out that due to coercions, the underlying multiplicative
monoid of a ring R will just be printed as 'R', which sometimes
leads to confusion: then we may get subgoals that seem to require
us to prove things like (a+b)v = a(bv); but since the "addition"
actually takes place in the multiplicative semigroup, it is in
fact a multiplication. Unfortunately the coercions causing this
behaviour are in the Algebra contribution, which I prefer not to
change. Moreover, this behaviour is really an exception; in most
cases not printing the coercions is in fact the desired behaviour.
Notation "a +' b" := (sgroup_law _ a b) (at level 50, left associativity).
Notation "'zero' a" := (monoid_unit a) (at level 100).
Notation one := (ring_unit _).
Notation "a 'mX' b" := (module_mult a b) (at level 42, right associativity).
Notation "a 'rX' b" := (ring_mult a b) (at level 42, right associativity).
Notation "'min' a" := (group_inverse _ a) (at level 100).
