On Nov 1, 4:41 pm, Dan Christensen <
Dan_Christen...@sympatico.ca>
wrote:
> 1 ALL(f):[f @ mor => dom(f) @ ob]
> 2 ALL(f):[f @ mor => cod(f) @ ob]
> 3 ALL(f):[f @ mor => ALL(a):ALL(b):[(a,b) @ f => a @ dom(f) & b @ cod(f)]]
> Identity morphisms exist for all objects.
> 4 ALL(a):[a @ ob => EXIST(i):[i @ mor & ALL(b):[b @ a => (b,b) @ i]]]
> The composition operator comp
> 5 ALL(f):ALL(g):[f @ mor & g @ mor => [cod(f)=dom(g) => comp(g,f) @
> mor
> & dom(comp(g,f))=dom(f)
> & cod(comp(g,f))=cod(g)
> & ALL(a):ALL(b):[(a,b) @ comp(g,f) <=> EXIST(c):[(a,c) @ f & (c,b) @ g]]]]
> Associativity of composition
> 6 ALL(f):ALL(g):ALL(h):[f @ mor & g @ mor & h @ mor => [cod(f)=dom(g)
> & cod(g)=dom(h)
> => comp(comp(h,g),f)=comp(h,comp(g,f))]]
> hom classes exist for each ordered pair of objects.
> 7 ALL(a):ALL(b):[a @ ob & b @ ob => ALL(f):[f @ mor => [f @ hom(a,b)
> <=> dom(f)=a & cod(f)=b]]]
> Your comments are welcomed.
Here is a 6-axiom treatment.
I think this is close to equivalent to yours in that it doesn't have a
hom-sets-exist axiom but the others seem to match.
It is better than yours in lacking all the @ clutter and the separate
sorts, though. Speaking of something that is
"not an onerous requirement", there is usually little-or-nothing to be
lost by simply tossing the object in favor of its
identity-arrow, which already MUST exist in ALL treatments ANYway.
Composition, since it is not always defined between every 2 arrows, is
represented as a ternary
predicate that behaves functionally when the arrows connect and is
false when they don't.
domain(x) is d(x); codomain(x) is c(x). K(f,g,h)<=df=>gof=h.
> C.1. Ax1[ d(c(x1)) = c(x1) & c(d(x1)) = d(x1) ]
> The domain of the codomain of x1 is the codomain of x1,
> and the codomain of the domain of x1 is the domain of x1.
> C.2. Ax1x2x3x4 [ K(x1,x2,x3) & K(x1,x2,x4) --> x3=x4
> The composition of x1 with x2 is unique when it is defined.
> C.3. Ax1x2[ Ex3[ K(x1,x2,x3) <-> c(x1)=d(x2) ] ]
> The composition of x1 with x2 is defined if and only
> if the codomain of x1 is the domain of x2.
> C.4. Ax1x2x3[ K(x1,x2,x3) --> d(x3)=d(x1) & c(x3)=c(x2) ]
> If x3 is the composition of x1 with x2 then the
> domain of x3 is the domain of x1 and the codomain of x3 is the codomain of x2.
> C.5. Ax1[ K(d(x1),x1,x1) & K(x1,c(x1),x1)
> For any x1, the domain of x1 is a left identity
> for x1 under composition and the codomain is a right identity.
> C.6. Ax1x2x3x4x5x6x7 [ ( K(x1,x2,x4) & K(x2,x3,x5)
> & K(x1,x5,x6) & K(x4,x3,x7) ) --> x6=x7 ]
> Composition is associative when it is defined.
Phrased in more natural language:
C1. Every arrow is from an object to an object.
C2. Composition is a binary operator on arrows.
C3. The binary composition operator is partial, and defined only when
the argument-arrows chain.
C4. what you would expect about composing arrows that chain, except
for order-of-arguments; that may need restating;
K(f,g,h) as written here is gof=h, or g(f(x)) = h(x) ; you have to
apply f first.
C5. Every object is an identity arrow.
C6. Just as it already says, composition is associative (but partial).