From rrosebru@mta.ca Mon Apr  2 15:41:26 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f32Htro18580
	for categories-list; Mon, 2 Apr 2001 14:55:53 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
From: Steve Stevenson <steve@cs.clemson.edu>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <15048.29190.127056.701441@merlin.cs.clemson.edu>
Date: Mon, 2 Apr 2001 08:35:18 -0400 (EDT)
To: categories@mta.ca
Subject: categories: Probability Theory
X-Mailer: VM 6.72 under 21.1 (patch 11) "Carlsbad Caverns" XEmacs Lucid
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 1

Good morning:

I'm looking for papers/books on category-theoretic approaches to
probability. On the AMS site, there are only two listed: one in 1980
and one in 1976. Are there more recent?

best,
steve


From rrosebru@mta.ca Mon Apr  2 15:42:04 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f32Ht7728464
	for categories-list; Mon, 2 Apr 2001 14:55:07 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
X-Authentication-Warning: triples.math.mcgill.ca: barr owned process doing -bs
Date: Mon, 2 Apr 2001 07:16:50 -0400 (EDT)
From: Michael Barr <barr@barrs.org>
X-Sender: barr@triples.math.mcgill.ca
To: Categories list <categories@mta.ca>
Subject: categories: Re: Looking for adjoints
In-Reply-To: <004c01c0b98d$173d6240$218d6c18@ivideon.com>
Message-ID: <Pine.LNX.4.10.10104020706300.7944-100000@triples.math.mcgill.ca>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 2

Here are a few interesting examples.

One of the earliest, although not called an adjoint, was the Bohr
compactification of an abelian group and the construction was similar to
that of the original adjoint functor theorem.

The earliest that was labelled such was Kan's Ex^\infty, which was a left
adjoint to the inclusion of (what are now called) Kan simplicial sets into
simplicial sets.

All Galois connections are contravariant adjunctions.

The contravariant power set functor is adjoint to itself on the left.
Hom(A,PB) = Hom(B,PA).  Valid in any topos.

Also valid in toposes, for any f: A --> B, the induced inverse image
function f*: Sub B --> Sub A has both a left adjoint (the familiar direct
image) and a right adjoint (not familiar), considering the subobject
lattices as categories.

And many, many more.





From rrosebru@mta.ca Mon Apr  2 21:47:03 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3305q521249
	for categories-list; Mon, 2 Apr 2001 21:05:52 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Date: Mon, 2 Apr 2001 11:42:50 -0700 (PDT)
From: mjhealy@redwood.rt.cs.boeing.com (Michael Healy 425-865-3123)
Message-Id: <200104021842.LAA10571@lilith.rt.cs.boeing.com>
To: categories@mta.ca
Subject: categories: Re: Probability Theory
X-Sun-Charset: US-ASCII
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 3


> 
> I'm looking for papers/books on category-theoretic approaches to
> probability. On the AMS site, there are only two listed: one in 1980
> and one in 1976. Are there more recent?
> 

Steve and all,

Here's one I've been looking at:

H. T. Nguyen & N. T. Nguyen (2000).  On Chu Spaces in Uncertainty Analysis, 
International Journal of Intelligent Systems, vol. 15, 425-440.

I'm sending to  categories  also because I wanted to ask about this in 
the context of combining probabilistic analysis with domain theory, 
topology and logic in categories.

Thanks,
Mike

--

===========================================================================
                                         e	     
Michael J. Healy                          A
                                  FA ----------> GA
(425)865-3123                     |              |
FAX(425)865-2964                  |              |
                               Ff |              | Gf
c/o The Boeing Company            |              |   
PO Box 3707  MS 7L-66            \|/            \|/
Seattle, WA 98124-2207            '              '
USA                               FB ----------> GB
-or for priority mail-                   e             "I'm a natural man."
2760 160th Ave SE  MS 7L-66               B
Bellevue, WA 98008
USA

michael.j.healy@boeing.com          -or-            mjhealy@u.washington.edu

============================================================================



From rrosebru@mta.ca Tue Apr  3 15:23:46 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f33Had607827
	for categories-list; Tue, 3 Apr 2001 14:36:39 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Subject: categories: Re: Looking for adjoints
To: categories@mta.ca
Date: Mon, 2 Apr 2001 22:47:04 +0100 (BST)
X-Mailer: ELM [version 2.5 PL3]
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <E14kCAC-0002li-00@plover.dpmms.cam.ac.uk>
From: Tom Leinster <T.Leinster@dpmms.cam.ac.uk>
X-Scanner: exiscan *14kCAA-0002TC-00*DMkDUwjrCXU* http://duncanthrax.net/exiscan/
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 4


Here's an adjunction from which various basic results in category theory can
be read off.  (Useful, but somewhat inward-looking...)

Fix a small category C, and consider the forgetful functor 

U: [C^op, Set] ---> [ob C, Set].  

