{ localUrl: '../page/join_examples.html', arbitalUrl: 'https://arbital.com/p/join_examples', rawJsonUrl: '../raw/3v4.json', likeableId: '2771', likeableType: 'page', myLikeValue: '0', likeCount: '1', dislikeCount: '0', likeScore: '1', individualLikes: [ 'EricBruylant' ], pageId: 'join_examples', edit: '19', editSummary: '', prevEdit: '18', currentEdit: '19', wasPublished: 'true', type: 'wiki', title: 'Join and meet: Examples', clickbait: '', textLength: '2833', alias: 'join_examples', externalUrl: '', sortChildrenBy: 'likes', hasVote: 'false', voteType: '', votesAnonymous: 'false', editCreatorId: 'KevinClancy', editCreatedAt: '2016-06-20 03:57:20', pageCreatorId: 'KevinClancy', pageCreatedAt: '2016-05-27 02:43:38', seeDomainId: '0', editDomainId: 'AlexeiAndreev', submitToDomainId: '0', isAutosave: 'false', isSnapshot: 'false', isLiveEdit: 'true', isMinorEdit: 'false', indirectTeacher: 'false', todoCount: '0', isEditorComment: 'false', isApprovedComment: 'true', isResolved: 'false', snapshotText: '', anchorContext: '', anchorText: '', anchorOffset: '0', mergedInto: '', isDeleted: 'false', viewCount: '71', text: 'A union of sets and the least common multiple of a set of natural numbers can both be viewed as joins. In addition, joins can be useful to the designers of statically typed programming languages.\n\n%%%knows-requisite([3v1]):\nThe real numbers\n------------------------------\n\nConsider the [-3rb] $\\langle \\mathbb{R}, \\leq \\rangle$ of all real numbers ordered by the standard comparison relation. For any non-empty $X \\subseteq \\mathbb{R}$, $\\bigvee X$ exists if and only if $X$ has an upper bound; this fact falls directly out of the definition of the set of real numbers.\n%%%\n\n\nSubtyping\n------------------\n\nStatically typed programming languages often define a poset of types ordered by the subtyping relation; Scala is one such language. Consider the following Scala program.\n\n![A scala program with class inheritance](http://i.imgur.com/IUkzT7A.png)\n\nWhen a programmer defines a class hierarchy in an object-oriented language, they are actually defining a poset of types. The above program defines the simple poset shown in the following Hasse diagram.\n\n![Hasse diagram for the nominal subtyping relation defined by the above program](http://i.imgur.com/dk1EHuA.png)\n\n%%%comment:\ndot source:\n\ndigraph G {\n node [width = 0.1, height = 0.1];\n edge [arrowhead = "none"];\n rankdir = BT;\n Dog -> Animal;\n Cat -> Animal;\n}\n%%%\n\nNow consider the expression *if (b) dog else cat*. If b is true, then it evaluates to a value of type Dog. If b is false, then it evaluates to a value of type Cat. What type, then, should *if (b) dog else cat* have? Its type should be the join of Dog and Cat, which is Animal.\n\nPower sets\n-------------------\n\nLet $X$ be a [-3jz]. Consider the [-3rb] $\\langle \\mathcal{P}(X), \\subseteq \\rangle$, the power set of $X$ ordered by inclusion. In this poset, joins are unions: for all $A \\subseteq \\mathcal{P}(X)$, $\\bigvee A = \\bigcup A$. This can be shown as follows. Let $A \\subseteq \\mathcal{P}(X)$. Then $\\bigcup A$ is an upper bound of $A$ because a union contains each of its constituent sets. Furthermore, $\\bigcup A$ is the *least* upper bound of $A$. For let $Z$ be an upper bound of $A$. Then $x \\in \\bigcup A$ implies $x \\in Y$ for some $Y \\in A$, and since $Y \\subseteq Z$, we have $x \\in Y \\subseteq Z$. Since $x \\in \\bigcup A$ implies $x \\in Z$, we have $\\bigcup A \\subseteq Z$. Hence, $\\bigvee A = \\bigcup A$.\n\nDivisibility\n------------------\n\nConsider the poset $\\langle \\mathbb Z_+, | \\rangle$ of divisibility on the positive integers. In this poset, the upper bounds of an integer are exactly its multiples. Thus, the join of a set of positive integers in $\\langle \\mathbb Z_+, | \\rangle$ is their [least_common_multiple least common multiple]. Dually, the meet of a set of positive integers in $\\langle \\mathbb Z_+, | \\rangle$ is their [greatest_common_divisor greatest common divisor].\n\n\n\n', metaText: '', isTextLoaded: 'true', isSubscribedToDiscussion: 'false', isSubscribedToUser: 'false', isSubscribedAsMaintainer: 'false', discussionSubscriberCount: '1', maintainerCount: '1', userSubscriberCount: '0', lastVisit: '', hasDraft: 'false', votes: [], voteSummary: [ '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' ], muVoteSummary: '0', voteScaling: '0', currentUserVote: '-2', voteCount: '0', lockedVoteType: '', maxEditEver: '0', redLinkCount: '0', lockedBy: '', lockedUntil: '', nextPageId: '', prevPageId: '', usedAsMastery: 'false', proposalEditNum: '0', permissions: { edit: { has: 'false', reason: 'You don't have domain permission to edit this page' }, proposeEdit: { has: 'true', reason: '' }, delete: { has: 'false', reason: 'You don't have domain permission to delete this page' }, comment: { has: 'false', reason: 'You can't comment in this domain because you are not a member' }, proposeComment: { has: 'true', reason: '' } }, summaries: {}, creatorIds: [ 'KevinClancy', 'EricRogstad' ], childIds: [], parentIds: [ 'math_join' ], commentIds: [ '3v5', '4jg' ], questionIds: [], tagIds: [], relatedIds: [], markIds: [], explanations: [], learnMore: [], requirements: [], subjects: [], lenses: [], lensParentId: 'math_join', pathPages: [], learnMoreTaughtMap: {}, learnMoreCoveredMap: {}, learnMoreRequiredMap: {}, editHistory: {}, domainSubmissions: {}, answers: [], answerCount: '0', commentCount: '2', newCommentCount: '0', linkedMarkCount: '0', changeLogs: [ { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '14062', pageId: 'join_examples', userId: 'KevinClancy', edit: '19', type: 'newEdit', createdAt: '2016-06-20 03:57:20', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '14061', pageId: 'join_examples', userId: 'KevinClancy', edit: '18', type: 'newEdit', createdAt: '2016-06-20 03:56:42', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '14057', pageId: 'join_examples', userId: 'KevinClancy', edit: '17', type: 'newEdit', createdAt: '2016-06-20 03:50:12', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '14056', pageId: 'join_examples', userId: 'KevinClancy', edit: '16', type: 'newEdit', createdAt: '2016-06-20 03:49:23', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '14055', pageId: 'join_examples', userId: 'KevinClancy', edit: '15', type: 'newEdit', createdAt: '2016-06-20 03:48:38', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '13746', pageId: 'join_examples', userId: 'KevinClancy', edit: '14', type: 'newEdit', createdAt: '2016-06-17 23:00:18', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '13745', pageId: 'join_examples', userId: 'KevinClancy', edit: '13', type: 'newEdit', createdAt: '2016-06-17 22:57:28', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '12702', pageId: 'join_examples', userId: 'KevinClancy', edit: '12', type: 'newEdit', createdAt: '2016-06-14 17:41:20', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '12701', pageId: 'join_examples', userId: 'KevinClancy', edit: '11', type: 'newEdit', createdAt: '2016-06-14 17:39:01', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '12700', pageId: 'join_examples', userId: 'KevinClancy', edit: '10', type: 'newEdit', createdAt: '2016-06-14 17:38:07', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '12699', pageId: 'join_examples', userId: 'KevinClancy', edit: '9', type: 'newEdit', createdAt: '2016-06-14 17:33:21', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '12698', pageId: 'join_examples', userId: 'KevinClancy', edit: '8', type: 'newEdit', createdAt: '2016-06-14 17:32:45', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '12383', pageId: 'join_examples', userId: 'EricRogstad', edit: '7', type: 'newEdit', createdAt: '2016-06-11 01:51:08', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '12318', pageId: 'join_examples', userId: 'KevinClancy', edit: '6', type: 'newEdit', createdAt: '2016-06-10 15:11:58', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '12317', pageId: 'join_examples', userId: 'KevinClancy', edit: '5', type: 'newEdit', createdAt: '2016-06-10 15:07:18', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '11491', pageId: 'join_examples', userId: 'KevinClancy', edit: '4', type: 'newEdit', createdAt: '2016-05-30 22:08:09', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '11149', pageId: 'join_examples', userId: 'KevinClancy', edit: '3', type: 'newEdit', createdAt: '2016-05-27 02:50:19', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '11146', pageId: 'join_examples', userId: 'KevinClancy', edit: '2', type: 'newEdit', createdAt: '2016-05-27 02:46:10', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '11144', pageId: 'join_examples', userId: 'KevinClancy', edit: '1', type: 'newEdit', createdAt: '2016-05-27 02:43:38', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '11142', pageId: 'join_examples', userId: 'KevinClancy', edit: '1', type: 'newParent', createdAt: '2016-05-27 02:42:57', auxPageId: 'math_join', oldSettingsValue: '', newSettingsValue: '' } ], feedSubmissions: [], searchStrings: {}, hasChildren: 'false', hasParents: 'true', redAliases: {}, improvementTagIds: [], nonMetaTagIds: [], todos: [], slowDownMap: 'null', speedUpMap: 'null', arcPageIds: 'null', contentRequests: {} }