Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

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

66%
+2 −0
Q&A Is concatenation a logical AND?

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...

posted 3y ago by r~~‭

Answer
#1: Initial revision by user avatar r~~‭ · 2020-09-15T04:36:42Z (over 3 years ago)
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.