This has a left adjoint F, which can easily be written down explicitly (and
whose existence is also guaranteed because it's a Kan extension).  Hence U
preserves limits - and this is part of what's meant by the statement that
limits are computed pointwise in a presheaf category.  Moreover, the
adjunction is monadic, from which it follows that

(a) U creates limits (which is the rest of what's meant by the "computed
pointwise" slogan), and

(b) every presheaf is the colimit of representables (using the fact that
every algebra for a monad is a coequalizer of free algebras).

Dually, U has a right adjoint, so the dual results also hold. 

Tom


> From: Jean-Pierre Marquis <Jean-Pierre.Marquis@UMontreal.CA>
> To: <categories@mta.ca>
> 
> I would like to have a large pool of examples of adjoint functors in as many
> different fields of mathematics as possible.  I am looking for the "nicest",
> in whatever sense you can think of this expression (e.g. unexpected, their
> existence is equivalent to a classical theorem, etc), cases in various
> fields.
> 
> References or examples anyone?  (Besides the standard ones found in Mac
> Lane, etc.)
> 
> Thank you, 
> Jean-Pierre Marquis
> 
> 
> 



From rrosebru@mta.ca Tue Apr  3 15:38:02 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f33I0Yg22087
	for categories-list; Tue, 3 Apr 2001 15:00:34 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Message-ID: <00ab01c0bc18$29692ed0$aec488c1@math.ist.utl.pt>
From: "Amilcar Sernadas" <acs@math.ist.utl.pt>
To: <categories@mta.ca>
References: <15048.29190.127056.701441@merlin.cs.clemson.edu>
Subject: categories: Re: Probability Theory
Date: Tue, 3 Apr 2001 09:29:06 +0100
MIME-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2314.1300
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300
X-MIME-Autoconverted: from 8bit to quoted-printable by bebop.math.ist.utl.pt id f339VPr00667
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by mailserv.mta.ca id f338Vgb20028
Sender: cat-dist@mta.ca
Precedence: bulk
Status: RO
X-Status: 
X-Keywords:
X-UID: 5

----- Original Message -----
From: Steve Stevenson <steve@cs.clemson.edu>
To: <categories@mta.ca>
Sent: Monday, April 02, 2001 1:35 PM
Subject: categories: Probability Theory


> I'm looking for papers/books on category-theoretic approaches to
> probability. On the AMS site, there are only two listed: one in 1980
> and one in 1976. Are there more recent?

These papers and PhD thesis should be interesting (by decreasing order of
abstraction/generality):

C. Hermida and P. Mateus. Internal paracategories. Preprint, Section of
Computer Science, Department of Mathematics, Instituto Superior Técnico,
1049-001 Lisboa, Portugal, 2000. Submitted for publication.
Get a preprint:
http://www.cs.math.ist.utl.pt/ftp/pub/MateusP/00-CM-paracat.ps

L. Schröder and P. Mateus. Universal aspects of probabilistic automata.
Preprint, Section of Computer Science, Department of Mathematics, Instituto
Superior Técnico, 1049-001 Lisboa, Portugal, 1999. Submitted for
publication.
Get a preprint:
http://www.cs.math.ist.utl.pt/ftp/pub/MateusP/99-SM-precat2.ps

P. Mateus. Interconnection of Probabilistic Systems. PhD thesis, IST,
Universidade Técnica de Lisboa, 2000. Supervised by A. Sernadas and C.
Sernadas.
Get a preprint:
http://www.cs.math.ist.utl.pt/ftp/pub/MateusP/00-M-PhDthesis.ps

P. Mateus, A. Sernadas, and C. Sernadas. Precategories for combining
probabilistic automata. Electronic Notes in Theoretical Computer Science,
29, 1999. Early version presented at FIREworks Meeting, Magdeburg, May
15-16, 1998. Presented at CTCS'99, Edinburgh, September 10-12, 1999.
http://www.elsevier.nl/cas/tree/store/tcs/free/entcs/store/tcs29/tcs29016.ps

P. Mateus, M. Cabral Morais, C. Nunes, A. Pacheco, A. Sernadas, and C.
Sernadas. Randomly timed automata. Preprint, Section of Computer Science,
Department of Mathematics, Instituto Superior Técnico, 1049-001 Lisboa,
Portugal, March 2000. Submitted for publication.
Get a preprint:
http://www.cs.math.ist.utl.pt/ftp/pub/SernadasA/00-MMNPSS-rta.ps

P. Mateus, A. Sernadas, and C. Sernadas. Realization of probabilistic
automata: Categorical approach. In Didier Bert and Christine Choppy,
editors, Recent Trends in Algebraic Development Techniques - Selected
Papers, volume 1827 of Lecture Notes in Computer Science, pages 237--251.
Springer-Verlag, 2000.
Get a preprint:
http://www.cs.math.ist.utl.pt/ftp/pub/SernadasA/99-MSS-probreal.ps

++++++++++++++++++++++++++++++++++++++++++++++++++
Amilcar Sernadas
Departamento de Matematica
Instituto Superior Tecnico
Av. Rovisco Pais, 1049-001 Lisboa, PORTUGAL
tel: 351-21-8417150
fax: 351-21-8417598
e-mail: acs@math.ist.utl.pt
www: http://www.cs.math.ist.utl.pt/cs/acs.html
++++++++++++++++++++++++++++++++++++++++++++++++++



From rrosebru@mta.ca Wed Apr  4 21:42:07 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f34NxH811800
	for categories-list; Wed, 4 Apr 2001 20:59:17 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
From: Peter McBurney <P.J.McBurney@csc.liv.ac.uk>
Reply-To: p.j.mcburney@csc.liv.ac.uk
To: categories@mta.ca
Subject: categories: job: @ Liverpool: Agent Communication Languages & Protocols
Date: Wed, 4 Apr 2001 16:08:46 +0100
X-Mailer: KMail [version 1.0.28]
Content-Type: text/plain
MIME-Version: 1.0
Message-Id: <0104041610340E.12177@peter.staff.csc.liv.ac.uk>
Content-Transfer-Encoding: 8bit
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 6

Apologies for multiple postings. 


The UNIVERSITY of LIVERPOOL, UK - DEPARTMENT of COMPUTER SCIENCE

RESEARCH POST in AGENT COMMUNICATION LANGUAGES & PROTOCOLS

A researcher is required to work on a three year research project in
the use of temporal and modal logics for the specification and
verification of agent communication languages and protocols. The
project will be undertaken within the Agent ART group in Department of
Computer Science at the University of Liverpool (UK), under the
supervision of Prof Mike Wooldridge and Dr Simon Parsons. The project
will provide an opportunity to carry out research on a topic of much
current interest, in a highly active and rapidly expanding group.

Informal enquiries may be sent to:

	 Prof M Wooldridge (mailto:M.J.Wooldridge@csc.liv.ac.uk).

Further particulars and details of the application procedure may be
requested from:

	  Director of Personnel
	  University of Liverpool
	  Liverpool L69 3BX, United Kingdom

	  tel:     (+44 151) 794 2210     [24 hour answerphone]
	  mailto:  jobs@liv.ac.uk
	  WWW:     http://www.liv.ac.uk/

** PLEASE QUOTE REFERENCE B/451 
** CLOSING DATE FOR APPLICATIONS 27 APRIL 2001	
 
--
Mike Wooldridge                      http://www.csc.liv.ac.uk/~mjw/
Department of Computer Science       tel    (+44 151) 794 3667
University of Liverpool              fax    (+44 151) 794 3715
Liverpool L69 7ZF, United Kingdom    mailto:M.J.Wooldridge@csc.liv.ac.uk
                        

 


From rrosebru@mta.ca Fri Apr  6 12:53:49 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f36F48S00218
	for categories-list; Fri, 6 Apr 2001 12:04:08 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
From: david carlton <carlton@math.stanford.edu>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-ID: <15052.54956.183609.916620@jackfruit.Stanford.EDU>
Date: Thu, 5 Apr 2001 13:33:48 -0700 (PDT)
To: categories@mta.ca
Subject: categories: strict n-categories, equivalences
X-Mailer: VM 6.72 under 21.1 "20 Minutes to Nikko" XEmacs Lucid (patch 2)
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 7

I'm trying to figure out the relation between the following notions of 
"equivalence":

We define a strict n-category to be a category enriched in strict
(n-1)-categories.  Then we can make a recursive definition of
"equivalence" as follows: we say that an arrow f: x -> y is an
equivalence if there exists an arrow g: y -> x such that there exist
arrows alpha: fg -> 1_x and beta: gf -> 1_y that are also
equivalences.

Also, we might want to say that a (strict) functor F: C -> D of strict
n-categories is an "equivalence" if:

1) For all objects d in D, there exists an object c of C and an
   equivalence F(c) -> d;
2) For all objects c, c' in C, the map Hom_C(c,c') -> Hom_D(F(c),F(c'))
   (which is a functor of (n-1)-categories) is an equivalence.

(To complete these definitions, I should also say that an arrow in a
1-category is an equivalence iff it's an isomorphism and that a
functor of 0-categories is an equivalence iff it's a bijection.)

Then, my main question is:

Q: Is it the case that an arrow f: x -> y is an equivalence if and only
   if, for all z, the Yoneda functor Hom(z,x) -> Hom(z,y) induced by f
   is an equivalence?

I think and hope that the answer is true, but I'm certainly not 100%
confident; it seems to me that its proof would involve a sufficiently
messy (and picky) simultaneous induction that I'd be quite happy if
somebody else had already worked this out.  If it's not true, are
there any other theorems along this line with improved definitions of
"equivalence" (either on the arrow side or the functor side)?

One warning: my terminology might be badly chosen, especially for
functors, because I don't think that it's the case that, if one
constructs the strict (n+1)-category of all n-categories, that the
functors that I'm calling equivalences are all equivilances as arrows
in that category.

In general, are there any good references for strict n-categories?
(E.g. one giving the details of the construction of nCat.)  I'm not as
conversant with the literature of category theory as I should be, and
I'd like to avoid reinventing the wheel more than necessary.

thanks,
david carlton
carlton@math.stanford.edu


From rrosebru@mta.ca Fri Apr  6 15:43:45 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f36I5DV26188
	for categories-list; Fri, 6 Apr 2001 15:05:13 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
User-Agent: Microsoft-Outlook-Express-Macintosh-Edition/5.02.2022
Date: Thu, 05 Apr 2001 12:59:11 +1000
Subject: categories: Re: Looking for adjoints
From: Michael Batanin <mbatanin@ics.mq.edu.au>
To: <categories@mta.ca>
Message-ID: <B6F21C9F.3A2%mbatanin@math.mq.edu.au>
In-Reply-To: <Pine.LNX.4.10.10104020706300.7944-100000@triples.math.mcgill.ca>
Mime-version: 1.0
Content-type: text/plain; charset="US-ASCII"
Content-transfer-encoding: 7bit
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 8

This is just a small correction to Michael Barr message. The Kan's
Ex^{\infty} is not a left adjoint to the inclusion of Kan simplicial sets
into simplicial sets. In the original paper by Kan "On c.s.s. complexes"
there is no mention about it being adjoint.
Yet, the following  is true

  Kan(Ex^{\infty}X,Y) is homotopy equivalent to Ssets(X,Y).

So it is some sort of homotopy adjunction.


Michael Batanin.

>on 2/4/01 9:16 PM, Michael Barr at barr@barrs.org wrote:


> The earliest that was labelled such was Kan's Ex^\infty, which was a left
> adjoint to the inclusion of (what are now called) Kan simplicial sets into
> simplicial sets.
> 




From rrosebru@mta.ca Sat Apr  7 13:06:21 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f37FSDD22640
	for categories-list; Sat, 7 Apr 2001 12:28:13 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Message-ID: <3ACCCF90.546690F7@it-c.dk>
Date: Thu, 05 Apr 2001 22:03:28 +0200
From: Mads Tofte <tofte@it-c.dk>
Organization: IT University of Copenhagen
X-Mailer: Mozilla 4.72 [en] (X11; U; Linux 2.2.14-5.0 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: categories@mta.ca
Subject: categories: jobs: 13 positions at IT University of Copenhagen
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 9

[This job announcement is being sent to mailing lists that are read by
 researchers who work on aspects of information technology relevant to
 the IT University of Copenhagen. Feel free to circulate it!

 Apologies if you receive multiple copies.

 I'll be very happy to provide further information.

 Sincerely,

 
 Mads Tofte (tofte@it-c.dk)
]


The IT University of Copenhagen was established by the Danish Ministry
of Research in 1999. It is a graduate scool for research and
research-based teaching in Information Technology.

During its less that two years of existence, the IT University of
Copenhagen has grown to employ 20 scientific staff at the level of
assistant professor or higher, 20 ph.d.-students, some 700 students,
and a teaching network of a further 90 teachers who are either
part-time staff at the ITU or permanent staff of four nearby
universities, namely the University of Copenhagen, Copenhagen Business
School, The Technical University of Denmark (Lyngby), and Roskilde
University.

The four research departments of the IT University of Copenhagen
currently have 13 vacant positions as assistant professor or associate
professor. We welcome applications within the following areas:
mobility, media and communication, software technology, software
applications, theoretical computer science and virtual reality.

The four research departments are:

    * The Department of Design and Use of IT
    * The Department of Digital Aesthetics and Communication
    * The Department of Innovation
    * The Theory Department

The full job announcement may be found at www.it-c.dk/eng (look under
Vacancies).

At www.it-c.dk/eng one may also register on an electronic news service
which provides information about future job announcements and
scholarships.


Sincerely,


Mads Tofte
Director of the IT University of Copenhagen


From rrosebru@mta.ca Mon Apr  9 20:12:16 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f39MQWp29141
	for categories-list; Mon, 9 Apr 2001 19:26:32 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Message-ID: <3AD197A2.7C5CF426@di.epfl.ch>
Date: Mon, 09 Apr 2001 13:06:10 +0200
From: Krzysztof Worytkiewicz <worytkie@di.epfl.ch>
X-Mailer: Mozilla 4.73 [en] (X11; U; Linux 2.2.16-3 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: categories@mta.ca
Subject: categories: Terminology
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 10

Dear Categories,

Is it  established terminology  to call *injective* a faithful functor
which is injective (in the usual sense) on objects ?

Cheers, Krzysztof



From rrosebru@mta.ca Thu Apr 12 16:43:43 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3CIpus11314
	for categories-list; Thu, 12 Apr 2001 15:51:56 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
From: Martin Escardo <m.escardo@cs.bham.ac.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Date: Tue, 10 Apr 2001 15:28:00 +0100 (BST)
To: categories@mta.ca
Subject: categories: A universal characterization of the unit interval
X-Mailer: VM 6.43 under 20.4 "Emerald" XEmacs  Lucid
Message-ID: <15059.6003.377874.445195@henry.cs.bham.ac.uk>
Sender: cat-dist@mta.ca
Precedence: bulk
Status: RO
X-Status: 
X-Keywords:
X-UID: 11

The following extended abstract is now available on the Web.


     A universal characterization of the closed Euclidean interval

  ABSTRACT. We propose a notion of interval object in a category with
  finite products, providing a universal property for closed and bounded
  real line segments. The universal property gives rise to an analogue
  of primitive recursion for defining computable functions on the
  interval. We use this to define basic arithmetic operations and to
  verify equations between them. We test the notion in categories of
  interest. In the category of sets, any closed and bounded interval of
  real numbers is an interval object.  In the category of topological
  spaces, the interval objects are closed and bounded intervals with the
  Euclidean topology. We also prove that an interval object exists in
  any elementary topos with natural numbers object.


     http://www.cs.bham.ac.uk/~mhe/papers/lics2001-revised.ps 

Best wishes,

Martin Escardo & Alex Simpson
--
P.s. A draft full version with proofs is available on-line at

  http://www.dcs.ed.ac.uk/home/als/Research/interval.ps 






From rrosebru@mta.ca Fri Apr 13 15:08:20 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3DHL7330961
	for categories-list; Fri, 13 Apr 2001 14:21:07 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Date: Fri, 13 Apr 2001 14:17:10 -0300 (ADT)
From: Michael Barr <barr@barrs.org>
To: categories <categories@mta.ca>
Subject: categories: Beta version of new diagram package
Message-ID: <Pine.OSF.4.10.10104131415040.21540-100000@mailserv.mta.ca>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Sender: cat-dist@mta.ca
Precedence: bulk
Status: RO
X-Status: 
X-Keywords:
X-UID: 12

I have decided to build a new diagram package as a front end to XY-pic. It
is in many ways like my old one, but has much of the power of XY, with a
syntax that is more familiar to people who have used the old one.  This
doubtless contains a number of errors and I would appreciate hearing about
them.  Here is the macro file, diagxy and a document package diaxydoc
follows - it will compile under latex 2e.  I have not tested this package
in plain tex, but I believe it will work.  As for AMS tex, well good luck.  
It has been tried with both the old and new latex.




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\input xy
\xyoption{arrow}
\xyoption{curve}

\newdir{ >}{{ }*!/-9pt/@{>}}
\newdir{< }{!/9pt/@{<}*{ }}

\newbox\label
\newdimen\high
\newdimen\deep
\newdimen\ul
\newcount\deltax
\newcount\deltay
\newcount\xend
\newcount\yend
\newcount\xpos
\newcount\ypos
\newcount\default \default=500
\newif\ifat
\newcount\atcode \atcode=\catcode`\@

\catcode`\@=11
\ul=.01em
\X@xbase=\ul
\Y@ybase=\ul
\let\ifnextchar\@ifnextchar
\catcode`\@=12

\let\bfig\xy
\let\efig\endxy

\def\car#1#2\nil{#1}

\def\morphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8`#9]{%
\xend#1\advance \xend by #5%
\yend#2\advance \yend by #6%
\def\next{#4}%
\ifx\next\empty \atfalse%
\else \def\next{\car#4\nil}%
   \if\next@\attrue \else \atfalse \fi%
\fi%
\ifat
 \def\next{#4}%
 \ifx\next\empty%
  \POS(#1,#2)*+{#7}\ar#4 (\xend,\yend)*+{#8}%
 \else \if#3l%
  \ifnum #6>0%
   \POS(#1,#2)*+{#7}\ar#4^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar#4_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3m%
   \setbox\label=\hbox{\kern .5pt $\labelstyle #9$\kern .5pt}%
   \high=\ht\label \advance\high by 1pt \ht\label=\high%
   \deep=\dp\label \advance\deep by 1pt \dp\label=\deep%
   \POS(#1,#2)*+{#7}\ar#4|-{\box\label} (\xend,\yend)*+{#8}%
 \else \if#3r%
  \ifnum #6<0%
   \POS(#1,#2)*+{#7}\ar#4^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar#4_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3a%
  \ifnum #5>0%
   \POS(#1,#2)*+{#7}\ar#4^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar#4_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3b%
  \ifnum #5<0%
   \POS(#1,#2)*+{#7}\ar#4^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar#4_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \fi\fi\fi\fi\fi\fi%
\else%
\def\next{#4}%
 \ifx\next\empty%
  \POS(#1,#2)*+{#7}; (\xend,\yend)*+{#8}%
 \else \def\next{#4}%
  \ifx\next\empty%
   \POS(#1,#2)*+{#7}\ar (\xend,\yend)*+{#8}%
 \else \if#3l%
  \ifnum #6>0%
   \POS(#1,#2)*+{#7}\ar@{#4}^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar@{#4}_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3m%
   \setbox\label=\hbox{\kern .5pt $\labelstyle #9$\kern .5pt}%
   \high=\ht\label \advance\high by 1pt \ht\label=\high%
   \deep=\dp\label \advance\deep by 1pt \dp\label=\deep%
   \POS(#1,#2)*+{#7}\ar@{#4}|-{\box\label} (\xend,\yend)*+{#8}%
 \else \if#3r%
  \ifnum #6<0%
   \POS(#1,#2)*+{#7}\ar@{#4}^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar@{#4}_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3a%
  \ifnum #5>0%
   \POS(#1,#2)*+{#7}\ar@{#4}^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar@{#4}_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3b%
  \ifnum #5<0%
   \POS(#1,#2)*+{#7}\ar@{#4}^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar@{#4}_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \fi\fi\fi\fi\fi\fi\fi%
\fi\ignorespaces}%





\def\location(#1,#2){\xpos=#1\ypos=#2\ignorespaces}
\def\squareplacements|#1`#2`#3`#4|{%
    \def\xa{#1}\def\xb{#2}\def\xc{#3}\def\xd{#4}\ignorespaces}
\def\sizes<#1,#2>{\deltax=#1\deltay=#2\ignorespaces}
\def\squaredata[#1`#2`#3`#4;#5`#6`#7`#8]{%
    \def\nodea{#1}\def\nodeb{#2}\def\nodec{#3}\def\noded{#4}%
    \def\labela{#5}\def\labelb{#6}\def\labelc{#7}\def\labeld{#8}\ignorespaces}

\def\squarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{%
\location(#1)%
\squareplacements|#2|%
\sizes<#7>%
\squaredata[#8]%
\morphism(\xpos,\ypos)|\xd|/#6/<\deltax,0>[\nodec`\noded`\labeld]
\advance \ypos by \deltay
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]
 \advance \xpos by \deltax
\morphism(\xpos,\ypos)|\xc|/#5/<0,-\deltay>[\nodeb`\noded`\labelc]
\ignorespaces}

\def\square{\ifnextchar({\squarep}{\squarep(0,0)}}
\def\squarep(#1){\ifnextchar|{\squarepp(#1)}{\squarepp(#1)|a`l`r`b|}}
\def\squarepp(#1)|#2|{\ifnextchar/{\squareppp(#1)|#2|}%
    {\squareppp(#1)|#2|/>`>`>`>/}}
\def\squareppp(#1)|#2|/#3`#4`#5`#6/{%
    \ifnextchar<{\squarepppp(#1)|#2|/#3`#4`#5`#6/}%
    {\squarepppp(#1)|#2|/#3`#4`#5`#6/<\default,\default>}}

\def\triplacements|#1`#2`#3|{\def\xa{#1}\def\xb{#2}\def\xc{#3}}
\def\tridata[#1`#2`#3;#4`#5`#6]{%
    \def\nodea{#1}\def\nodeb{#2}\def\nodec{#3}%
    \def\labela{#4}\def\labelb{#5}\def\labelc{#6}}

\def\ptrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]
\advance\xpos by \deltax
\morphism(\xpos,\ypos)|\xc|/#5/<-\deltax,-\deltay>[\nodeb`\nodec`\labelc]
\ignorespaces}

\def\ptriangle{\ifnextchar({\ptrianglep}{\ptrianglep(0,0)}}
\def\ptrianglep(#1){\ifnextchar|{\ptrianglepp(#1)}{\ptrianglepp(#1)|a`l`r|}}
\def\ptrianglepp(#1)|#2|{\ifnextchar/{\ptriangleppp(#1)|#2|}%
    {\ptriangleppp(#1)|#2|/>`>`>/}}
\def\ptriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\ptrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\ptrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}

\def\qtrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]
\advance\xpos by \deltax
\morphism(\xpos,\ypos)|\xc|/#5/<0,-\deltay>[\nodeb`\nodec`\labelc]
\ignorespaces}

\def\qtriangle{\ifnextchar({\qtrianglep}{\qtrianglep(0,0)}}
\def\qtrianglep(#1){\ifnextchar|{\qtrianglepp(#1)}{\qtrianglepp(#1)|a`l`r|}}
\def\qtrianglepp(#1)|#2|{\ifnextchar/{\qtriangleppp(#1)|#2|}%
    {\qtriangleppp(#1)|#2|/>`>`>/}}
\def\qtriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\qtrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\qtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}

\def\dtrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]
\advance\ypos by \deltay\advance \xpos by \deltax
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]
\ignorespaces}

\def\dtriangle{\ifnextchar({\dtrianglep}{\dtrianglep(0,0)}}
\def\dtrianglep(#1){\ifnextchar|{\dtrianglepp(#1)}{\dtrianglepp(#1)|l`r`b|}}
\def\dtrianglepp(#1)|#2|{\ifnextchar/{\dtriangleppp(#1)|#2|}%
    {\dtriangleppp(#1)|#2|/>`>`>/}}
\def\dtriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\dtrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}

\def\btrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]
\advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xa|/#3/<0,-\deltay>[\nodea`\nodeb`\labela]
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]
\ignorespaces}

\def\btriangle{\ifnextchar({\btrianglep}{\btrianglep(0,0)}}
\def\btrianglep(#1){\ifnextchar|{\btrianglepp(#1)}{\btrianglepp(#1)|l`r`b|}}
\def\btrianglepp(#1)|#2|{\ifnextchar/{\btriangleppp(#1)|#2|}%
    {\btriangleppp(#1)|#2|/>`>`>/}}
\def\btriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\btrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\btrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}

\def\Atrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
{\multiply\deltax by 2%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]}%
\advance\ypos by \deltay\advance\xpos by \deltax
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]
\ignorespaces}

\def\Atriangle{\ifnextchar({\Atrianglep}{\Atrianglep(0,0)}}
\def\Atrianglep(#1){\ifnextchar|{\Atrianglepp(#1)}{\Atrianglepp(#1)|l`r`b|}}
\def\Atrianglepp(#1)|#2|{\ifnextchar/{\Atriangleppp(#1)|#2|}%
    {\Atriangleppp(#1)|#2|/>`>`>/}}
\def\Atriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\Atrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\Atrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}

\def\Vtrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]
{\multiply\deltax by 2%
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]%
\global\advance\xpos by \deltax}%
\morphism(\xpos,\ypos)|\xc|/#5/<-\deltax,-\deltay>[\nodeb`\nodec`\labelc]
\ignorespaces}

\def\Vtriangle{\ifnextchar({\Vtrianglep}{\Vtrianglep(0,0)}}
\def\Vtrianglep(#1){\ifnextchar|{\Vtrianglepp(#1)}{\Vtrianglepp(#1)|a`l`b|}}
\def\Vtrianglepp(#1)|#2|{\ifnextchar/{\Vtriangleppp(#1)|#2|}%
    {\Vtriangleppp(#1)|#2|/>`>`>/}}
\def\Vtriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\Vtrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\Vtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}

\def\Ctrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance \ypos by \deltay
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,-\deltay>[\nodeb`\nodec`\labelc]
\advance\ypos by \deltay \advance \xpos by \deltax
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]
\multiply\deltay by 2%
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]%
\ignorespaces}

\def\Ctriangle{\ifnextchar({\Ctrianglep}{\Ctrianglep(0,0)}}
\def\Ctrianglep(#1){\ifnextchar|{\Ctrianglepp(#1)}{\Ctrianglepp(#1)|a`r`b|}}
\def\Ctrianglepp(#1)|#2|{\ifnextchar/{\Ctriangleppp(#1)|#2|}%
    {\Ctriangleppp(#1)|#2|/>`>`>/}}
\def\Ctriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\Ctrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\Ctrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}

\def\Dtrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance\xpos by \deltax \advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xc|/#5/<-\deltax,-\deltay>[\nodeb`\nodec`\labelc]
\advance\xpos by -\deltax \advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodeb`\labelb]%
\multiply \deltay by 2
\morphism(\xpos,\ypos)|\xa|/#3/<0,-\deltay>[\nodea`\nodec`\labela]%
\ignorespaces}

\def\Dtriangle{\ifnextchar({\Dtrianglep}{\Dtrianglep(0,0)}}
\def\Dtrianglep(#1){\ifnextchar|{\Dtrianglepp(#1)}{\Dtrianglepp(#1)|a`l`b|}}
\def\Dtrianglepp(#1)|#2|{\ifnextchar/{\Dtriangleppp(#1)|#2|}%
    {\Dtriangleppp(#1)|#2|/>`>`>/}}
\def\Dtriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\Dtrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\Dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}

\def\tripairplacements|#1`#2`#3`#4`#5|{\def\xa{#1}\def\xb{#2}\def\xc{#3}%
\def\xd{#4}\def\xe{#5}}
\def\tripairdata[#1`#2`#3`#4;#5`#6`#7`#8`#9]{%
 \def\nodea{#1}\def\nodeb{#2}\def\nodec{#3}\def\noded{#4}%
 \def\labela{#5}\def\labelb{#6}\def\labelc{#7}\def\labeld{#8}\def\labele{#9}}


\def\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
\location(#1)%
\tripairplacements|#2|%
\sizes<#8>%
\tripairdata[#9]%
\morphism(\xpos,\ypos)|\xd|/#6/<\deltax,0>[\nodeb`\nodec`\labeld]%
\advance\xpos by \deltax
\morphism(\xpos,\ypos)|\xe|/#7/<\deltax,0>[\nodec`\noded`\labele]%
\advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,-\deltay>[\nodea`\noded`\labelc]%
\ignorespaces}

\def\Atrianglepair{\ifnextchar({\Atrianglepairp}{\Atrianglepairp(0,0)}}%
\def\Atrianglepairp(#1){\ifnextchar|{\Atrianglepairpp(#1)}%
{\Atrianglepairpp(#1)|l`m`r`b`b|}}%
\def\Atrianglepairpp(#1)|#2|{\ifnextchar/{\Atrianglepairppp(#1)|#2|}%
    {\Atrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
\def\Atrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
    \ifnextchar<{\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
    {\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%

\def\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
\location(#1)%
\tripairplacements|#2|%
\sizes<#8>%
\tripairdata[#9]%
\advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,-\deltay>[\nodea`\noded`\labelc]%
\advance\xpos by \deltax
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,0>[\nodeb`\nodec`\labelb]%
\morphism(\xpos,\ypos)|\xd|/#6/<0,-\deltay>[\nodeb`\noded`\labeld]%
\advance\xpos by \deltax
\morphism(\xpos,\ypos)|\xe|/#7/<-\deltax,-\deltay>[\nodec`\noded`\labele]%
\ignorespaces}

\def\Vtrianglepair{\ifnextchar({\Vtrianglepairp}{\Vtrianglepairp(0,0)}}%
\def\Vtrianglepairp(#1){\ifnextchar|{\Vtrianglepairpp(#1)}%
{\Vtrianglepairpp(#1)|a`a`l`m`r|}}%
\def\Vtrianglepairpp(#1)|#2|{\ifnextchar/{\Vtrianglepairppp(#1)|#2|}%
    {\Vtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
\def\Vtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
    \ifnextchar<{\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
    {\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%

\def\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
\location(#1)%
\tripairplacements|#2|%
\sizes<#8>%
\tripairdata[#9]%
\advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xe|/#7/<0,-\deltay>[\nodec`\noded`\labele]%
\advance\xpos by -\deltax
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]%
\morphism(\xpos,\ypos)|\xd|/#6/<\deltax,-\deltay>[\nodeb`\noded`\labeld]%
\advance\ypos by \deltay
\advance\xpos by \deltax
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]%
\ignorespaces}

\def\Ctrianglepair{\ifnextchar({\Ctrianglepairp}{\Ctrianglepairp(0,0)}}%
\def\Ctrianglepairp(#1){\ifnextchar|{\Ctrianglepairpp(#1)}%
{\Ctrianglepairpp(#1)|l`r`m`l`r|}}%
\def\Ctrianglepairpp(#1)|#2|{\ifnextchar/{\Ctrianglepairppp(#1)|#2|}%
    {\Ctrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
\def\Ctrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
    \ifnextchar<{\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
    {\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%

\def\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
\location(#1)%
\tripairplacements|#2|%
\sizes<#8>%
\tripairdata[#9]%
\advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]%
\morphism(\xpos,\ypos)|\xd|/#6/<0,-\deltay>[\nodeb`\noded`\labeld]%
\advance\ypos by \deltay
\morphism(\xpos,\ypos)|\xa|/#3/<0,-\deltay>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]%
\advance\ypos by -\deltay
\advance\xpos by \deltax
\morphism(\xpos,\ypos)|\xe|/#7/<-\deltax,-\deltay>[\nodec`\noded`\labele]%
\ignorespaces}

\def\Dtrianglepair{\ifnextchar({\Dtrianglepairp}{\Dtrianglepairp(0,0)}}%
\def\Dtrianglepairp(#1){\ifnextchar|{\Dtrianglepairpp(#1)}%
{\Dtrianglepairpp(#1)|l`r`m`l`r|}}%
\def\Dtrianglepairpp(#1)|#2|{\ifnextchar/{\Dtrianglepairppp(#1)|#2|}%
    {\Dtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
\def\Dtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
    \ifnextchar<{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
    {\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%
\catcode`\@=\atcode

\def\place(#1,#2)[#3]{\POS(#1,#2)*+{#3}}

\def\pullback#1]#2]{\square#1]\trident#2]}
\def\tridentdata[#1;#2`#3`#4]{\def\nodee{#1}\def\labele{#2}%
   \def\labelf{#3}\def\labelg{#4}}
\def\trident{\ifnextchar|{\tridentp}{\tridentp|a`m`b|}}

\def\tridentp|#1|{\ifnextchar/{\tridentpp|#1|}{\tridentpp|#1|/{>}`{>}`{>}/}}

\def\tridentpp|#1|/#2/{\ifnextchar<{\tridentppp|#1|/#2/}%
  {\tridentppp|#1|/#2/<500,500>}}

\def\tridentppp|#1`#2`#3|/#4`#5`#6/<#7,#8>[#9]{%
\tridentdata[#9]%
\advance \xpos by -\deltax
\advance \xpos by -#7\advance \ypos by #8%
{\advance\deltax by #7%
\morphism(\xpos,\ypos)|#1|/#4/<\deltax,-#8>[\nodee`\nodeb`\labele]}%
\morphism(\xpos,\ypos)|#2|/#5/<#7,-#8>[\nodee`\nodea`\labelf]%
\advance\deltay by #8%
\morphism(\xpos,\ypos)|#3|/#6/<#7,-\deltay>[\nodee`\nodec`\labelg]}







From rrosebru@mta.ca Fri Apr 13 15:34:00 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3DHleX22459
	for categories-list; Fri, 13 Apr 2001 14:47:40 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Date: Fri, 13 Apr 2001 14:24:09 -0300 (ADT)
From: Michael Barr <barr@barrs.org>
To: categories <categories@mta.ca>
Subject: categories: documentation for new diagram package
Message-ID: <Pine.OSF.4.10.10104131421540.21540-100000@mailserv.mta.ca>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Sender: cat-dist@mta.ca
Precedence: bulk
Status: RO
X-Status: 
X-Keywords:
X-UID: 13

%%
%%  documentation for diagxy

\documentclass{article}
 \input diagxy
 \xyoption{curve}
\begin{document}
\def\xypic{\hbox{\rm\Xy-pic}}

\title{A new diagram package}
\author{Michael Barr}
 \maketitle

\section*{Why a new diagram package?}

This started when a user of my old package, diagram, wrote to ask me if
dashed lines were possible.  The old package had dashed lines for
horizontal and vertical arrows, but not any other direction.  The reason
for this was that \LaTeX\ used rules for horizontal and vertical arrows,
but had its own fonts for other directions.  While rules could be made
any size, the smallest lines in other directions were too long for
decent looking dashes.  Presumably, Lamport was worried about compile
time and file size if the lines were too short, considerations that have
diminished over the years since.  Also arrows could be drawn in only 48
different directions, which is limiting.  My macros were not very well
implemented for slopes like 4 and 1/4, since I never used such lines.

There was certainly an alternative, \xypic, for those who wanted
something better.  But it was hard to learn and I was not entirely happy
with the results.  The basic interface used an \verb+\halign+.  This
meant that no extra space was allotted to an arrow that had a large
label.  In addition, the different slots could have different horizontal
size, which could result in a misshapen diagram.  I used it in a paper
that had a `W' shaped diagram whose nodes had different widths and the
result was quite obviously misshapen.  On the other hand, the graphics
engine underlying \xypic\ is really quite remarkable and it occurred to
me that I could try to redraft diagram as a front end.  The result is
the current package.  It has been tested only with version 3.7, so there
is no guarantee it would work with any earlier version (or, for that
matter, later).

The syntax described below is not compatible with the original diagram
package.  Every front end of this sort represents a trade-off between
simplicity and utility.  A package that simply upgraded the syntax to
allow more dashed (and dotted) lines would have been just as easy to
implement, but would have made poor use of the wonderful possibilities
of the underlying \xypic\ package.  Also there would have been too many
different arrow specifications (they would have had to go at least in
the range $[-9,9]$) for easy memory) and still would not have included
things like inclusion arrows.  To those who would have liked a simpler
syntax, I apologize.  To those who would want more flexibility, I remind
that the entire \xypic\ package is there for use.

There is one point that cannot be made too strongly.  {\em Watch for
errant spaces.}  Unlike the diagram package, which was carried out in
math mode so that spaces were ignored.  \xypic\ is not in math mode and
spaces will mess up your diagrams.  Unlike diagram, it should not be
necessary to put any objects inside \verb+\phantom+.  In diagram, for
reasons that I now understand, objects did not always register properly.
This was a flaw built in to the very heart of the package and is not
worth correcting, although it could have been done better in the first
place.  If you see an object in double vision, then the virtually
certain cause is that a space has gotten in there somewhere.  I have
attempted to prevent this by liberal use of \verb+\ignorespaces+ in the
definitions, but one cannot always be sure and while testing, I found a
number seemingly innocuous spaces that messed up diagrams.

\section*{The basic syntax}

The basic syntax is built around an operation \verb+\morphism+ that is
used as
 \begin{verbatim}
 \morphism(x,y)|label pos|/{shape}/<dx,dy>[N`N`A]
 \end{verbatim}
 The parameters \verb+x+ and \verb+y+ give the location of the source
node within a fixed local coordinate system and \verb-x+dx- and
\verb-y+dy- and locate the target.  To be precise, the first coordinate
is the horizontal center of the node and the second is that of the base
line.  These distances are given in terms of \verb+\ul+'s, (for
unitlength), which is user assignable.  I have, for the time being, set
it to .01em, which is probably too small.  In the original version of
diagram, it was .1em.  This was reasonable for diagrams, but since the
multipliers had to be integers, it turned out to inconveniently large
for certain internal computations.  (Strictly speaking, the multipliers
could be any decimal number, but \TeX\ does not permit arithmetic with
any but whole numbers.)  Since all the internal computations are carried
out by \xypic, this is no longer a consideration and in the production
version, I may go back to the original .1em.  Note that by basing
distances on ems, I make things automatically scale when changing point
size.  The parameter \verb+label pos+ is one of \verb+a,b,l,r,m+ that
stand for above, below, left, right, or mid and describe the positioning
of the arrow label on the arrow.  The label \verb+m+ stands for a label
positioned in the middle of a split arrow.  Although \verb+a+ and
\verb+b+ can be used in any direction, they give uncertain results when
used on vertical arrows and similarly \verb+l+ and \verb+r+ should not
be used on horizontal arrows.




The \verb+shape+ describes the shape of the arrow.  An arrow is thought
of as consisting of three parts, the tail, the shaft and the head.  You
may specify just the head, in which case the shaft will be an ordinary
line, or all three.  However, since the tail can be (and usually is)
empty, in practice you can also describe the shaft and tail.  In
addition, it is possible to modify the arrow in various ways.  Although
the parameter is shown withing braces, the braces can be omitted unless
one of the modifier characters is \verb+/+, in which case, {\em the
entire paramater} must be put in braces.                     It is important to
note that it will not work just to put the \verb+/+ inside the braces,
since this will interfere with the internal parsing of \xypic.  The head
and tail shapes are basically one of \verb+>+, \verb+>>+, \verb+(+,
\verb+)+, \verb*+ >+, and \verb*+< +.  Each of these may also be
preceded by \verb+^+ or \verb+_+ and others are user definable.  For
details, see the \xypic\ reference manual.  The first of these is an
ordinary head, while the second is for an epic arrow.  The third is not
much used, but the superscripted version makes and inclusion tail, as
will be illustrated below.  The reverse ones give reversed arrowheads.
The sign \verb*+ + stands for an obligatory space and it leaves extra
space for a tailed (monic) arrow, which otherwise runs into the source
node.  Although there are many possibilities for shafts, including
alphanumeric characters, there are basically three that interest us:
\verb+-+, which is an ordinary shaft, \verb+--+, which produces a dashed
arrow, \verb+=+, which gives a double arrow (although with only one
arrowhead), and
\verb+.+, which makes a dotted arrow. Thus
\verb+>+ or
\verb+->+ will produce an ordinary arrow, \verb+->>+ an epic arrow,
\verb*+ >->+ makes a monic arrow, and \verb+-->>+ would make a dashed
epic arrow.  The descriptions \verb+<-, <<-,+ \verb*+<-< +, and
\verb+<<--+ give the reversed versions.  Note that \verb+<+ does not
give a reversed arrow, since \xypic\ interprets that as a reversed head,
not a tail.

If the shape parameter begins with an \verb+@+, it is interpeted
differently.  In that case, it has the form \verb+@{shape}@+ modifier,
where the modifier is as described in the \xypic\ reference guide.  I
just mention a couple of them.  The paramater \verb+@{->}@<3pt>+, for
example, would give an ordinary arrow moved three points in the
direction perpendicular to that of the arrow.  If you give
\verb+{@{-->}@/^5pt/}+, you will get an epic arrow that is curved in the
direction perpenducular to the direction of the arrow by five points.
(As far as I can tell, there is no difference between
\verb+^-5pt+ and
\verb+_5pt+ so the syntax could be simplified and made consistent with
that of \verb+<dist>+ described above.)
    It is imperative that a specification such as \verb+@{>}@/5pt/+ be
enclosed in braces because of the \verb+/+s.

Finally, the \verb+N+s are the source and
target of the arrow and \verb+L+ is the label.  Currently, the \verb+L+
is set in \verb+\scriptstyle+ size, but this can easily be changed by
putting \verb+\let\labelstyle=\textstyle+ in your file.

\subsection*{A word about parameters}
 I have already mentioned the necessity of enclosing certain arrow shape
specifications in braces.  Owing to certain built-in limitations of
\TeX, I have used a number of different delimiters:
 \verb+(, ), |,  /, [, ], `, ;+.  Any of these that appear inside an
argument could conceivably cause problems.  They were chosen as the
least likely to appear
inside mathematics (except for \verb+(, )+ which appear in positions
that are unlikely to cause problems).  However, be warned that this is a
possible cause of mysterious error messages.  If it is indeed then
enclosing the offending parameter in braces should cure the problem.  In
most, but not all, cases, enclosing the offending character will solve
the problem.  The exceptions come when the braces interfere with
\xypic's somewhat arcane parsing mechanism.  There will be no problem if
it is just part of a mathematical expression.


\section*{Shapes}

Using the basic \verb+\morphism+ macro, I have a defined a number of
shapes, squares (really rectangles) and variously oriented triangles.  I
will probably do a few other shapes as I had done for the old package,
such as \verb+\cube+ and a $3 \times 3$ diagram.  The basic shapes are
exactly the same, but the options are done entirely differently.  Here
is the syntax of the \verb+\square+ macro:
 \begin{verbatim}
 \square(x,y)|lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]
 \end{verbatim}
 Each of the first four sets of parameters is optional and any subset of
them can be omitted.  (Note that only the sets can be omitted, once you
give \verb+dx+, you also have to give \verb+dy+ and so on.)  The first
two describe the horizontal and vertical size of the square, the next
four give the label placements using the same five characters as above,
the next four give the shapes of the arrows using the same syntax as
discussed above.  The last group is the location.  The meaning of this
varies a bit with the shape.  For a square, it is the midpoint of the
baseline of the lower left corner node.  For a triangle that has a lower
left corner, it is the same.  Otherwise, \verb+x+ is the midpoint of the
leftmost node and \verb+y+ is the baseline of the lowest node.  As with
the old macros, different shapes should fit together accurately, in fact
more accurately than with the old ones.

Here is a listing of the shapes, together with the groups of parameters.
In all cases, the first four groups are optional and any subset of them
will work.  However, they must come in order.  Note that the names of
the triangles are related to the shape as the shape that best
approximates the shape of the letter.  For example, a \verb+\ptriangle+
is a right triangle that has its hypotenuse going from upper right to
lower left.  Triangles with lower case names have their legs horizontal
and vertical, while those with capitalized names have their hypotenuse
horizontal or vertical.  In those cases, one of \verb+dx+ or \verb+dy+
is the length of a leg and the other is {\em half} the length of the
hypotenuse.  In all cases, the order of the nodes and of the arrows is
linguistic, first moving from left to right and then down.  The defaults
are reasonable, but with triangles, there is not always a natural
direction for arrows.  I always made mistakes in the order with my
macros and this is certainly a defect.  But the order is the same.  In
every case the braces around the shape specification can be removed
unless it includes the following delimiter (that is, \verb+`+ or
\verb+/+, as the case may be.)
 \begin{verbatim}
\square(x,y)|lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>%
 [N`N`N`N;L`L`L`L]
\ptriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\qtriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\dtriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\btriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Atriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Vtriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Ctriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Dtriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Atrianglepair(x,y)|lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
<dx,dy>[N`N`N`N;L`L`L`L`L]
\Vtrianglepair(x,y)|lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
<dx,dy>[N`N`N`N;L`L`L`L`L]
\Ctrianglepair(x,y)|lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
<dx,dy>[N`N`N`N;L`L`L`L`L]
\Dtrianglepair(x,y)|lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
<dx,dy>[N`N`N`N;L`L`L`L`L]
\end{verbatim}
(Of course, the \verb+%+ signs are required if you break the
macro at such points.)

To make a diagram, you have to enclose it inside \verb+\xy ... \endxy+.
You will almost always want it displayed, for which the simplest is to
enclose it in \verb+$$\xy ... \endxy$$+.  For old times sake, I have
also let \verb+\bfig+ and \verb+\efig+ be synonyms for \verb+\xy+ and
\verb+\endxy+, resp.  (In case you wonder, these go all the back to a
main frame formatter running at McGill when Charles Wells and I were
first writing TTT, where \verb+.BFIG+ and \verb+.EFIG+ were used to make
displays, at least as far as that primitive formatter was capable of.)
You could instead make definitions as follows:
\begin{verbatim}
 \def\bfig{$$\xy}
 \def\efig{\endxy$$}
\end{verbatim}
 in which case you will automatically get a display.  I do not do this
because my spelling checker is programmed to ignore stuff in math or
display mode and the \verb+$$+ marks the display mode.  Besides which, I
have defined the \verb+Ctl-F+ key on my editor so that pressing it gives
\begin{verbatim}
 $$\bfig
 _
 \efig$$
\end{verbatim}
 with the cursor at the position marked by the underline.



\section{Examples}

Many people---including me--- learn mainly by example and
I will give a number of examples here.  The formal
syntax can be learned in the \xypic\ reference manual.  We begin with
\begin{verbatim}
 $$\bfig
\square[A`B`C`D;e`f`g`m]
 \efig$$
\end{verbatim}
 produces
 $$\bfig
\square[A`B`C`D;e`f`g`m]
 \efig$$
 This can be modified, for example
\begin{verbatim}
 $$\bfig
\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
 \efig$$
\end{verbatim}
 produces
 $$\bfig
\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
 \efig$$
 This can be put together with a morphism as follows:
\begin{verbatim}
 $$\bfig
\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
 \morphism(500,500)|m|/.>/<-500,-500>[B`C`h]
 \efig$$
\end{verbatim}
 which makes a familiar diagram:
 $$\bfig
\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
 \morphism(500,500)|m|/.>/<-500,-500>[B`C`h]
 \efig$$
 The same diagram could have been made by
\begin{verbatim}
 $$\bfig
 \ptriangle|a`l`m|/>>`>`.>/[A`B`C;e`f`h]
 \dtriangle/`>` >->/[B`C`D;`g`m]
 \efig$$
\end{verbatim}
 You can fit two squares together, horizontally:
\begin{verbatim}
 $$\bfig
\square|a`l`m`b|[A`B`C`D;f`g`h`k]
\square(500,0)/>``>`>/[B`E`D`F;l``m`n]
 \efig$$
\end{verbatim}
 $$\bfig
\square|a`l`m`b|[A`B`C`D;f`g`h`k]
\square(500,0)/>``>`>/[B`E`D`F;l``m`n]
 \efig$$
 or vertically
\begin{verbatim}
 $$\bfig
\square(0,500)|a`l`r`m|[A`B`C`D;f`g`h`k]
\square/`>`>`>/[C`D`E`F;`l`m`n]
 \efig$$
\end{verbatim}
 $$\bfig
\square(0,500)|a`l`r`m|[A`B`C`D;f`g`h`k]
\square/`>`>`>/[C`D`E`F;`l`m`n]
 \efig$$
or a square and a triangle
\begin{verbatim}
 $$\bfig
\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0]
 \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm
   rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t]
 \efig$$
\end{verbatim}
 gives the diagram
 $$\bfig
\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0]
 \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm
   rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t]
 \efig$$
 This diagram is on page 361 of the third edition of Category Theory for
Computing Science to describe recursion.
 Here is an example using the procedure for sliding an arrow sideways.
This one could even be used in a text,
\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B`d]
\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B`e]\endxy
 which was made using
\begin{verbatim}
\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B`d]
\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B`e]\endxy
\end{verbatim}
Something a bit different that illustrates the use of another shaft
\verb+=+ that gives a 2-arrow, as well as curved arrows:
\begin{verbatim}
 $$\bfig
\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B`f]
\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B`g]
\morphism(250,50)|a|/=>/<0,-100>[``]
 \efig$$
\end{verbatim}
 $$\bfig
\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B`f]
\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B`g]
\morphism(250,50)|a|/=>/<0,-100>[``]
 \efig$$
 In order to use curved arrows, you must insert \verb+\xyoption{curve}+
into your file.  There is a macro \verb+\place(x,y)[N]+ where \verb+N+
is any object that places that object anywhere.  I have changed the name
in order to avoid clashing with the \LaTeX\ picture mode's \verb+\put+.
Here is an example that uses a construction that is undocmented here,
but uses an \Xy\ construction:
\begin{verbatim}
\newbox\anglebox
\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy}

 \def\angle{\copy\anglebox}
 $$\bfig
 \square[A`B`C`D;f`g`h`k]
 \place(100,400)[\angle]
 \efig$$
\end{verbatim}
\newbox\anglebox
\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy}

 \def\angle{\copy\anglebox}
 $$\bfig
 \square[A`B`C`D;f`g`h`k]
 \place(100,400)[\angle]
 \efig$$
 Notice that you get a headless arrow by using \verb+\ar@{-}+.

Here is a special code installed at the request of Jonathon Funk:
\begin{verbatim}
 $$\bfig
\pullback|b`r`r`b|<800,800>[P`X`Y`Z;t`u`v`w]%
|a`m`b|/>`-->`>/<500,500>[A;f`g`h]
 \efig$$
\end{verbatim}
 $$\bfig
\pullback|b`r`r`b|<800,800>[P`X`Y`Z;t`u`v`w]%
|a`m`b|/>`-->`>/<500,500>[A;f`g`h]
 \efig$$
The full syntax for this is
\begin{verbatim}
\pullback(x,y)|lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/<dx`dy>[N`N`N`N;L`L`L]%
    |lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N;L`L`L]
\end{verbatim}
 Of these only the nodes placed inside brackets are obligatory.  The
first sets of parameters are exactly as for \verb+\square+ and the
remaining parameters are for the nodes and labels of the outer arrows.
There is no positioning paramters for them; rather you set the
horizontal and vertical separations of the outer node from the square.
The last example, is a complicated diagram from TTT:
\begin{verbatim}
 $$\bfig
\morphism(0,2100)|l|/>/<0,-1400>[TT`TT'T`T\eta'T]
\morphism(0,2100)|a|/>/<700,0>[TT`T`\mu]
\morphism(0,2100)|l|/>/<700,-700>[TT`TTT'`TT\eta']
\morphism(700,2100)|r|/>/<700,-700>[`TT'`T\eta]
\place(700,1750)[1]
\morphism(700,1400)|b|/@<-20\ul>/<700,0>[TTT'`TT'`T\sigma]
\square(700,700)|a`m`m`a|/@<20\ul>`>``>/<700,700>[TTT'`TT'`TT'TT'`TT'T';\mu
T' `T\eta'TT'``]
\morphism(700,700)|a|/>/<700,0>[TT'TT'`TT'T'`TT'\sigma]
\place(300,1400)[2]
\place(1050,1050)[3]
\btriangle(1400,700)|m`r`a|/>`>`>/<700,700>[TT'`TT'T'`TT';T\eta'T'`\hbox{\rm
id}`]
\place(1600,1050)[6]
\square|a`l`m`b|<700,700>[TT'T`TT'TT'`T'T`T'TT';TT'T\eta'`\sigma
T`\sigma TT'`T'T\eta']
\square(1400,0)|a`m`r`b|<700,700>[TT'T'`TT'`T'T'`T';T\mu'`\sigma T'
`\sigma`\mu']
\morphism(700,0)|b|/>/<700,0>[T'TT'`T'T'`T'\sigma T']
\place(300,350)[4]
\place(1050,350)[5]
\place(1750,350)[7]
 \efig$$
\end{verbatim}
 $$\bfig
\morphism(0,2100)|l|/>/<0,-1400>[TT`TT'T`T\eta'T]
\morphism(0,2100)|a|/>/<700,0>[TT`T`\mu]
\morphism(0,2100)|l|/>/<700,-700>[TT`TTT'`TT\eta']
\morphism(700,2100)|r|/>/<700,-700>[`TT'`T\eta]
\place(700,1750)[1]
\morphism(700,1400)|b|/@<-20\ul>/<700,0>[TTT'`TT'`T\sigma]
\square(700,700)|a`m`m`a|/@<20\ul>`>``>/<700,700>[TTT'`TT'`TT'TT'`TT'T';\mu
T' `T\eta'TT'``]
\morphism(700,700)|a|/>/<700,0>[TT'TT'`TT'T'`TT'\sigma]
\place(300,1400)[2]
\place(1050,1050)[3]
\btriangle(1400,700)|m`r`a|/>`>`>/<700,700>[TT'`TT'T'`TT';T\eta'T'`\hbox{\rm
id}`]
\place(1600,1050)[6]
\square|a`l`m`b|<700,700>[TT'T`TT'TT'`T'T`T'TT';TT'T\eta'`\sigma
T`\sigma TT'`T'T\eta']
\square(1400,0)|a`m`r`b|<700,700>[TT'T'`TT'`T'T'`T';T\mu'`\sigma T'
`\sigma`\mu']
\morphism(700,0)|b|/>/<700,0>[T'TT'`T'T'`T'\sigma T']
\place(300,350)[4]
\place(1050,350)[5]
\place(1750,350)[7]
 \efig$$





\end{document}










From rrosebru@mta.ca Mon Apr 16 20:29:45 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3GMEDx27420
	for categories-list; Mon, 16 Apr 2001 19:14:13 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Date: Mon, 16 Apr 2001 14:27:04 -0700
Message-Id: <200104162127.OAA24479@kamiak.eecs.wsu.edu>
From: "David Benson" <dbenson@eecs.wsu.edu>
To: categories@mta.ca
Subject: categories: Foundational Methods in Computer Science Workshop (FMCS'01)
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 14


                    PRELIMINARY ANNOUNCEMENT
                          Workshop on
              Foundational Methods in Computer Science
               --  a series of informal workshops on
              categories and logic in computer science

                FMCS'01 : May 31 -- June 3, 2001
                      Spokane, Washington

                May 31: Arrival day
                        -- Reception in the evening
                June 1: Tutorial Talks
                June 2: Research Talks
                        Conference Banquet
                June 3: Research Talks in the morning
                        Noon -- end of workshop

A subsequent email will describe the venue, a hotel directly
on the Spokane River, with nearby parks and a view of the
Spokane Falls, as well as being just across the river from
downtown.

The necessaries about registration and obtaining hotel
accomodations (around $US73/night) will be included in these
subsequent messages.

If you plan to attend, please reply as soon as may be to
    dbenson@eecs.wsu.edu
and an indicate whether you would like to give a tutorial or a research talk.

Thank you!
--
Professor David B. Benson                                (509) 335-2706
School of EE and Computer Science (EME 102A)             (509) 335-3818 fax
PO Box 642752, Washington State University               dbenson@eecs.wsu.edu
Pullman WA 99164-2752   U.S.A.


From rrosebru@mta.ca Tue Apr 17 21:24:32 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3HNgm614663
	for categories-list; Tue, 17 Apr 2001 20:42:48 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Message-ID: <3ADC4B5C.9BB45075@mcs.le.ac.uk>
Date: Tue, 17 Apr 2001 14:55:40 +0100
From: "V. Schmitt" <vs27@mcs.le.ac.uk>
X-Mailer: Mozilla 4.76 [en] (X11; U; Linux 2.2.18 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: "categories@mta.ca" <categories@mta.ca>
Subject: categories: ECT and computer science
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 15

Dear all,
I am interested in knowing relevant applications
of enriched categories to computer science.
Would you please send me references if any?

Thanks,
Best regards,
Vincent Schmitt.



From rrosebru@mta.ca Thu Apr 19 10:06:45 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3JCRn509670
	for categories-list; Thu, 19 Apr 2001 09:27:49 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Message-ID: <20010418235052.95337.qmail@web12205.mail.yahoo.com>
Date: Wed, 18 Apr 2001 16:50:52 -0700 (PDT)
From: Galchin Vasili <vngalchin@yahoo.com>
Subject: categories: Category Theory and Hereditarily-Finite Sets
To: categories@mta.ca
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Sender: cat-dist@mta.ca
Precedence: bulk
Status: RO
X-Status: 
X-Keywords:
X-UID: 16


Hello Cat Theory Community,

     Hereditarily-finite sets are becoming increasingly more popular in
computer science research.

1) What kind of interesting categories exist where an 
     "object" is a hereditarily-finite set plus some 
     structure on the set and a "morphism" would be a
     structure-preserving function. (I can think
     of the obvious subcategory of SET and also the 
     category where an object is a hereditarily-finite
     set together with a "SET" endomorphism on that 
     set, but neither of these categories would have 
     interesting or useful properties, in my opinion)
     

2) What kind of papers can I read on this subject?

Regards,

Bill Halchin




From rrosebru@mta.ca Thu Apr 19 17:49:51 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3JKHPU13443
	for categories-list; Thu, 19 Apr 2001 17:17:25 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Date: Thu, 19 Apr 2001 19:29:13 +0100
From: Paul Taylor <pt@dcs.qmw.ac.uk>
Message-Id: <200104191829.TAA04249@koi-pc.dcs.qmw.ac.uk>
To: categories@mta.ca
Subject: categories: Re: Category Theory and Hereditarily-Finite Sets
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 17

> Hereditarily-finite sets are becoming increasingly more popular
> in computer science research.


Why?  Because some ill-advised first year maths lecturer told you that
the element relation was the foundation of mathematics, maybe?

> "object" is a hereditarily-finite set plus some structure on the set
> and a "morphism" would be a structure-preserving function.

If you're really interested in heredity, so the "structure" is the
element relation, this is a well-founded coalgebra for the covariant
powerset functor.

Coalgebras for the powerset functor were first studied by Gerhard Osius
in JPAA in 1974, although he considered recursion rather than induction.

Well founded coalgebras for general functors (but with some emphasis
on the powerset) are defined in Section 6.3 of my book "Practical 
Foundations of Mathematics" (Cambridge University Press, 1999).

The exercises for that chapter show how various ideas with recursive
programs may be expressed in these terms.  In particular, unary
recursion (with at most one recursive call at each level) is reduced
to tail recursion (equivalent to while programs) together with an
accumulator monoid.

Paul


From rrosebru@mta.ca Fri Apr 20 12:31:05 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3KEn0N17529
	for categories-list; Fri, 20 Apr 2001 11:49:00 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Date: Fri, 20 Apr 2001 14:13:10 +0200 (MET DST)
Message-Id: <200104201213.OAA03519@volterra.math.kth.se>
From: Dan Laksov <laksov@math.kth.se>
To: categories@mta.ca
Subject: categories: groupoids
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 18


Could anyone help me with a good reference to groupoid schemes, or
sheaves on groupoid schemes?

Sincerely

Dan Laksov


From rrosebru@mta.ca Fri Apr 20 12:33:52 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3KEmXJ26265
	for categories-list; Fri, 20 Apr 2001 11:48:33 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Message-ID: <3ADF5672.F53C9735@essex.ac.uk>
Date: Thu, 19 Apr 2001 22:19:46 +0100
From: Wilkins E B <elwood@essex.ac.uk>
Organization: University of Essex
X-Mailer: Mozilla 4.6 [en] (X11; I; Linux 2.2.14 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: categories@mta.ca
Subject: categories: Re: Category Theory and Hereditarily-Finite Sets
References: <200104191829.TAA04249@koi-pc.dcs.qmw.ac.uk>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 19

Paul Taylor wrote:

> > Hereditarily-finite sets are becoming increasingly more popular
> > in computer science research.
>
> Why?  Because some ill-advised first year maths lecturer told you that
> the element relation was the foundation of mathematics, maybe?

Maybe because someone read papers by Friedman (1977) which gave the set
theory B which is [Beeson] "the theory of hereditary extensional sets of
finite rank" and which is strong enough to model Bishop-style constructive
mathematics. This seems to be a good reason.

Elwood

--
 Dr Elwood Wilkins          tel:  (+44) (0)1206 872771
 Senior Research Officer    fax: (+44) (0)1206 872788
 Department of Computer Science
 University of Essex, Colchester, Essex, UK



From rrosebru@mta.ca Fri Apr 20 12:33:57 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3KEoa217353
	for categories-list; Fri, 20 Apr 2001 11:50:36 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Mime-Version: 1.0
X-Sender: nielson@cstpop.it.dtu.dk (Unverified)
Message-Id: <p05010400b701b36d7a9e@[130.225.76.171]>
Date: Tue, 17 Apr 2001 10:50:39 +0200
To: categories@mta.ca
From: Flemming Nielson <nielson@imm.dtu.dk>
Subject: categories: job: positions at the Technical University of Denmark
Content-Type: text/plain; charset="us-ascii" ; format="flowed"
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 20

The Technical University of Denmark is happy to announce a
number of associate professorships (tenured) and assistant
professorships (untenured)

      http://www.imm.dtu.dk/cst/jobs.htm

covering data security, algorithmics, distributed systems,
software engineering, embedded systems etc.

The Technical University of Denmark was created in 1829 by
the discoverer of electromagnetism, H.C.Oersted, and became
the first private Danish University in 2001, thanks to a
donation by the Danish Government, in order to increase its
impact on research and teaching in engineering and science.

The Department of Informatics & Mathematical Modelling has
been given the mission to strengthen Computer Science and
Technology and will be announcing a substantial number of
positions within selected areas in the coming years.
-- 
----------------------------------------------------------------------
Professor dr.scient. Flemming Nielson          direct: (+45) 4525 3735
Informatics & Mathematical Modelling         mailto:nielson@imm.dtu.dk
The Technical University of Denmark     http://www.imm.dtu.dk/~nielson
----------------------------------------------------------------------


From rrosebru@mta.ca Sun Apr 22 20:21:02 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3MMjfY22317
	for categories-list; Sun, 22 Apr 2001 19:45:41 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
X-Authentication-Warning: triples.math.mcgill.ca: barr owned process doing -bs
Date: Sun, 22 Apr 2001 08:38:25 -0400 (EDT)
From: Michael Barr <barr@barrs.org>
X-Sender: barr@triples.math.mcgill.ca
To: Categories list <categories@mta.ca>
Subject: categories: diaxydoc.tex
Message-ID: <Pine.LNX.4.10.10104220837460.5776-100000@triples.math.mcgill.ca>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 21


\documentclass{article}
 \input diagxy
 \xyoption{curve}
\begin{document}
\def\xypic{\hbox{\rm\Xy-pic}}

\title{A new diagram package (Version 2)}
\author{Michael Barr\\Dept of Math and Stats\\McGill University\\805
Sherbrooke St. W\\Montreal, QC Canada H3A 2K6\\[5pt] barr@barrs.org}
 \maketitle

\section*{Why a new diagram package?}

This started when a user of my old package, diagram, wrote to ask me if
dashed lines were possible.  The old package had dashed lines for
horizontal and vertical arrows, but not any other direction.  The reason
for this was that \LaTeX\ used rules for horizontal and vertical arrows,
but had its own fonts for other directions.  While rules could be made
any size, the smallest lines in other directions were too long for
decent looking dashes.  Presumably, Lamport was worried about compile
time and file size if the lines were too short, considerations that have
diminished over the years since.  Also arrows could be drawn in only 48
different directions, which is limiting.  My macros were not very well
implemented for slopes like 4 and 1/4, since I never used such lines.

There was certainly an alternative, \xypic, for those who wanted
something better.  But it was hard to learn and I was not entirely happy
with the results.  The basic interface used an \verb+\halign+.  This
meant that no extra space was allotted to an arrow that had a large
label.  In addition, the different slots could have different horizontal
size, which could result in a misshapen diagram.  I used it in a paper
that had a `W' shaped diagram whose nodes had different widths and the
result was quite obviously misshapen.  On the other hand, the graphics
engine underlying \xypic\ is really quite remarkable and it occurred to
me that I could try to redraft diagram as a front end.  The result is
the current package.  It has been tested only with version 3.7, so there
is no guarantee it would work with any earlier version (or, for that
matter, later).

The syntax described below is not compatible with the original diagram
package.  Every front end of this sort represents a trade-off between
simplicity and utility.  A package that simply upgraded the syntax to
allow more dashed (and dotted) lines would have been just as easy to
implement, but would have made poor use of the wonderful possibilities
of the underlying \xypic\ package.  Also there would have been too many
different arrow specifications (they would have had to go at least in
the range $[-9,9]$) for easy memory) and still would not have included
things like inclusion arrows.  To those who would have liked a simpler
syntax, I apologize.  To those who would want more flexibility, I remind
that the entire \xypic\ package is there for use.

There is one point that cannot be made too strongly.  {\em Watch for
errant spaces.}  Unlike the diagram package, which was carried out in
math mode so that spaces were ignored.  \xypic\ is not in math mode and
spaces will mess up your diagrams.  Unlike diagram, it should not be
necessary to put any objects inside \verb+\phantom+.  In diagram, for
reasons that I now understand, objects did not always register properly.
This was a flaw built in to the very heart of the package and is not
worth correcting, although it could have been done better in the first
place.  If you see an object in double vision, then the virtually
certain cause is that a space has gotten in there somewhere.  I have
attempted to prevent this by liberal use of \verb+\ignorespaces+ in the
definitions, but one cannot always be sure and while testing, I found a
number seemingly innocuous spaces that messed up diagrams.

\subsection*{Differences from the previous version}


\begin{enumerate}
 \item \verb+\scalefactor{decimal number}+ changes all dimensions by the
factor.

\item New macros \verb+\Square, \hSquares, \vSquares+ that calculate
their own widths.

\item New macro \verb+\cube+.

\item Internal macro \verb+\label+ that conflicted with \LaTeX\ renamed.

\item Added certain procedures designed for inline and displayed
equations that are not full-fledged diagrams.  These also calculate
the length of the arrow to contain the label.

\item Corrected certain spacing anomolies.

\item Now does work with plain \TeX.
\end{enumerate}


\section*{The basic syntax}

The basic syntax is built around an operation \verb+\morphism+ that is
used as
 \begin{verbatim}
 \morphism(x,y)|label pos|/{shape}/<dx,dy>[N`N`A]
 \end{verbatim}
 The parameters \verb+x+ and \verb+y+ give the location of the source
node within a fixed local coordinate system and \verb-x+dx- and
\verb-y+dy- and locate the target.  To be precise, the first coordinate
is the horizontal center of the node and the second is that of the base
line.  These distances are given in terms of \verb+\ul+'s, (for
unitlength), which is user assignable.  I have, for the time being, set
it to .01em, which is probably too small.  In the original version of
diagram, it was .1em.  This was reasonable for diagrams, but since the
multipliers had to be integers, it turned out to inconveniently large
for certain internal computations.  (Strictly speaking, the multipliers
could be any decimal number, but \TeX\ does not permit arithmetic with
any but whole numbers.)  Since all the internal computations are carried
out by \xypic, this is no longer a consideration and in the production
version, I may go back to the original .1em.  Note that by basing
distances on ems, I make things automatically scale when changing point
size.  The parameter \verb+label pos+ is one of \verb+a,b,l,r,m+ that
stand for above, below, left, right, or mid and describe the positioning
of the arrow label on the arrow.  The label \verb+m+ stands for a label
positioned in the middle of a split arrow.  Although \verb+a+ and
\verb+b+ can be used in any direction, they give uncertain results when
used on vertical arrows and similarly \verb+l+ and \verb+r+ should not
be used on horizontal arrows.




The \verb+shape+ describes the shape of the arrow.  An arrow is thought
of as consisting of three parts, the tail, the shaft and the head.  You
may specify just the head, in which case the shaft will be an ordinary
line, or all three.  However, since the tail can be (and usually is)
empty, in practice you can also describe the shaft and tail.  In
addition, it is possible to modify the arrow in various ways.  Although
the parameter is shown within braces, the braces can be omitted unless
one of the modifier characters is \verb+/+, in which case, {\em the
entire parameter} must be put in braces.                     It is important to
note that it will not work just to put the \verb+/+ inside the braces,
since this will interfere with the internal parsing of \xypic.  The head
and tail shapes are basically one of \verb+>+, \verb+>>+, \verb+(+,
\verb+)+, \verb*+ >+, and \verb*+< +.  Each of these may also be
preceded by \verb+^+ or \verb+_+ and others are user definable.  For
details, see the \xypic\ reference manual.  The first of these is an
ordinary head, while the second is for an epic arrow.  The third is not
much used, but the superscripted version makes and inclusion tail, as
will be illustrated below.  The reverse ones give reversed arrowheads.
The sign \verb*+ + stands for an obligatory space and it leaves extra
space for a tailed (monic) arrow, which otherwise runs into the source
node.  Although there are many possibilities for shafts, including
alphanumeric characters, there are basically three that interest us:
\verb+-+, which is an ordinary shaft, \verb+--+, which produces a dashed
arrow, \verb+=+, which gives a double arrow (although with only one
arrowhead), and
\verb+.+, which makes a dotted arrow. Thus
\verb+>+ or
\verb+->+ will produce an ordinary arrow, \verb+->>+ an epic arrow,
\verb*+ >->+ makes a monic arrow, and \verb+-->>+ would make a dashed
epic arrow.  The descriptions \verb+<-, <<-,+ \verb*+<-< +, and
\verb+<<--+ give the reversed versions.  Note that \verb+<+ does not
give a reversed arrow, since \xypic\ interprets that as a reversed head,
not a tail.

If the shape parameter begins with an \verb+@+, it is interpreted
differently.  In that case, it has the form \verb+@{shape}@+ modifier,
where the modifier is as described in the \xypic\ reference guide.  I
just mention a couple of them.  The parameter \verb+@{->}@<3pt>+, for
example, would give an ordinary arrow moved three points in the
direction perpendicular to that of the arrow.  If you give
\verb+{@{-->}@/^5pt/}+, you will get an epic arrow that is curved in the
direction perpendicular to the direction of the arrow by five points.
(As far as I can tell, there is no difference between
\verb+^-5pt+ and
\verb+_5pt+ so the syntax could be simplified and made consistent with
that of \verb+<dimen>+ described above.)
    It is imperative that a specification such as \verb+@{>}@/5pt/+ be
enclosed in braces because of the \verb+/+s.

Finally, the \verb+N+s are the source and
target of the arrow and \verb+L+ is the label.  Currently, the \verb+L+
is set in \verb+\scriptstyle+ size, but this can easily be changed by
putting \verb+\let\labelstyle=\textstyle+ in your file.

\subsection*{A word about parameters}
 I have already mentioned the necessity of enclosing certain arrow shape
specifications in braces.  Owing to certain built-in limitations of
\TeX, I have used a number of different delimiters:
 \verb+(, ), |,  /, [, ], `, ;+.  Any of these that appear inside an
argument could conceivably cause problems.  They were chosen as the
least likely to appear
inside mathematics (except for \verb+(, )+ which appear in positions
that are unlikely to cause problems).  However, be warned that this is a
possible cause of mysterious error messages.  If it is indeed then
enclosing the offending parameter in braces should cure the problem.  In
most, but not all, cases, enclosing the offending character will solve
the problem.  The exceptions come when the braces interfere with
\xypic's somewhat arcane parsing mechanism.  There will be no problem if
it is just part of a mathematical expression.


\section*{Shapes}

Using the basic \verb+\morphism+ macro, I have a defined a number of
shapes, squares (really rectangles) and variously oriented triangles.  I
will probably do a few other shapes as I had done for the old package,
such as \verb+\cube+ and a $3 \times 3$ diagram.  The basic shapes are
exactly the same, but the options are done entirely differently.  Here
is the syntax of the \verb+\square+ macro:
 \begin{verbatim}
 \square(x,y)|lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]
 \end{verbatim}
 Each of the first four sets of parameters is optional and any subset of
them can be omitted.  (Note that only the sets can be omitted, once you
give \verb+dx+, you also have to give \verb+dy+ and so on.)  The first
two describe the horizontal and vertical size of the square, the next
four give the label placements using the same five characters as above,
the next four give the shapes of the arrows using the same syntax as
discussed above.  The last group is the location.  The meaning of this
varies a bit with the shape.  For a square, it is the midpoint of the
baseline of the lower left corner node.  For a triangle that has a lower
left corner, it is the same.  Otherwise, \verb+x+ is the midpoint of the
leftmost node and \verb+y+ is the baseline of the lowest node.  As with
the old macros, different shapes should fit together accurately, in fact
more accurately than with the old ones.

Here is a listing of the shapes, together with the groups of parameters.
In all cases, the first four groups are optional and any subset of them
will work.  However, they must come in order.  Note that the names of
the triangles are related to the shape as the shape that best
approximates the shape of the letter.  For example, a \verb+\ptriangle+
is a right triangle that has its hypotenuse going from upper right to
lower left.  Triangles with lower case names have their legs horizontal
and vertical, while those with capitalized names have their hypotenuse
horizontal or vertical.  In those cases, one of \verb+dx+ or \verb+dy+
is the length of a leg and the other is {\em half} the length of the
hypotenuse.  In all cases, the order of the nodes and of the arrows is
linguistic, first moving from left to right and then down.  The defaults
are reasonable, but with triangles, there is not always a natural
direction for arrows.  I always made mistakes in the order with my
macros and this is certainly a defect.  But the order is the same.  In
every case the braces around the shape specification can be removed
unless it includes the following delimiter (that is, \verb+`+ or
\verb+/+, as the case may be.)
 \begin{verbatim}
\square(x,y)|lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>%
 [N`N`N`N;L`L`L`L]
\ptriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\qtriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\dtriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\btriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Atriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Vtriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Ctriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Dtriangle(x,y)|lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N`N`N;L`L`L]
\Atrianglepair(x,y)|lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
<dx,dy>[N`N`N`N;L`L`L`L`L]
\Vtrianglepair(x,y)|lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
<dx,dy>[N`N`N`N;L`L`L`L`L]
\Ctrianglepair(x,y)|lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
<dx,dy>[N`N`N`N;L`L`L`L`L]
\Dtrianglepair(x,y)|lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}/%
<dx,dy>[N`N`N`N;L`L`L`L`L]
\end{verbatim}
(Of course, the \verb+%+ signs are required if you break the
macro at such points.)

To make a diagram, you have to enclose it inside \verb+\xy ... \endxy+.
You will almost always want it displayed, for which the simplest is to
enclose it in \verb+$$\xy ... \endxy$$+.  For old times sake, I have
also let \verb+\bfig+ and \verb+\efig+ be synonyms for \verb+\xy+ and
\verb+\endxy+, resp.  (In case you wonder, these go all the back to a
main frame formatter running at McGill when Charles Wells and I were
first writing TTT, where \verb+.BFIG+ and \verb+.EFIG+ were used to make
displays, at least as far as that primitive formatter was capable of.)
You could instead make definitions as follows:
\begin{verbatim}
 \def\bfig{$$\xy}
 \def\efig{\endxy$$}
\end{verbatim}
 in which case you will automatically get a display.  I do not do this
because my spelling checker is programmed to ignore stuff in math or
display mode and the \verb+$$+ marks the display mode.  Besides which, I
have defined the \verb+Ctl-F+ key on my editor so that pressing it gives
\begin{verbatim}
 $$\bfig
 _
 \efig$$
\end{verbatim}
 with the cursor at the position marked by the underline.



\section{Examples}

Many people---including me--- learn mainly by example and
I will give a number of examples here.  The formal
syntax can be learned in the \xypic\ reference manual.  We begin with
\begin{verbatim}
 $$\bfig
\square[A`B`C`D;e`f`g`m]
 \efig$$
\end{verbatim}
 produces
 $$\bfig
\square[A`B`C`D;e`f`g`m]
 \efig$$
 This can be modified, for example
\begin{verbatim}
 $$\bfig
\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
 \efig$$
\end{verbatim}
 produces
 $$\bfig
\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
 \efig$$
 This can be put together with a morphism as follows:
\begin{verbatim}
 $$\bfig
\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
 \morphism(500,500)|m|/.>/<-500,-500>[B`C`h]
 \efig$$
\end{verbatim}
 which makes a familiar diagram:
 $$\bfig
\square/>>`>`>` >->/[A`B`C`D;e`f`g`m]
 \morphism(500,500)|m|/.>/<-500,-500>[B`C`h]
 \efig$$
 The same diagram could have been made by
\begin{verbatim}
 $$\bfig
 \ptriangle|a`l`m|/>>`>`.>/[A`B`C;e`f`h]
 \dtriangle/`>` >->/[B`C`D;`g`m]
 \efig$$
\end{verbatim}
 You can fit two squares together, horizontally:
\begin{verbatim}
 $$\bfig
\square|a`l`m`b|[A`B`C`D;f`g`h`k]
\square(500,0)/>``>`>/[B`E`D`F;l``m`n]
 \efig$$
\end{verbatim}
 $$\bfig
\square|a`l`m`b|[A`B`C`D;f`g`h`k]
\square(500,0)/>``>`>/[B`E`D`F;l``m`n]
 \efig$$
 or vertically
\begin{verbatim}
 $$\bfig
\square(0,500)|a`l`r`m|[A`B`C`D;f`g`h`k]
\square/`>`>`>/[C`D`E`F;`l`m`n]
 \efig$$
\end{verbatim}
 $$\bfig
\square(0,500)|a`l`r`m|[A`B`C`D;f`g`h`k]
\square/`>`>`>/[C`D`E`F;`l`m`n]
 \efig$$
or a square and a triangle
\begin{verbatim}
 $$\bfig
\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0]
 \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm
   rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t]
 \efig$$
\end{verbatim}
 gives the diagram
 $$\bfig
\Ctriangle/<-`>`>/<400,400>[\hbox{\rm rec}(A,B)`B`X;r_0(A,B)`f`t_0]
 \square(400,0)/<-``>`<-/<1000,800>[\hbox{\rm rec}(A,B)`A\times\hbox{\rm
   rec}(A,B)`X`A\times X;r(A,B)``\hbox{\rm id}_A\times f`t]
 \efig$$
 This diagram is on page 361 of the third edition of Category Theory for
Computing Science to describe recursion.
 Here is an example using the procedure for sliding an arrow sideways.
This one could even be used in a text,
\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B`d]
\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B`e]\endxy
 which was made using
\begin{verbatim}
\xy \morphism(0,0)|a|/@{>}@<3pt>/<400,0>[A`B`d]
\morphism(0,0)|b|/@{>}@<-3pt>/<400,0>[A`B`e]\endxy
\end{verbatim}
Later we will introduce a number of inline procedures.

Something a bit different that illustrates the use of another shaft
\verb+=+ that gives a 2-arrow, as well as curved arrows:
\begin{verbatim}
 $$\bfig
\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B`f]
\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B`g]
\morphism(250,50)|a|/=>/<0,-100>[``]
 \efig$$
\end{verbatim}
 $$\bfig
\morphism(0,0)|a|/{@{>}@/^1em/}/<500,0>[A`B`f]
\morphism(0,0)|b|/{@{>}@/_1em/}/<500,0>[A`B`g]
\morphism(250,50)|a|/=>/<0,-100>[``]
 \efig$$
 In order to use curved arrows, you must insert \verb+\xyoption{curve}+
into your file. Here are two ways of doing three arrows between two
objects, depending on what you like:
\begin{verbatim}
 $$\bfig
 \morphism(0,0)|a|/@{>}@<5pt>/<500,0>[A`B`f]
 \morphism(0,0)|m|/@{>}/<500,0>[A`B`g]
 \morphism(0,0)|b|/@{>}@<-5pt>/<500,0>[A`B`h]
 \efig$$
\end{verbatim}
 which gives
 $$\bfig
 \morphism(0,0)|a|/@{>}@<5pt>/<500,0>[A`B`f]
 \morphism(0,0)|m|/@{>}/<500,0>[A`B`g]
 \morphism(0,0)|b|/@{>}@<-5pt>/<500,0>[A`B`h]
 \efig$$
and
\begin{verbatim}
 $$\bfig
 \morphism(0,0)|a|/{@{>}@/^5pt/}/<500,0>[A`B`f]
 \morphism(0,0)|m|/@{>}/<500,0>[A`B`g]
 \morphism(0,0)|b|/{@{>}@/^-5pt/}/<500,0>[A`B`h]
 \efig$$
\end{verbatim}
 which gives
 $$\bfig
 \morphism(0,0)|a|/{@{>}@/^5pt/}/<500,0>[A`B`f]
 \morphism(0,0)|m|/@{>}/<500,0>[A`B`g]
 \morphism(0,0)|b|/{@{>}@/^-5pt/}/<500,0>[A`B`h]
 \efig$$
 Either of these could also be used inline.

 There is a macro \verb+\place(x,y)[N]+ where \verb+N+
is any object that places that object anywhere.  I have changed the name
in order to avoid clashing with the \LaTeX\ picture mode's \verb+\put+.
Here is an example that uses a construction that is undocumented here,
but uses a documented \Xy\ construction:
\begin{verbatim}
\newbox\anglebox
\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy}
 \def\angle{\copy\anglebox}
 $$\bfig
 \square[A`B`C`D;f`g`h`k]
 \place(100,400)[\angle]
 \efig$$
\end{verbatim}
\newbox\anglebox
\setbox\anglebox=\hbox{\xy \POS(75,0)\ar@{-} (0,0) \ar@{-} (75,75)\endxy}

 \def\angle{\copy\anglebox}
 $$\bfig
 \square[A`B`C`D;f`g`h`k]
 \place(100,400)[\angle]
 \efig$$
 Notice that you get a headless arrow by using \verb+\ar@{-}+.

Here is a special code installed at the request of Jonathon Funk:
\begin{verbatim}
 $$\bfig
\pullback|b`r`r`b|<800,800>[P`X`Y`Z;t`u`v`w]%
|a`m`b|/>`-->`>/<500,500>[A;f`g`h]
 \efig$$
\end{verbatim}
 $$\bfig
\pullback|b`r`r`b|<800,800>[P`X`Y`Z;t`u`v`w]%
|a`m`b|/>`-->`>/<500,500>[A;f`g`h]
 \efig$$
The full syntax for this is
\begin{verbatim}
\pullback(x,y)|lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/<dx`dy>[N`N`N`N;L`L`L]%
    |lp`lp`lp|/{sh}`{sh}`{sh}/<dx,dy>[N;L`L`L]
\end{verbatim}
 Of these only the nodes placed inside brackets are obligatory.  The
first sets of parameters are exactly as for \verb+\square+ and the
remaining parameters are for the nodes and labels of the outer arrows.
There is no positioning parameters for them; rather you set the
horizontal and vertical separations of the outer node from the square.

Here are some more special constructions.  In general, if you are doing
a square, you should use \verb+\Square+ instead of \verb+\square+
because if figures its own width.  The syntax is almost the same, except
that \verb+dx+ is omitted.  For example,
\begin{verbatim}
 $$\bfig
 \Square/^{ (}->`>`>`^{ (}->/<350>[{\rm Hom}(A,2^B)`{\rm Sub}(A\times B)`
 {\rm Hom}(A',2^{B'})`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')]
 \efig$$
\end{verbatim}
 will produce the square
 $$\bfig
 \Square/^{ (}->`>`>`^{ (}->/<350>[{\rm Hom}(A,2^B)`{\rm Sub}(A\times B)`
 {\rm Hom}(A',2^{B'})`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')]
 \efig$$
 There are a couple of points to note here.  Note the use of the
argument \verb+^{ (}->+ to get the inclusion arrow.  The complication is
created by the necessity of adding a bit of extra space before the hook.
You get pretty much the same effect by putting a bit of extra space
after the node:
\begin{verbatim}
 $$\bfig
 \Square/^(->`>`>`^(->/<350>[{\rm Hom}(A,2^B)\,`{\rm Sub}(A\times B)`
 {\rm Hom}(A',2^{B'})\,`{\rm Sub}(A'\times B');\alpha(A,B)```\alpha(A',B')]
 \efig$$
\end{verbatim}
 The full syntax is
\begin{verbatim}
 \Square(x,y)|lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/<dy>[N`N`N`N;L`L`L`L]
\end{verbatim}

There are also macros for placing two \verb+\Square+s together
horizontally or vertically.  The first is \verb+\hSquares+ with the
syntax
\begin{verbatim}
\hSquares(x,y)|lp`lp`lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}`{sh}`{sh}/%
<dy>[N`N`N`N`N`N;L`L`L`L`L`L`L]
\end{verbatim}
The second is \verb+\vSquares+ with a similar syntex except that there
are two \verb+dy+ parameters, one for each square:
\begin{verbatim}
\hSquares(x,y)|lp`lp`lp`lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}`{sh}`{sh}`{sh}/%
<dy,dy>[N`N`N`N`N`N;L`L`L`L`L`L`L]
\end{verbatim}

There is a macro for making cubes.  The syntax is
\begin{verbatim}
 \cube(x,y)|lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]%
      (x,y)|lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/<dx,dy>[N`N`N`N;L`L`L`L]%
      |lp`lp`lp`lp|/{sh}`{sh}`{sh}`{sh}/[L`L`L`L]
\end{verbatim}
 The first line of parameters is for the outer square and the second for
the inner square, while the remaining parameters are for the arrows
between the squares.  Only the parameters in square brackets are
required; there are defaults for the others.  Here is an example:
\begin{verbatim}
 $$\bfig
\cube(0,0)|a`r`l`b|/ >->` >->`>`>/<1500,1500>[A`B`C`D;f`g`h`k]%
(300,300)|a`r`l`b|/>`>`>`>/<400,400>[A'`B'`C'`D';f'`g'`h'`k']%
 |m`m`m`m|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
 \efig$$
\end{verbatim}
 gives the somewhat misshapen diagram
 $$\bfig
\cube(0,0)|a`r`l`b|/ >->` >->`>`>/<1500,1500>[A`B`C`D;f`g`h`k]%
(300,300)|a`r`l`b|/>`>`>`>/<400,400>[A'`B'`C'`D';f'`g'`h'`k']%
 |m`m`m`m|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
 \efig$$
 because the parameters were oddly chosen.  The defaults center the
squares.  I discovered accidently, while debugging the cube that what I
though was an out-of-range choice of parameters would produce an offset
cube:
\begin{verbatim}
 $$\bfig
\cube|a`r`l`b|/ >->` >->`>`>/<1000,1000>[A`B`C`D;f`g`h`k]%
(400,400)|a`r`l`b|/>`>`>`>/<900,900>[A'`B'`C'`D';f'`g'`h'`k']%
 |r`r`r`r|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
 \efig$$
\end{verbatim}
 gives
 $$\bfig
\cube|a`r`l`b|/ >->` >->`>`>/<1000,1000>[A`B`C`D;f`g`h`k]%
(400,400)|a`r`l`b|/>`>`>`>/<900,900>[A'`B'`C'`D';f'`g'`h'`k']%
 |r`r`r`r|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
 \efig$$


\subsection*{Empty placement and moving labels}
 The label placements within \verb+|x|+ is valid only for
 \verb+x = a,b,r,l,m+.  If you use any other value, or leave it empty,
the label entry is ignored, but you can use any valid \xypic\ label, as
described in Figure 13 of the reference manual.  One place you might
want to use this is for the placement of the labels along an arrow.  In
\xypic\ the default placement of the label is midway between the
midpoints of the nodes.  If the two nodes are of widely different sizes,
this can result in strange placements; therefore I always place them
midway along the arrow.  However, as the following illustrates, this can
be changed.
 \begin{verbatim}
 $$\bfig
\morphism(0,900)||/@{->}^<>(0.7){f}/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,600)||/@{->}^<(0.7){f}/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,300)||/@{->}^>(0.7){f}/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,0)||/@{->}^(0.7){f}/<800,0>[A^B\times B^C\times C`C`]
 \efig$$
\end{verbatim}
 which produces
 $$\bfig
\morphism(0,900)||/@{->}^<>(0.7){f}/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,600)||/@{->}^<(0.7){f}/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,300)||/@{->}^>(0.7){f}/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,0)||/@{->}^(0.7){f}/<800,0>[A^B\times B^C\times C`C`]
 \efig$$
Here is the explanation.  The label placement argument is empty (it
cannot be omitted) and the arrow entry is empty.  However, placing
 \verb+^(0.7){f}+ inside the arrow shape places the label \verb+f+ 7/10
of the way between the nodes.  Unmodified, this places it 7/10 of the
way between the centers of the nodes.  This may be modified by \verb+<+,
which moves the first (here the left) reference point to the beginning
of the arrow, \verb+>+ which moves the second reference point to the end
of the arrow, or by both, which moves both reference points.  In most
cases, you will want both.  Incidentally, \verb+-+ is a synonym for the
sequence \verb+<>(.5)+ and that is the default placement in my package.

Here are some more examples that illustrates the special sequence
 \verb+\hole+ used in conjunction with \verb+|+ that implements
\verb+m+ as well as the fact that these things can be stacked.  For more
details, I must refer you to the reference manual.
\begin{verbatim}
 $$\bfig
\morphism(0,600)||/@{->}|-\hole/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,300)||/@{->}|-\hole^<>(.7)f/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,0)||/@{->}|-\hole^<>(.7)f_<>(.3)g/<800,0>[A^B\times
B^C\times C`C`]
 \efig$$
\end{verbatim}
 produces
 $$\bfig
\morphism(0,600)||/@{->}|-\hole/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,300)||/@{->}|-\hole^<>(.7)f/<800,0>[A^B\times B^C\times C`C`]
\morphism(0,0)||/@{->}|-\hole^<>(.7)f_<>(.3)g/<800,0>[A^B\times
B^C\times C`C`]
 \efig$$

Here is another version of the cube we looked at above, using these
special placements and \verb+\hole+'s to break some lines and make it
neater.
\begin{verbatim}
 $$\bfig
\cube|a`r`l`b|/@{ >->}^<>(.6){f}` >->`@{>}_<>(.4){h}`>/%
<1000,1000>[A`B`C`D;`g``k]%
(400,400)|a```b|/>`@{>}|(.33)\hole^<>(.6){g'}`>`@{>}%
|(.67)\hole_<>(.4){k'}/<900,900>[A'`B'`C'`D';f'``h'`]%
 |r`r`r`r|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
 \efig$$
\end{verbatim}
 $$\bfig
\cube|a`r`l`b|/@{ >->}^<>(.6){f}` >->`@{>}_<>(.4){h}`>/%
<1000,1000>[A`B`C`D;`g``k]%
(400,400)|a```b|/>`@{>}|(.33)\hole^<>(.6){g'}`>`%
@{>}|(.67)\hole_<>(.4){k'}/<900,900>[A'`B'`C'`D';f'``h'`]%
 |r`r`r`r|/<-`<-`<-`<-/[\alpha`\beta`\gamma`\delta]
 \efig$$
This one is probably worth saving as a template.  Note that the
\verb+\hole+'s by reference to the center of the nodes.  That way they
will always miss hitting the arrows no matter what the size of the node.
If the nodes are unusually large, the cube may be magnified using
 \verb+\scalefactor+.

\subsection*{Inline macros}
 Here we illustrate a few of the macros for inline---or
displayed---equations the package contains.  In each case, the macro may
have a superscript or subscript or both (in which case the superscript
must come first) and the arrow(s) grow long enough to hold the super- or
subscript.  If you type
 \verb+$A\to B\to^f C\to_g D\to^h_{{\rm Hom}(X,Y)} E$+, you get
 $A\to B\to^f C\to_g D\to^h_{{\rm Hom}(X,Y)} E$.  Similarly, the macro
 \verb+\toleft+ reverses the arrows.  The remaining macros of this sort
are \verb+\mon+ which gives a monic arrow, \verb+\epi+ which gives an
epic arrow, \verb+\two+ that gives a pair of arrows, as well as
leftwards pointing versions, \verb+\monleft+, \verb+\epileft+, and
\verb+twoleft+ of each of them.  Here is one more
example:
\begin{verbatim}
 $A\twoleft B\twoleft^f C\twoleft_g D\twoleft^h_{{\rm Hom}(X,Y)} E$
\end{verbatim}
 gives  $A\twoleft B\twoleft^f C\twoleft_g D\twoleft^h_{{\rm Hom}(X,Y)} E$.

There is an almost unlimited variety of such procedures possible.  The
ones that are provided can be used as templates to define new ones with,
say, curved arrows or three arrows or whatever a user might have need
of.

\subsection*{2-arrows}
 There is a macro for making 2-arrows of a fixed size, but varying
orientation.  They should be put at the appropriate position in a
diagram.  The size actually varies with the direction by about 10\%
because there is no simple way of implementing the sin$\circ$arctan and
cos$\circ$arctan functions and I have used rational approximating
functions, but the variation seems acceptable.  The worst cases are
those of slopes $\pm3$ and $\pm1/3$, which are about 5\% too short, and
$\pm1$, which are about 5\% too long.  These two cases are illustrated
below.  The two parameters are two integers \verb+dx+ and \verb+dy+
whose ratio is the slope of the arrow.  They need not be relatively
prime, but arithmetic overflow could occur if they were too large.  Here
is a sampler
 \begin{verbatim}
 $$\bfig
 \place(0,0)[\twoar(1,0)]
 \place(200,0)[\twoar(0,1)]
 \place(400,0)[\twoar(1,1)]
 \place(600,0)[\twoar(0,-1)]
 \place(800,0)[\twoar(1,2)]
 \place(1000,0)[\twoar(1,3)]
 \place(1200,0)[\twoar(1,-3)]
 \place(1400,0)[\twoar(-3,1)]
 \place(1600,0)[\twoar(-1,-3)]
 \place(1800,0)[\twoar(255,77)]
 \efig$$
\end{verbatim}
 $$\bfig
 \place(0,0)[\twoar(1,0)]
 \place(200,0)[\twoar(0,1)]
 \place(400,0)[\twoar(1,1)]
 \place(600,0)[\twoar(0,-1)]
 \place(800,0)[\twoar(1,2)]
 \place(1000,0)[\twoar(1,3)]
 \place(1200,0)[\twoar(1,-3)]
 \place(1400,0)[\twoar(-3,1)]
 \place(1600,0)[\twoar(-1,-3)]
 \place(1800,0)[\twoar(255,77)]
 \efig$$



\subsection*{Diagram from TTT}
The last example is a complicated diagram from TTT:
\begin{verbatim}
 $$\bfig
\morphism(0,2100)|l|/>/<0,-1400>[TT`TT'T`T\eta'T]
\morphism(0,2100)|a|/>/<700,0>[TT`T`\mu]
\morphism(0,2100)|l|/>/<700,-700>[TT`TTT'`TT\eta']
\morphism(700,2100)|r|/>/<700,-700>[`TT'`T\eta]
\place(700,1750)[1]
\morphism(700,1400)|b|/@<-20\ul>/<700,0>[TTT'`TT'`T\sigma]
\square(700,700)|a`m`m`a|/@<20\ul>`>``>/<700,700>[TTT'`
TT'`TT'TT'`TT'T';\mu T' `T\eta'TT'``]
\morphism(700,700)|a|/>/<700,0>[TT'TT'`TT'T'`TT'\sigma]
\place(300,1400)[2]
\place(1050,1050)[3]
\btriangle(1400,700)|m`r`a|/>`>`>/<700,700>[TT'`TT'T'`TT';
T\eta'T'`\hbox{\rm id}`]
\place(1600,1050)[6]
\square|a`l`m`b|<700,700>[TT'T`TT'TT'`T'T`T'TT';
TT'T\eta'`\sigma T`\sigma TT'`T'T\eta']
\square(1400,0)|a`m`r`b|<700,700>[TT'T'`TT'`T'T'`T';
T\mu'`\sigma T' `\sigma`\mu']
\morphism(700,0)|b|/>/<700,0>[T'TT'`T'T'`T'\sigma T']
\place(300,350)[4]
\place(1050,350)[5]
\place(1750,350)[7]
 \efig$$
\end{verbatim}
 $$\bfig
\morphism(0,2100)|l|/>/<0,-1400>[TT`TT'T`T\eta'T]
\morphism(0,2100)|a|/>/<700,0>[TT`T`\mu]
\morphism(0,2100)|l|/>/<700,-700>[TT`TTT'`TT\eta']
\morphism(700,2100)|r|/>/<700,-700>[`TT'`T\eta]
\place(700,1750)[1]
\morphism(700,1400)|b|/@<-20\ul>/<700,0>[TTT'`TT'`T\sigma]
\square(700,700)|a`m`m`a|/@<20\ul>`>``>/<700,700>[TTT'`
TT'`TT'TT'`TT'T';\mu T' `T\eta'TT'``]
\morphism(700,700)|a|/>/<700,0>[TT'TT'`TT'T'`TT'\sigma]
\place(300,1400)[2]
\place(1050,1050)[3]
\btriangle(1400,700)|m`r`a|/>`>`>/<700,700>[TT'`TT'T'`TT';
T\eta'T'`\hbox{\rm id}`]
\place(1600,1050)[6]
\square|a`l`m`b|<700,700>[TT'T`TT'TT'`T'T`T'TT';
TT'T\eta'`\sigma T`\sigma TT'`T'T\eta']
\square(1400,0)|a`m`r`b|<700,700>[TT'T'`TT'`T'T'`T';
T\mu'`\sigma T' `\sigma`\mu']
\morphism(700,0)|b|/>/<700,0>[T'TT'`T'T'`T'\sigma T']
\place(300,350)[4]
\place(1050,350)[5]
\place(1750,350)[7]
 \efig$$

\end{document}



From rrosebru@mta.ca Sun Apr 22 20:30:36 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3MMjMP01649
	for categories-list; Sun, 22 Apr 2001 19:45:22 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
X-Authentication-Warning: triples.math.mcgill.ca: barr owned process doing -bs
Date: Sun, 22 Apr 2001 08:37:44 -0400 (EDT)
From: Michael Barr <barr@barrs.org>
X-Sender: barr@triples.math.mcgill.ca
To: Categories list <categories@mta.ca>
Subject: categories: diagxy.tex
Message-ID: <Pine.LNX.4.10.10104220835001.5776-100000@triples.math.mcgill.ca>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 22

Appended is the latest version.  It is, I hope, very close to the final
version.  I have gotten almost no feedback from the first version.  I
encourage you to try it and let me know any problems or questions.  The
next email will be the revised version of the documentation.


%%%%%%%%%%%%%%%%%%%%%%%%%% diagxy.tex %%%%%%%%%%%%%%%
 % This is a package of commutative diagram macros built on top of Xy-pic
 % by Michael Barr (email: barr@barrs.org).  This may be freely
 % distributed, unchanged, for non-commercial use.  If changed, it must be
 % renamed.  Inclusion in a commercial software package is also
 % permitted, provided I receive one free copy of the software package for
 % my personal use.  There are no guarantees that this package is good for
 % anything.  I have tested it with LaTeX 2e, LaTeX 2.09 and Plain TeX.
 % Although I know of no reason it will not work with AMSTeX, I have not
 % tested it.

\input xy
\xyoption{arrow}

\newdir{ >}{{ }*!/-9pt/@{>}}
\newdir{ (}{{ }*!/-5pt/@{(}}
\newdir^{ (}{{ }*!/-5pt/@^{(}}
\newdir{< }{!/9pt/@{<}*{ }}

\newbox\Label%
\newdimen\high%
\newdimen\deep%
\newdimen\ul%
\newcount\deltax%
\newcount\deltay%
\newcount\deltaX%
\newcount\deltaY%

\newdimen\wdth
\newcount\xend%
\newcount\yend%
\newcount\Xend
\newcount\Yend
\newcount\xpos%
\newcount\ypos%
\newcount\default \default=500%
\newcount\defaultmargin \defaultmargin=200%
\newif\ifat%
\newcount\topw%
\newcount\botw%
\newcount\Xpos%
\newcount\Ypos%
\def\ratchet#1#2{\ifnum#1<#2\global #1=#2\fi}%

\newcount\atcode \atcode=\catcode`\@%
\catcode`\@=11
\expandafter\ifx\csname @ifnextchar\endcsname\relax
\def\ifnextchar#1#2#3{\let\@tempe
#1\def\@tempa{#2}\def\@tempb{#3}\futurelet
    \@tempc\@ifnch}
\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch
      \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi
      \fi \@tempd}
\def\:{\let\@sptoken= } \:  % this makes \@sptoken a space token
\def\:{\@xifnch} \expandafter\def\: {\futurelet\@tempc\@ifnch}
\else
\let\ifnextchar\@ifnextchar
\fi
\ul=.01em%
\X@xbase =.01em%
\Y@ybase =.01em%
\def\scalefactor#1{\ul=#1\ul \X@xbase=#1\X@xbase \Y@ybase=#1\Y@ybase}%
\catcode`\@=12%

\let\bfig\xy%
\let\efig\endxy%

\def\car#1#2\nil{#1}%

\def\morphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8`#9]{%
\xend#1\advance \xend by #5%
\yend#2\advance \yend by #6%
\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8`#9]}

\def\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8`#9]{%
\edef\next{#4}%
\ifx\next\empty \atfalse
\else \def\next{\car#4\nil}%
   \if\next@\relax\attrue \else \atfalse \fi
\fi%
\ifat%
 \edef\next{#4}%
 \ifx\next\empty%
  \POS(#1,#2)*+{#7}\ar#4 (\xend,\yend)*+{#8}%
 \else \if#3l%
  \ifnum #6>0%
   \POS(#1,#2)*+{#7}\ar#4^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar#4_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3m%
   \edef\next{#9}%
   \ifx\next\empty
     \POS(#1,#2)*+{#7}\ar#4 (\xend,\yend)*+{#8}%
   \else
     \setbox\Label=\hbox{\kern .5pt $\labelstyle #9$\kern .5pt}%
     \high=\ht\Label \advance\high by 1pt \ht\Label=\high%
     \deep=\dp\Label \advance\deep by 1pt \dp\Label=\deep%
     \POS(#1,#2)*+{#7}\ar#4|-{\box\Label} (\xend,\yend)*+{#8}%
   \fi
 \else \if#3r%
  \ifnum #6<0%
   \POS(#1,#2)*+{#7}\ar#4^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar#4_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3a%
  \ifnum #5>0%
   \POS(#1,#2)*+{#7}\ar#4^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar#4_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3b%
  \ifnum #5<0%
   \POS(#1,#2)*+{#7}\ar#4^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar#4_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else
   \POS(#1,#2)*+{#7}\ar#4 (\xend,\yend)*+{#8}%
 \fi\fi\fi\fi\fi\fi%
\else%
\edef\next{#4}%
 \ifx\next\empty%
  \POS(#1,#2)*+{#7}; (\xend,\yend)*+{#8}%
 \else \edef\next{#4}%
  \ifx\next\empty%
   \POS(#1,#2)*+{#7}\ar (\xend,\yend)*+{#8}%
 \else \if#3l%
  \ifnum #6>0%
   \POS(#1,#2)*+{#7}\ar@{#4}^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar@{#4}_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3m%
   \edef\next{#9}%
   \ifx\next\empty
     \POS(#1,#2)*+{#7}\ar@{#4} (\xend,\yend)*+{#8}%
   \else
     \setbox\Label=\hbox{\kern .5pt $\labelstyle #9$\kern .5pt}%
     \high=\ht\Label \advance\high by 1pt \ht\Label=\high%
     \deep=\dp\Label \advance\deep by 1pt \dp\Label=\deep%
     \POS(#1,#2)*+{#7}\ar@{#4}|-{\box\Label} (\xend,\yend)*+{#8}%
   \fi
 \else \if#3r%
  \ifnum #6<0%
   \POS(#1,#2)*+{#7}\ar@{#4}^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar@{#4}_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3a%
  \ifnum #5>0%
   \POS(#1,#2)*+{#7}\ar@{#4}^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar@{#4}_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else \if#3b%
  \ifnum #5<0%
   \POS(#1,#2)*+{#7}\ar@{#4}^-{#9} (\xend,\yend)*+{#8}%
  \else%
   \POS(#1,#2)*+{#7}\ar@{#4}_-{#9} (\xend,\yend)*+{#8}%
  \fi%
 \else
   \POS(#1,#2)*+{#7}\ar@{#4} (\xend,\yend)*+{#8}%
 \fi\fi\fi\fi\fi\fi\fi%
\fi\ignorespaces}%

\def\location(#1,#2){\xpos=#1\ypos=#2\ignorespaces}%
\def\squareplacements|#1`#2`#3`#4|{%
    \def\xa{#1}\def\xb{#2}\def\xc{#3}\def\xd{#4}\ignorespaces}%
\def\sizes<#1,#2>{\deltax=#1\deltay=#2\ignorespaces}%
\def\squaredata[#1`#2`#3`#4;#5`#6`#7`#8]{%
    \def\nodea{#1}\def\nodeb{#2}\def\nodec{#3}\def\noded{#4}%
    \def\labela{#5}\def\labelb{#6}\def\labelc{#7}\def\labeld{#8}\ignorespaces}%
\def\squaredata[#1`#2`#3`#4;#5]{%
 \def\nodea{#1}\def\nodeb{#2}\def\nodec{#3}\def\noded{#4}%
 \edef\next{#5}%
 \ifx\next\empty
  \def\labela{}\def\labelb{}\def\labelc{}\def\labeld{}%
 \else\gdef\next[##1`##2`##3`##4]{%
  \def\labela{##1}\def\labelb{##2}\def\labelc{##3}\def\labeld{##4}}%
 \next[#5]%
 \fi \ignorespaces}%

\def\squarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{%
\location(#1)%
\squareplacements|#2|%
\sizes<#7>%
\squaredata[#8]%
\morphism(\xpos,\ypos)|\xd|/#6/<\deltax,0>[\nodec`\noded`\labeld]%
\advance \ypos by \deltay%
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]%
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]%
 \advance \xpos by \deltax%
\morphism(\xpos,\ypos)|\xc|/#5/<0,-\deltay>[\nodeb`\noded`\labelc]%
\ignorespaces}%

\def\square{\ifnextchar({\squarep}{\squarep(0,0)}}%
\def\squarep(#1){\ifnextchar|{\squarepp(#1)}{\squarepp(#1)|a`l`r`b|}}%
\def\squarepp(#1)|#2|{\ifnextchar/{\squareppp(#1)|#2|}%
    {\squareppp(#1)|#2|/>`>`>`>/}}%
\def\squareppp(#1)|#2|/#3`#4`#5`#6/{%
    \ifnextchar<{\squarepppp(#1)|#2|/#3`#4`#5`#6/}%
    {\squarepppp(#1)|#2|/#3`#4`#5`#6/<\default,\default>}}%

\def\triplacements|#1`#2`#3|{\def\xa{#1}\def\xb{#2}\def\xc{#3}}%
\def\tridata[#1`#2`#3;#4`#5`#6]{%
    \def\nodea{#1}\def\nodeb{#2}\def\nodec{#3}%
    \def\labela{#4}\def\labelb{#5}\def\labelc{#6}}%

\def\ptrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]%
\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xc|/#5/<-\deltax,-\deltay>[\nodeb`\nodec`\labelc]%
\ignorespaces}%

\def\ptriangle{\ifnextchar({\ptrianglep}{\ptrianglep(0,0)}}%
\def\ptrianglep(#1){\ifnextchar|{\ptrianglepp(#1)}{\ptrianglepp(#1)|a`l`r|}}%
\def\ptrianglepp(#1)|#2|{\ifnextchar/{\ptriangleppp(#1)|#2|}%
    {\ptriangleppp(#1)|#2|/>`>`>/}}%
\def\ptriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\ptrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\ptrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%

\def\qtrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]%
\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xc|/#5/<0,-\deltay>[\nodeb`\nodec`\labelc]%
\ignorespaces}%

\def\qtriangle{\ifnextchar({\qtrianglep}{\qtrianglep(0,0)}}%
\def\qtrianglep(#1){\ifnextchar|{\qtrianglepp(#1)}{\qtrianglepp(#1)|a`l`r|}}%
\def\qtrianglepp(#1)|#2|{\ifnextchar/{\qtriangleppp(#1)|#2|}%
    {\qtriangleppp(#1)|#2|/>`>`>/}}%
\def\qtriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\qtrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\qtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%

\def\dtrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]%
\advance\ypos by \deltay\advance \xpos by \deltax%
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]%
\ignorespaces}%

\def\dtriangle{\ifnextchar({\dtrianglep}{\dtrianglep(0,0)}}%
\def\dtrianglep(#1){\ifnextchar|{\dtrianglepp(#1)}{\dtrianglepp(#1)|l`r`b|}}%
\def\dtrianglepp(#1)|#2|{\ifnextchar/{\dtriangleppp(#1)|#2|}%
    {\dtriangleppp(#1)|#2|/>`>`>/}}%
\def\dtriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\dtrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%

\def\btrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]%
\advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xa|/#3/<0,-\deltay>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]%
\ignorespaces}%

\def\btriangle{\ifnextchar({\btrianglep}{\btrianglep(0,0)}}%
\def\btrianglep(#1){\ifnextchar|{\btrianglepp(#1)}{\btrianglepp(#1)|l`r`b|}}%
\def\btrianglepp(#1)|#2|{\ifnextchar/{\btriangleppp(#1)|#2|}%
    {\btriangleppp(#1)|#2|/>`>`>/}}%
\def\btriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\btrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\btrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%

\def\Atrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\multiply\deltax by 2%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]%
\divide\deltax by 2
\advance\ypos by \deltay\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]%
\ignorespaces}%

\def\Atriangle{\ifnextchar({\Atrianglep}{\Atrianglep(0,0)}}%
\def\Atrianglep(#1){\ifnextchar|{\Atrianglepp(#1)}{\Atrianglepp(#1)|l`r`b|}}%
\def\Atrianglepp(#1)|#2|{\ifnextchar/{\Atriangleppp(#1)|#2|}%
    {\Atriangleppp(#1)|#2|/>`>`>/}}%
\def\Atriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\Atrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\Atrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%

\def\Vtrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]%
\multiply\deltax by 2%
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]%
\advance\xpos by \deltax \divide \deltax by 2
\morphism(\xpos,\ypos)|\xc|/#5/<-\deltax,-\deltay>[\nodeb`\nodec`\labelc]%
\ignorespaces}%

\def\Vtriangle{\ifnextchar({\Vtrianglep}{\Vtrianglep(0,0)}}%
\def\Vtrianglep(#1){\ifnextchar|{\Vtrianglepp(#1)}{\Vtrianglepp(#1)|a`l`b|}}%
\def\Vtrianglepp(#1)|#2|{\ifnextchar/{\Vtriangleppp(#1)|#2|}%
    {\Vtriangleppp(#1)|#2|/>`>`>/}}%
\def\Vtriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\Vtrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\Vtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%

\def\Ctrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance \ypos by \deltay%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,-\deltay>[\nodeb`\nodec`\labelc]%
\advance\ypos by \deltay \advance \xpos by \deltax%
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]%
\multiply\deltay by 2%
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]%
\ignorespaces}%

\def\Ctriangle{\ifnextchar({\Ctrianglep}{\Ctrianglep(0,0)}}%
\def\Ctrianglep(#1){\ifnextchar|{\Ctrianglepp(#1)}{\Ctrianglepp(#1)|a`r`b|}}%
\def\Ctrianglepp(#1)|#2|{\ifnextchar/{\Ctriangleppp(#1)|#2|}%
    {\Ctriangleppp(#1)|#2|/>`>`>/}}%
\def\Ctriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\Ctrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\Ctrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%

\def\Dtrianglepppp(#1)|#2|/#3`#4`#5/<#6>[#7]{%
\location(#1)%
\triplacements|#2|%
\sizes<#6>%
\tridata[#7]%
\advance\xpos by \deltax \advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xc|/#5/<-\deltax,-\deltay>[\nodeb`\nodec`\labelc]%
\advance\xpos by -\deltax \advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodeb`\labelb]%
\multiply \deltay by 2%
\morphism(\xpos,\ypos)|\xa|/#3/<0,-\deltay>[\nodea`\nodec`\labela]%
\ignorespaces}%

\def\Dtriangle{\ifnextchar({\Dtrianglep}{\Dtrianglep(0,0)}}%
\def\Dtrianglep(#1){\ifnextchar|{\Dtrianglepp(#1)}{\Dtrianglepp(#1)|a`l`b|}}%
\def\Dtrianglepp(#1)|#2|{\ifnextchar/{\Dtriangleppp(#1)|#2|}%
    {\Dtriangleppp(#1)|#2|/>`>`>/}}%
\def\Dtriangleppp(#1)|#2|/#3`#4`#5/{%
    \ifnextchar<{\Dtrianglepppp(#1)|#2|/#3`#4`#5/}%
    {\Dtrianglepppp(#1)|#2|/#3`#4`#5/<\default,\default>}}%

\def\tripairplacements|#1`#2`#3`#4`#5|{\def\xa{#1}\def\xb{#2}\def\xc{#3}%
\def\xd{#4}\def\xe{#5}}%
\def\tripairdata[#1`#2`#3`#4;#5`#6`#7`#8`#9]{%
 \def\nodea{#1}\def\nodeb{#2}\def\nodec{#3}\def\noded{#4}%
 \def\labela{#5}\def\labelb{#6}\def\labelc{#7}\def\labeld{#8}\def\labele{#9}}%


\def\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
\location(#1)%
\tripairplacements|#2|%
\sizes<#8>%
\tripairdata[#9]%
\morphism(\xpos,\ypos)|\xd|/#6/<\deltax,0>[\nodeb`\nodec`\labeld]%
\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xe|/#7/<\deltax,0>[\nodec`\noded`\labele]%
\advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,-\deltay>[\nodea`\noded`\labelc]%
\ignorespaces}%

\def\Atrianglepair{\ifnextchar({\Atrianglepairp}{\Atrianglepairp(0,0)}}%
\def\Atrianglepairp(#1){\ifnextchar|{\Atrianglepairpp(#1)}%
{\Atrianglepairpp(#1)|l`m`r`b`b|}}%
\def\Atrianglepairpp(#1)|#2|{\ifnextchar/{\Atrianglepairppp(#1)|#2|}%
    {\Atrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
\def\Atrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
    \ifnextchar<{\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
    {\Atrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%

\def\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
\location(#1)%
\tripairplacements|#2|%
\sizes<#8>%
\tripairdata[#9]%
\advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xa|/#3/<\deltax,0>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,-\deltay>[\nodea`\noded`\labelc]%
\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,0>[\nodeb`\nodec`\labelb]%
\morphism(\xpos,\ypos)|\xd|/#6/<0,-\deltay>[\nodeb`\noded`\labeld]%
\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xe|/#7/<-\deltax,-\deltay>[\nodec`\noded`\labele]%
\ignorespaces}%

\def\Vtrianglepair{\ifnextchar({\Vtrianglepairp}{\Vtrianglepairp(0,0)}}%
\def\Vtrianglepairp(#1){\ifnextchar|{\Vtrianglepairpp(#1)}%
{\Vtrianglepairpp(#1)|a`a`l`m`r|}}%
\def\Vtrianglepairpp(#1)|#2|{\ifnextchar/{\Vtrianglepairppp(#1)|#2|}%
    {\Vtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
\def\Vtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
    \ifnextchar<{\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
    {\Vtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%

\def\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
\location(#1)%
\tripairplacements|#2|%
\sizes<#8>%
\tripairdata[#9]%
\advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xe|/#7/<0,-\deltay>[\nodec`\noded`\labele]%
\advance\xpos by -\deltax%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]%
\morphism(\xpos,\ypos)|\xd|/#6/<\deltax,-\deltay>[\nodeb`\noded`\labeld]%
\advance\ypos by \deltay%
\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xa|/#3/<-\deltax,-\deltay>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<0,-\deltay>[\nodea`\nodec`\labelb]%
\ignorespaces}%

\def\Ctrianglepair{\ifnextchar({\Ctrianglepairp}{\Ctrianglepairp(0,0)}}%
\def\Ctrianglepairp(#1){\ifnextchar|{\Ctrianglepairpp(#1)}%
{\Ctrianglepairpp(#1)|l`r`m`l`r|}}%
\def\Ctrianglepairpp(#1)|#2|{\ifnextchar/{\Ctrianglepairppp(#1)|#2|}%
    {\Ctrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
\def\Ctrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
    \ifnextchar<{\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
    {\Ctrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%

\def\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<#8>[#9]{%
\location(#1)%
\tripairplacements|#2|%
\sizes<#8>%
\tripairdata[#9]%
\advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xc|/#5/<\deltax,0>[\nodeb`\nodec`\labelc]%
\morphism(\xpos,\ypos)|\xd|/#6/<0,-\deltay>[\nodeb`\noded`\labeld]%
\advance\ypos by \deltay%
\morphism(\xpos,\ypos)|\xa|/#3/<0,-\deltay>[\nodea`\nodeb`\labela]%
\morphism(\xpos,\ypos)|\xb|/#4/<\deltax,-\deltay>[\nodea`\nodec`\labelb]%
\advance\ypos by -\deltay%
\advance\xpos by \deltax%
\morphism(\xpos,\ypos)|\xe|/#7/<-\deltax,-\deltay>[\nodec`\noded`\labele]%
\ignorespaces}%

\def\Dtrianglepair{\ifnextchar({\Dtrianglepairp}{\Dtrianglepairp(0,0)}}%
\def\Dtrianglepairp(#1){\ifnextchar|{\Dtrianglepairpp(#1)}%
{\Dtrianglepairpp(#1)|l`r`m`l`r|}}%
\def\Dtrianglepairpp(#1)|#2|{\ifnextchar/{\Dtrianglepairppp(#1)|#2|}%
    {\Dtrianglepairppp(#1)|#2|/>`>`>`>`>/}}%
\def\Dtrianglepairppp(#1)|#2|/#3`#4`#5`#6`#7/{%
    \ifnextchar<{\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/}%
    {\Dtrianglepairpppp(#1)|#2|/#3`#4`#5`#6`#7/<\default,\default>}}%

\def\place(#1,#2)[#3]{\POS(#1,#2)*+{#3}}%

\def\pullback#1]#2]{\square#1]\trident#2]}%
\def\tridentdata[#1;#2`#3`#4]{\def\nodee{#1}\def\labele{#2}%
   \def\labelf{#3}\def\labelg{#4}}%
\def\trident{\ifnextchar|{\tridentp}{\tridentp|a`m`b|}}%

\def\tridentp|#1|{\ifnextchar/{\tridentpp|#1|}{\tridentpp|#1|/{>}`{>}`{>}/}}%

\def\tridentpp|#1|/#2/{\ifnextchar<{\tridentppp|#1|/#2/}%
  {\tridentppp|#1|/#2/<500,500>}}%

\def\tridentppp|#1`#2`#3|/#4`#5`#6/<#7,#8>[#9]{%
\tridentdata[#9]%
\advance \xpos by -\deltax%
\advance \xpos by -#7\advance \ypos by #8%
\advance\deltax by #7%
\morphism(\xpos,\ypos)|#1|/#4/<\deltax,-#8>[\nodee`\nodeb`\labele]%
\advance\deltax by -#7%
\morphism(\xpos,\ypos)|#2|/#5/<#7,-#8>[\nodee`\nodea`\labelf]%
\advance\deltay by #8%
\morphism(\xpos,\ypos)|#3|/#6/<#7,-\deltay>[\nodee`\nodec`\labelg]%
\ignorespaces}%


\def\setmorphismwidth#1#2#3#4{%
 \setbox0=\hbox{$#1#3#3#2$}#4=\wd0%
 \divide #4 by 2 \divide #4 by \ul%
 \advance #4 by \defaultmargin \ratchet{#4}{500}%
}%


\def\setSquarewidth[#1`#2`#3`#4;#5`#6`#7`#8]{%
 \setmorphismwidth{#1}{#2}{#5}{\topw}%
 \setmorphismwidth{#3}{#4}{#8}{\botw}%
\ratchet{\topw}{\botw}}%


\def\Squarepppp(#1)|#2|/#3/<#4>[#5]{%
 \setSquarewidth[#5]%
 \squarepppp(#1)|#2|/#3/<\topw,#4>[#5]%
\ignorespaces}%

\def\Square{\ifnextchar({\Squarep}{\Squarep(0,0)}}%
\def\Squarep(#1){\ifnextchar|{\Squarepp(#1)}{\Squarepp(#1)|a`l`r`b|}}%
\def\Squarepp(#1)|#2|{\ifnextchar/{\Squareppp(#1)|#2|}%
    {\Squareppp(#1)|#2|/>`>`>`>/}}%
\def\Squareppp(#1)|#2|/#3`#4`#5`#6/{%
    \ifnextchar<{\Squarepppp(#1)|#2|/#3`#4`#5`#6/}%
    {\Squarepppp(#1)|#2|/#3`#4`#5`#6/<\default>}}%

\def\Placements|#1`#2`#3`#4`#5`#6`#7|{%
 \def\Xa{#1}%
 \def\Xb{#2}%
 \def\Xc{#3}%
 \def\Xd{#4}%
 \def\Xe{#5}%
 \def\Xf{#6}%
 \def\Xg{#7}%
}%

\def\Nodes[#1`#2`#3`#4`#5`#6]{%
 \def\Nodea{#1}%
 \def\Nodeb{#2}%
 \def\Nodec{#3}%
 \def\Noded{#4}%
 \def\Nodee{#5}%
 \def\Nodef{#6}%
}%

\def\Labels[#1`#2`#3`#4`#5`#6`#7]{%
 \def\Labela{#1}%
 \def\Labelb{#2}%
 \def\Labelc{#3}%
 \def\Labeld{#4}%
 \def\Labele{#5}%
 \def\Labelf{#6}%
 \def\Labelg{#7}%
}%


\def\hSquarespppp(#1,#2)|#3|/#4/<#5>[#6;#7]{%
\Xpos=#1\Ypos=#2%
\Placements|#3|%
\deltaY=#5%
\Nodes[#6]%
\Labels[#7]%
\dohSquares/#4/}%

\def\dohSquares/#1`#2`#3`#4`#5`#6`#7/{%
\Squarepppp(\Xpos,\Ypos)|\Xa`\Xc`\Xd`\Xf|/#1`#3`#4`#6/<\deltaY>%
 [\Nodea`\Nodeb`\Noded`\Nodee;\Labela`\Labelc`\Labeld`\Labelf]%
 \advance \Xpos by \topw
\Squarepppp(\Xpos,\Ypos)|\Xb`\Xd`\Xe`\Xg|/#2``#5`#7/<\deltaY>%
[\Nodeb`\Nodec`\Nodee`\Nodef;\Labelb``\Labele`\Labelg]%
\ignorespaces}%

\def\hSquares{\ifnextchar({\hSquaresp}{\hSquaresp(0,0)}}%
\def\hSquaresp(#1){\ifnextchar|{\hSquarespp(#1)}{\hSquarespp%
(#1)|a`a`l`m`r`b`b|}}%
\def\hSquarespp(#1)|#2|{\ifnextchar/{\hSquaresppp(#1)|#2|}%
    {\hSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
\def\hSquaresppp(#1)|#2|/#3/{%
    \ifnextchar<{\hSquarespppp(#1)|#2|/#3/}%
    {\hSquarespppp(#1)|#2|/#3/<\default>}}%




\def\vSquarespppp(#1,#2)|#3|/#4/<#5,#6>[#7;#8]{%
\Xpos=#1\Ypos=#2%
\Placements|#3|%
\deltaX=#5%
\deltaY=#6%
\Nodes[#7]%
\Labels[#8]%
\dovSquares/#4/\ignorespaces}%

\def\dovSquares/#1`#2`#3`#4`#5`#6`#7/{%
\setmorphismwidth{\Nodea}{\Nodeb}{\Labela}{\topw}%
\setmorphismwidth{\Nodec}{\Noded}{\Labeld}{\botw}%
\ratchet{\topw}{\botw}%
\setmorphismwidth{\Nodee}{\Nodef}{\Labelg}{\botw}%
\ratchet{\topw}{\botw}%
\square(\Xpos,\Ypos)|\Xd`\Xe`\Xf`\Xg|/`#5`#6`#7/<\topw,\deltaX>%
 [\Nodec`\Noded`\Nodee`\Nodef;`\Labele`\Labelf`\Labelg]%
\advance \Ypos by \deltaX%
\square(\Xpos,\Ypos)|\Xa`\Xb`\Xc`\Xd|/#1`#2`#3`#4/<\topw,\deltaY>%
 [\Nodea`\Nodeb`\Nodec`\Noded;\Labela`\Labelb`\Labelc`\Labeld]%
}%

\def\vSquares{\ifnextchar({\vSquaresp}{\vSquaresp(0,0)}}%
\def\vSquaresp(#1){\ifnextchar|{\vSquarespp(#1)}{\vSquarespp%
(#1)|a`l`r`m`l`r`b|}}%
\def\vSquarespp(#1)|#2|{\ifnextchar/{\vSquaresppp(#1)|#2|}%
    {\vSquaresppp(#1)|#2|/>`>`>`>`>`>`>/}}%
\def\vSquaresppp(#1)|#2|/#3/{%
    \ifnextchar<{\vSquarespppp(#1)|#2|/#3/}%
    {\vSquarespppp(#1)|#2|/#3/<\default>}}%

\def\osquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{\squarepppp%
 (#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
 \let\Nodea\nodea\let\Nodeb\nodeb%
\let\Nodec\nodec\let\Noded\noded\Xpos=\xpos\Ypos=\ypos%
\deltaX=\deltax \deltaY=\deltay \isquare}

\def\cube{\ifnextchar({\osquarep}{\osquarep(0,0)}}%
\def\osquarep(#1){\ifnextchar|{\osquarepp(#1)}{\osquarepp(#1)|a`l`r`b|}}%
\def\osquarepp(#1)|#2|{\ifnextchar/{\osquareppp(#1)|#2|}%
    {\osquareppp(#1)|#2|/>`>`>`>/}}%
\def\osquareppp(#1)|#2|/#3`#4`#5`#6/{%
    \ifnextchar<{\osquarepppp(#1)|#2|/#3`#4`#5`#6/}%
    {\osquarepppp(#1)|#2|/#3`#4`#5`#6/<1500,1500>}}%

\def\isquarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]{%
 \squarepppp(#1)|#2|/#3`#4`#5`#6/<#7>[#8]%
\ifnextchar|{\cubep}{\cubep|m`m`m`m|}}%
\def\cubep|#1|{\ifnextchar/{\cubepp|#1|}{\cubepp|#1|/>`>`>`>/}}%

\def\isquare{\ifnextchar({\isquarep}{\isquarep(\default,\default)}}%
\def\isquarep(#1){\ifnextchar|{\isquarepp(#1)}{\isquarepp(#1)|a`l`r`b|}}
\def\isquarepp(#1)|#2|{\ifnextchar/{\isquareppp(#1)|#2|}%
    {\isquareppp(#1)|#2|/>`>`>`>/}}%
\def\isquareppp(#1)|#2|/#3`#4`#5`#6/{%
    \ifnextchar<{\isquarepppp(#1)|#2|/#3`#4`#5`#6/}%
    {\isquarepppp(#1)|#2|/#3`#4`#5`#6/<500,500>}}%

\def\cubepp|#1`#2`#3`#4|/#5`#6`#7`#8/[#9]{%
\def\Labels[##1`##2`##3`##4]{\gdef\Labela{##1}%
\gdef\Labelb{##2}\gdef\Labelc{##3}\gdef\Labeld{##4}}\Labels[#9]%
\xend\xpos \yend\ypos
\Xend\xend\advance\Xend by -\Xpos
\Yend\yend\advance\Yend by -\Ypos
\domorphism(\Xpos,\Ypos)|#2|/#6/<\Xend,\Yend>[\Nodeb`\nodeb`\Labelb]%
\advance\Xpos by-\deltaX
\advance\xend by-\deltax
\Xend\xend\advance\Xend by -\Xpos
\domorphism(\Xpos,\Ypos)|#1|/#5/<\Xend,\Yend>[\Nodea`\nodea`\Labela]%
\advance\Ypos by-\deltaY
\advance\yend by-\deltay
\Yend\yend\advance\Yend by -\Ypos
\domorphism(\Xpos,\Ypos)|#3|/#7/<\Xend,\Yend>[\Nodec`\nodec`\Labelc]%
\advance\Xpos by\deltaX
\advance\xend by\deltax
\Xend\xend\advance\Xend by -\Xpos
\domorphism(\Xpos,\Ypos)|#4|/#8/<\Xend,\Yend>[\Noded`\noded`\Labeld]%
\ignorespaces}

\def\setwdth#1#2{\setbox0\hbox{$#1$}\wdth=\wd0
\setbox0\hbox{$#2$}\ifnum\wdth<\wd0 \wdth=\wd0 \fi}

\def\tx^#1_#2{\allowbreak\edef\next{#1}\edef\nextt{#2}
\setwdth{#1}{#2}\deltax=\wdth \divide \deltax by \ul
\advance \deltax by 100 \ratchet{\deltax}{200}
\ifx\next\empty
  \ifx\nextt\empty
    \>\xy \ar(\deltax,0)\endxy\>%
  \else
    \>\xy \ar_{#2}(\deltax,0)\endxy\>%
  \fi
\else
  \ifx\nextt\empty
    \>\xy \ar^{#1}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar^{#1}_{#2}(\deltax,0)\endxy\>%
  \fi
\fi}

\def\txx^#1{\ifnextchar_{\tx^{#1}}{\tx^{#1}_{}}}
\def\to{\ifnextchar^{\txx}{\txx^{}}}

\def\txleft^#1_#2{\allowbreak\edef\next{#1}\edef\nextt{#2}
\setwdth{#1}{#2}\deltax=\wdth \divide \deltax by \ul
\advance \deltax by 100 \ratchet{\deltax}{200}
\ifx\next\empty
  \ifx\nextt\empty
    \>\xy \ar@{<-}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{<-}_{#2}(\deltax,0)\endxy\>%
  \fi
\else
  \ifx\nextt\empty
    \>\xy \ar@{<-}^{#1}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{<-}^{#1}_{#2}(\deltax,0)\endxy\>%
  \fi
\fi}

\def\txxleft^#1{\ifnextchar_{\txleft^{#1}}{\txleft^{#1}_{}}}
\def\toleft{\ifnextchar^{\txxleft}{\txxleft^{}}}

\def\monx^#1_#2{\allowbreak\edef\next{#1}\edef\nextt{#2}
\setwdth{#1}{#2}\deltax=\wdth \divide \deltax by \ul
\advance \deltax by 125 \ratchet{\deltax}{225}
\ifx\next\empty
  \ifx\nextt\empty
    \>\xy \ar@{ >->}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{ >->}_{#2}(\deltax,0)\endxy\>%
  \fi
\else
  \ifx\nextt\empty
    \>\xy \ar@{ >->}^{#1}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{ >->}^{#1}_{#2}(\deltax,0)\endxy\>%
  \fi
\fi}

\def\monxx^#1{\ifnextchar_{\monx^{#1}}{\monx^{#1}_{}}}
\def\mon{\ifnextchar^{\monxx}{\monxx^{}}}

\def\monleftx^#1_#2{\allowbreak\edef\next{#1}\edef\nextt{#2}
\setwdth{#1}{#2}\deltax=\wdth \divide \deltax by \ul
\advance \deltax by 125 \ratchet{\deltax}{225}
\ifx\next\empty
  \ifx\nextt\empty
    \>\xy \ar@{<-< }(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{<-< }_{#2}(\deltax,0)\endxy\>%
  \fi
\else
  \ifx\nextt\empty
    \>\xy \ar@{<-< }^{#1}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{<-< }^{#1}_{#2}(\deltax,0)\endxy\>%
  \fi
\fi}

\def\monleftxx^#1{\ifnextchar_{\monleftx^{#1}}{\monleftx^{#1}_{}}}
\def\monleft{\ifnextchar^{\monleftxx}{\monleftxx^{}}}

\def\\epileftx^#1_#2{\allowbreak\edef\next{#1}\edef\nextt{#2}
\setwdth{#1}{#2}\deltax=\wdth \divide \deltax by \ul
\advance \deltax by 125 \ratchet{\deltax}{225}
\ifx\next\empty
  \ifx\nextt\empty
    \>\xy \ar@{<<-}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{<<-}_{#2}(\deltax,0)\endxy\>%
  \fi
\else
  \ifx\nextt\empty
    \>\xy \ar@{<<-}^{#1}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{<<-}^{#1}_{#2}(\deltax,0)\endxy\>%
  \fi
\fi}

\def\\epileftxx^#1{\ifnextchar_{\\epileftx^{#1}}{\\epileftx^{#1}_{}}}
\def\\epileft{\ifnextchar^{\\epileftxx}{\\epileftxx^{}}}

\def\epix^#1_#2{\allowbreak\edef\next{#1}\edef\nextt{#2}
\setwdth{#1}{#2}\deltax=\wdth \divide \deltax by \ul
\advance \deltax by 125 \ratchet{\deltax}{225}
\ifx\next\empty
  \ifx\nextt\empty
    \>\xy \ar@{->>}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{->>}_{#2}(\deltax,0)\endxy\>%
  \fi
\else
  \ifx\nextt\empty
    \>\xy \ar@{->>}^{#1}(\deltax,0)\endxy\>%
  \else
    \>\xy \ar@{->>}^{#1}_{#2}(\deltax,0)\endxy\>%
  \fi
\fi}

\def\epixx^#1{\ifnextchar_{\epix^{#1}}{\epix^{#1}_{}}}
\def\epi{\ifnextchar^{\epixx}{\epixx^{}}}

\def\twx^#1_#2{\allowbreak\edef\next{#1}\edef\nextt{#2}
\setwdth{#1}{#2}\deltax=\wdth \divide \deltax by \ul
\advance \deltax by 100 \ratchet{\deltax}{200}
\ifx\next\empty
  \ifx\nextt\empty
    \>\xy
    \ar@<2.5pt>(\deltax,0)
    \ar@<-2.5pt>(\deltax,0)
    \endxy\>%
  \else
    \>\xy
    \ar@<2.5pt>(\deltax,0)
    \ar@<-2.5pt>_{#2}(\deltax,0)
    \endxy\>%
  \fi
\else
  \ifx\nextt\empty
    \>\xy
    \ar@<2.5pt>^{#1}(\deltax,0)
    \ar@<-2.5pt>(\deltax,0)
    \endxy\>%
  \else
    \>\xy
    \ar@<2.5pt>^{#1}(\deltax,0)
    \ar@<-2.5pt>_{#2}(\deltax,0)
    \endxy\>%
  \fi
\fi}

\def\twxx^#1{\ifnextchar_{\twx^{#1}}{\twx^{#1}_{}}}
\def\two{\ifnextchar^{\twxx}{\twxx^{}}}

\def\twleftx^#1_#2{\allowbreak\edef\next{#1}\edef\nextt{#2}
\setwdth{#1}{#2}\deltax=\wdth \divide \deltax by \ul
\advance \deltax by 100 \ratchet{\deltax}{200}
\ifx\next\empty
  \ifx\nextt\empty
    \>\xy
    \ar@{<-}@<2.5pt>(\deltax,0)
    \ar@{<-}@<-2.5pt>(\deltax,0)
    \endxy\>%
  \else
    \>\xy
    \ar@{<-}@<2.5pt>(\deltax,0)
    \ar@{<-}@<-2.5pt>_{#2}(\deltax,0)
    \endxy\>%
  \fi
\else
  \ifx\nextt\empty
    \>\xy
    \ar@{<-}@<2.5pt>^{#1}(\deltax,0)
    \ar@{<-}@<-2.5pt>(\deltax,0)
    \endxy\>%
  \else
    \>\xy
    \ar@{<-}@<2.5pt>^{#1}(\deltax,0)
    \ar@{<-}@<-2.5pt>_{#2}(\deltax,0)
    \endxy\>%
  \fi
\fi}

\def\twleftxx^#1{\ifnextchar_{\twleftx^{#1}}{\twleftx^{#1}_{}}}
\def\twoleft{\ifnextchar^{\twleftxx}{\twleftxx^{}}}

\def\twoar(#1,#2){%
 \deltax#1\deltay#2%
 \deltaX=\ifnum\deltax<0-\fi\deltax
 \deltaY=\ifnum\deltay<0-\fi\deltay
 \multiply\deltax by 300
 \multiply\deltay by 300
 \ifnum \deltaX > \deltaY
    \multiply \deltaX by 3 \advance \deltaX by \deltaY
 \else
    \multiply \deltaY by 3 \advance \deltaX by \deltaY
 \fi
 \divide \deltax by \deltaX
 \divide \deltay by \deltaX
 \xy \ar@{=>}(\deltax,\deltay) \endxy
}

\catcode`\@=\atcode%



From rrosebru@mta.ca Mon Apr 23 12:50:06 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3NEvGl10049
	for categories-list; Mon, 23 Apr 2001 11:57:16 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Date: Mon, 23 Apr 2001 15:10:13 +0100
From: Paul Taylor <pt@dcs.qmw.ac.uk>
Message-Id: <200104231410.PAA30611@koi-pc.dcs.qmw.ac.uk>
To: categories@mta.ca
Subject: categories: Hausdorff's book
Sender: cat-dist@mta.ca
Precedence: bulk
Status: RO
X-Status: 
X-Keywords:
X-UID: 23

Does anyone know of an English translation or summary of the chapters (7-9)
on topology in the first edition of Hausdorff's "Grundz\"uge der
Mengenlehre"?    This material was omitted from the later editions,
on which the published English translations were based.

Problem is, I don't read German, but I could cope with a French version,
if such exists but there is no English one.

Hausdorff's axiomatisation is based on the family of open neighbourhoods
of each point;   the usual "finite intersections and arbitrary unions"
of open subsets are due, I believe, to Bourbaki.

Paul


From rrosebru@mta.ca Wed Apr 25 09:22:01 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3PBhG523348
	for categories-list; Wed, 25 Apr 2001 08:43:16 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
From: Gonzalo Reyes <reyes@ESI.UMontreal.CA>
Message-Id: <200104242126.f3OLQvQ00576@telemaque.dms.umontreal.ca>
Content-Type: text/plain
MIME-Version: 1.0 (NeXT Mail 4.2mach_patches v148.2)
Date: Tue, 24 Apr 2001 17:26:57 -0400
To: categories@mta.ca
Subject: categories: preprint: Some differential equations in Synthetic Differential  Geometry
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 24

The following paper is available at the address given below

Some differential equations in Synthetic Differential Geometry
by Anders Kock and Gonzalo E. Reyes

Abstract:
Some differential equations are considered in the context of Synthetic  
Differential Geometry. Here, this means that not only nilpotent  
infinitesimals, but also the formation of function spaces is exploited. In  
particular, we utilize distribution spaces in our study of wave and heat  
equations.

Address:
http://xxx.lanl.gov/list/math.CT/recent#2


From rrosebru@mta.ca Wed Apr 25 12:10:00 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3PEe3u29244
	for categories-list; Wed, 25 Apr 2001 11:40:03 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Subject: categories: Kleisli and colimits
To: categories@mta.ca
Date: Wed, 25 Apr 2001 15:31:08 +0100 (BST)
X-Mailer: ELM [version 2.5 PL3]
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <E14sQJw-00034c-00@plover.dpmms.cam.ac.uk>
From: Tom Leinster <T.Leinster@dpmms.cam.ac.uk>
X-Scanner: exiscan *14sQJm-0001ed-00*j1LRnZ0fCe2* http://duncanthrax.net/exiscan/
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 25


Does anyone know if the Kleisli construction (sending a monad to its Kleisli
category) behaves in any decent way with respect to colimits?  E.g. does it
in any sense preserve or reflect them?

The actual situation that I have is a fixed category C, and a certain
coequalizer diagram in the category of monads on C.  The resulting fork in
Cat is also a coequalizer, and the proofs that both diagrams are coequalizers
have some ingredients in common, but I can't at present see how to deduce one
from the other.  

Thanks,

Tom Leinster





From rrosebru@mta.ca Wed Apr 25 14:13:19 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3PGdRr01165
	for categories-list; Wed, 25 Apr 2001 13:39:27 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Message-ID: <3AE6F592.C9298FD8@cs.bham.ac.uk>
Date: Wed, 25 Apr 2001 17:04:34 +0100
From: Carsten Fuhrmann <C.Fuhrmann@cs.bham.ac.uk>
Organization: School of Computer Science, The University of Birmingham, U.K.
X-Mailer: Mozilla 4.77 [en] (X11; U; SunOS 5.7 sun4u)
X-Accept-Language: en
MIME-Version: 1.0
To: categories@mta.ca
Subject: categories: Re: Kleisli and colimits
References: <E14sQJw-00034c-00@plover.dpmms.cam.ac.uk>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 26


The construction of the Kleisli category can be turned into a
left adjoint functor whose domain is the category of Mnd monads
(on arbitrary categories) and monad morphisms.  However, the
codomain of this functor is not Cat, but a category AbsKl whose
objects I call "abstract Kleisli categories".  An abstract
Kleisli category is a category K together with a functor L:K->K,
a natural transformation \epsilon: L->Id, and a (not generally
natural) transformation \theta:Id->L, such that

(1) \theta_L is a natural transformation
(2) L\theta o \theta = \theta_L o \theta
(3) \epsilon o \theta = id
(3) L\epsilon o \theta_L = id

A morphism K->K' of AbsKl is a functor that preserves the
solutions of the non-naturality square

\theta o f = Lf o \theta   (I)

The Kleisli construction forms a functor Mnd->AbsKl.  Its right
adjoint sends an abstract Kleisli category K to the evident monad
on the subcategory given by the solutions of Equation (I).  The
counit of this adjunction is in fact an iso, so AbsKl is a full
reflective subcategory of Mnd.  The full subcategory of Mnd which
is equivalent to Abskl is given by those monads for which every
component of the unit is a regular mono.

Cheers,

Carsten


From rrosebru@mta.ca Fri Apr 27 09:54:22 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3RBrPs09426
	for categories-list; Fri, 27 Apr 2001 08:53:25 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Message-ID: <3AE9162E.7030606@math.uit.no>
Date: Fri, 27 Apr 2001 08:48:14 +0200
From: Per <perj@mat-stat.uit.no>
User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20001108 Netscape6/6.0
X-Accept-Language: en
MIME-Version: 1.0
To: categories@mta.ca
Subject: categories: Extension of natural transformations
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Sender: cat-dist@mta.ca
Precedence: bulk
Status: RO
X-Status: 
X-Keywords:
X-UID: 27

Is there anything known about the following type of problem.

Let F,G : C -> D be functors and let  E be a subcategory of  C and let 
F' G' be the restirctions of F and G to E. Let a' : F'  -> G'  be a 
natural transformation.
When does there exist a natural transformation  alpha : F  -> G   that 
extends alpha' so that alpha restricted to E is equal to alpha'?
What if E is a set of generators for C?

Thanks

Per K. Jakobsen



From rrosebru@mta.ca Sun Apr 29 11:51:37 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3TEA9o12092
	for categories-list; Sun, 29 Apr 2001 11:10:09 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
X-Authentication-Warning: triples.math.mcgill.ca: barr owned process doing -bs
Date: Sat, 28 Apr 2001 20:26:23 -0400 (EDT)
From: Michael Barr <barr@barrs.org>
X-Sender: barr@triples.math.mcgill.ca
To: Categories list <categories@mta.ca>
Subject: categories: Syntax question on diagxy
Message-ID: <Pine.LNX.4.10.10104282016170.14326-100000@triples.math.mcgill.ca>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Sender: cat-dist@mta.ca
Precedence: bulk
Status: RO
X-Status: 
X-Keywords:
X-UID: 28

I have a question for all you who are interested in diagxy.  There is an
inconsistency in the current version that is caused by attempting to keep
it similar to the old diagram.  In all the procedures except \morphism,
the basic syntax includes a string [N`..`N;L`..`L] where the N's represent
nodes and the L's labels.  The exception is \morphism, where it is
[N`N`L].  I must have done it that way 15 years ago because there were
only three arguments and it didn't seem necessary to have different
separators.  There are still only those three arguments, but the
inconsistency bothers me.  Now is the time to change it, since once it is
in general release it will be impossible.  Right now, it is a trivial
change to make it [N`N;L] and I am getting ready for general release.  I
would like it to be in the next version of the CTAN disks.  If I don't
hear from anyone, I am inclined to make the change.

Michael




From rrosebru@mta.ca Sun Apr 29 11:51:52 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3TECEq18232
	for categories-list; Sun, 29 Apr 2001 11:12:14 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
Message-Id: <200104270727.JAA05523@irmast2.u-strasbg.fr>
Date: Fri, 27 Apr 2001 09:27:21 +0200 (MET DST)
From: Philippe Gaucher <gaucher@math.u-strasbg.fr>
Reply-To: Philippe Gaucher <gaucher@math.u-strasbg.fr>
Subject: categories: GETCO 2001 : 2nd Call for papers
To: categories@mta.ca
MIME-Version: 1.0
Content-Type: TEXT/plain; charset=ISO-8859-1
Content-MD5: 95PWRRyDEJA6qAY6rHDlmw==
X-Mailer: dtmail 1.3.0 @(#)CDE Version 1.3.5 SunOS 5.7 sun4u sparc 
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from QUOTED-PRINTABLE to 8bit by mailserv.mta.ca id f3R7Rcb13886
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 29


                                       3rd workshop on 

                                        Geometric and
                                     Topological Methods
                                        in Concurrency
                                          GETCO 2001
                                                      
                                                      
                                          hosted by 

                              Concur 2001, and Aalborg University

Venue: Aalborg University, Denmark

Conference dates:
CONCUR: August 21-24, 2001
GETCO:    August 25, 2001



                                      2nd Call for papers

Scope of the workshop

The main mathematical disciplines that have been used in computer science
are discrete mathematics (especially, graph theory and ordered
structures), logics (mostly proof theory for all kinds of logics,
classical, intuitionistic, modal etc.) and category theory (cartesian
closed categories, topoi etc.). General Topology has also been used for
instance in denotational semantics, with relations to ordered structures
in particular.

Recently, ideas and notions from mainstream "geometric" topology and
algebraic topology have entered the scene in Concurrency Theory and
Distributed Systems Theory (some of them based on older ideas). They have
been applied in particular to problems dealing with coordination of
multi-processor and distributed systems (see the historical note ). Among
those are techniques borrowed from algebraic and geometric topology:
Simplicial techniques have led to new theoretical bounds for coordination
problems. Higher dimensional automata have been modelled as cubical
complexes with a partial order reflecting the time flows, and their
homotopy properties allow to reason about a system's global behaviour.

The first workshop on the subject Geometric and Topological Methods in
Concurrency Theory has been held in Aalborg, Denmark, in June 1999. GETCO
2000 was organised as a workshop affiliated with CONCUR 2000 at Penn State
University. The recent volumes 10 of Math. Struct. in Comp. Science and
39, issue 2, of Electr. Notes Theor. Comp. Science have been devoted to
this area.

The 3rd workshop in this series will be organised as a satellite to CONCUR
2001 at Aalborg University (Aug.21 - Aug.24). It aims at bringing together
researchers from both the mathematical (geometry, topology, algebraic
topology etc.) and computer scientific side (concurrency theorists,
semanticians, researchers in distributed systems etc.) with an active
interest in these or related developments.

Topics include (but are not limited to) Semantics, Concurrency Theory,
Model-checking, Abstract Interpretation, Fault-tolerant Protocols for
Distributed Systems, Geometrical/Topological models, Applications of
algebraic topology, Category theory etc.

Paper submission

The deadline for submission to the workshop is May 20, 2001 (midnight).
Submissions may be of two forms: 

       Short abstracts: up to 4 pages, in format A4, typeset 11 points 
       Full papers: up to 12 pages, in format A4, typeset 11 points (excluding
       bibliography and technical appendices) 

Both forms of submission should include a separate page with the following
informations: title, author(s), corresponding author, contact information and a
12-15 lines summary. Simultaneous submission to other conferences or journals is
only allowed for short abstracts. 

Electronic submission is strongly encouraged. The paper or abstract should
be sent by e-mail in the form of a postscript file to both the addresses
raussen@math.auc.dk and goubault@aigle.saclay.cea.fr. The accompanying
page should be sent in a separate email message. If surface mail has to be
used, then 3 copies of the paper/abstract should be sent to: Martin
Raussen, Dept. of Mathematical Sciences, Aalborg University, Fredrik
Bajersvej 7G, DK-9220 Aalborg Øst, Denmark.

Publication

Accepted papers will be made available in the BRICS Notes series.
Electronic Notes in Theoretical Computer Science has kindly offered to
publish the proceedings of the workshop - full papers only - in a special
volume. The programme committee will decide upon necessary revisions and
acceptance of papers to this volume after the workshop.

Registration

The registration for GETCO'2001 is made through the registration for Concur'2001
with no extra-charge. 

Programme Committee:

       Patrick Cousot, Ecole Normale Superieure, Paris, France 
       Lisbeth Fajstrup, Aalborg University, Denmark 
       Eric Goubault, Commissariat a l'Energie Atomique, France 
       Jeremy Gunawardena, Hewlett-Packard BRIMS, England 
       Maurice Herlihy, Brown University, Providence, RI, USA 
       Martin Raussen, Aalborg University, Denmark 
       Vladimiro Sassone, Catania University, Italy 

Important Dates

       Call for Papers: March 13, 2001 
       Deadline for submission: May 20, 2001 
       Notification of acceptance: July 1, 2001 
       Final version due: July 29, 2001 
       CONCUR: August 21-August 24, 2001 
       GETCO: August 25, 2001 

Local Organization

       Lisbeth Fajstrup, Aalborg University, Denmark 
       Eric Goubault, Commissariat a l'Energie Atomique, France 
       Martin Raussen, Aalborg University, Denmark 

Contact Person

Martin Raussen 
Department of Mathematics 
Aalborg University 
Fredrik Bajersvej 7G 
DK-9220 Aalborg Øst 
Denmark 
Phone: (+45) 96 35 88 55 
Fax: (+45) 98 15 81 29 
Email: raussen@math.auc.dk 

Url : http://concur01.cs.auc.dk/workshop/workshops.html
      http://www-irma.u-strasbg.fr/~gaucher/getco/



From rrosebru@mta.ca Sun Apr 29 12:09:06 2001 -0300
Return-Path: <cat-dist@mta.ca>
Received: (from Majordom@localhost)
	by mailserv.mta.ca (8.11.1/8.11.1) id f3TEcoH27584
	for categories-list; Sun, 29 Apr 2001 11:38:50 -0300 (ADT)
X-Authentication-Warning: mailserv.mta.ca: Majordom set sender to cat-dist@mta.ca using -f
X-Received: from zent.mta.ca (zent.mta.ca [138.73.101.4])
	by mailserv.mta.ca (8.11.1/8.11.1) with SMTP id f3R0W1b31409
	for <rrosebrugh@mta.ca>; Thu, 26 Apr 2001 21:32:01 -0300 (ADT)
X-Received: FROM guest.mathsoc.uottawa.ca BY zent.mta.ca ; Thu Apr 26 21:39:05 2001 -0300
X-Received: (from majordom@localhost)
	by guest.mathsoc.uottawa.ca (8.11.3/8.11.3) id f3R0VRL05070
	for cmath-l-out; Thu, 26 Apr 2001 20:31:27 -0400
X-Received: from eo.cms.math.ca (eo.mathsoc.uottawa.ca [137.122.49.236])
	by guest.mathsoc.uottawa.ca (8.11.3/8.11.3) with ESMTP id f3R0VP205066
	for <cmath-l@newlan.cms.math.ca>; Thu, 26 Apr 2001 20:31:25 -0400
X-Received: from jardine.math.uwo.ca (root@jardine.math.uwo.ca [129.100.75.21])
	by eo.cms.math.ca (8.9.0/8.9.0) with ESMTP id UAA32107
	for <cmath-l@cms.math.ca>; Thu, 26 Apr 2001 20:31:24 -0400 (EDT)
From: jardine@uwo.ca
X-Received: from uwo.ca (jardine@cr405431-a.lndn1.on.wave.home.com [24.112.60.174])
	by jardine.math.uwo.ca (8.10.2/8.10.0) with ESMTP id f3R0VMt10727
	for <cmath-l@cms.math.ca>; Thu, 26 Apr 2001 20:31:22 -0400
Message-ID: <3AE8BDD8.5EA864FD@uwo.ca>
Date: Thu, 26 Apr 2001 20:31:20 -0400
X-Mailer: Mozilla 4.75 [en] (X11; U; Linux 2.2.14 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: <categories@mta.ca>
Subject: categories: Stanford conference, July 30 - August 3
Sender: cat-dist@mta.ca
Precedence: bulk
Status: O
X-Status: 
X-Keywords:
X-UID: 30

Third Announcement: 

Conference on Algebraic Topological Methods in Computer Science
Stanford University
July 30 - August 3, 2001

This meeting is supported by grants from the National Science
Foundation, the Natural Sciences and Engineering Research Council of
Canada, the Fields Institute, Hewlett-Packard, and the Stanford
Department of Mathematics.

The most up to date information on the conference appears on the
conference web page http://math.stanford.edu/atmcs/index.htm.

Housing is still available on campus at a cost of about 50.00 US per
night. The deadline for registering for on campus housing at Stanford
is *May 1, 2001*.  There is a registration form available as a pdf
file, to be printed, filled out and faxed to the Stanford Summer
Conference Services office.

There is also a short registration for the conference itself at that
web page. If you are coming to the conference and have not yet
registered for the conference, please do so. There will be no
registration fee. 

Limited financial support may be available for travel and
housing. Please make your request when registering for the conference.

The following have agreed to speak at this meeting:

John Baez (Math, UC Riverside) 
Marshall Bern (Xerox PARC) 
Anders Bjorner (Royal Institute of Technology, Stockholm) 
Tamal Dey (CS, Ohio State) 
Herbert Edelsbrunner (CS, Duke) 
David Eppstein (CS, UC Irvine) 
Michael Freedman (Microsoft) 
Philippe Gaucher (CNRS, Strasbourg) 
Eric Goubault (Commissariat a l'Energie Atomique, France) 
Jean Goubault-Larrecq (ENS Cachan) 
Marco Grandis (Dip. di Mat., Genova) 
Jeremy Gunawardena (HP BRIMS) 
John Harer (Math, Duke) 
Joel Hass (Math, UC Davis) 
Maurice Herlihy (CS, Brown) 
Reinhard Laubenbacher (Math, NMSU) 
Laszlo Lovasz (Microsoft) 
Vaughan Pratt (CS, Stanford) 
Christian Reidys (Los Alamos National Lab) 
Bernd Sturmfels (Math, UC Berkeley) 
Noson Yanofsky (CS, Brooklyn College) 

There will be some time for contributed talks. If you would like to
give a short talk at the meeting, please send a title and abstract to
one of the organizers.

The organizers for this meeting are:

Gunnar Carlsson: gunnar@math.stanford.edu
Rick Jardine: jardine@uwo.ca




