From 90dfaa00f7df31a5ea250d547bd78a411bc55eae Mon Sep 17 00:00:00 2001
From: Benjamin Bengfort <benjamin@bengfort.com>
Date: Thu, 28 Sep 2017 11:45:44 -0400
Subject: [PATCH] stringify things

---
 ...tional-Database-Design-Normalization.ipynb | 525 +++++++++---------
 1 file changed, 263 insertions(+), 262 deletions(-)

diff --git a/jupyter/07-Relational-Database-Design-Normalization.ipynb b/jupyter/07-Relational-Database-Design-Normalization.ipynb
index 073e104..6440f99 100644
--- a/jupyter/07-Relational-Database-Design-Normalization.ipynb
+++ b/jupyter/07-Relational-Database-Design-Normalization.ipynb
@@ -102,7 +102,7 @@
      "text": [
       "Tuples [1, 2, 3] and [2, 2, 3] violate the FD C -> A\n",
       "FD A -> B holds on this relation\n",
-      "FD A -> CB holds on this relation\n"
+      "FD A -> BC holds on this relation\n"
      ]
     }
    ],
@@ -252,7 +252,9 @@
   {
    "cell_type": "code",
    "execution_count": 9,
-   "metadata": {},
+   "metadata": {
+    "collapsed": true
+   },
    "outputs": [],
    "source": [
     "def findKeys(R, FClosure):\n",
@@ -284,7 +286,9 @@
   {
    "cell_type": "code",
    "execution_count": 10,
-   "metadata": {},
+   "metadata": {
+    "collapsed": true
+   },
    "outputs": [],
    "source": [
     "def isInBCNF(R, FClosure, keys):\n",
@@ -385,90 +389,90 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CB -> DA\n",
-      "CDA -> B\n",
-      "A -> B\n",
-      "CA -> CB\n",
-      "CB -> CA\n",
-      "DC -> CDB\n",
-      "CB -> A\n",
-      "D -> DBA\n",
-      "CBA -> DB\n",
-      "CDA -> CBA\n",
-      "CBA -> DAC\n",
+      "CA -> DBA\n",
+      "DC -> DCA\n",
+      "BCA -> DC\n",
+      "DC -> BCA\n",
+      "DC -> B\n",
+      "DC -> BCD\n",
+      "DC -> BDA\n",
+      "BCD -> DA\n",
+      "DC -> CA\n",
+      "CA -> DC\n",
+      "BC -> A\n",
+      "BCA -> DCA\n",
+      "DCA -> BCA\n",
+      "DC -> DA\n",
+      "BC -> BCA\n",
+      "BCA -> DBCA\n",
       "CA -> D\n",
-      "CDB -> A\n",
-      "DC -> CB\n",
-      "CB -> DC\n",
-      "CDA -> CDB\n",
-      "CDB -> CDA\n",
+      "D -> BA\n",
+      "BCA -> DBA\n",
+      "BC -> BA\n",
+      "BCD -> BACD\n",
+      "BC -> DC\n",
+      "DC -> BC\n",
+      "BC -> DBCA\n",
+      "BC -> DBA\n",
+      "DCA -> BAD\n",
+      "DC -> A\n",
+      "BCD -> BA\n",
+      "DCA -> BC\n",
+      "BC -> DCA\n",
+      "CA -> BC\n",
+      "BC -> CA\n",
+      "DC -> BD\n",
+      "BCD -> DCA\n",
+      "DCA -> BCD\n",
+      "BCD -> A\n",
+      "BC -> DA\n",
+      "BCD -> BCA\n",
+      "BCA -> DBC\n",
+      "BD -> BA\n",
+      "A -> BA\n",
       "CA -> DCA\n",
-      "CBA -> DBAC\n",
-      "D -> DA\n",
-      "DC -> B\n",
-      "CA -> CBA\n",
-      "DA -> BA\n",
+      "DC -> BDCA\n",
+      "BC -> DB\n",
       "CA -> DBCA\n",
-      "CD -> A\n",
-      "CBA -> DC\n",
-      "DC -> CBA\n",
-      "D -> BA\n",
-      "CDA -> BA\n",
-      "DC -> BA\n",
-      "CA -> DBA\n",
-      "DC -> DB\n",
-      "D -> DB\n",
-      "CB -> DBA\n",
+      "A -> B\n",
       "CA -> B\n",
-      "CB -> DB\n",
-      "CDA -> CDBA\n",
-      "CDB -> DA\n",
-      "D -> A\n",
-      "DC -> CDA\n",
-      "DB -> BA\n",
-      "CB -> CBA\n",
-      "CB -> DBCA\n",
-      "DA -> B\n",
-      "DA -> DB\n",
-      "DB -> DA\n",
       "CA -> BA\n",
-      "CD -> DA\n",
-      "CDA -> DBA\n",
+      "D -> DA\n",
+      "BD -> A\n",
+      "BCD -> BAD\n",
+      "CA -> BCA\n",
+      "BCA -> DA\n",
+      "DA -> BAD\n",
+      "BC -> DBC\n",
+      "BCA -> DB\n",
+      "DCA -> BACD\n",
+      "DCA -> BD\n",
+      "BC -> D\n",
+      "CA -> DA\n",
+      "DA -> BD\n",
+      "BD -> DA\n",
       "D -> B\n",
-      "CBA -> DBA\n",
-      "DB -> DBA\n",
-      "CDA -> DB\n",
-      "DBC -> CBA\n",
-      "CDB -> CA\n",
-      "CBA -> DBC\n",
+      "BCD -> CA\n",
       "CA -> DBC\n",
-      "DB -> A\n",
+      "DA -> BA\n",
+      "BD -> BAD\n",
+      "D -> BDA\n",
+      "DCA -> BA\n",
+      "DCA -> B\n",
+      "D -> BD\n",
+      "DA -> B\n",
+      "BCA -> D\n",
+      "D -> A\n",
       "CA -> DB\n",
-      "DC -> CDBA\n",
-      "CB -> BA\n",
-      "DA -> DBA\n",
-      "CB -> DBC\n",
-      "A -> BA\n",
-      "DC -> DBA\n",
-      "CBA -> D\n",
-      "DBC -> CDBA\n",
-      "DC -> CA\n",
-      "CA -> DC\n",
-      "CB -> D\n",
-      "CDB -> BA\n",
-      "CBA -> DA\n",
-      "CDB -> DBA\n",
-      "CA -> DA\n",
-      "CDA -> CB\n",
-      "CB -> CDA\n",
+      "DC -> BA\n",
       "Keys are:\n",
-      "DBC\n",
-      "CB\n",
-      "DC\n",
-      "CDBA\n",
+      "BCA\n",
       "CA\n",
-      "CBA\n",
-      "CDA\n"
+      "DC\n",
+      "BDCA\n",
+      "BC\n",
+      "DCA\n",
+      "BCD\n"
      ]
     }
    ],
@@ -500,9 +504,9 @@
      "output_type": "stream",
      "text": [
       "Candidate Keys are:\n",
-      "CA\n",
-      "CB\n",
-      "DC\n"
+      "DC\n",
+      "BC\n",
+      "CA\n"
      ]
     }
    ],
