[Haskell-cafe] Categorical description for vector-space instance of AdditiveGroup (Maybe a)
Jason McCarty
jmccarty at sent.com
Thu Sep 11 00:51:00 UTC 2014
On Thu, Sep 11, 2014 at 08:20:38AM +0800, John Lato wrote:
> On Thu, Sep 11, 2014 at 8:01 AM, Jason McCarty <jmccarty at sent.com> wrote:
> > [...]
> > Unfortunately this isn't even a monoid since it doesn't have a unit
> > (Nothing + u /= Nothing for any u). So this just gives a functor G -> S;
> > I'm not sure you can say much more about it.
> >
>
> Well, this is the crux of the problem. If you want to define
>
> > zeroV = Just zeroV
>
> , you'll run into abstraction leaks unless you also have
>
> > Nothing == Just zeroV = True
>
> (and this should commute too), because it explicitly makes the two units
> (Nothing and zeroV) equivalent. But even if that were possible to write,
> you probably don't really want it. Even if you have
>
> > newtype MaybeAG a = MaybeAG (Maybe a)
>
> and suitably hide everything, so that a `MaybeAG a` is observably identical
> to just `a`, you may as well use `a` directly.
Yes, it seemed that way to me -- trying to make Nothing coincide with
Just zeroV collapses Maybe a to a.
> Unfortunately the other proposed solution, of making 'Just a ^+^ Just b'
> use Nothing if 'a^+^b == zeroV', in addition to being less general, looks
> like trouble if `a` is a Float or Double.
Obviously this also fails for e.g. computable reals.
So is the hope here to treat Maybe v like a vector space over F if v
is a vector space over F? I don't think it can be done consistently. But
you should be able to make Maybe v a /semi/-vector space over F
(inventing terminology here); i.e. Maybe v satisfies all the vector
space axioms except (negate a) *^ v == a *^ (negateV v), which doesn't
make sense. But I don't know that you can do much linear algebra without
negation!
--
Jason McCarty <jmccarty at sent.com>
More information about the Haskell-Cafe
mailing list