updated mpost for the best

This commit is contained in:
Yann Esposito 2012-10-19 14:15:12 +02:00
parent 556ac267fb
commit 26c58f5509

View file

@ -141,9 +141,9 @@ From this graph we can conclude without any ambiguity that:
\\[ob(C)=\\{A,B,C\\}\\] \\[ob(C)=\\{A,B,C\\}\\]
and and
\\[\hom(C)=\\{f,g,h,idA,idB,idC\\}\\] \\[\hom(C)=\\{f,g,h,id_A,id_B,id_C\\}\\]
Instantaneously, we understand that we can get rid of all \\(idX\\) arrows. Instantaneously, we understand that we can get rid of all \\(id_i\\) arrows.
But in reality, we lack an important information. But in reality, we lack an important information.
What is \\(∘\\)? What is \\(∘\\)?
@ -182,77 +182,86 @@ label.rt(btex $h = g \circ f$ etex, .5[z5,z6]);
</mpost> </mpost>
Now we have a complete representation. Now we have a complete representation.
We don't have to represent \\(idX\\), we know there are there. We don't have to represent \\(id_i\\), we know there are there.
And we also don't have to represent composition implying \\(idX\\) morphisms. And we also don't have to represent composition implying \\(id_i\\) morphisms.
But, even this little graph look complex. But, even this little graph look complex.
To show just how complex things can be; To show just how complex things can be;
we just double the number morphisms between different objects. we just double the number morphisms between different objects.
<graph title="Naïve Category Representation Mess"> <mpost title="Naïve Category Representation Mess (∘ representation)">
z0=origin;
z1=(2gu,gu);
z2=(4gu,0);
A[pos="0,0!"] drawState(z0,btex $A$ etex);
B[pos="4,0!"] drawState(z1,btex $B$ etex);
C[pos="8,0!"] drawState(z2,btex $C$ etex);
f[pos="2,1!",label="", fixedsize="false", width=0,height=0,shape=none];
A -> f[label="f", arrowhead=None]
f -> B
fp[pos="2,0.5!",label="", fixedsize="false", width=0,height=0,shape=none]; drawEdgeWithAngle(z0,z1,btex $f$ etex,35);
A -> fp[label="f'", arrowhead=None] drawEdge(z0,z1,btex $f'$ etex);
fp -> B drawEdgeWithAngle(z1,z2,btex $g$ etex,35);
drawEdge(z1,z2,btex $g'$ etex);
drawEdgeWithAngle(z0,z2,btex $h$ etex,-10);
drawEdgeWithAngle(z0,z2,btex $h'$ etex,-35);
g[pos="6,0.5!",label="", fixedsize="false", width=0,height=0,shape=none]; def drawLink(expr f,g,h,l,propf,propg,proph,propfg) =
B -> g[label="g", arrowhead=None] begingroup
g -> C pair midf,midg,midh,midfg;
midf=point propf of f;
midg=point propg of g;
gp[pos="6,1!",label="", fixedsize="false", width=0,height=0,shape=none]; path fg; fg:=midf .. midg;
B -> gp[label="g'", arrowhead=None] draw fg dashed evenly;
gp -> C
fg[pos="6,0!",label="", fixedsize="false", width=0,height=0,shape=none]; midfg = point propfg of fg;
fpg[pos="2.5,-1.5!",label="", fixedsize="false", width=0,height=0,shape=none]; midh = point proph of h;
fgp[pos="5.5,-1.5!",label="", fixedsize="false", width=0,height=0,shape=none]; path bigarrow;
fpgp[pos="2,0!",label="", fixedsize="false", width=0,height=0,shape=none]; bigarrow := subpath (.1,.9) of midfg .. midh;
AC[pos="4,-1!",label="", fixedsize="false", width=0,height=0,shape=none]; drawarrow bigarrow withpen pencircle scaled 1.5;
ApCp[pos="4,-3!",label="", fixedsize="false", width=0,height=0,shape=none];
f -> fg [color="red",style=dashed,arrowhead=None] label.rt(l, point .5 of bigarrow);
fg -> g [color="red",style=dashed,arrowhead=None] endgroup;
fg -> AC [color="red",style=bold,fontcolor="red",label="h=g∘f"] enddef;
fp -> fpgp [color="yellow",style=dashed,arrowhead=None] path f,fp,g,gp,h,hp;
fpgp -> gp [color="yellow",style=dashed,arrowhead=None]
fpgp -> AC [color="yellow",style=bold,fontcolor="yellow",label="h=g'∘f'"]
fp -> fpg [color="blue",style=dashed,arrowhead=None] f=edgeAngle(z0,z1,35);
fpg -> g [color="blue",style=dashed,arrowhead=None] fp=edge(z0,z1);
fpg -> ApCp [color="blue",style=bold,fontcolor="blue",label="h'=g∘f'"] g=edgeAngle(z1,z2,35);
gp=edge(z1,z2);
f -> fgp [color="violet",style=dashed,arrowhead=None] h=edgeAngle(z0,z2,-10);
fgp -> gp [color="violet",style=dashed,arrowhead=None] hp=edgeAngle(z0,z2,-35);
fgp -> ApCp [color="violet",style=bold,fontcolor="violet",label="h'=g'∘f"]
A -> AC [label="h",arrowhead=None]
AC -> C
A -> ApCp [label="h'",arrowhead=None]
ApCp -> C
</graph> drawoptions( withcolor red );
drawLink(f,g,h,btex $g\circ f$ etex, .5,.5,.4,.3);
drawoptions( withcolor blue );
drawLink(fp,gp,h,btex $h=g'\circ f'$ etex, .5,.5,.55,.7);
drawoptions( withcolor yellow );
drawLink(f,gp,hp,btex $h'=g'\circ f$ etex, .5,.5,.1,.2);
drawoptions( withcolor green );
drawLink(fp,g,hp,btex $h'=g\circ f'$ etex, .5,.5,.9,.8);
By removing the graphical representation of ∘ we could create a more readable representation. </mpost>
<graph title="Fewer Details Category Representation"> Another representation of the preceding category:
A -> B[label="f"] <mpost title="Another representation">
A -> B[label="f'"] z0=origin;
B -> C[label="g"] z1=(2gu,gu);
B -> C[label="g'"] z2=(4gu,0);
A -> C [label="h\n=g∘f\n=g'∘f'"]
A -> C [label="h'\n=g'∘f\n=g∘f'"]
</graph> drawState(z0,btex $A$ etex);
drawState(z1,btex $B$ etex);
drawState(z2,btex $C$ etex);
drawEdgeWithAngle(z0,z1,btex $f$ etex,35);
drawEdge(z0,z1,btex $f'$ etex);
drawEdgeWithAngle(z1,z2,btex $g$ etex,35);
drawEdge(z1,z2,btex $g'$ etex);
drawEdgeWithAngle(z0,z2,btex $h=g\circ f=g'\circ f'$ etex,-10);
drawEdgeWithAngle(z0,z2,btex $h'=g\circ f'=g'\circ f$ etex,-35);
</mpost>
### Examples ### Examples
@ -264,9 +273,9 @@ z0=(0,0);
z1=2(u,0); z1=2(u,0);
z2=2(2u,0); z2=2(2u,0);
drawedge(z0,z1,""); draw edge(z0,z1);
drawedge(z1,z2,""); draw edge(z1,z2);
drawedgeangle(z0,z2,"",50); draw edgeAngle(z0,z2,50);
drawstate(z0); drawstate(z0);
drawstate(z1); drawstate(z1);
@ -285,10 +294,10 @@ drawedge(z1,z2,btex $g$ etex);
z0=(0,0); z1=(4u,0); z2=(2u,-3u); z0=(0,0); z1=(4u,0); z2=(2u,-3u);
drawstate(z0); drawstate(z1); drawstate(z2); drawstate(z0); drawstate(z1); drawstate(z2);
drawedgeangle(z0,z1,"",35); draw nl_edgeAngle(z0,z1,35);
drawedgeangle(z1,z0,"",-145); draw nl_edgeAngle(z1,z0,-145);
drawedge(z0,z2,""); draw edge(z0,z2);
drawedge(z1,z2,""); draw edge(z1,z2);
</mpost> </mpost>
<mpost title="Not a category; no \(A→C\) while there exists \(A→B\) and \(B→C\)"> <mpost title="Not a category; no \(A→C\) while there exists \(A→B\) and \(B→C\)">
@ -297,10 +306,10 @@ drawState(z0,btex $A$ etex);
drawState(z1,btex $B$ etex); drawState(z1,btex $B$ etex);
drawState(z2,btex $C$ etex); drawState(z2,btex $C$ etex);
drawEdgeWithAngle(z0,z1,"",35); draw edgeAngle(z0,z1,35);
drawEdgeWithAngle(z1,z0,"",-145); draw edgeAngle(z1,z0,-145);
drawEdge(z1,z2,""); draw edge(z1,z2);
drawEdge(z2,z0,""); draw edge(z2,z0);
</mpost> </mpost>
<graph title="Cannot be a category ; no possible associative ∘<br/>\((h∘g)∘f=idB∘f=f≠h=h∘idA=h∘(g∘f)\)"> <graph title="Cannot be a category ; no possible associative ∘<br/>\((h∘g)∘f=idB∘f=f≠h=h∘idA=h∘(g∘f)\)">