@@ -515,7 +519,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
@@ -523,7 +527,7 @@
      "output_type": "stream",
      "text": [
       "Checking if the schema is in BCNF\n",
-      "Decomposing using B -> C into relations CB and DBA\n"
+      "Decomposing using B -> C into relations BC and DBA\n"
      ]
     }
    ],
@@ -538,7 +542,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
@@ -547,12 +551,12 @@
      "text": [
       "-------------- Doing a full BCNF Decompisition -------\n",
       "ABCD is not in BCNF\n",
-      "Decomposing ABCD using A -> B into relations BA and CDA\n",
+      "Decomposing ABCD using A -> B into relations BA and DCA\n",
       "BA is in BCNF\n",
-      "CDA is not in BCNF\n",
-      "Decomposing CDA using D -> A into relations DA and CD\n",
+      "DCA is not in BCNF\n",
+      "Decomposing DCA using D -> A into relations DA and DC\n",
       "DA is in BCNF\n",
-      "CD is in BCNF\n",
+      "DC is in BCNF\n",
       "------------------------------------------------------\n"
      ]
     }
@@ -573,7 +577,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 17,
    "metadata": {},
    "outputs": [
     {
@@ -585,17 +589,17 @@
       "Checking if the schema is in BCNF\n",
       "-------------- NO: Doing a full BCNF Decompisition -------\n",
       "ABCDEH is not in BCNF\n",
-      "Decomposing ABCDEH using A -> B into relations BA and CADEH\n",
-      "BA is in BCNF\n",
-      "CADEH is not in BCNF\n",
-      "Decomposing CADEH using E -> A into relations EA and CDEH\n",
-      "EA is in BCNF\n",
-      "CDEH is not in BCNF\n",
-      "Decomposing CDEH using E -> H into relations EH and CDE\n",
+      "Decomposing ABCDEH using E -> H into relations EH and DECAB\n",
       "EH is in BCNF\n",
-      "CDE is not in BCNF\n",
-      "Decomposing CDE using E -> C into relations CE and DE\n",
-      "CE is in BCNF\n",
+      "DECAB is not in BCNF\n",
+      "Decomposing DECAB using A -> C into relations CA and DEBA\n",
+      "CA is in BCNF\n",
+      "DEBA is not in BCNF\n",
+      "Decomposing DEBA using E -> A into relations EA and DEB\n",
+      "EA is in BCNF\n",
+      "DEB is not in BCNF\n",
+      "Decomposing DEB using E -> B into relations BE and DE\n",
+      "BE is in BCNF\n",
       "DE is in BCNF\n",
       "------------------------------------------------------\n"
      ]
@@ -629,7 +633,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 18,
    "metadata": {},
    "outputs": [
     {
@@ -637,9 +641,9 @@
      "output_type": "stream",
      "text": [
       "JKL is not in BCNF\n",
-      "Decomposing JKL using L -> K into relations KL and JL\n",
+      "Decomposing JKL using L -> K into relations KL and LJ\n",
       "KL is in BCNF\n",
-      "JL is in BCNF\n"
+      "LJ is in BCNF\n"
      ]
     }
    ],
@@ -649,162 +653,164 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {},
+   "execution_count": 24,
+   "metadata": {
+    "scrolled": false
+   },
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "{<__main__.FD at 0x10ccafa58>,\n",
-       " <__main__.FD at 0x10caee9e8>,\n",
-       " <__main__.FD at 0x10cb01828>,\n",
-       " <__main__.FD at 0x10caeec50>,\n",
-       " <__main__.FD at 0x10cca8b00>,\n",
-       " <__main__.FD at 0x10ccaf518>,\n",
-       " <__main__.FD at 0x10cc9a780>,\n",
-       " <__main__.FD at 0x10cc92fd0>,\n",
-       " <__main__.FD at 0x10ccaf438>,\n",
-       " <__main__.FD at 0x10ccaf048>,\n",
-       " <__main__.FD at 0x10cca8630>,\n",
-       " <__main__.FD at 0x10ccaf5c0>,\n",
-       " <__main__.FD at 0x10ccafe48>,\n",
-       " <__main__.FD at 0x10cc92b70>,\n",
-       " <__main__.FD at 0x10cc9a4a8>,\n",
-       " <__main__.FD at 0x10cb07198>,\n",
-       " <__main__.FD at 0x10cc922e8>,\n",
-       " <__main__.FD at 0x10ccaf6a0>,\n",
-       " <__main__.FD at 0x10caee860>,\n",
-       " <__main__.FD at 0x10ccaf6d8>,\n",
-       " <__main__.FD at 0x10ccaf390>,\n",
-       " <__main__.FD at 0x10ccaf208>,\n",
-       " <__main__.FD at 0x10cca87b8>,\n",
-       " <__main__.FD at 0x10ccaf2b0>,\n",
-       " <__main__.FD at 0x10cc92940>,\n",
-       " <__main__.FD at 0x10cc92f28>,\n",
-       " <__main__.FD at 0x10cc6b860>,\n",
-       " <__main__.FD at 0x10cca8f98>,\n",
-       " <__main__.FD at 0x10ccaf780>,\n",
-       " <__main__.FD at 0x10ccc90f0>,\n",
-       " <__main__.FD at 0x10cc9a390>,\n",
-       " <__main__.FD at 0x10cc92a58>,\n",
-       " <__main__.FD at 0x10ccaf160>,\n",
-       " <__main__.FD at 0x10cc9a978>,\n",
-       " <__main__.FD at 0x10ccaf4e0>,\n",
-       " <__main__.FD at 0x10ccaf1d0>,\n",
-       " <__main__.FD at 0x10cb01d30>,\n",
-       " <__main__.FD at 0x10cc9a630>,\n",
-       " <__main__.FD at 0x10cc9a320>,\n",
-       " <__main__.FD at 0x10ccaf550>,\n",
-       " <__main__.FD at 0x10ccaf3c8>,\n",
-       " <__main__.FD at 0x10caee630>,\n",
-       " <__main__.FD at 0x10cb01438>,\n",
-       " <__main__.FD at 0x10ccaf748>,\n",
-       " <__main__.FD at 0x10cb01cc0>,\n",
-       " <__main__.FD at 0x10cca8dd8>,\n",
-       " <__main__.FD at 0x10cc9a9b0>,\n",
-       " <__main__.FD at 0x10cc9a198>,\n",
-       " <__main__.FD at 0x10ccc9128>,\n",
-       " <__main__.FD at 0x10cb01c18>,\n",
-       " <__main__.FD at 0x10cc92dd8>,\n",
-       " <__main__.FD at 0x10cc9ae10>,\n",
-       " <__main__.FD at 0x10ccaf5f8>,\n",
-       " <__main__.FD at 0x10ccafda0>,\n",
-       " <__main__.FD at 0x10cb07438>,\n",
-       " <__main__.FD at 0x10ccaf4a8>,\n",
-       " <__main__.FD at 0x10cc9a710>,\n",
-       " <__main__.FD at 0x10cc9a898>,\n",
-       " <__main__.FD at 0x10cb070f0>,\n",
-       " <__main__.FD at 0x10ccc9160>,\n",
-       " <__main__.FD at 0x10cc9ae80>,\n",
-       " <__main__.FD at 0x10ccaf400>,\n",
-       " <__main__.FD at 0x10ccaf080>,\n",
-       " <__main__.FD at 0x10cc92b38>,\n",
-       " <__main__.FD at 0x10ccc92e8>,\n",
-       " <__main__.FD at 0x10cc9afd0>,\n",
-       " <__main__.FD at 0x10ccaf0b8>,\n",
-       " <__main__.FD at 0x10cc9ab70>,\n",
-       " <__main__.FD at 0x10cca82e8>,\n",
-       " <__main__.FD at 0x10cc92978>,\n",
-       " <__main__.FD at 0x10cc9a2b0>,\n",
-       " <__main__.FD at 0x10cc6b9b0>,\n",
-       " <__main__.FD at 0x10cca8f60>,\n",
-       " <__main__.FD at 0x10ccaf198>,\n",
-       " <__main__.FD at 0x10cb01ac8>,\n",
-       " <__main__.FD at 0x10ccaf320>,\n",
-       " <__main__.FD at 0x10ccaf710>,\n",
-       " <__main__.FD at 0x10cc9a400>,\n",
-       " <__main__.FD at 0x10cc9af28>,\n",
-       " <__main__.FD at 0x10cc9a358>,\n",
-       " <__main__.FD at 0x10caeeeb8>,\n",
-       " <__main__.FD at 0x10ccaf470>,\n",
-       " <__main__.FD at 0x10cc9abe0>,\n",
-       " <__main__.FD at 0x10cca8588>,\n",
-       " <__main__.FD at 0x10ccc9358>,\n",
-       " <__main__.FD at 0x10cca8128>,\n",
-       " <__main__.FD at 0x10caeef98>,\n",
-       " <__main__.FD at 0x10cc92588>,\n",
-       " <__main__.FD at 0x10cc9aeb8>,\n",
-       " <__main__.FD at 0x10ccaf0f0>,\n",
-       " <__main__.FD at 0x10ccaf358>,\n",
-       " <__main__.FD at 0x10cc9a7f0>,\n",
-       " <__main__.FD at 0x10ccaf7b8>,\n",
-       " <__main__.FD at 0x10cc92710>,\n",
-       " <__main__.FD at 0x10cc92ef0>,\n",
-       " <__main__.FD at 0x10cb074a8>,\n",
-       " <__main__.FD at 0x10cb015f8>,\n",
-       " <__main__.FD at 0x10cc9a0f0>,\n",
-       " <__main__.FD at 0x10ccaf240>,\n",
-       " <__main__.FD at 0x10cc92080>,\n",
-       " <__main__.FD at 0x10ccaf668>,\n",
-       " <__main__.FD at 0x10cc9ad68>,\n",
-       " <__main__.FD at 0x10cb07048>,\n",
-       " <__main__.FD at 0x10cc9ad30>,\n",
-       " <__main__.FD at 0x10cca86d8>,\n",
-       " <__main__.FD at 0x10cc92208>,\n",
-       " <__main__.FD at 0x10caee668>,\n",
-       " <__main__.FD at 0x10cca8e80>,\n",
-       " <__main__.FD at 0x10caee940>,\n",
-       " <__main__.FD at 0x10cc9a5f8>,\n",
-       " <__main__.FD at 0x10cc9a3c8>,\n",
-       " <__main__.FD at 0x10cb01e48>,\n",
-       " <__main__.FD at 0x10cb07390>,\n",
-       " <__main__.FD at 0x10cb01da0>,\n",
-       " <__main__.FD at 0x10cca8a90>,\n",
-       " <__main__.FD at 0x10ccaf630>,\n",
-       " <__main__.FD at 0x10caee898>,\n",
-       " <__main__.FD at 0x10cc9a470>,\n",
-       " <__main__.FD at 0x10cc9af98>,\n",
-       " <__main__.FD at 0x10cc9aac8>,\n",
-       " <__main__.FD at 0x10cc92c50>,\n",
-       " <__main__.FD at 0x10cb019b0>,\n",
-       " <__main__.FD at 0x10caee780>,\n",
-       " <__main__.FD at 0x10cb072e8>,\n",
-       " <__main__.FD at 0x10caeeef0>,\n",
-       " <__main__.FD at 0x10cc9a908>,\n",
-       " <__main__.FD at 0x10cc9a9e8>,\n",
-       " <__main__.FD at 0x10cb01668>,\n",
-       " <__main__.FD at 0x10cc6be48>,\n",
-       " <__main__.FD at 0x10cb01080>,\n",
-       " <__main__.FD at 0x10ccaf128>,\n",
-       " <__main__.FD at 0x10cca8e10>,\n",
-       " <__main__.FD at 0x10cc9aef0>,\n",
-       " <__main__.FD at 0x10cc92e80>,\n",
-       " <__main__.FD at 0x10ccaf2e8>,\n",
-       " <__main__.FD at 0x10cca8d30>,\n",
-       " <__main__.FD at 0x10ccc9198>,\n",
-       " <__main__.FD at 0x10ccaf588>,\n",
-       " <__main__.FD at 0x10cb07470>,\n",
-       " <__main__.FD at 0x10ccafa20>,\n",
-       " <__main__.FD at 0x10cc9a8d0>}"
+       "{'A -> A',\n",
+       " 'A -> B',\n",
+       " 'A -> BA',\n",
+       " 'B -> B',\n",
+       " 'BA -> A',\n",
+       " 'BA -> B',\n",
+       " 'BA -> BA',\n",
+       " 'BC -> A',\n",
+       " 'BC -> B',\n",
+       " 'BC -> BA',\n",
+       " 'BC -> BC',\n",
+       " 'BC -> BCA',\n",
+       " 'BC -> C',\n",
+       " 'BC -> CA',\n",
+       " 'BC -> D',\n",
+       " 'BC -> DA',\n",
+       " 'BC -> DB',\n",
+       " 'BC -> DBA',\n",
+       " 'BC -> DBC',\n",
+       " 'BC -> DBCA',\n",
+       " 'BC -> DC',\n",
+       " 'BC -> DCA',\n",
+       " 'BCA -> A',\n",
+       " 'BCA -> B',\n",
+       " 'BCA -> BA',\n",
+       " 'BCA -> BC',\n",
+       " 'BCA -> BCA',\n",
+       " 'BCA -> C',\n",
+       " 'BCA -> CA',\n",
+       " 'BCA -> D',\n",
+       " 'BCA -> DA',\n",
+       " 'BCA -> DB',\n",
+       " 'BCA -> DBA',\n",
+       " 'BCA -> DBC',\n",
+       " 'BCA -> DBCA',\n",
+       " 'BCA -> DC',\n",
+       " 'BCA -> DCA',\n",
+       " 'BCD -> A',\n",
+       " 'BCD -> B',\n",
+       " 'BCD -> BA',\n",
+       " 'BCD -> BACD',\n",
+       " 'BCD -> BAD',\n",
+       " 'BCD -> BC',\n",
+       " 'BCD -> BCA',\n",
+       " 'BCD -> BCD',\n",
+       " 'BCD -> BD',\n",
+       " 'BCD -> C',\n",
+       " 'BCD -> CA',\n",
+       " 'BCD -> D',\n",
+       " 'BCD -> DA',\n",
+       " 'BCD -> DC',\n",
+       " 'BCD -> DCA',\n",
+       " 'BD -> A',\n",
+       " 'BD -> B',\n",
+       " 'BD -> BA',\n",
+       " 'BD -> BAD',\n",
+       " 'BD -> BD',\n",
+       " 'BD -> D',\n",
+       " 'BD -> DA',\n",
+       " 'BDA -> A',\n",
+       " 'BDA -> B',\n",
+       " 'BDA -> BA',\n",
+       " 'BDA -> BD',\n",
+       " 'BDA -> BDA',\n",
+       " 'BDA -> D',\n",
+       " 'BDA -> DA',\n",
+       " 'BDCA -> A',\n",
+       " 'BDCA -> B',\n",
+       " 'BDCA -> BA',\n",
+       " 'BDCA -> BC',\n",
+       " 'BDCA -> BCA',\n",
+       " 'BDCA -> BCD',\n",
+       " 'BDCA -> BD',\n",
+       " 'BDCA -> BDA',\n",
+       " 'BDCA -> BDCA',\n",
+       " 'BDCA -> C',\n",
+       " 'BDCA -> CA',\n",
+       " 'BDCA -> D',\n",
+       " 'BDCA -> DA',\n",
+       " 'BDCA -> DC',\n",
+       " 'BDCA -> DCA',\n",
+       " 'C -> C',\n",
+       " 'CA -> A',\n",
+       " 'CA -> B',\n",
+       " 'CA -> BA',\n",
+       " 'CA -> BC',\n",
+       " 'CA -> BCA',\n",
+       " 'CA -> C',\n",
+       " 'CA -> CA',\n",
+       " 'CA -> D',\n",
+       " 'CA -> DA',\n",
+       " 'CA -> DB',\n",
+       " 'CA -> DBA',\n",
+       " 'CA -> DBC',\n",
+       " 'CA -> DBCA',\n",
+       " 'CA -> DC',\n",
+       " 'CA -> DCA',\n",
+       " 'D -> A',\n",
+       " 'D -> B',\n",
+       " 'D -> BA',\n",
+       " 'D -> BD',\n",
+       " 'D -> BDA',\n",
+       " 'D -> D',\n",
+       " 'D -> DA',\n",
+       " 'DA -> A',\n",
+       " 'DA -> B',\n",
+       " 'DA -> BA',\n",
+       " 'DA -> BAD',\n",
+       " 'DA -> BD',\n",
+       " 'DA -> D',\n",
+       " 'DA -> DA',\n",
+       " 'DC -> A',\n",
+       " 'DC -> B',\n",
+       " 'DC -> BA',\n",
+       " 'DC -> BC',\n",
+       " 'DC -> BCA',\n",
+       " 'DC -> BCD',\n",
+       " 'DC -> BD',\n",
+       " 'DC -> BDA',\n",
+       " 'DC -> BDCA',\n",
+       " 'DC -> C',\n",
+       " 'DC -> CA',\n",
+       " 'DC -> D',\n",
+       " 'DC -> DA',\n",
+       " 'DC -> DC',\n",
+       " 'DC -> DCA',\n",
+       " 'DCA -> A',\n",
+       " 'DCA -> B',\n",
+       " 'DCA -> BA',\n",
+       " 'DCA -> BACD',\n",
+       " 'DCA -> BAD',\n",
+       " 'DCA -> BC',\n",
+       " 'DCA -> BCA',\n",
+       " 'DCA -> BCD',\n",
+       " 'DCA -> BD',\n",
+       " 'DCA -> C',\n",
+       " 'DCA -> CA',\n",
+       " 'DCA -> D',\n",
+       " 'DCA -> DA',\n",
+       " 'DCA -> DC',\n",
+       " 'DCA -> DCA'}"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 24,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "Fclosure"
+    "{str(f) for f in Fclosure}"
    ]
   },
   {
@@ -829,44 +835,39 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 25,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "{<__main__.FD at 0x10cb01828>,\n",
-       " <__main__.FD at 0x10cb01ac8>,\n",
-       " <__main__.FD at 0x10cb01080>}"
+       "{'A -> B', 'BC -> D', 'D -> A'}"
       ]
      },
-     "execution_count": 22,
+     "execution_count": 25,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "F"
+    "{str(f) for f in F}"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [
     {
-     "data": {
-      "text/plain": [
-       "<__main__.FD at 0x10cb010b8>"
-      ]
-     },
-     "execution_count": 24,
-     "metadata": {},
-     "output_type": "execute_result"
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "A -> B\n"
+     ]
     }
    ],
    "source": [
-    "FD('A', 'B')"
+    "print(FD('A', 'B'))"
    ]
   }
  ],
-- 
GitLab