{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sets\n", "> A summary of \"Probability and Statistics in Data Science using Python\", offered from UCSD DSE210x\n", "\n", "- toc: true \n", "- badges: true\n", "- comments: true\n", "- author: Chanseok Kang\n", "- categories: [Python, edX, Data_Science, Statistics, Probability]\n", "- image: images/venn_example.png" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Elements, sets, and membership" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Elements\n", "- Foundation, building blocks of sets\n", "- Can be anything\n", "- Structured\n", "- Numbers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sets\n", "- Collection of elements\n", "- Define : `{specify elements}`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Specification\n", "- Explicit\n", " - Coin = {heads, tails}\n", " - Bits = {0, 1}\n", " - Die = {1, 2, 3, 4, 5, 6}\n", "- Implicit\n", " - Digits = {0, 1, $\\dots$ 9}\n", " - Letters = {a, b, $\\dots$, z}\n", " - Days = {Monday, $\\dots$, Sunday}\n", "- Descriptive \n", " - {4-letter words} = {love, like, dear, $\\dots$}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Common Sets\n", "| Sets | | Notation |\n", "| ---- | ----- | ---- |\n", "| Integers | {$\\dots$, -2, -1, 0, 1, 2, $\\dots$} | $\\mathbb{Z}$ |\n", "| Naturals | {0, 1, 2, $\\dots$ }| $\\mathbb{N}$ |\n", "| Positives | {1, 2, 3, $\\dots$} | $\\mathbb{P}$ |\n", "| Rationals | {interger ratio m / n, n $\\neq 0$} | $\\mathbb{Q}$ |\n", "| Reals | { whole number } | $\\mathbb{R}$ |\n", "\n", "> Note: $\\mathbb{Z}$ comes from german word `Zahl`, meaning numbers\n", "\n", "Usually, Sets are expressed with Upper case (A, B, etc), and Elements are expressed with Lower case (a, b, etc), as a convention." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Membership\n", "- If element $x$ is in a set $A$, it is a member of, or belongs to $A$, denoted $x$ $\\in$ $A$.\n", " \n", " $$ 0 \\in \\{0, 1\\} \\qquad 1 \\in \\{0, 1\\} \\qquad \\pi \\in \\mathbb{R} $$\n", " \n", "- Equivalently, $A$ contains $x$, written $A$ $\\ni$ $x$.\n", "\n", " $$ \\{0, 1\\} \\ni 0 \\qquad \\{0, 1\\} \\ni 1 \\qquad \\mathbb{R} \\in \\pi $$\n", "\n", "- If $x$ is not in $A$, then $x$ is not a member, or does not belong to $A$, denoted $x$ $\\notin$ $A$.\n", "\n", "- Equivalently, $A$ does not contain $x$, $A$ $\\not\\owns$ $x$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Doesn't Matter\n", "- Order: {0, 1} = {1, 0}\n", "- Repetition: {0, 1} = {0, 1, 1, 1}\n", "\n", "If you want to consider:\n", "\n", "- Order matters: use ordered tuples ((0, 1) $\\neq$ (1, 0))\n", "- Repetition matters: use multisets or bags" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Special Sets\n", "- Empty set: contains no elements ($\\emptyset$ or {}, $\\forall x, x \\notin \\emptyset$)\n", "\n", "> Note: $\\forall$ means 'all', or 'every'\n", "\n", "- Universal set: all possible elements ($\\Omega$, $\\forall x, x \\in \\Omega$)\n", "\n", "- $\\Omega$ lets us consider only relevant elements. $\\Omega$ can be $\\mathbb{Z}$ (the integer) or \"prime number\"\n", "\n", "- $\\Omega$ depends on application (temperature, text, etc...)\n", "\n", "- $\\emptyset$ is only one in whole case, this is the set with no elements." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set Definition in python\n", "- Define a set\n", "```python\n", "{...} or set({...})\n", "```\n", "- For empty set\n", "```python\n", "set() or set({})\n", "```\n", "\n", "> Note: In python, `{}` is not a empty set, it is dictionary." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Membership in python\n", "- $\\in \\quad \\rightarrow$ `in`\n", "- $\\notin \\quad \\rightarrow$ `not in`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Testing if Empty, Size" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Empty set\n", "S = set()\n", "not S" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Set\n", "T = {1, 2}\n", "not T" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(S)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Some simple sets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sets within Sets\n", "Specify a set within a universe, or any other set,\n", "$$ \\{x \\in A \\vert \\dots \\} $$\n", "means elements $x$ in $A$ such that. Sometimes it expresses like this,\n", "$$ \\{x \\in A : \\dots \\} $$\n", "\n", "For example,\n", "\n", "$$ \\mathbb{N} = \\{x \\in \\mathbb{Z} \\vert x \\geq 0 \\} $$\n", "$$ \\mathbb{P} = \\{x \\in \\mathbb{N} \\vert x \\gt 0 \\} $$\n", "\n", "It usually express the solution to equations,\n", "\n", "$$ \\{ x \\in \\mathbb{R} \\vert x^2 \\geq 0\\} = \\mathbb{R} $$\n", "$$ \\{ x \\in \\mathbb{R} : x^2 = 1 \\} = \\{-1, 1\\} $$\n", "$$ \\{ x \\in \\mathbb{R} \\vert x^2 = 0 \\} = \\{0\\} $$\n", "\n", "> Note: a single-element set is called **singleton**\n", "\n", "$$ \\{ x \\in \\mathbb{R} \\vert x^2 = -1 \\} = \\emptyset $$\n", "$$ \\{ x \\in \\mathbb{C} \\vert x^2 = -1 \\} = \\{i, -i\\} $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Integer intervals\n", "$$ \\{m, \\dots n\\} = \\{i \\in \\mathbb{Z} \\vert m \\leq i \\leq n \\} $$\n", "\n", "It is a set of integers from $m$ to $n$, inclusively.\n", "\n", "$$ \\{3, \\dots, 5\\} = \\{i \\in \\mathbb{Z} \\vert 3 \\leq i \\leq 5 \\} = \\{3, 4, 5\\} $$ \n", "$$ \\{3, \\dots, 4\\} = \\{i \\in \\mathbb{Z} \\vert 3 \\leq i \\leq 4 \\} = \\{3, 4\\} $$\n", "$$ \\{3, \\dots, 3\\} = \\{i \\in \\mathbb{Z} \\vert 3 \\leq i \\leq 3 \\} = \\{3\\} $$\n", "$$ \\{3, \\dots, 2\\} = \\{i \\in \\mathbb{Z} \\vert 3 \\leq i \\leq 2 \\} = \\emptyset $$\n", "\n", "For convention, $[n] = \\{1, \\dots, n\\}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Real intervals\n", "$$[a, b] \\qquad \\rightarrow \\{x \\in \\mathbb{R} \\vert a \\leq x \\leq b \\} $$\n", "$$(a, b) \\qquad \\rightarrow \\{x \\in \\mathbb{R} \\vert a \\lt x \\lt b \\} $$\n", "$$[a, b) \\qquad \\rightarrow \\{x \\in \\mathbb{R} \\vert a \\leq x \\lt b \\} $$\n", "$$(a, b] \\qquad \\rightarrow \\{x \\in \\mathbb{R} \\vert a \\lt x \\leq b \\} $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Divisibility\n", "In $m, n \\in \\mathbb{Z}$, if $n = c \\dot m$ for some $c \\in \\mathbb{Z}$, we say that n is a multiple of m, or $m$ divides $n$, and write $m \\vert n$\n", "\n", "If no such $c$ exists, $m$ does not divide $n$, or $n$ is not a multiple of $m$ denoted $m \\not\\vert n$.\n", "\n", "For example,\n", "\n", "$$\\text{There is no } c \\in \\mathbb{Z} \\quad \\text{such that} \\quad 4 = c \\cdot 3 \\quad \\rightarrow 3 \\not\\vert 4 $$\n", "$$ 0 \\not\\vert n \\quad \\text{for any } n \\neq 0 $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set of Multiples\n", "- Integer multiples of $m$\n", "$$ m \\in \\mathbb{Z} \\qquad {}_m\\mathbb{Z} \\overset{\\underset{\\mathrm{def}}{}}{=} \\{i \\in \\mathbb{Z} : m \\vert i \\}$$\n", " - Example\n", "$$ \\begin{aligned} {}_2\\mathbb{Z} &= \\{\\dots, -4, -2, 0, 2, 4, \\dots \\} \\overset{\\underset{\\mathrm{def}}{}}{=} \\mathbb{E} \\quad \\rightarrow \\text{even number} \\\\\n", " {}_1\\mathbb{Z} &= \\{\\dots , -2, -1, 0, 1, 2, \\dots \\} = \\mathbb{Z} \\\\\n", " {}_0\\mathbb{Z} &= \\{0\\} \\end{aligned} $$\n", "\n", "- Multiples of $m$ in $\\{1..n\\}$\n", "$$ m \\in \\mathbb{Z}, n \\in \\mathbb{P} \\qquad {}_m[n] \\overset{\\underset{\\mathrm{def}}{}}{=} \\{i \\in [n] : m \\vert i\\}$$\n", "\n", " - Example\n", " \n", "$$ \\begin{aligned} {}_3[13] &= \\{i \\in \\{1, \\dots, 13\\} : 3 \\vert i \\} = \\{3, 6, 9, 12\\} \\\\\n", "{}_7[13] &= \\{7\\} \\\\ {}_1[13] &= [13] \\\\ {}_{14}[13] &= {}_0[13] = \\emptyset \\end{aligned} $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Intervals, Multiples in python\n", "$\\{0,\\dots, n-1\\} \\quad \\rightarrow$ `range(n)`\n", "\n", "$\\{m, \\dots, n-1\\} \\quad \\rightarrow$ `range(m, n)`\n", "\n", "$\\{m, m+d, m+2d, \\dots \\} \\leq n - 1 \\quad \\rightarrow$ `range(m, n, d)`" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0, 1, 2}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(range(3))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{2, 3, 4}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(range(2, 5))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{2, 5, 8, 11}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "set(range(2, 12, 3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualizing Sets\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Venn Diagram\n", "- Developed by John Venn\n", "- Used to visualize Sets, Regions, Elements, Points" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ven Diagram in Python\n", "```python\n", "!pip install matplotlib_venn\n", "```" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import matplotlib_venn as venn\n", "\n", "S = {1, 2, 3}\n", "T = {0, 2, -1, 5}\n", "\n", "venn.venn2([S, T], set_labels=('S', 'T'));" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQUAAADrCAYAAABgr4PXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2deZAc1Z3nP6/urr5brdZ93wghWUIgWeIywhgwMLETXl+742DXs8YR4zHhjbUdu3hEO2JjxnbYE+PwOHZ3NpjYXe8yBhtjD/YYIwsEAiQOCQFC6Ggdfahbrb6PujPf/pHV0CV1q7u6M/NlVr1PRIXUh/J9VVX5rd/7vd/7PSGlRKPRaMYIqBag0Wi8hTYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjQYQQoyMe5hCiOS4r7+oWp+bCN1PQaMpRAhxHviylHKfai0q0JGCRqMpQJuCRqMpQJuCRqMpQJuCRqMpQJuCRqMpQJuCRqMpQJuCRqMpQNcpaGxHNIsIUAdUA1Xj/owBYhqXyAJDwAAwmH8Myb3SdESwpgDfm4IQYjfwfWAjYAAngEeklG8oFVYmiGZRCSwCGoD6/J+VDgwlgWE+MolB4LLcK7sdGKus8bUpCCFqgFbgq8CTQAS4BeiSUr6jUlspI5rFXGAZsBRoVCwnifUeuAC0y70yp1iP7/G7KdwI7JNS1qnWUsqIZhHEigaW5R9xtYomxQA6yJuE3CtHFevxJX43hRrgHPAs8E/AISllv1pVpYFoFgFgFbASyxBCahXNiB6sCOKk3CtHVIvxC742BQAhxAbgW8AeYD7wO+DPpZSXlArzKaJZhID1wA1YycFSwATOA+/oHMTU+N4UxiOEWA/8DDgtpfy8aj1+QjSLKHA9VsI2pliOk3QDx+ReeU61EK9SUqYAIIT4C+ArUspNqrX4gfzqwQ1Y0UFYsRw36QOOyL3yrGohXsPXppCPDO4Dfi6lbBdCLMHKLbwvpfxzteq8jWgWtcAWYA3lXcTWB7ylI4eP8LspLAL+FtiFVSwzgJV0/E9SyiEHBoxircXXYYXYYawEXHjc30NYWfAMVhFOGmvZLJF/9CFl2nZt0ySfQNwMbKO8zeBK2oGXdELS56bgGEIIYG7+Uc9HRlBh0wgjWJnxHqAX6EU6/2YUzaIBuB31tQVeJQscknvlCdVCVKJNYQwhYsCS/GMx7ifbElgZ8vPARaR9Jb356GALsBUdHUyHDuBAuUYN5W0KQtQCq/moMm86dflukMEqwDkPtCJnXqUnmsUc4DZ0dFAsWeCw3CvfVy3EbcrPFIQIAiuwsu0LFauZDgbQAryDlH3T/Uf56OBj+YeODmbORayoYVi1ELcoH1MQogK4Lv+wKzfgNh1Y5tB2rV8SzaIGuAuY44oqL/Hf+RKX2USYYb5Fs01XzQIvy73yjE3X8zSlbwpWrmAbVmQQVKzGLvqBd4HTSGmM/4FoFvOAuyntAqTJeY01xEjzBx6y0RTGOCz3ymM2X9NzlG5YKUQQITYDn8Oq0isVQwBrNeRW4LMIsWrsm6JZrAY+TbkaAsBOTlOLUxuhbhbNYqdD1/YMftzkMjXWjXITVnOPUqYKuBMhNt71VTqYxzbVgsqATaJZxIEXSrXpS2lFCkI0IsSDwJ2UviF8yNs7qPnaAFsf6SQRMynJN6rHWAXcI5pFSZaFl44pCHED8CfAPNVS3MIUyNdvJdG+gngAxJ1DxB9vwdw2Qkq1tjJgEXC/aBZ+TVpPiv9NQYgKhLgX2EEp/H+miQT5+u0kuxcVNjypNgn9VQfRf9/NqJCUeBZZOY3Ag/l9JCWDv1cfhFgM3IF/lxhnzNs7rAjhWr/TEiX12GJCA6ESzR1NxE/5Mv2sJUcVIYa5nt/wIK84PGoCeKZUKiD9aQrW3oSbsbb8lh0nNzF6+vrpNUcdCZD7/kJyRyvLeEXCHXqA35RCj0j/hdtWReIeytQQWleSmK4hAFSZhB5rJ/qnvSQclKWxphK3qxZhB/6KFIQIYxXm+KE82Xa6F5B6/VaiBGa2R+O3dST+2zzPNl0tFY7IvfJN1SJmg38iBasy8X7K1BAG6km/uZvwTA0B4L4B4t/uIKETkI6yVTR/VFDmR/xhCkJUAQ9Qpjv9smGM128nYIZmX5W5a4T4ox0ktTE4ym2iWfj2vep9UxCiGngQq8lJWXJ0J+lMzL7+iTeNEn+snaRd19NcRQi4O1/56Du8bQrWlOEenDmGzBe0rSBxZS2CHWxNEP9al2N7BDTWe/bu/EE6vsK769dChLCSimUbISTiZN+9kahT1//kIJXtERK/anAh+WhGTXINBrlGA5l/28mxzyQBCGs6ExwKEOoLEBwIEsh6+0NrauYCNwKHVQspBu+uPgixB+t0orJEgnz5btJDDc7WF5gg/2YhqdeqZ1kAJoOS9NIsqXUGqTUm2bmCXH0AozaIWRlCRopPkIq0QWDEIDhsEuo3ibRJKk4FiJ0JEenwy74DE6uwqUe1kOniTVMQYhuU946/YgqUZktGYH5zKdmWWBFRSXJdmsQmg9QaQXp5gGxTGEIufrJnTSJdWaLnDWKnofL1ENGOiHvjF0UP8Cu514s329V4zxSEWIHVNahsGakm8+K9s1t+LJbhALmHVyCGJlvhyNUYjNycZmSnILExgox7b64cHMgSP5al6rCg6o0ogZSXph+H5F5/nITuLVMQIg58BpybR/uBVz9Bsm+e+/s5jleQ/PbSceOmVmQY+kSW0W0hMosiEPBKY9tpYEiiF9JUvW5Q+1yUcI/q/FkO+LkfTsL2mincjXXUednS00Tq0J3q9in8Q13V8G9C9wQZ3BMku7BEzNmURM+lqX3OpHZ/jEBaVQRxRu6V+xWNPW28YwpCrKVEasdnw4v3kh6pdT9Sujy6MNXSv1leSi6JPLnsDnMoUuWXRF5xiLRB1aE0Db8KEmtRYXrPeP3ka2+YghCVWNMGryaKXKF9OYm3d7q3N0FKIduG1iZP9W4NJXPVHz73fZHq1C+W3176uyqjLSnm/i+oPOrm/7Vb7pXPuDhe0XjFFO7FOpWpbDEF8o8PkktXXF25+MS7bPz1ST4rIbCpiYOP3srvZzPWmBmc7N0WSuWqJjTiQ40bEu80rPZlRV7RRM6nmPu/JVVvuJXH2e/ldvHqs7NCrKHMDQHgzHUkJjKEjIF45iSf/+Yufvz4A+w90cP2g60smMkYUgrZOrguse/c57PHLt0Wn8wQALb2nopGjKwx2c9LiszyGB1/VcG5n6YZ3uFGK7vrXRhjxqg1BSECWBVfZY0pkGfXT5xHeL6FFdURLm9dQE9lBGNDI2+8eJ7NxY7RObw8OR0zGCMijeD2nhPl1esxsyTKxf8S49zfp0itcvJk8CbRLOY6eP1ZoTpSWE8ZdV2ejLaVJHORiUvOu0aoq47y4XFxDRX0D6apn+61k9nK3Ktt9yXf7PxkxXTMYDwbBlsrqrKJbDH/piTILI1x4UcROr+ewIw51R17o0PXnTXqTMHqoLRV2fgeomXD5Fui5cSH3k6ZCJJSyNO9WxL7z3820JtcNKO5cgAZ+Hj3e+VnCgAEBEN74rT8o8ngHU50rVolmoUnk7kqI4WNoLsA9TSRSlRPvgS5oIr+4TQNY1/3JamvjTJwrWv2J5vS+8//68wHvTfFTTm70uNlo5cqGlMDTobS3sasCtH1jTgXfpgks8BOgwxiRcqeQ40pWG3VtigZ22OcW3ftw1v2rOT8cIamo53MGc0QPNHD9tuWM+F5hlIK+V73ztGDbQ9GEtlaW9bgBYhtvaf0ATOptRWc/0mQgbvsjBquE83Cc1Wiqko/r6OczzvMkw1jdC+49vMQDWE+sI4nvvcKj0gQG+fyyi1L6bzy91K5itzhjntyQ+lG2zdRLRntjsZyaSMVinpvv4ObyEiAS38ZZ/TGJAt+FLWhMrIKq4L3/OzF2YeaOgUhPgfUuD+wt2hZT+LEx2Y/hbo8ujD1VuddoawZdczk365fNfr63OvKttnNVYS6Myz+LkQvzLbgrkPulb+1RZNNuD99EGI+2hAA6Fg+++f//cs3jR7quC/qpCEArB9sjQak6YFKN4+Qa4pw/m9D9N8727Z2i0Sz8FQjIRU5hXUKxvQc2TDG0Cz2OOTMsHmw9YFkS/+WSnB+Xhozs6GVwxfLq25hSsIBur9aQecjs80zLLVFjk24awpWi7Wy7aY0nkuLSM+0X0IqF88duPCvsv2p+a5ur75+4Jybw/mHoTvjtDUnkMGZRlKLbNUzS9yOFFaCfV2J/UznkpkZwnC6LnPgwp9Ku1YXiqExNRArm9LnYklsjXPhh2mM+Eyen/miWaguJPwQt4WsdXk8z9LbVLw59qfmpl9u/ZNgxqhQYqwBECtGOsu3ZmEq0qtiXPi7HLmGYs+TDGM1efUE7pmC1a59Rht5So2BBtKTlTVPRk9iQerVtvtDhowoXRZcOXxR5fDeJzs/yvm/kzModPLMFMLNSGERE5fslh0Xl1LUJ0lvYn7qUPu9EVOGlNcJLEj26lWIqTDqwrT+ALKNxbzOnjkO0W1T0AA986d//NtQuj5zuOOesCToiTlnSJrBxaOX9SrEVBi1YVp/YJKrmW6OYZ5XDo7xlSm8BPXL4BtzoHkOPPY5+IQdwtxmtHp6+YREtir7atv9AUOGPfFmGWP5SJcue54OucYIrd/PTXOnZRCY57Sk6eCOKVhdmme9RToK5mPwi17YewT++jm44ymf5SlSFeSMaRwUm87FjFfaHpBZM6a6C/FVNKX6PWVSnia7KErr32Qww9MxBk9E025FCvPtuMjNMPgQtAIsg3QTdJ7y2bFyg/VMmYDKmSHz1fb7c8X2P3CL2sxIROcViiC9KkZ7cxoppnrObLlPZotbpmB7WLQP5lyEJV8AX1XUDDZcuxeClEIear83PZKp92x79SAy0JAeyqjW4SuSmyro/g9TVT56ouGQW6Zg66d5G0S/CA8/DE+uAF8lvYameCZO9NyUdLtScSY0pgZ1EVOxDHy6kuGd19or4Yn+Im6Zgm0OOAzB2+DhW+HwD+CoXdd1i+HayesTukcXp1r6b/C8IQA0pQb09GEmdH4jQmbeZFPIgGgWyl9/t0yhyo6LGMAt8GeLoPMp2GfHNd0mUTmxKaRyFbkjnXeG3NjcZAe12RFPLJH6DhkL0v5d8xqJR+Xb051/Ya2VB1sy6D+B1cdgxwewvgm+0wTf2evxdtnjyYYxZPDq51xKIV/v+FTO6e3PdlKRy+gViJmSXRil8z9ONu1VbgpuvAltmzp8Hc58Hb5i1/XcJhvGhKuXI0/03JQYTM9V/mYohqiZ8UVE41lGdsUZuCtB3fNX5hGUvw/cCAE9kVH1AtnI1SsP/cmmdEv/DZ5IMBVD1Mj4JqrxLN1fjk5Q8aj8veCGKdiSTygFspHCJq1SCnmk6w78kkcYTwBE1MjoFYjZIONBLn3tyl2nyu8XN0xBf6LkuTJSONO3OamiL4JdxHMpXe48W0Z2xBnZNj6/UBaRgibPeFNI5eK5U31bfWsIAFHdcMUeur4exIyOGWxZmII2njzZcUXLR7tuz3hhK/RskMJ/0x5PYtSHufzvxoqalNd/uHHD6jdOnlzYesG7RpYlexKLlX8izBapX1r7GLg7TnpJBm0K5YUwreTiO5d2+zpCGEPqV9ZGgoJLDxtw7RPD3ECbgosEDcT5geuSaaPSk7sfi0dPH2wleUMFI9uV98B0wxSUh0NeQWQDnOrbWjLdrPUL6wCt31IeRbphCr7axegkbQNbTVWdmJ0gG9CrzbbTs6BeCLUdmNx4VUdcGMPzSIRsz31GQIvrYz994ukv9Sf7N4UCoeEvbflSs13XHQ15ryuU78lEJLAN+J0qCW5ECnYe3e1b2tiTNLMLlNxEqxtWv7p76e4f23nNrAgauUBILzfbTSYMsFgIdedAuPGijrowhuc5zWdD0VxUyU10w7wbTldFqmx9HZKhqC5ccoJMeCxVc4MqCdoUXKCXjakk8yIVmYoQsjTyc4mgNgVHSMbGVnSWCzHzA4hng/OmIGUOKOt+fue43wQQCBHLxoo9OciTjIYqSsLcPEdf7dg9GQTWqJDgVjg77NI4niNH1Oxme2zs68p0ZUl8wg5GKrUpOEF/7fgalnUqJLhlCj0ujeM52vlEyiTy4fNclaxSXrFmB5cq6pWvp5ccyWiWXEHydo4QNLotwy1TuOzSOJ7jAvcWPMfVqWrXqwCfOv7Ul59ree5baSM97/Gjj3/vwPkDu2Z7ze5YfcnUW3iGwaqJzp5c77YMt5bIul0ax1OMsCgzzPLY+O/VJGtcX4H4zMbP/E87r5cIRrPpYESbgt30104URa4WgtekxLVpp1tv0D6Y+mSkUuMCn7rq/1yTrAn7ff2hO1ZXdq+lK/TWTXQ/RoDlbspwxxSkNIFLrozlIS6z7apILGyEg/FMXPmml9lwMe76NLc86K2bLHJf4qYMN0PZiy6OpZw0NcYIiybcDTlneI6vVyBaK5v01MFuckGDRHyy53Wxm1LcLLttB25ycTyldLM9DYEJG6nMG5wn2hrb3JZkC4PheGYooujg2+736nntRw+RS9aCkMzf8hK7vrlfiRa7Ga7MMkH7/zxxIaiXkn43pLhnClL2IMQAPjsleqZ0sWPSnzUON0aQSIT/ek2cq1qQxZrnuk8gbLLpC79g5Z5WRruj/MtfPkrrwRMs3d2pRI+ddM6daql6MbhjCm5nws+4PJ4yerl+0hsnbISDlelKX1Z5nqpZom7q0LhukJV7WgGobEoTq+tkuKM0PmRalk71vLo2hdCm4ACDrMrkqLpmFNY41DjRmrSnGQ5VZAei1d7oGtX19hySvUtYdvs51VJmzXA8w0jlVKawQAh37ld3TUHKIcqgZqGbrVPe8Iv7FvuuF8G5qgXeiG4SPVFe++HDrL73Sarm+b+JT+vC6SzxhoD5TksBNe3XSz5aGGT1lLmChtGGaDQT9cZNNg0kyON1y9VHCdlkkH3ffpi5Gw/zsYeOqpZjC2eXTPd5LVlTaMEDHWudZJhl03peF/ct9k0R0MWKOanhyJQhrrNIE/Z968+Iz+lk97f3KdViF8Px9DSmDmPUO6olj/shrJRJhDiNoh1gTiMRMsG8ab3IS3uWRlrmu9+ebSYcmbNW/UrJqWdXM3BuB9GaDp7+N98BYM09v2LTF99TrGzmtC4spmalRE3B4iiwlhJs/z7C4qwkNK1wsCpdFa5OVqeGK4ZjU/+2OvojVenOeKN6jeseOMO6B76iWoattBS1mlMrBEI63KhHTY89K+Hoj4/IIhlgbVGrCkt6lnh+KnWsfpWvKzA9y1BlmtGipmRBoNopOWOobLx5hBI8OmCgyGY5S3uXRgNmwLPGkAxGsmdqFleo1lGSnF4+E7N1fAqhzhSkHAD8v8Z8BSMsLmpKFDbCwUV9i5JT/6YaDjdelzNFoOSmecpJRbKcXjYTsy1hU7A4onh820nTUPRzurZzbcSLDV37ItWpU7VLdJTgBMfX5JAzMlvHKzjVmoKUfcAJpRpsJk1N0W3K4pl4eN7gPM9FCwfmb9YRghMko1lOL5tp4rakcwpjHKaE2sBnqZpR78Lr2q/zVPv385Xzk5dj9UpajJc8x1dnZxglAM63fVdvClJmgIOqZdhBhioDgjN6savSVZGmwSZPRAs5ETAPztukeyY4QTKa5cyMcgljOL407I36eykvIMRZYKVqKbMhS7XJ5HviAXiCJzb+ml9/ViIDm9h08FEe/f3Yzza2bwxfrr1sSiGVmvUbjetTiVBswl4QmlliRQmzMVzHTUF9pPARrwC+blOWpu6a4X+GjHiGZz7/Tb7548d5fO8JTmw/yMEFYz+vSleFl3cvVxotdMXqk+/Wr9KG4ASzjxIAAkJc+4NntnjHFKRMAq+pljEbcsSvWW/wPM+vqKb68la29lRSaWxgwxsv8uLm8b+z/uL6ikg2omRPRCYQyu1beKOeNjjFe2tmk0sYj6MRvndMAUDKU8BJ1TKcoouuumqq+8a+bqChf5DBgnXnkBkKbGrd5HqvBQly//yt2YQ+Xt4Z+mtSnFluVwTmqHF7yxQsDuLTE6XEFJs/JXKiT4mrphwLBxZWNAw3uNon4Hjd8kRr1Txdk+AEhjA5uM3OkL+MIgUAKQ3gD4AnMvHFMeFN/yELWNA/zHDD2Nd99NXXUjsw0e9uOb8lKEzhSvlze7wx8drc63UewSmOr0kWsT1aOd4zBQApR4DnAJ+1LJPXTDTuYc/5YYabjnJ0ziijwROc2H4btx2b6HcrM5XhdZ3rHI8W+iLVqecW3hSTQuhCJScYrEpxfI3dhutozsm780cpuxHiRWCPainTZarpQ5So+QAPPPE9vveIRIqNbHzlFm6ZtBPxmq418cs1l5O91b2OhPXDoYrMPy/5eNgIBL354eB3cgGDA9uDYLvhOmoKQl77w009QmwAblEtYzr0cH36EH9ta8VZNpg19m/cb2bCGVvDz3QgnPvlslvlSHjSA0g0s+XQ5gTnljgxLfsHJ3sqeP8TQsoTwIv4YJt10AEDDxvh4PaW7aadJdCZQCj37OKdpjYEB2mb75Qh5EqzyUqxWEuVf8TjvR2j9DnyfDaMNkTXXVyXsONayWAk+6ult5i9sVr1TVhLlUQsw2tbnKo8dDzP5g9TAJDyLPA8uHckd7HE6HMsR7O2a21l41DjrIxhOFSR+eWy28SgqmPfyoF0OMfzHxcYIafuLccL2/xjCmDtkfDwqkQAQwRJOGZaN525KVaTqJnRikRfpCr19LJbg7o4yUGyQYN9HzevcVCsLaM4eG3Ab6YAIGU78AwwqFrKREQYdswUgjIY2HVyVySeKu4o+4sVc5LPLL0lkg5GHK2ZL2uMgMkLO3IMOX6Cli3TyGvhP1OAseYsTwNnVUu5kiiDjk5vQmYosOvkrmA0G53yE8ME+fqc9Ylnl3y8IhdwLJzVmMLkpe0Zel3pPzFhsZud+PeNImUWKfdh7a70TAIySp/jqySxXCy064NdhHPhSadRiWA0+5sluzNvz7G9cEYzHonktS1puua61QLf8QjZv6YwhpTHgV8Dw6qlAFTQ7crSaWWmMrzz1E4zaASvikza442JJ5ffEeiu0J2THOfN65O0LnJzz4iOFKaFlJeBXwLvojhqqOOMa+XCtcnayC0f3GKMbbXOiKDxctOmxO8W74xngmGdP3Cad9aO2rjzcbo4bgrer2gsFiHqgV3AQhXDj7Ig+wL/w9WioEQkkf3Hj51NvrBsbaVOJrqAKUze2JTi7FK3DSEnJY87PUjpLU9J2Q88ixArgR1AlZvDV9IZDpA2TKKu3JxnqUn9JLNbnD4ar6TuUJaGIW0KTpIO53jxZoO+OhW5GsejBChFUxhDyrMI0QpsBjYBrhXsVNGeG2KVozdnF/H0z1hnHiA/n80Af9gdYPdbCRZf0slFJxioTvHCjhCpqKpcjSvL8KVrCgBS5oC3EOJdYAOWOTh+w9TSYgyxypFrH6c+9XPWcpQJst0yIHh5e5zNJ0a5rqXSEQHlSuv8BK9urbCpndpM6XZjkNI2hTGsNvLH8uawEtgIzHNquDpOijY+adv1sgjzVRaknmBtqIOqqZe+jm2o5FJjip1Hg8Ts3V1ZdphIjm1I8oEnmtl2uDFI6SUap4sQjcAaYDk2n7ozzJLMAX466+lKB5XpAyzM/TMrYiPMIIEYykm2v5Nk+UUvvKH9RzZo8PKNWS65VoNwLZJS8n/cGKh8TWE8QjRgmcMyYK4dl3yO/5fLUl1UJGaAPE9N+jXmG/tZHLmMTTX08y/rqKFY2uYneGNTlLQ7CeNp0CIlf3RjIG0KVyJEJbAUaALmYJ3yW/Qb403+c6KLndf8hE4RNC5SmT1HjfkGTeItmqIpHCpHDuVMbjqWYlmnjhquxXA8zaEt0NPgtcKvl6TkAzcG0qYwFUIEgFosgxgziRjWmX5RrFWNq27kNu5MHOOReJqAmSRkDBMx26k0z1FjnqEu0EJtuA8FOxYXXkpy87GQjhquIBc0eHdtmg9WVjjQPs0OnpDSnapdbQp2IEQYyyBCWBWVxnf5r3yXb3/OIOCV8PMjwlmDzR+kWNEWI2R6T5/beG+qcCXDUvKEW4NpU3AQIbgPWKRax6SEswYbT6dYfSFG2PDqDeEc3p0qXMkHUvKSW4NpU3AQIdiIVXLtbUI5kw0tKdaeixDJlf4ydV9NiuNrJO0L/HL4zW+ldGc5ErQpOIoQVAJfVK1j2gQMk3XnUqw/Gy65nIOJpGtuknfXBemr83pkMJ4E8H+dbtY6Hm0KDuP5KcRECFOy+kKSVW1B6oYiCLyYeJseyWiWs0synF4eJenLVnTvSunuwcvaFBxGCFYAd6nWMWOiaYNlFzMsvQhzBqIEpPe32+cCBt1z0pxcGXCx+YlTPC2lu2eralNwGCEIAF/AhT0XjhPKmSzpTLGsQ9DUFyVoesMgTGHSX5Oha65Bx7wQvXURjy4rFkuPlDzt9qDaFFxACLYB21TrsJWAYbKwO83CbpP6wSA1I2HXljclkqGqDJcac3TMC9LdEMEsyaPvXpaSE24Pqk3BBYQgjhUtlOIb9yMqR7M0DuSoGzKpGRFUjwaIJ8MzWu40AiapSI5kzGC0QjIal4zEBaPxAL11YbIl31kqC/xMSudbul+JNgWXEIK7gBWqdSghlDMJ50yEKQmakqABAZn/M/+9QL6L3kg8yGg8WAY3/VS8JyWvqhjYj9lYv/I+5WoKuVCAnG4xXwQG8LaqwfUL5RL54pNe1To0vuCElM4f+jIZ2hTc5XXVAjSeR2mUANoUXEVK2oCLqnVoPI3SKAG0KajgsGoBGs+iPEoAbQquIyWX8eAZmBpPoDxKAG0KqngDD51/qfEEGTwQJYA2BSVIySBwUrUOjac47IUoAbQpqORNIKVahMYTdKooZ54MbQqKkJIk8IpqHRrlGMDLqkWMR5uCQqSkBWhRrUOjlKNSunNG5HTRpqCeg+CNuaTGdfrwSHJxPJe2FbEAAASISURBVNoUFCMlaXCvKafGM0issxw8twqlTcEDSEkruHPQh8YzvCWlOwfGFoveJekdXsPq5WjruZblxUv18G8fgpFaQMJdL8E/7VetagLOS8kR1SImQ0cKHiHfTON5IKdai3+JmvDYL6B3Lxz5a3juDnhqgWpVVzAAvKhaxLXQpuAh8g06D6jW4V9uHoSHWq2/L0tDUyecqlOrqYAs8AcpyagWci20KXiM/DKl5zLS/mPfHLi4BL5wTrWScbzgteXHidCm4E3eALz0ZvYZbVH44sPw8JOwwitVo0ek5LxqEdNB92j0KEIQBD4NzFOtxV8MB2HzX8C24/DUPtVq8pwF/ujmKU+zQZuChxGCGPAgUKtaiz8wgG0PQfUovPykajV5WrHyCJ6rR5gMPX3wMFKSAp4FBlVr8Qc/WQ3HdsAH66HpO9Zj7/UKBV0EnveTIYCOFHyBEFQA9wENqrVopk0X8C8qzm2YLdoUfEJ+KnEv0Khai2ZKOrEMwZc1J9oUfIQQRIB70MlHL3MR+L1fDQG0KfgOIQgBnwIWqtaiuYpTWOc/GqqFzAZtCj4kv1z5Ccr1xCnvIbHaqb2jWogdaFPwMUKwBdgOlMKx634lA+zP73QtCbQp+BwhWAjcCVSo1lKGDAHPSUm/aiF2ok2hBBCCSmAPOgHpJmM1CGnVQuxGm0KJIAQBYCewUbWWEscE3gKO+a0oabpoUygxhGAlsAs9nXCCy8CLpTZduBJtCiWIEESBm4H1qrWUCAYfRQclf8NoUyhhhGA+sBtdHj0byiI6GI82hRInn2u4AdiK7slZDGngKPBuOUQH49GmUCYIQTVWInK5YileJwu8C7zj9bZpTqFNocwQgkbgRmCpai0ewwDexzqxySvdmpSgTaFMEYIm4GPAMtVaFGNi7Vk4IiUjqsV4AW0KZY4Q1AObgdWUV9OdNHASeF9KhlSL8RLaFDQACEEcyxjWUtqrFT1Y04Qzft7e7CTaFDRXIQQNwJr8I65Yjh0kgdPAKSnpUy3G62hT0EyKEAisvg1rsHIPUbWKiqIPaMs/ukq1JNkJtClopkXeIBqwTGJB/uElk8gA7eSNQEoSivX4Fm0KmhkjBHOwzGEhUI91OK4byco00I8VDfQBvUB3uRUZOYU2BY1t5KOJaqAG66yK8X9GgTBTV1XmsG768Y8U1sGsfUC/lIw6oV9joU1B4yp54wgDQayoIoDVOSoLpPXcXz3aFDQaTQHlVKyi0WimgTYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjUZTgDYFjesIIaQQYvUV33tMCPEzVZo0H6FNQaPRFKBNQaPRFKBNQaPRFKBNQaPRFKBNQaMCA2un5HjCWDslNYrRpqBRQStXH0qzArjgvhTNlWhT0Kjg58CjQojFQoiAEGIPcD/wC8W6NOh+ChoFCCEqgO8Cn8Fq49YCPCal/I1SYRpAm4JGo7kCPX3QaDQFaFPQaDQFaFPQaDQFaFPQaDQFaFPQaDQFaFPQaDQFaFPQaDQFaFPQaDQFaFPQaDQF/H9TOedRMJKsyQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "U = { 10, 8, 0, 2, -1}\n", "\n", "venn.venn3([S, T, U], set_labels=('S', 'T', 'U'));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set Relations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Relation Types\n", "- Set $A$ and $B$ are equal, denoted $A = B$, if they have exactly the same elements\n", "\n", "$$\\{0, 1\\} = \\{1, 0\\}$$\n", "\n", "- If $A$ and $B$ are not equal, they are **different**, denoted $A \\neq B$\n", "\n", "$$\\{0, 1\\} \\neq \\{1, 2\\}$$\n", "\n", "- **All** elements must be identical: $\\{1, 2, 4\\} = \\{4, 1, 2\\}$\n", "- **One different** element enough: $\\{1, 2, 4\\} \\neq \\{1, 2, 4, 8\\}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Intersection\n", "- Two sets **intersect** if they share at least one common element. Mathematically, it can express like this,\n", "\n", "$$ \\exists x, \\quad x \\in A \\wedge x \\in B $$\n", "\n", "- Two sets are **disjoint** if they share no elements.\n", "\n", "$$ \\neg \\exists x, \\quad x \\in A \\wedge x \\in B $$\n", "\n", "- $\\emptyset$ disjoint from any set\n", "\n", "- Non-empty $\\Omega$ intersects every set\n", "\n", "- A set intersects itself if and only if it is not-empty.\n", "\n", "- Several sets\n", " - intersect if all share a common element\n", " - mutually disjoint if every two are disjoint" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Subsets\n", "- It generalizes $\\leq$\n", "\n", "- If every element in $A$ is also in $B$, then $A$ is a **subset of** $B$, denoted $A \\subseteq B$\n", "\n", "$$ \\{0\\} \\subseteq \\{0, 1\\} \\\\ \\{0\\} \\subseteq \\{0\\}$$\n", "\n", "- Equivalently, $B$ is a **superset** of, or contains, $A$, denoted $B \\supseteq A$\n", "\n", "$$ \\{0, 1\\} \\supseteq \\{0\\} $$\n", "\n", "- If $A$ has an element that's not in $B$, then $A$ is **not a subset** of $B$, denoted $A \\not \\subseteq B$, or $B \\not \\supseteq A$\n", "\n", "$$ \\{0, 1\\} \\not \\subseteq \\{1, 2\\} \\\\ \\{1, 2\\} \\not \\supseteq \\{0, 1\\} $$\n", "\n", "- $\\mathbb{P} \\subseteq \\mathbb{N} \\subseteq \\mathbb{Z} \\subseteq \\mathbb{Q} \\subseteq \\mathbb{R}$\n", "\n", "- $\\emptyset \\subseteq A \\subseteq A \\subseteq \\Omega$\n", "\n", "- (transitivity) $A \\subseteq B$ and $B \\subseteq C \\rightarrow A \\subseteq C$\n", "\n", "> Note: $\\subseteq$ is called **transitive**\n", "\n", "- $A \\subseteq B$ and $B \\subseteq A \\rightarrow A = B$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Strict Subsets\n", "- It generalizes $\\gt$\n", "\n", "- If $A \\subseteq B$ and $A \\neq B$, $A$ is a **strict subset** of $B$, denoted $A \\subset B$ and $B$ is a **strict superset** of $A$, denoted $B \\supset A$.\n", "\n", "$$ \\{0\\} \\subset \\{0, 1\\} \\\\ \\{0, 1\\} \\supset \\{0\\} $$\n", "\n", "- If $A$ is not a strict subset of $B$, we write $A \\not \\subset B$ or $B \\not \\supset A$\n", " - Reason: $ A \\not \\subseteq B$ , $A = B$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Belongs to vs. Subset of\n", "- $\\in$ (Belongs to)\n", " - Relation between an element and a set\n", " - $x \\in A$: element $x$ belongs to, or is contained in, set $A$ \n", " - ex) $\\{0, 1\\}$ has two elements: 0 and 1 \n", " \n", "$$ \\rightarrow 0 \\in \\{0, 1\\} , \\{0\\} \\not \\in \\{0, 1\\} $$\n", " \n", "- $\\subseteq$\n", " - Relation between two sets\n", " - $A \\subseteq B$ : $A$ is a subset of set $B$\n", " - ex) $\\{0, 1\\}$ has two elements: 0 and 1 \n", " \n", "$$ \\{0\\} \\subseteq \\{0, 1\\} $$\n", " \n", "- 0 is an element of $\\{0, 1\\}$, but 0 is not a set. ($0 \\not \\subseteq \\{0, 1\\}$)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set relations in python\n", "\n", "#### Equality" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "S1 = {0, 1}\n", "S2 = set({0, 1})\n", "S3 = {1, 0, 1}\n", "T = {0, 2}" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n", "True\n", "True\n" ] } ], "source": [ "print(S1 == T)\n", "\n", "print(S1 == S2)\n", "\n", "print(S1 == S3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Inequality" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n", "True\n" ] } ], "source": [ "print(S1 != S2)\n", "print(S1 != T)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Disjoint" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S1.isdisjoint(T)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S1.isdisjoint({2})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Subsets and Supersets" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "zero = {0}\n", "zplus = {0, 1}\n", "zminus = {0, -1}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### subset" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zminus <= zplus" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zero.issubset(zminus)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Strict subset" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zplus < zminus" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zero < zminus" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Superset" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zplus >= zminus" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zplus.issuperset(zero)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Strict superset" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zminus > zminus" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zplus > zero" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tuples and products" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tuples and Ordered Pairs\n", "- Set\n", " - Order and repetition do not matter\n", "$$ \\{a, b, c\\} = \\{b, c, a\\} $$\n", "\n", "- Tuple\n", " - Both order and repetition matter\n", "$$ (a, b, c) \\neq (b, c, a) \\\\ (a, a, a) \\neq (a) $$\n", "\n", "- $n$-tuple\n", " - Tuple with $n$ elements\n", "$$ (a_1, a_2, \\dots, a_n) $$\n", "\n", "- 2-tuple\n", " - Ordered pair\n", "$$ (3, 7) $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cartesian Products\n", "- The cartesian product of $A$ and $B$ is the set $A \\times B$ of ordered pairs $(a, b)$ where $a \\in A$ and $b \\in B$. Mathematically,\n", "\n", "$$ A \\times B = \\{(a, b): a \\in A, b \\in B\\} $$\n", "\n", "- $A \\times A = A^2$\n", "\n", "- $\\mathbb{R}^2 = \\{(x, y): x, y \\in \\mathbb{R}\\} \\quad \\rightarrow$ Cartesian Plane\n", "\n", "- $A, B \\subseteq \\mathbb{R} \\quad \\rightarrow A \\times B \\subseteq \\mathbb{R}^2$\n", "\n", " - For example,\n", "\n", "$$ A = [0, 2], B=[1, 4] \\\\ A \\times B = \\{(x, y): x \\in [0, 2], y \\in [1, 4]\\} $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Discrete Sets\n", "- Similar, simpler\n", "- For example,\n", "\n", "$$ \\begin{aligned} \\{a, b\\} \\times \\{1, 2, 3\\} &= \\{(x, y): x \\in \\{a, b\\}, y \\in \\{1, 2, 3\\}\\} \\\\ &= \\{ (a, 1), (a, 2), (a, 3), (b, 1), (b, 2), (b, 3)\\} \\end{aligned}$$\n", "\n", "- 1st coordinate: vertical, 2nd coordinate: horizontal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Identities\n", "- $A \\times \\emptyset = \\emptyset \\times A = \\emptyset$\n", "\n", "- $A \\times (B \\cup C) = A \\times B \\cup A \\times C$\n", "\n", "- $A \\times (B \\cap C) = A \\times B \\cap A \\times C$\n", "\n", "- $A \\times (B - C) = A \\times B - A \\times C$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cartesian products in Python\n", "Use **product** function in **itertools** library" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('K', '♠️')\n", "('K', '♦️')\n", "('Q', '♠️')\n", "('Q', '♦️')\n", "('J', '♠️')\n", "('J', '♦️')\n" ] } ], "source": [ "from itertools import product\n", "\n", "Faces = set({'J', 'Q', 'K'})\n", "Suits = {'\\u2666\\uFE0F', '\\u2660\\uFE0F'}\n", "\n", "for i in product(Faces, Suits):\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Russell's Paradox\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sets in Sets\n", "- Sets can be elements\n", "- Every set is a subset of itself\n", "\n", "$$ \\{0\\} \\subseteq \\{0\\} $$\n", "\n", "- Can a set belong to (be an element of) itself? $ \\rightarrow S \\in S$\n", "\n", " - Typically, sets do not belong to themselves $\\quad \\{0\\} \\not \\in \\{0\\} , \\emptyset \\not \\in \\emptyset $\n", " \n", " - But some sets do belong to themselves! (infinite recursion)\n", " \n", " - Some sets $\\in$ themselves, others don't ($\\{0\\}$)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Russell's Paradox\n", "- Define a set that cannot exist\n", "\n", "- For example,\n", "\n", "$$ R = \\{\\text{sets that don't belong to themselves}\\} = \\{S: S \\not \\in S\\} $$\n", "\n", "- If\n", " - $R \\in R \\quad \\rightarrow R \\not \\in R$ (contradiciton)\n", " - $R \\not \\in R \\quad \\rightarrow R \\in R$ (contradiction)\n", " \n", "- If R existed, then both $R \\in R$ and $R \\not \\in R$ would hold\n", "\n", "- R defined but cannot exist!!\n", "\n", "- ex) The set that contains only the empty set $\\emptyset$ is not empty" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 1\n", "\n", "De Morgan's first law states the following for any two sets $A$ and $B$\n", "$$(A\\cup B)^c = A^c\\cap B^c$$\n", "\n", "In the following two exercises we calculate $(A\\cup B)^c$ in two different ways. Both functions must take $A$, $B$ and the universal set $U$ as their inputs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1.1\n", "\n", "Write the function **complement_of_union** that first determines $A\\cup B$ and then evaluates the complement of this set. Output the tuple: $\\begin{pmatrix}A\\cup B,\\, (A\\cup B)^c\\end{pmatrix}$.\n", "\n", "\n", "\n", " **Code**\n", "```python\n", "A = {1, 2, 3}\n", "B = {3, -6, 2, 0}\n", "U = {-10, -9, -8, -7, -6, 0, 1, 2, 3, 4}\n", "complement_of_union(A, B, U)\n", "```\n", "\n", " **Output**\n", "```\n", "({-6, 0, 1, 2, 3}, {-10, -9, -8, -7, 4})\n", "```" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "def complement_of_union(A, B, U):\n", " # inputs: A, B and U are of type 'set'\n", " # output: a tuple of the type (set, set)\n", " \n", " union = A.union(B)\n", " complement_union = U.difference(union)\n", " return (union, complement_union)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "# Check Function\n", "\n", "A = {1, 2, 3, 4, 5}\n", "B = {0, 2, -6, 5, 8, 9}\n", "U = A|B|{-3, 7, 10, -4}\n", "assert( complement_of_union(A, B, U) == ({-6, 0, 1, 2, 3, 4, 5, 8, 9}, {-4, -3, 7, 10}) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1.2\n", "\n", "Write the function **intersection_of_complements** that first determines $A^c$ and $B^c$ and then evaluates the intersection of their complements. Output the tuple: $\\begin{pmatrix}A^c, \\, A^c\\cap B^c\\end{pmatrix}$\n", "\n", " **Code**\n", "```python\n", "A = {1, 2, 3}\n", "B = {3, -6, 2, 0}\n", "U = {-10, -9, -8, -7, -6, 0, 1, 2, 3, 4}\n", "intersection_of_complements(A, B, U)\n", "```\n", "\n", " **Output**\n", "```\n", "({-10, -9, -8, -7, -6, 0, 4}, {-10, -9, -8, -7, 4})\n", "```\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "def intersection_of_complements(A, B, U):\n", " # inputs: A, B and U are of type 'set'\n", " # output: a tuple of the form (set, set)\n", " \n", " complement_a = U.difference(A)\n", " complement_b = U.difference(B)\n", " complement_intersect = complement_a.intersection(complement_b)\n", " return (complement_a, complement_intersect)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "# Check Function\n", "\n", "A = {1, 2, 3, 4, 5}\n", "B = {0, 2, -6, 5, 8, 9}\n", "U = A|B|{-3, 7, 10, -4}\n", "assert( intersection_of_complements(A, B, U) == ({-6, -4, -3, 0, 7, 8, 9, 10}, {-4, -3, 7, 10}) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 2\n", "\n", "This problem illustrates a property of cartesian products of unions of two or more sets. For four sets $A$, $B$, $S$ and $T$, the following holds:\n", "\n", "$$(A\\cup B)\\times(S\\cup T) = (A\\times S)\\cup(A\\times T)\\cup(B\\times S)\\cup(B\\times T)$$\n", "\n", "Write the following functions to determine $(A\\cup B)\\times(S\\cup T)$ in two different ways.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercies 2.1\n", "\n", "Write function **product_of_unions** that first determines $(A\\cup B)$ and $(S\\cup T)$ and then evaluates the cartesian products of these unions. Output the tuple $\\begin{pmatrix}(A\\cup B),\\, (A\\cup B)\\times(S\\cup T)\\end{pmatrix}$.\n", "\n", " **Code**\n", "```python\n", "A = {1, 2}\n", "B = {1, 3}\n", "S = {-1, 0}\n", "T = {0, 10}\n", "product_of_unions(A, B, S, T)\n", "```\n", "\n", "\n", " **Output**\n", "```\n", "({1, 2, 3},\n", " {(1, -1),\n", " (1, 0),\n", " (1, 10),\n", " (2, -1),\n", " (2, 0),\n", " (2, 10),\n", " (3, -1),\n", " (3, 0),\n", " (3, 10)})\n", "```\n" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "def product_of_unions(A, B, S, T):\n", " # inputs: A, B, S and T are sets\n", " # output: a tuple of the type (set, set)\n", " \n", " union_a_b = A.union(B)\n", " union_s_t = S.union(T)\n", " \n", " product_a_b_s_t = set()\n", " \n", " for i in product(union_a_b, union_s_t):\n", " product_a_b_s_t.add(i)\n", " \n", " return (union_a_b, product_a_b_s_t)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "# Check Function\n", "\n", "A = {5}\n", "B = {5, 6}\n", "S = {-1, 0, 1}\n", "T = {1, 2}\n", "assert( product_of_unions(A, B, S, T) == \\\n", " ({5, 6}, {(5, -1), (5, 0), (5, 1), (5, 2), (6, -1), (6, 0), (6, 1), (6, 2)}) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 2.2\n", "\n", "Write a function **union_of_products** that first determines $(A\\times S)$ and the other three cartesian products that appear on the right hand side of the identity above, then evaluates the union of these cartesian products. Output the tuple $\\begin{pmatrix}(A\\times S),\\, (A\\times S)\\cup(A\\times T)\\cup(B\\times S)\\cup(B\\times T)\\end{pmatrix}$.\n", "\n", " **Code**\n", "```python\n", "A = {1, 2}\n", "B = {1, 3}\n", "S = {-1, 0}\n", "T = {0, 10}\n", "union_of_products(A, B, S, T)\n", "```\n", "\n", "\n", " **Output**\n", "```\n", "({(1, -1), (1, 0), (2, -1), (2, 0)},\n", " {(1, -1),\n", " (1, 0),\n", " (1, 10),\n", " (2, -1),\n", " (2, 0),\n", " (2, 10),\n", " (3, -1),\n", " (3, 0),\n", " (3, 10)})\n", "```" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "def union_of_products(A, B, S, T):\n", " # inputs: A, B, S and T are sets\n", " # output: a tuple of the type (set, set)\n", " product_a_s = set(x for x in product(A, S))\n", " product_a_t = set(x for x in product(A, T))\n", " product_b_s = set(x for x in product(B, S))\n", " product_b_t = set(x for x in product(B, T))\n", " \n", " union_all = product_a_s.union(product_a_t).union(product_b_s).union(product_b_t)\n", " \n", " return (product_a_s, union_all)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "# Check Function\n", "\n", "A = {5}\n", "B = {5, 6}\n", "S = {-1, 0, 1}\n", "T = {1, 2}\n", "assert( union_of_products(A, B, S, T) == \\\n", " ({(5, -1), (5, 0), (5, 1)}, \\\n", " {(5, -1), (5, 0), (5, 1), (5, 2), (6, -1), (6, 0), (6, 1), (6, 2)}) \\\n", " )" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }