on Sun Jan 15 2017, Stephen Canon <[email protected]> wrote:
> Responding to the thread in general here, not so much any specific email: > > “Arithmetic” at present is not a mathematically-precise concept, and > it may be a mistake to make it be one[1]; it’s a > mathematically-slightly-fuzzy “number” protocol. FWIW, if I had to > pick a mathematical object to pin it to, I would make it a > [non-commutative] ring, which give it: > > addition, subtraction, multiplication, IntegerLiteralConvertible, and > an inverse: T? > property. > > Note that this would make division go out the window, but we would > *preserve* int literal convertible (because there’s a unique map from > Z to any ring — Z is the initial object in the category of rings). I > think that it’s quite important to keep that for writing generic code. > > Vectors and points are not “numbery” in this sense, so they should not > conform to this protocol, which is why it’s OK that multiplication and > int literals don’t make sense for them. They’re property a vector > space or module built over a scalar type. > > I would be OK with moving division out of the Arithmetic protocol, as > the division operator is fundamentally different for integers and > floating-point, and you want to have separate left- and right- > division for quaternions and matrices. I would be pretty strongly > opposed to removing integer literals; they rightfully belong here. > > I think the name “Arithmetic” is sound. It is deliberately *not* one > of the standard mathematical abstractions, reserving those names for > folks who want to build a precise lattice of algebraic > objects. Vectors don’t belong in this protocol, though. OK, suppose we move division, and state in the documentation that models of Arithmetic should have the mathematical properties of a (non-commutative) Ring? > – Steve > > [1] We don’t want to make a semester course in modern algebra a > prerequisite to using Swift, as much as I would enjoy building a tower > of formalism as a mathematician. Indeedy. -- -Dave _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
