How about calling ob a set?
I would suggest that you extend your presentation.
I would do something like the following:
(assuming a set based presentation (bleh!) and your Set predicate)
(assuming abreviations for pairs and triples)
Set(ob)
Set(mor)
Set(id)
Set(source)
Set(target)
Set(comp)
all p.( p e source -> some f,x.p=(f,x) )
all f,x.( (f,x) e source -> f e mor & x e ob )
all f,x1,x2.( (f,x1) e source & (f,x2) e source -> x1=x2 )
all p.( p e target -> some f,x.p=(f,x) )
all f,x.( (f,x) e target -> f e mor & x e ob )
all f,x1,x2.( (f,x1) e target & (f,x2) e target -> x1=x2 )
all f.( f e mor -> some x,y.((f,x) e source & (f,y) e target) )
all p.( p e comp -> some f,g,h.p=(f,g,h) )
all f,g,h.( (f,g,h) e comp -> f e mor & g e mor & h e mor )
all f,g,h1,h2.( (f,g,h1) e comp & (f,g,h2) e comp -> h1=h2 )
all f,g,h.(
(f,g,h) e comp -> some x,y,z.(
(f,z) e target
& (f,y) e source
& (g,y) e target
& (g,x) e source
& (h,z) e target
& (h,x) e source
)
)
all f,g,x,y,z.(
( (f,z) e target
& (f,y) e source
& (g,y) e target
& (g,x) e source
)-> some h.(
(f,g,h) e comp
& (h,z) e target
& (h,x) e source
)
)
all f,g,h,fg,gh,fgh1,fgh2.(
( (f,g,fg) e comp
& (fg,h,fgh1) e comp
& (g,h,gh) e comp
& (f,gh,fgh2) e comp
)-> fgh1=fgh2
)
all p.( p e id -> some x,f.p=(x,f) )
all x,f.( (x,f) e id -> x e ob & f e mor )
all x,f1,f2.( (x,f1) e id & (x,f2) e id -> f1=f2 )
all x.( x e ob -> some f.( (x,f) e id )
all x,f.(
(x,f) e id -> (
all g,h.((f,g,h) e comp -> g=h)
& all g,h.((g,f,h) e comp -> g=h)
)
)
all x,y.(
x e ob & y e ob -> some hom.(
Set(hom)
& all f.(f e hom == (f,x) e source & (f,y) e target)
)
)
If you insist on the objects being sets and the morphisms being
functions then:
all x.( x e ob -> Set(x) )
all f.(
f e mor -> (
Set(f)
& all p.( p e f -> some u,v.p=(u,v) )
& all u,v1,v2.( (u,v1) e f & (u,v2) e f -> v1=v2 )
& all x,y.(
(f,x) e source & (f,y) e target-> (
all u,v.( (u,v) e f -> u e x & v e y )
& all u.( u e x -> some v.(v e y & (u,v) e f) )
)
)
)
)
all f,g,h.(
(f,g,h) e comp -> all u,w.(
(u,w) e h == some v.((u,v) e g & (v,w) e f)
)
)
The above is rather restrictive though since ob is a set and thus
cannot be the class of objects for any category whose objects form
a proper class.
There are many of those.
It would be better for ob, mor, id, source, target and comp to be
predicate symbols.
Or to use a system that admits proper classes.
Or even better, a system specifically designed for category theory.