Dimensional analysis with fundeps
anatoli
anatoli@yahoo.com
Wed, 11 Apr 2001 10:54:14 -0700 (PDT)
Andrew Kennedy <akenn@microsoft.com> wrote:
> You shouldn't need rational exponents to take square roots as long as no
> *ground* type requires them.
Rational exponents for ground types are not strictly required
but sometimes very convenient. I'm not a physicist, but a web
search for "sqrt(hz)" turns up a lot of pages. This is apparently
a component of some unit of sensitivity and/or noise level. For
instance, sensitivity of an amplifier would be measured in Volt/sqrt(Hz)
which is the same as Volt*sqrt(second).
> In your encoding, is the following a valid type?
>
> sqrt :: (Num rep, Add kg kg kg', Add m m m', Add s s s') =>
> Dimensioned kg' m' s' rep -> Dimensioned kg m s rep
>
> Or have I misunderstood multi-parameter classes with functional
> dependencies?
It is valid but not very useful: if the type of (sqrt x) is known
then the type of x can be deduced, but not the other way around, because
of the direction of dependencies.
Typically we want it the other way around, and preferrably both ways:
class Half a b | a->b, b->a
instance Half Zero Zero
instance Half x y => Half (Succ (Succ x)) (Succ y)
sqrt :: (Half kg kg', Half m m', Half s s') =>
Dimensioned kg m s rep -> Dimensioned kg' m' s' rep
Sigh. I guess that with dependent types some things are a lot
easier.
--
anatoli (at, but not speaking for) ptc (dot) com
__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail.
http://personal.mail.yahoo.com/