So Length, Length*Time^(-1) etc. are examples for such
monomials.
That's where I get in trouble. (Well, one of the places.) Length IS
basic in the SI system, but Length/Time is a different dimension from
Length OR Time and is not basic. It's COMPOSED of basic dimensions,
but that could be said of every derived dimension in a complete system.
I think what Ralf meant is that the *derived* dimensions form a group, not the
basic dimensions.
Right, and as such they must form a domain where all the group
operations are implemented. Informally, one can think of that domain (of
"derived dimension") as a container that has as its elements
powerproducts (negative powers allowed) of BasicDimensions.
I somehow have a slight feeling that the trouble comes when the design
should be such that the compiler is doing the dimension analysis. For
that we have to think a bit whether it is possible at all.
However, Length/Time^2 * Time^2 is composed of two derived dimensions -
Length/Time^2 and Time^2 - but will simplify to a basic dimension. I was
thinking some kind of conditional definition of type output for those
operators - if the resulting dimensional expression is in the basic
dimensions list for the system, return type BasicDimension, else the result
is a DerivedDimension.
No, the concept here is called "retract". You'd have an operation
retractIfCan: DerivedDimension -> Union("failed", BasicDimension)
Sorry, but I really don't quite understand, why one would need such a
retract at all. But maybe I'll learn more while implementing something
and getting feedback.
(I know, Ralf, that you hate that return type, but so far we don't have
Partial...)
Martin, you are right. ;-)
Ralf
_______________________________________________
Axiom-developer mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/axiom-developer