Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
I think your edited post merits a new answer! You're right that you can make some sort of connection between addition, concatenation, and logical ‘and’—these are all operators that can be considere...
Answer
#1: Initial revision
I think your edited post merits a new answer! You're right that you can make some sort of connection between addition, concatenation, and logical ‘and’—these are all operators that can be considered as [monoids](https://en.wikipedia.org/wiki/Monoid). A monoid is a very general concept: it comprises a particular type of things that can be combined, a unique value of that type which is ‘empty’, and two laws for combining values: * The associative law: (a + b) + c = a + (b + c) * The identity law: a + empty = empty + a = a Mathematicians usually define monoids by their operator and their empty value as a pair, so we could call the additive monoid (`+`, `0`), the string monoid (`.`, `""`), and the ‘and’ monoid (`&&`, `true`). There are lots of other monoids too, even on the same types! For example, the multiplicative monoid (`*`, `1`) and the ‘or’ monoid (`||`, `false`) are just as valid as (`+`, `0`) and (`&&`, `true`). (set union, empty set) is another easy example of a monoid. But subtraction can't be made into a monoid, because it isn't associative. And set intersection isn't a monoid because you can't have an identity (unless you're working in a set theory where there is a ‘universe’ set, in which case that set becomes the ‘empty’ set of the intersection monoid because it's the only set that can satisfy the identity law, even though it is as far from literally empty as a set can be). In a very nice sense, the string monoid (or its more general version, the list monoid) is the prototypical monoid. This is because concatenation throws away exactly what the monoid laws say doesn't matter (the groupings by which values are combined, and any empty values), and nothing else. You can always represent a monoidal computation by grouping everything into lists first, concatenating them, and then running the monoid operation on the elements of the resulting list; but you can't say the same for any monoid that isn't isomorphic to the list monoid. So, while I don't think that you can reasonably call concatenation a sort of logical ‘and’, it's more legitimate to say that logical ‘and’, as a monoidal operation, is a sort of concatenation (with some extra work at the end)! The same could equally be said for logical ‘or’, addition, multiplication, and other monoidal operations like set union, so don't get too hung up on the word ‘and’, even though it is often a very natural word for monoids.