(* Content-type: application/mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 7.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 145, 7] NotebookDataLength[ 23028, 697] NotebookOptionsPosition[ 20607, 611] NotebookOutlinePosition[ 21001, 628] CellTagsIndexPosition[ 20958, 625] WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell[CellGroupData[{ Cell["Category Theory and Its Data Structures", "Title", CellChangeTimes->{{3.4950079427288*^9, 3.495007984568*^9}, { 3.4950654503404655`*^9, 3.495065471852865*^9}}, TextAlignment->Center], Cell["yukita@hosei.ac.jp", "Subsubtitle", CellChangeTimes->{{3.4950079895132*^9, 3.4950080073596*^9}}, TextAlignment->Center], Cell[CellGroupData[{ Cell["Small Examples", "Section", CellChangeTimes->{{3.4950080716628*^9, 3.495008074892*^9}}], Cell["\<\ We will work with small catetories, especially those catetories with a finte \ set of generators and relations.\ \>", "Text", CellChangeTimes->{{3.4950590011198654`*^9, 3.4950590797750654`*^9}}], Cell[CellGroupData[{ Cell["Ex. 4", "Subsection", CellChangeTimes->{{3.495008150006*^9, 3.4950081564644003`*^9}, { 3.4950081985688*^9, 3.4950081987092*^9}, {3.495075562872265*^9, 3.495075566915265*^9}, {3.4951902325616364`*^9, 3.4951902335288363`*^9}}], Cell["\<\ We denote by hom[X, Y] the set of arrows whose domain is X and whose \ codomain is Y. \ \>", "Text", CellChangeTimes->{{3.495077536885865*^9, 3.495077607023865*^9}, { 3.495077723135865*^9, 3.4950778089618654`*^9}, {3.4950778621418653`*^9, 3.495077869153865*^9}, {3.495077976879865*^9, 3.495078062832865*^9}, 3.495078813639865*^9}], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], "=", RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", "\[Alpha]"}], "}"}]}], ";"}]], "Input", CellChangeTimes->{{3.495190258332836*^9, 3.4951902930272365`*^9}, 3.4953571389485393`*^9}], Cell["\<\ The composition rules may be given as a function that takes a pair of arrows \ from hom[A,B]\[Times]hom[B,C] and returns an arrow in hom[A,C], where A, B, and C are any objects in the \ category. In ex. 4, we have only one object. So, we have only to work with hom[A,A]\[Times]hom[A,A]\[RightArrow]hom[A,A].\ \>", "Text", CellChangeTimes->{{3.4950087884516*^9, 3.4950088133803997`*^9}, { 3.4950091192556*^9, 3.495009165416*^9}, {3.4950096121064*^9, 3.4950096125744*^9}, {3.4950101419136*^9, 3.49501029275*^9}, { 3.4950103277096*^9, 3.495010378394*^9}, {3.4950104654732*^9, 3.4950105319604*^9}, {3.4950768771058655`*^9, 3.4950769642778654`*^9}, { 3.495190322074436*^9, 3.4951903497488365`*^9}, {3.4953559313555393`*^9, 3.495356094810339*^9}, {3.495356135261139*^9, 3.495356245927539*^9}, { 3.495356277158739*^9, 3.4953562996539392`*^9}}], Cell[CellGroupData[{ Cell["Preliminary Tryout", "Subsubsection", CellChangeTimes->{{3.495356494637339*^9, 3.495356499691739*^9}}], Cell["We use the Tuples function when we want a cartesian product.", "Text", CellChangeTimes->{{3.495356792690939*^9, 3.495356890830539*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Tuples", "[", RowBox[{"{", RowBox[{ RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}]}], "}"}], "]"}]], "Input", CellChangeTimes->{{3.4953565151513395`*^9, 3.495356549299739*^9}, { 3.495356601091739*^9, 3.4953566013725395`*^9}, {3.495356730712139*^9, 3.4953567694469395`*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", SubscriptBox["i", "A"]}], "}"}], ",", RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", "\[Alpha]"}], "}"}], ",", RowBox[{"{", RowBox[{"\[Alpha]", ",", SubscriptBox["i", "A"]}], "}"}], ",", RowBox[{"{", RowBox[{"\[Alpha]", ",", "\[Alpha]"}], "}"}]}], "}"}]], "Output", CellChangeTimes->{{3.495356533637339*^9, 3.4953565531997395`*^9}, 3.495356602636139*^9, {3.495356742614939*^9, 3.4953567706793394`*^9}, 3.4953571426457396`*^9, 3.495360719410539*^9, 3.495397048666*^9}] }, Open ]], Cell["\<\ The data structure for the composition rule may be given as follows.\ \>", "Text", CellChangeTimes->{{3.4953569606873393`*^9, 3.495357018251339*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"comp", "[", RowBox[{"A", ",", "A", ",", "A"}], "]"}], " ", "=", " ", RowBox[{"MapThread", "[", RowBox[{"List", ",", RowBox[{"{", RowBox[{ RowBox[{"Tuples", "[", RowBox[{"{", RowBox[{ RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}]}], "}"}], "]"}], ",", RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", "\[Alpha]", ",", "\[Alpha]", ",", SubscriptBox["i", "A"]}], "}"}]}], "}"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.4953570480473394`*^9, 3.495357132833339*^9}, { 3.4953571680269394`*^9, 3.495357204499739*^9}, {3.495359724224139*^9, 3.495359745861339*^9}, {3.495359816700939*^9, 3.4953598172937393`*^9}, { 3.495363592197339*^9, 3.495363649371339*^9}, {3.4953637779153395`*^9, 3.495363780364539*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", SubscriptBox["i", "A"]}], "}"}], ",", SubscriptBox["i", "A"]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", "\[Alpha]"}], "}"}], ",", "\[Alpha]"}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"\[Alpha]", ",", SubscriptBox["i", "A"]}], "}"}], ",", "\[Alpha]"}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"\[Alpha]", ",", "\[Alpha]"}], "}"}], ",", SubscriptBox["i", "A"]}], "}"}]}], "}"}]], "Output", CellChangeTimes->{ 3.4953572057477393`*^9, 3.495359757608139*^9, 3.4953598178865395`*^9, 3.4953603548853393`*^9, 3.495360730127739*^9, 3.495360853461339*^9, 3.4953636510093393`*^9, 3.495363781238139*^9, 3.495364143267339*^9, { 3.4953674629005394`*^9, 3.495367472182539*^9}, 3.4953940714084*^9, 3.4953944244630003`*^9, 3.4953970536424*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Associativity", "Subsubsection"], Cell["\<\ hom[A, B]\[Times]hom[B, C]\[Times]hom[C, D]\[RightArrow]hom[A,D] can be \ constructed in two ways: (hom[A, B]\[Times]hom[B, C])\[Times]hom[C, D]\[RightArrow]hom[A,D] and hom[A, B]\[Times](hom[B, C]\[Times]hom[C, D])\[RightArrow]hom[A,D].\ \>", "Text", CellChangeTimes->{{3.4953573023429394`*^9, 3.495357333574139*^9}, { 3.4953580375529394`*^9, 3.495358041312539*^9}, {3.4953581300609393`*^9, 3.4953582272489395`*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"cat", "[", RowBox[{"arrow1_", ",", "arrow2_", ",", "comp_"}], "]"}], ":=", "\[IndentingNewLine]", RowBox[{"First", "[", RowBox[{"Cases", "[", RowBox[{"comp", ",", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"arrow1", ",", "arrow2"}], "}"}], ",", "ret_"}], "}"}], "\[Rule]", "ret"}]}], "]"}], "]"}]}]], "Input", CellChangeTimes->{{3.495363068723739*^9, 3.495363143666139*^9}, { 3.495363248045739*^9, 3.495363254769339*^9}, {3.4953632880909395`*^9, 3.495363331115739*^9}, {3.495363811252539*^9, 3.495363855587739*^9}, { 3.4953639703569393`*^9, 3.495363976440939*^9}, {3.4953640479357395`*^9, 3.495364048887339*^9}, {3.495364214450139*^9, 3.495364218662139*^9}}], Cell["Let us check if the cat function works as expected.", "Text", CellChangeTimes->{{3.4953941487642*^9, 3.4953941827566*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"cat", "[", RowBox[{"\[Alpha]", ",", SubscriptBox["i", "A"], ",", RowBox[{"comp", "[", RowBox[{"A", ",", "A", ",", "A"}], "]"}]}], "]"}]], "Input", CellChangeTimes->{{3.4953640026801395`*^9, 3.4953640194345393`*^9}, 3.4953641093997393`*^9, {3.495364163141739*^9, 3.495364174545339*^9}, { 3.495364619987739*^9, 3.495364631157339*^9}}], Cell[BoxData["\[Alpha]"], "Output", CellChangeTimes->{ 3.495364020183339*^9, 3.495364052038539*^9, 3.495364110554139*^9, { 3.4953641494917393`*^9, 3.495364175091339*^9}, 3.4953642216885395`*^9, { 3.4953646120005393`*^9, 3.4953646322025394`*^9}, {3.4953940501514*^9, 3.4953940776404*^9}, 3.4953970742344*^9}] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{"associativeQ", "[", RowBox[{ RowBox[{"hom", "[", RowBox[{"X_", ",", "Y_"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"Y_", ",", "Z_"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"Z_", ",", "W_"}], "]"}], ",", "comp_"}], "]"}], ":=", "\[IndentingNewLine]", RowBox[{"And", "@@", RowBox[{"Map", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"cat", "[", RowBox[{ RowBox[{"cat", "[", RowBox[{ RowBox[{"#", "[", RowBox[{"[", "1", "]"}], "]"}], ",", RowBox[{"#", "[", RowBox[{"[", "2", "]"}], "]"}], ",", RowBox[{"comp", "[", RowBox[{"X", ",", "Y", ",", "Z"}], "]"}]}], "]"}], ",", RowBox[{"#", "[", RowBox[{"[", "3", "]"}], "]"}], ",", RowBox[{"comp", "[", RowBox[{"Y", ",", "Z", ",", "W"}], "]"}]}], "]"}], "\[Equal]", "\[IndentingNewLine]", RowBox[{"cat", "[", RowBox[{ RowBox[{"#", "[", RowBox[{"[", "1", "]"}], "]"}], ",", RowBox[{"cat", "[", RowBox[{ RowBox[{"#", "[", RowBox[{"[", "2", "]"}], "]"}], ",", RowBox[{"#", "[", RowBox[{"[", "3", "]"}], "]"}], ",", RowBox[{"comp", "[", RowBox[{"Y", ",", "Z", ",", "W"}], "]"}]}], "]"}], ",", RowBox[{"comp", "[", RowBox[{"X", ",", "Y", ",", "W"}], "]"}]}], "]"}]}], ")"}], "&"}], ",", RowBox[{"Tuples", "[", RowBox[{"{", RowBox[{ RowBox[{"hom", "[", RowBox[{"X", ",", "Y"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"Y", ",", "Z"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"Z", ",", "W"}], "]"}]}], "}"}], "]"}]}], "]"}]}]}]], "Input", CellChangeTimes->{ 3.4951906306184363`*^9, {3.4951907015342364`*^9, 3.4951907804394364`*^9}, { 3.495358068316139*^9, 3.495358089079739*^9}, {3.495358455024539*^9, 3.4953585383597393`*^9}, {3.4953585799961395`*^9, 3.4953586007129393`*^9}, {3.4953586893365393`*^9, 3.495358736822939*^9}, 3.4953587687405396`*^9, {3.4953592223275394`*^9, 3.4953592453219395`*^9}, { 3.495359659671339*^9, 3.495359668812939*^9}, 3.495360236060139*^9, { 3.495360429344139*^9, 3.495360456472539*^9}, {3.4953605979801393`*^9, 3.4953606045789394`*^9}, {3.4953610663857393`*^9, 3.4953610717053394`*^9}, {3.4953642698457394`*^9, 3.4953642714057393`*^9}, {3.495364303151739*^9, 3.495364589068539*^9}, { 3.4953646675521393`*^9, 3.495364683308139*^9}, {3.495365688930939*^9, 3.495365690381739*^9}, {3.4953969917728*^9, 3.495396992428*^9}}], Cell[BoxData[ RowBox[{"SetAttributes", "[", RowBox[{"associativeQ", ",", "HoldAll"}], "]"}]], "Input", CellChangeTimes->{{3.495360890105739*^9, 3.4953608937561393`*^9}, { 3.495361020209739*^9, 3.495361045840539*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"associativeQ", "[", RowBox[{ RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", "comp"}], "]"}]], "Input", CellChangeTimes->{{3.495359674210539*^9, 3.495359718452139*^9}, { 3.495359806623339*^9, 3.495359811350139*^9}, 3.4953602531421394`*^9, { 3.495360515674539*^9, 3.4953605179209394`*^9}, 3.495360571850139*^9, 3.4953657405981393`*^9}], Cell[BoxData["True"], "Output", CellChangeTimes->{ 3.4953597713049393`*^9, 3.495359825702139*^9, 3.4953599657277393`*^9, 3.4953601474209394`*^9, {3.495360243953739*^9, 3.495360254920539*^9}, 3.4953604900593395`*^9, 3.495360520572939*^9, 3.4953605737533393`*^9, { 3.4953606083697395`*^9, 3.4953606117861395`*^9}, 3.4953608128077393`*^9, { 3.4953610568541393`*^9, 3.495361076697339*^9}, 3.495364640829339*^9, { 3.4953646779573393`*^9, 3.495364689641739*^9}, {3.495365730348939*^9, 3.495365742548139*^9}, 3.495367497220539*^9, {3.4953940803124*^9, 3.4953940977424*^9}, 3.4953944436198*^9, 3.4953969977788*^9, 3.4953970895848*^9}] }, Open ]], Cell["\<\ Without the HoldAll attribute, we would get no meaningful results. You may try remove[associativeQ] and define the function again without the attribute and see the result.\ \>", "Text", CellChangeTimes->{{3.4953942071082*^9, 3.495394340769*^9}}], Cell["Let us try another possibility.", "Text", CellChangeTimes->{{3.4953647703717394`*^9, 3.495364780371339*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"comp", "[", RowBox[{"A", ",", "A", ",", "A"}], "]"}], " ", "=", " ", RowBox[{"MapThread", "[", RowBox[{"List", ",", RowBox[{"{", RowBox[{ RowBox[{"Tuples", "[", RowBox[{"{", RowBox[{ RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}]}], "}"}], "]"}], ",", RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", "\[Alpha]", ",", "\[Alpha]", ",", "\[Alpha]"}], "}"}]}], "}"}]}], "]"}]}]], "Input", CellChangeTimes->{{3.4953570480473394`*^9, 3.495357132833339*^9}, { 3.4953571680269394`*^9, 3.495357204499739*^9}, {3.495359724224139*^9, 3.495359745861339*^9}, {3.495359816700939*^9, 3.4953598172937393`*^9}, { 3.495363592197339*^9, 3.495363649371339*^9}, {3.4953637779153395`*^9, 3.495363780364539*^9}, {3.4953648048633394`*^9, 3.495364813833339*^9}, 3.495364888791339*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", SubscriptBox["i", "A"]}], "}"}], ",", SubscriptBox["i", "A"]}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", "\[Alpha]"}], "}"}], ",", "\[Alpha]"}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"\[Alpha]", ",", SubscriptBox["i", "A"]}], "}"}], ",", "\[Alpha]"}], "}"}], ",", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"\[Alpha]", ",", "\[Alpha]"}], "}"}], ",", "\[Alpha]"}], "}"}]}], "}"}]], "Output", CellChangeTimes->{3.495364815861339*^9, 3.495364889789739*^9, 3.4953943666493998`*^9, 3.4953944639622*^9, 3.495397123234*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"associativeQ", "[", RowBox[{ RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", "comp"}], "]"}]], "Input", CellChangeTimes->{{3.495364833770139*^9, 3.4953648963105392`*^9}, 3.4953945136014*^9}], Cell[BoxData["True"], "Output", CellChangeTimes->{{3.4953648775749393`*^9, 3.4953648989469395`*^9}, 3.4953674463021393`*^9, 3.495394375323*^9, 3.4953944673006*^9, 3.495394515645*^9, 3.4953971258236*^9}] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Ex. 5", "Subsection", CellChangeTimes->{{3.495059453735465*^9, 3.495059455966265*^9}}], Cell["\<\ In this example, we have two objects A and B and an arrow \[Alpha] besides \ the identities. We allow sparse tables where impossible compositions are \ omitted.\ \>", "Text", CellChangeTimes->{{3.4950595146534653`*^9, 3.4950595544178653`*^9}, { 3.495060168286665*^9, 3.495060236084265*^9}}], Cell[BoxData[ RowBox[{"Remove", "[", RowBox[{"hom", ",", "comp"}], "]"}]], "Input", CellChangeTimes->{{3.4953650504385395`*^9, 3.495365076350139*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], "=", RowBox[{"{", SubscriptBox["i", "A"], "}"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"hom", "[", RowBox[{"B", ",", "B"}], "]"}], "=", RowBox[{"{", SubscriptBox["i", "B"], "}"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"hom", "[", RowBox[{"A", ",", "B"}], "]"}], "=", RowBox[{"{", "\[Alpha]", "}"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"hom", "[", RowBox[{"_", ",", "_"}], "]"}], "=", RowBox[{"{", "}"}]}], ";"}]}], "Input", CellChangeTimes->{{3.4953650807805395`*^9, 3.4953651724773393`*^9}, { 3.495365481435339*^9, 3.4953654886737394`*^9}}], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"comp", "[", RowBox[{"A", ",", "A", ",", "A"}], "]"}], "=", RowBox[{"{", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", SubscriptBox["i", "A"]}], "}"}], ",", SubscriptBox["i", "A"]}], "}"}], "}"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"comp", "[", RowBox[{"B", ",", "B", ",", "B"}], "]"}], "=", RowBox[{"{", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ SubscriptBox["i", "B"], ",", SubscriptBox["i", "B"]}], "}"}], ",", SubscriptBox["i", "B"]}], "}"}], "}"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"comp", "[", RowBox[{"A", ",", "A", ",", "B"}], "]"}], "=", RowBox[{"{", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ SubscriptBox["i", "A"], ",", "\[Alpha]"}], "}"}], ",", "\[Alpha]"}], "}"}], "}"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"comp", "[", RowBox[{"A", ",", "B", ",", "B"}], "]"}], "=", RowBox[{"{", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"\[Alpha]", ",", SubscriptBox["i", "B"]}], "}"}], ",", "\[Alpha]"}], "}"}], "}"}]}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{ RowBox[{"comp", "[", RowBox[{"_", ",", "_", ",", "_"}], "]"}], "=", RowBox[{"{", "}"}]}], ";"}]}], "Input", CellChangeTimes->{{3.4953651867825394`*^9, 3.495365221586139*^9}, { 3.495365310443739*^9, 3.495365420298939*^9}, {3.495365500514139*^9, 3.495365538266139*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"cat", "[", RowBox[{ RowBox[{"cat", "[", RowBox[{ SubscriptBox["i", "A"], ",", "\[Alpha]", ",", RowBox[{"comp", "[", RowBox[{"A", ",", "A", ",", "B"}], "]"}]}], "]"}], ",", SubscriptBox["i", "B"], ",", RowBox[{"comp", "[", RowBox[{"A", ",", "B", ",", "B"}], "]"}]}], "]"}]], "Input", CellChangeTimes->{{3.4953954020122004`*^9, 3.4953955013062*^9}}], Cell[BoxData["\[Alpha]"], "Output", CellChangeTimes->{3.4953955019926*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"cat", "[", RowBox[{ SubscriptBox["i", "A"], ",", RowBox[{"cat", "[", RowBox[{"\[Alpha]", ",", SubscriptBox["i", "B"], ",", RowBox[{"comp", "[", RowBox[{"A", ",", "B", ",", "B"}], "]"}]}], "]"}], ",", RowBox[{"comp", "[", RowBox[{"A", ",", "A", ",", "B"}], "]"}]}], "]"}]], "Input", CellChangeTimes->{{3.4953954020122004`*^9, 3.4953955013062*^9}, { 3.4953964401921997`*^9, 3.4953964730146*^9}, {3.4953965146822*^9, 3.495396527833*^9}}], Cell[BoxData["\[Alpha]"], "Output", CellChangeTimes->{3.4953965398918*^9}] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"associativeQ", "[", RowBox[{ RowBox[{"hom", "[", RowBox[{"A", ",", "A"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"A", ",", "B"}], "]"}], ",", RowBox[{"hom", "[", RowBox[{"B", ",", "B"}], "]"}], ",", "comp"}], "]"}]], "Input", CellChangeTimes->{{3.4953655764861393`*^9, 3.4953656198541393`*^9}, { 3.4953657858537393`*^9, 3.4953657861813393`*^9}, {3.4953972015928*^9, 3.495397204354*^9}}], Cell[BoxData["True"], "Output", CellChangeTimes->{3.4953657873825393`*^9, 3.4953945634434*^9, 3.4953971443719997`*^9, 3.4953972871432*^9}] }, Open ]] }, Open ]] }, Open ]] }, Open ]] }, ScreenStyleEnvironment->"Presentation", WindowSize->{953, 643}, WindowMargins->{{32, Automatic}, {9, Automatic}}, FrontEndVersion->"7.0 for Microsoft Windows (32-bit) (2009\:5e744\:670823\ \:65e5)", StyleDefinitions->"Default.nb" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[567, 22, 192, 3, 246, "Title"], Cell[762, 27, 127, 2, 51, "Subsubtitle"], Cell[CellGroupData[{ Cell[914, 33, 94, 1, 119, "Section"], Cell[1011, 36, 205, 4, 79, "Text"], Cell[CellGroupData[{ Cell[1241, 44, 236, 3, 63, "Subsection"], Cell[1480, 49, 353, 7, 79, "Text"], Cell[1836, 58, 300, 9, 50, "Input"], Cell[2139, 69, 864, 16, 175, "Text"], Cell[CellGroupData[{ Cell[3028, 89, 109, 1, 44, "Subsubsection"], Cell[3140, 92, 142, 1, 47, "Text"], Cell[CellGroupData[{ Cell[3307, 97, 392, 10, 50, "Input"], Cell[3702, 109, 628, 17, 73, "Output"] }, Open ]], Cell[4345, 129, 160, 3, 47, "Text"], Cell[CellGroupData[{ Cell[4530, 136, 929, 23, 119, "Input"], Cell[5462, 161, 1063, 31, 73, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[6574, 198, 38, 0, 44, "Subsubsection"], Cell[6615, 200, 437, 8, 111, "Text"], Cell[7055, 210, 777, 18, 85, "Input"], Cell[7835, 230, 129, 1, 47, "Text"], Cell[CellGroupData[{ Cell[7989, 235, 380, 8, 50, "Input"], Cell[8372, 245, 320, 5, 73, "Output"] }, Open ]], Cell[8707, 253, 2765, 68, 323, "Input"], Cell[11475, 323, 223, 4, 50, "Input"], Cell[CellGroupData[{ Cell[11723, 331, 521, 12, 50, "Input"], Cell[12247, 345, 658, 10, 73, "Output"] }, Open ]], Cell[12920, 358, 256, 5, 111, "Text"], Cell[13179, 365, 115, 1, 47, "Text"], Cell[CellGroupData[{ Cell[13319, 370, 995, 24, 119, "Input"], Cell[14317, 396, 823, 27, 73, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[15177, 428, 371, 10, 50, "Input"], Cell[15551, 440, 211, 3, 73, "Output"] }, Open ]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[15823, 450, 93, 1, 63, "Subsection"], Cell[15919, 453, 303, 6, 79, "Text"], Cell[16225, 461, 155, 3, 50, "Input"], Cell[16383, 466, 764, 24, 153, "Input"], Cell[17150, 492, 1638, 54, 187, "Input"], Cell[CellGroupData[{ Cell[18813, 550, 414, 11, 50, "Input"], Cell[19230, 563, 75, 1, 73, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[19342, 569, 507, 13, 50, "Input"], Cell[19852, 584, 75, 1, 73, "Output"] }, Open ]], Cell[CellGroupData[{ Cell[19964, 590, 446, 11, 50, "Input"], Cell[20413, 603, 142, 2, 73, "Output"] }, Open ]] }, Open ]] }, Open ]] }, Open ]] } ] *) (* End of internal cache information *)