|
From: | Ralf Hemmecke |
Subject: | Re: [Axiom-developer] Re: Units and dimensions |
Date: | Sat, 19 Aug 2006 19:34:01 +0200 |
User-agent: | Thunderbird 1.5.0.5 (X11/20060719) |
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
[Prev in Thread] | Current Thread | [Next in Thread] |