In the traditional approaches to Clifford algebras, the Clifford product is evaluated by recursive application of the product of a one-vector (span of the generators) on homogeneous i.e. sums of decomposable (Gra{\ss}mann), multi-vectors and later extended by bilinearity. The Hestenesian 'dot' product, extending the one-vector scalar product, is even worse having exceptions for scalars and the need for applying grade operators at various times. Moreover, the multivector grade is not a generic Clifford algebra concept. The situation becomes even worse in geometric applications if a meet, join or contractions have to be calculated. Starting from a naturally graded Gra{\ss}mann Hopf gebra, we derive general formul\ae\ for the products: meet and join, comeet and cojoin, left/right contraction, left/right cocontraction, Clifford and co-Clifford products. All these product formul\ae\ are valid for any grade and any inhomogeneous multivector factors in Clifford algebras of any bilinear form, including non-symmetric and degenerated forms. We derive the three well known Chevalley formul\ae\ as a specialization of our approach and will display co-Chevalley formul\ae. The Rota--Stein cliffordization is shown to be the generalization of Chevalley deformation. Our product formul\ae\ are based on invariant theory and are not tied to representations/matrices and are highly computationally effective. The method is applicable to symplectic Clifford algebras too. \noindent {Keywords: } Gra{\ss}mann Hopf gebra, contraction, cocontraction, Chevalley deformation, Rota--Stein cliffordization, Clifford product, Clifford coproduct, meet, join, comeet, cojoin, contractions, cocontractions, linear duality, categorial duality, Gra{\ss}mann-Cayley algebra
products.tex
%%Spell-checked: Aug 12, 2002 BF.
%%Comments: I have typeset this article in fontface `times`
%%          see \usepackage{times} this saves lots of space!
%%Replace environment \begin{eqnarray} with \begin{align} etc.
%%Total number of pages: 24
\documentclass[twoside]{reporteq}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{latexsym}
\usepackage{times}     
\usepackage{pstricks}
%\usepackage{pst-grad}
\usepackage{pst-node}
\usepackage{svcon2e}
\usepackage{makeidx}
%\usepackage{showlabels}

\def\date{August 12, 2002}
\setcounter{page}{1}     % set correct page number here
\setcounter{chapter}{1}  % set correct chapter number here
\renewcommand{\baselinestretch}{0.992} % Rafal, with 0.97 all fits on 24 pages!! BF.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% for pstricks
%%
\psset{framearc=0.0,framesep=0.0truecm,nodesep=3pt,unit=0.75truecm,%
arrowsize=4pt 2,arrowinset=0.4}
\def\pstlw{0.8pt}                              
%%
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
\mathsurround 1.5pt
\renewcommand{\indexspace}{\vskip 0.5ex}   
%set correct spacing between index items here
\newcommand{\ed}{\end{document}}
\makeindex
\renewcommand{\theequation}{\arabic{section}.\arabic{equation}}
\newcounter{mycnt}[section]
\def\themycnt{\addtocounter{mycnt}{1}\thechapter.\thesection.\arabic{mycnt}}
\def\mybenv#1{\vskip 3pt\noindent{\bf #1 \themycnt}\vskip 3pt\indent}
\def\myeenv{\hfill\rule{1ex}{1ex}\vskip 3pt}
%%%
%%% Macros needed
%%%
\newcommand{\JJ}{\,\raisebox{0.33ex}{\rule{1ex}{1pt}\rule{1pt}{1ex}}}
	%left contraction
\newcommand{\LL}{\,\raisebox{0.33ex}{\rule{1pt}{1ex}\rule{1ex}{1pt}}}
	%right contraction
\def\length#1{\text{length}(#1)}
\def\nn{\nonumber \\}
\def\Id{\text{I\!d}}
\def\openk{\Bbbk}
\def\openC{\mathbb{C}}
\def\openN{\mathbb{N}}
\def\openZ{\mathbb{Z}}
\def\dwedge{\,\dot{\wedge}\,}
\def\ds{\displaystyle}
\def\!{\kern -0.15ex}
\def\nn{\nonumber\\}
\mathsurround 1.5pt
%
%\def\printlandscape{\special{landscape}} 	% for dvips
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\chapter{Grade free product formul\ae\ from Gra{\ss}mann Hopf gebras}
\chapterauthors{Bertfried Fauser}
%%%%if used by the author(s):
{ {\renewcommand{\thefootnote}{\fnsymbol{footnote}}
\footnotetext{\kern-15.3pt AMS Subject Classification: 16W30; 15A66.}
}}
%%%%%%%%%%%%%%%%%enter abstract, MSCS codes, and keywords here
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{abstract}
In the traditional approaches to Clifford algebras, the Clifford product
is evaluated by recursive application of the product of a one-vector (span
of the generators) on homogeneous i.e. sums of decomposable (Gra{\ss}mann),
multi-vectors and later extended by bilinearity. The Hestenesian 'dot'
product, extending the one-vector scalar product, is even worse having
exceptions for scalars and the need for applying grade operators at
various times. Moreover, the multivector grade is not a generic Clifford
algebra concept. The situation becomes even worse in geometric
applications if a meet, join or contractions have to be calculated.  
 
Starting from a naturally graded Gra{\ss}mann Hopf gebra, we derive general
formul\ae\ for the products: meet and join, comeet and cojoin, left/right
contraction, left/right cocontraction, Clifford and co-Clifford products. 
All these product formul\ae\ are valid for any grade and any inhomogeneous
multivector factors in Clifford algebras of any bilinear form, including
non-symmetric and degenerated forms. We derive the three well known
Chevalley formul\ae\ as a specialization of our approach and will
display co-Chevalley formul\ae. The Rota--Stein cliffordization is
shown to be the generalization of Chevalley deformation. Our product
formul\ae\ are based on invariant theory and are not tied to
representations/matrices and are highly computationally effective. The
method is applicable to symplectic Clifford algebras too.      

\noindent 
{\bf Keywords: } Gra{\ss}mann Hopf gebra, contraction, cocontraction,
Chevalley deformation, Rota--Stein cliffordization, Clifford product, 
Clifford coproduct, meet, join, comeet, cojoin, contractions, 
cocontractions, linear duality, categorial duality, Gra{\ss}mann-Cayley
algebra 
\end{abstract}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Introduction}

\subsection{Preliminary note}

Beside some rumour during the conference, we continue to use 
algebra, cogebra and Hopf gebra as technical terms. In our eyes these 
names fit into mathematical nomenclature having also a linguistic
background. The most striking argument is, however, that it is 
misleading to call a cogebra a co{\em al}gebra making use of and
pointing to the term {\em algebra}. By duality one sees that cogebras 
contain in principle the same amount of information as algebras. One 
could (should?) come up with a linear cogebra theory not making use of 
any algebraic structure or knowledge. It seems necessary to us to put
the finger into the wound of the missed opportunity \cite{dyson:1974a}
to develop algebra and coalgebra on the same footing and beg for pardon to 
those who feel linguistically offended by our naming.
\index{cogebra!naming}
\index{cogebra!versus co{\em al}gebra}

\subsection{Synopsis}

The present paper will gather {\em grade free} product formul\ae\ for 
almost all algebra and cogebra products related to Gra{\ss}mann-,
Gra{\ss}mann-Cayley, and Clifford algebras. This does not mean that we
abandon the multivector structures of these algebras but that we come 
up with formul\ae\ which are valid for general multivector polynomials, 
i.e. for general elements $x$ from the algebra $A$ or cogebra $C$. In 
present literature important product formul\ae\ are given only on 
generators or homogeneous elements of certain grades, and have to be 
expanded by iteration and linearity to the general case. Among these the 
most important Clifford product has to be calculated this way!

\index{product!with grade restrictions}
In \cite{hestenes:sobczyk:1992a} we find formul\ae\ 
(1.21a-c), (1.22a,c), (1.23a,b), (1.25b,c) etc. where even restrictions 
like that the grade of one homogeneous algebra element has to be less or
equal to the grade of another such element, e.g. (1.23a) and (1.25b,c),
have to be assumed. The situation even goes worse if dot and inner 
products are considered. It is not our aim to criticise but to overcome 
this deficiencies. During this course we will gain lots of insights
into the (almost) perfectly dual structure of algebras and cogebras.

To reach our goal we will see that we {\em have to} employ algebra and cogebra 
structures. Furthermore we will take as our point of departure the well 
behaved Gra{\ss}mann Hopf algebra. Firstly we will show that the 
Gra{\ss}mann-Cayley algebra is related to the Gra{\ss}mann Hopf algebra 
by dualizing the coproduct. Then by deformation we will reach contractions
and Clifford algebras. It will turn out that the Chevalley deformation 
having a grade restriction is a particular case of the general Rota-Stein 
{\em cliffordization} obeying no grade restriction.

Using categorial duality, we can write down immediately dualized versions 
of all algebraic well know structures coming up with a self dual 
Gra{\ss}mann-Cayley double algebra, cocontractions, Chevalley codeformation,
and with Clifford cogebras etc. 

Categorial duality employs a most powerful and beautiful symmetry. To 
reach our results {\em cogebra structures} are inevitable. We strongly
belief that only a fully dual treatment of (projective) geometry, 
linear co/al-gebra, invariant and deformation theory will prove powerful
enough to overcome recent problems in mathematics and physics.

\subsection{The grading}

Since in various discussions, which took place during the ICCA 6,
it became clear to me that the concept of grading and filtration
seems not to be common ground, we will first settle down this issue here.

\index{module!graded}
\index{grading}
A {\em graded $\openk$-module} $A$ (graded $\openk$-vector space, 
or simply {\em linear space}) is a (finite) family of $\openk$-modules 
$\{A_n\}$ where $n$ runs through the non-negative integers. $n$ is 
called {\em degree} or step, grade etc. The degree of an element $a$ is 
denoted in various ways, 
$\partial a = \vert a \vert = \text{length}(a) = \text{deg}(a) = \ldots$.
Let $A,B$ be graded $\openk$-modules. A {\em graded morphism} $f$ 
is a family of morphisms $\{f_i\}$ such that the 
$f_i : A_i \rightarrow B_i$ are morphisms of $\openk$-modules.
An element $a \in A$ is called {\em homogeneous} of degree $r$ iff
one has $a \in A_i$ and $a \not\in A_j, i\not=j$. Any module can be 
trivially graded by declaring its degree to be zero.
\index{grade}
\index{length|see{grade}}
\index{degree|see{grade}}
 
A grading can be introduced also by the action of an abelian group $G$
such that the modules $A_i$ are invariant subspaces of the group
labelled by a representation index (character): $G \bullet A_i \subset A_i$, 
$\chi_j(A_i)=i\delta_{i,j}$.

\index{filtration}
\index{product!filtered}
A {\em filtration} is defined in analogous way demanding the weaker 
obstruction to modules, morphisms etc. that they consists of or map 
into the spaces of same or lower degree
\begin{align}
f_i : A_i \rightarrow \oplus_{j\le i} B_j.
\end{align} 
We will later note that products emerging from cliffordization will be
in general not graded morphisms but only obey a filtration.

\index{homogeneous element}
\mybenv{Example:}
Consider a polynom $p(x)=\alpha_0 + \alpha_1 x + \alpha_2 x^2 + \ldots 
\,\in \openk[[x]]$ in one variable $x$ over the ring (field) $\openk$. 
The 1-dimensional spaces spanned by $x^i$ are $\openk$-modules $A_i$. 
Monoms $\alpha\,x^q$ are homogenous elements of degree $q$. Polynoms in 
several commuting complex variables $\openC[[z,w]]$ can be graded by their 
{\em total degree}: 
$p(z,w) = \alpha_0 +\alpha_{1,0}z +\alpha_{0,1}w
+\alpha_{2,0}z^2 +\alpha_{1,1}zw +\alpha_{0,2}w^2 +\ldots$. The 
$\openC$-spaces of degree $q$ have dimensions $q+1$. Observe that 
one could introduce a finer grading by specifying a {\em multidegree}
composed from the degree in $z$ and $w$, e.g. degree $\partial (z^4w^3)
= \partial(z^4) + \partial(w^3) = 4+3=7$, multidegree $\partial (z^4w^3)
= (4,3)$.
\myeenv

A binary {\em product} $m$ (a binary multiplication) is a morphism from 
the space $B \simeq A\otimes A$ into the space $A$. If $A$ is a graded 
space we can define the grading of $A\otimes A$ to be the sum of the 
grades of the homogeneous factors, i.e. 
$\partial (A_i \otimes A_j) = \partial A_i + \partial A_j$, turning
$B$ into a graded module. A product $m : B \rightarrow A$ is graded 
if it is a graded  morphism. In other terms
\index{product!graded}
\index{product!binary}
\index{product!as morphism}
\begin{align}
m : A_i \otimes A_j &\subset A_{i+j}
\end{align}
Note that this definition of a product implies bilinearity but not 
associativity. We denote the product by $m(a\otimes b) = m(a,b)$, or
in infix notation or even by juxtaposition $a\, m\, b = ab$. Let 
$\alpha, \beta$ be ring elements we have right and left 
{\em distributive laws} (linearity)
\index{product!linearity of}
\index{product!distributive}
\begin{align}
m(\alpha\,a+\beta\,b,c) &= \alpha\,m(a,c) + \beta\,m(b,c) \nn
m(a,\alpha\,b+\beta\,c) &= \alpha\,m(a,b) + \beta\,m(a,c)
\end{align}
If a product acts on two adjacent slots of a higher tensor space 
(two out of a larger number of arguments) it is easily proven to be 
multilinear. Since we deal with associative products mainly, we assume 
$m$ to be associative from now on. In this case we can define
$m(a\otimes \ldots \otimes b) = m(a,\ldots,b) =m(a,m(\ldots))$
where the order of binary multiplications is irrelevant.
\index{associativity}

\mybenv{Example:}
Canonical examples of graded binary products are tensor products, 
Gra{\ss}mann and symmetric products. Let $A=a\ldots b$, $B=c\ldots d$,
be two words in a tensor algebra $T(V)$ generated by the letters 
$a,b,\ldots \in V$ linear over some ring $\openk$. A grading is define 
by the length of the words $\text{length}(A)=r$, $\text{length}(B)=s$ 
the tensor product is concatenation. We find
\begin{align}
m(A\otimes B) &=AB  &&& \length{m(A \otimes B)}
=\length{A}+\length{B}
\end{align}
This allows to decompose the tensor algebra, viewed as module, into a 
sum of disjoint submodules containing homogeneous elements 
$T(V) =\openk \oplus V \oplus V^{\otimes^2}\oplus \ldots$ 
The elements of $V^{\otimes^r}$ need not to be decomposable (products
of generators) but may be sums of products of generators.

\index{generators}
Let $e_1,e_2,\ldots$ be {\em generators} of a Gra{\ss}mann algebra
$V^{\wedge}= \openk\oplus V \oplus V^{\wedge^2} + \ldots$. A grading
can be defined by the number of generators in a monomial. If we define 
$0$ to have any grade, we find that the Gra{\ss}mann wedge product 
is a graded product
\begin{align}
&V^{\wedge^r} \wedge V^{\wedge^s} \subset V^{\wedge^{r+s}} \nn
&\text{length}(V^{\wedge^r} \wedge V^{\wedge^s})
=\length{V^{\wedge^r}}+\length{V^{\wedge^s}} = r+s.
\end{align}

A symmetric product in $\openk[[a,b,\ldots]]$ defined as the usual 
point wise product of polynomials is graded. 
\begin{align}
m(a^3b^2\otimes (c^2d+d^3)) &=a^3b^2c^2d+a^3b^2d^3  \\
\length{m(a^3b^2\otimes (c^2d+d^3)}
&=\length{a^3b^2}+\length{c^2d+d^3}= 5+3.\nonumber
\end{align} 
\myeenv

It is possible to derive algebras from the tensor algebra by factoring 
out bilateral ideals. These ideals are generated by elements fulfilling
some relations. In the case of the Gra{\ss}mann and symmetric algebras 
they read for $x,y \in V$
\index{ideal!bilateral}
\begin{align}
{\cal I}_{Gr} &= \text{gen}\{ x\otimes y + y\otimes x\} \nn
{\cal I}_{sym} &= \text{gen}\{ x\otimes y - y \otimes x\}
\end{align}
Since these ideals are graded, the factored algebras remain to be graded 
by the $\openZ$-grading inherited from the tensor algebra. Without going 
into detail of this construction, we find immediately that the ideal
of a Clifford algebra generated as follows
\index{grading!multivector $\openZ$}
\index{grading!parity $\openZ_2$}
\begin{align}
{\cal I}_{Cl} &= \text{gen}\{ x\otimes y +y\otimes x - 2g(x,y)\Id \},
\end{align}
where $g(x,y)$ is the symmetric polar bilinear form of a quadratic form
$Q$ on $V$, is {\em no longer $\openZ$-graded} since tensors of different
degree are identified.
\index{bilinear form!polar}

As a good example to this claim and a counter example to the
widely accepted assumption that a Clifford algebra comes up with 
generic `multivectors' i.e. a $\openZ$-grading may serve the quaternions.
\mybenv{Example:}
Let ${\bf 1,i,j,k}$ be the standard basis of the quaternions, obeying
the relations
\index{grading!by length}
\index{grading!of quaternions}
\index{grading!counter example}
\begin{align}
& {\bf k} = {\bf i}{\bf j} \nn
&{\bf i}{\bf j} = - {\bf j}{\bf i}\qquad
 {\bf j}{\bf k} = - {\bf k}{\bf j}\qquad
 {\bf k}{\bf i} = - {\bf i}{\bf k} \nn
&{\bf i}{\bf i}={\bf j}{\bf j}={\bf k}{\bf k}=
 {\bf i}{\bf j}{\bf k}=-{\bf 1}
\end{align} 
We obtain a grading using the following length function. Assume that
${\bf i}$, ${\bf j}$ are generators and define
\begin{align}
& \length{{\bf 1}}=0&&\length{{\bf i}}=1&&\length{{\bf j}}=1
&&\length{{\bf k}}=2.&
\end{align}
However, the roles of ${\bf i,j,k}$ are fully symmetric and we could 
have chosen that ${\bf j}$, ${\bf k}$ are generators so that 
${\bf i} = {\bf j}{\bf k}$ which would have lead us to a second 
different $\openZ$-grading
\begin{align}
& \length{{\bf 1}}=0&&\length{{\bf j}}=1&&\length{{\bf k}}=1
&&\length{{\bf i}}=2.&
\end{align}
Hence there is no unique such grading present in the quaternions. The
argument above using the tensor algebra and factorization shows that 
such a grading cannot uniquely be established in any Clifford algebra. 
Only the $\openZ_2$-grading or {\em parity grading} defined by the length 
function modulo 2 is generic. 
\myeenv 

Adding a multivector structure to a Clifford algebra depends on
additional choices, e.g. by the choice of particular elements 
being generators. In fact one has to choose in which way a Gra{\ss}mann
algebra having multivectors is embedded in a Clifford algebra.
We are consequently using such an identification in the present work
and all gradings we refer to are derived from the grading of the
tensor and Gra{\ss}mann algebras.

\subsection{Algebra and cogebra}

We will informally introduce the notion of a cogebra by dualizing
the algebra structure. In category theory one uses {\em commutative
diagrams} (CD) for this purpose, however, we also make frequent use of 
{\em tangles}, see discussion and references in \cite{fauser:2002c}. 
The difference between both pictures is that they are dual in the 
sense that arrows and objects change their graphical representation. 
A product $m$ may be seen as a morphisms (arrow) acting 
on objects  (source and target points) in a CD. In the tangle analog 
we represent morphisms by points and objects by lines (arrows, implicitly 
red downwards unless otherwise specified). Categorial duality is the 
operation which reverses all arrows or mirrors all tangles at a horizontal 
line. The therefrom generated dualized morphisms are named using the prefix
`{\em co}', e.g. a product changes into a {\em coproduct}. In graphical 
notation we get
\index{duality!categorial}
\index{tangle!categorial duality}
\begin{align}
\begin{array}{c}
\Rnode{AA}{A\otimes A}\\[8ex]
\Rnode{A}{A}
\ncline{->}{AA}{A}
\Aput{m}
\end{array}
%
\hskip 0.25truecm\cong\hskip 0.25truecm
%
\pspicture[0.5](0,0)(1,1.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=4pt 2,arrowinset=0.4} 
\psline{-}(0,3)(0,2)
\psline{-}(2,3)(2,2)
\psarc(1,2){1.0}{180}{360}
\psline{-}(1,1)(1,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}   
\rput(1,1.75){$m$}
\endpspicture
%%
\qquad\Leftarrow\,\text{duality}\,\Rightarrow\qquad
%%
\begin{array}{c}
\Rnode{CC}{C}\\[8ex]
\Rnode{C}{C\otimes C}
\ncline{->}{CC}{C}
\Aput{\Delta}
\end{array}
%
\hskip 0.25truecm\cong\hskip 0.25truecm
%
\pspicture[0.5](0,0)(1,1.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2} 
\psline{-}(0,0)(0,1)
\psline{-}(2,0)(2,1)
\psarc(1,1){1.0}{0}{180}
\psline{-}(1,2)(1,3)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}   
\rput(1,1){$\Delta$}
\endpspicture
\end{align}
\index{graphical calculus|see{tangle}}
\index{duality!in graphical calculus}
Tangles can be red like processes in physics, e.g. think of Feynman diagrams,
or flow diagrams in computer science. Elements or spaces enter at the top 
flow down and suffer at the vertices, representing morphisms, some action. 
A binary product combines two inputs into one output, while a binary 
coproduct has one input and two outputs. Such a representation is called
{\em graphical calculus}. Some details and references may be found in 
\cite{fauser:2002c}. If one calculates with tangles an equality is sometimes
called a {\em move}. The coproduct is a $1 \rightarrow 2$ map algebraically 
given as
\index{move}\index{graphical calculus!move} 
\index{coproduct}
\index{product!co|see{coproduct}}
\begin{align}
\Delta ~&:~ C \rightarrow C\otimes C.
\end{align}
The coproduct is in general an indecomposable tensor. It is very
convenient to introduce the Sweedler notation \cite{sweedler:1969a}
\index{Sweedler notation}
\begin{align}
\Delta(x) &= \sum_{r} a_r \otimes b_r 
= \sum_{(x)} x_{(1)} \otimes x_{(2)}
= x_{(1)} \otimes x_{(2)}\nn
\Delta(x^i) &= \sum_{i} \Delta^{jk}_{i}\, x^i
= \sum_{(r)} a^j_{(r)} \otimes b^k_{(r)}
\qquad\text{w.r.t. an arb. basis} 
\end{align}
The $\Delta_i^{jk}$ are called {\em section coefficients}, these constitute
a sort of {\em comultiplication table}. Associativity dualizes to 
coassociativity and its axiom reads as CD or tangle: 
\index{coproduct!multiplication table}
\index{section coefficients}
\index{coassociativity}
\index{tangle!of coassociativity}
\begin{align}
\label{eqn:coass}
\hskip -2.0truecm
\begin{array}{c@{\hskip 1.25truecm}c}
\Rnode{a}{C} & \Rnode{b}{C \otimes C} \\[6ex]
\Rnode{c}{C\otimes C} & \Rnode{d}{C\otimes C\otimes C}
\end{array}
\ncline{->}{a}{b}
\Aput{\Delta}
\ncline{->}{b}{d}
\Aput{\Id \otimes \Delta}
\ncline{->}{a}{c}
\Bput{\Delta}
\ncline{->}{c}{d}
\Aput{\Delta \otimes \Id}
%
\qquad\qquad
%
\pspicture[0.3](0,0)(1.0,3.0)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=1pt 2,arrowinset=0.1}
\psline(0,0)(0,1)
\psline(2,0)(2,1)
\psline(3,0)(3,3)
\psarc(1,1){1}{360}{180}
\psline(1,2)(1,3)
\psarc(2,3){1}{0}{180}
\psline(2,4)(2,5)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,4){0.2}
\rput(1,1.25){$\Delta$}
\rput(2,3.25){$\Delta$}
\endpspicture
%
\qquad=\quad
%                            
\pspicture[0.3](0,0)(0.5,3.0)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=1pt 2,arrowinset=0.1}
\psline(0,0)(0,3)
\psline(1,0)(1,1)
\psline(3,0)(3,1)
\psarc(2,1){1}{0}{180}
\psline(2,2)(2,3)
\psarc(1,3){1}{0}{180}
\psline(1,4)(1,5)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,2){0.2}
\rput(1,3.25){$\Delta$}
\rput(2,1.25){$\Delta$}
\endpspicture
\end{align}
\index{counit}
\index{tangle!of counit}
A coproduct may have a {\em counit} which is defined once more by 
dualizing the axioms of the unit. We find $(\epsilon \otimes \Id) 
\Delta = \Id = (\Id \otimes \epsilon)\Delta$ or graphically
%%
%% Co-gebra co-unit
%%
%%
\begin{align}
\label{eqn:counit}
\hskip -0.25truecm
\begin{array}{c@{\hskip 1.25truecm}c@{\hskip 1.25truecm}c}
\Rnode{a}{\openk\otimes C} & \Rnode{b}{C\otimes C} & 
\Rnode{c}{C\otimes\openk} \\[6ex]
 & \Rnode{d}{C} &
\ncline{->}{b}{a}
\Bput{\epsilon\otimes \Id}
\ncline{->}{b}{c}
\Aput{\Id\otimes \epsilon}
\ncline{->}{d}{b}
\Aput{\Delta}
\ncline{->}{a}{d}
\Bput{\approx}
\ncline{->}{c}{d}
\Aput{\approx}
\end{array}
%
\quad
%
\pspicture[0.4](0,-0.75)(0.5,2.25)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(2,0)(2,1)
\psarc(1,1){1.0}{0}{180}
\psline(1,2)(1,3)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](0,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\rput(1,1.25){$\Delta$}
\rput(0,0.25){$\epsilon$}
\endpspicture
\quad\quad=\!\!
\pspicture[0.4](0,-0.75)(0.5,2.25)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,3)(1,0)
\endpspicture
\,\,=\quad
\pspicture[0.4](0,-0.75)(0.5,2.25)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,0)(0,1)
\psarc(1,1){1.0}{0}{180}
\psline(1,2)(1,3)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\rput(1,1.25){$\Delta$}
\rput(2,0.25){$\epsilon$}
\endpspicture
\end{align}
The pair ${\cal A} = (A,m)$ is called an (associative possibly 
unital) algebra and the dualized structure ${\cal C} = (C,\Delta)$ 
is called a (coassociative possibly counital) {\em cogebra}. 
\index{algebra!definition of}
\index{cogebra!definition of}
\index{coalgebra|see{cogebra}}

\subsection{Linear duality}

\index{duality!linear}
Since we have already used categorial duality we have a need to 
introduce the technical term {\em linear duality} for the conventional 
dual. Any possibly graded finite dimensional $\openk$-module $A$ comes 
naturally, i.e. functorially, with a {\em linear dual} 
$A^* \simeq \text{lin-hom}(A,\openk)$. Elements $\omega$ of $A^*$ are 
called linear forms. We will freely use the notations
\index{tangle!oriented}
\begin{align}
\omega(x) = \langle \omega \mid x \rangle = \text{eval}(\omega \otimes x)
\end{align}
Arrows are used to indicate the type of the space. Downwards oriented lines 
represent the space $A$ while upward oriented lines depict the dual
space $A^*$. The action of a linear dual on a space is called 
{\em evaluation map}, denoted as $\text{eval}$, due to symmetry we can 
define the action the opposite way around also, thereby identifying $A$ 
with the double dual $A^{**}$. In terms of tangles we write:
\index{evaluation map}
\index{coevaluation map}
\index{tangle!of evaluation}
\index{tangle!of coevaluation}
\begin{align}
\label{eqn:eval}
\pspicture[0.5](0,0)(1,1.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=4pt 2,arrowinset=0.4}
\psline(0,3)(0,2)
\psline(2,3)(2,2)
\psline{<-}(0,2.5)(0,2.25)
\psline{->}(2,2.5)(2,2.25)
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,1){0.2}
\rput(1,0.25){eval}
\endpspicture
\hskip 2truecm
\pspicture[0.5](0,0)(1,1.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,3)(0,2)
\psline(2,3)(2,2)
\psline{->}(0,2.5)(0,2.25)
\psline{<-}(2,2.5)(2,2.25)
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,1){0.2}
\rput(1,0.25){eval}
\endpspicture
\end{align}

\subsection{Product co-product duality (by evaluation)}

The evaluation map provides a natural (functorial) connection 
of products and co-products on $A$ and $A^*$. The action of a linear 
form $\omega$ on a product $m(a \otimes b)$ shall be rewritten as the
sum of scalar products of actions of some tensor 
$\omega_{(1)}\otimes\omega_{(2)}$
on the argument $a\otimes b$ of $m$. In the tangle picture this means that
one pulls the product from the two right down-strands to the single left 
up-strand. During this process the product tangle gets mirrored (rotated 
by $\pi$) and turns into a coproduct tangle acting on the dual space.
The right equation dualizes a product on $A^* \otimes A^*$.
\index{product coproduct duality}
\index{duality!between product and coproduct}
\index{tangle!of product coproduct duality}
\begin{align}
\label{eqn:prcopr}
\pspicture[0.5](0,-0.25)(1.5,2.75)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,5)(0,1)
\psline(1,5)(1,2)
\psline(3,5)(3,2)
\psline{<-}(0,4)(0,3.75)
\psline{->}(1,4)(1,3.75)
\psline{->}(3,4)(3,3.75)
\psarc(1,1){1}{180}{360}
\psarc(2,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,0){0.2}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,-0.25)(3,2.75)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,5)(1,4)
\psline(4,5)(4,3)
\psline(6,5)(6,2)
\psline(0,3)(0,2)
\psline{<-}(1,4.9)(1,4.75)
\psline{->}(4,4.5)(4,4.25)
\psline{->}(6,4.5)(6,4.25)
\psline(2,0)(4,0)
\psarc(1,3){1}{0}{180}
\psarc(3,3){1}{180}{360}
\psarc(2,2){2}{180}{270}
\psarc(4,2){2}{270}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,0){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,2){0.2}
\endpspicture
%
\qquad
%
\pspicture[0.5](0,-0.25)(1.5,2.75)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(3,5)(3,1)
\psline(2,5)(2,2)
\psline(0,5)(0,2)
\psline{->}(3,4)(3,3.75)
\psline{<-}(2,4)(2,3.75)
\psline{<-}(0,4)(0,3.75)
\psarc(2,1){1}{180}{360}
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](2,0){0.2}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,-0.25)(3,2.75)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(5,5)(5,4)
\psline(2,5)(2,3)
\psline(0,5)(0,2)
\psline(6,3)(6,2)
\psline(2,0)(4,0)
\psline{<-}(5,4.25)(5,4.4)
\psline{<-}(2,4.5)(2,4.25)
\psline{<-}(0,4.5)(0,4.25)
\psline(4,0)(4,0)
\psarc(5,3){1}{0}{180}
\psarc(3,3){1}{180}{360}
\psarc(2,2){2}{180}{270}
\psarc(4,2){2}{270}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,0){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,2){0.2}
\endpspicture
\end{align}
In terms of algebraic formul\ae\ we can write this as
\begin{align}
&\hskip -0.15truecm
\text{eval}(m(\omega \otimes \omega^\prime) \otimes x) = 
(\text{eval}\otimes \text{eval})(\omega\otimes\omega^\prime\otimes \Delta(x))
= \omega(x_{(2)})\omega^\prime(x_{(1)})\nn
%
&\hskip -0.15truecm
\text{eval}(\omega \otimes m(x\otimes y)) = 
(\text{eval}\otimes \text{eval})(\Delta(\omega)\otimes x\otimes y)
= \omega_{(1)}(y)\omega_{(2)}(x) 
\end{align}
Using the evaluation map any product induces a coproduct on 
the dual space and vice versa \cite{milnor:moore:1965a}.
\begin{align}
\Delta : A \rightarrow A\otimes A 
\quad \Leftrightarrow \quad
m^* : A^* \otimes A^* \rightarrow A^* \nn
m : A \otimes A \rightarrow A
\quad \Leftrightarrow \quad
\Delta^* : A^* \rightarrow A^* \otimes A^*
\end{align}
Working with a space $A$ and a dual space $A^*$ we are still free to 
choose i) a product and co-product on $A$ {\em or} on $A^*$, ii) 
a product $m$ on $A$ and $m^*$ on $A^*$, i.e. Gra{\ss}mann-Cayley case
or iii) a coproduct $\Delta$  on $A$ and $\Delta^*$ on $A^*$.

\section{Gra{\ss}mann Hopf algebra}

\index{Gra{\ss}mann Hopf algebra}
We will define the Gra{\ss}mann Hopf algebra using the notion
of letters and words, i.e. choosing a basis. Of course one could
reformulate the following results basis free also. However, it will become
important that the structure is unique up to isomorphy only. The notion 
of a Gra{\ss}mann Hopf algebra is standard and may be found 
in \cite{sweedler:1969a}, however we need to introduce some subtleties
which will be used later on and are explained at length in 
\cite{fauser:2002c}. The terms Hopf {\em al}gebra and Hopf gebra denote
in general different structures but coincide in the Gra{\ss}mann Hopf
case, however these terms are distinct e.g. for Clifford Hopf al/gebras.

\index{coproduct!euclidian}
An {\em euclidian coproduct} of a Gra{\ss}mann exterior product $\vee$ 
(meet of hyperplanes) on $A^*$ of an element $x \in A$ is defined as 
the sum over all those tensors $x_{(1)i}\otimes x_{(2)i}$ which multiply 
back to the element $x$. Our terminology reflects the usage of the euclidian 
dual isomorphism $\delta : V \rightarrow V^*$. Hence we consider the 
splits
\begin{align}
I_x \equiv (x) &:= \Big\{\,(a,b) \mid m(a\otimes b)=x\Big\}\nn
& I_{x(1)} \equiv x_{(1)} = a \quad I_{x(2)} \equiv x_{(2)} = b 
\end{align}
and obtain
\begin{align}
\Delta(x) &:= \sum_{I_x}^{\vert I_x\vert} 
I_{x(1)} \otimes I_{x(2)} = \sum_{(x)} x_{(1)} \otimes x_{(2)} 
                        \,=\, x_{(1)} \otimes x_{(2)}\nn
m\circ \Delta(x) &= \sum_{(x)} m(x_{(1)}\otimes x_{(2)}) = 
\vert I_x\vert\ x
\end{align}
The Gra{\ss}mann exterior algebra over a vector space $V^{\wedge}$
having a wedge product $\wedge$ can be obtained by factoring the 
tensor product modulo antisymmetrization. The singe transposition
needed for antisymmetrization is called Gra{\ss}mann crossing or 
{\em graded switch} and is defined as
\index{crossing|see{switch}}
\index{switch!graded}
\begin{align}
\label{eqn:switch}
&\otimes \,\overset{\pi_{\hat{\tau}}}{\longrightarrow}\, \wedge \nn 
&\hat{\tau}(A\otimes B) = (-1)^{\partial A\partial B}B\otimes A
\qquad\text{on homogeneous elements.}
\end{align}
We obtain 
\begin{align}
\Delta_{\wedge}(\Id) &= \Id \otimes \Id \nn
\Delta_{\wedge}(a) &= a \otimes \Id + \Id \otimes a \nn
\Delta_{\wedge}(a \wedge b) &= 
a\wedge b \otimes \Id + a\otimes b - b\otimes a + \Id \otimes a\wedge b\nn
\vdots\nn
\Delta_{\wedge}(x) &= x_{(1)} \otimes x_{(2)}.
\end{align}
The sign stemming from the permutations is included in Sweedler notation.
To establish a basis in a Gra{\ss}mann algebra we need a termordering
\index{termordering!in Gra{\ss}mann basis}
on the elements $a,b,c\ldots \in V$ extended to $V^{\wedge}$ to be able to 
decide if we should solve for $ab$ or $ba=-ab$. The splits of a word 
$A=ab\ldots d$ into two blocks $B=a\ldots c$, $C=b\ldots d$ is such that 
in every block $B,C$ the termordering remains valid. In the Gra{\ss}mann
case we find that a word of length $r$ obeys $2^r$ such splits. The
euclidian dualized wedge coproduct is found to be:
\index{grading!on words and letters}
i) co-unital with counit $\epsilon : V^{\wedge} \rightarrow \openk$,
ii) co-associative, iii) (linear) dual to the exterior product 
(denoted as `vee' $\vee$) on the dual space of linear forms 
$V^{*\,\wedge}$ : $\Delta^* \equiv \vee$ and iv) 
can be {\em obtained in a combinatorial way} by a sum of all `splits`
of the exterior products into 2 blocks.
\index{coproduct!combinatorial properties of}

The pair $(V^{\wedge},\wedge)$ is called {\em Gra{\ss}mann algebra} while
the pair $(V^{\wedge},\Delta_{\wedge})$ is called {\em Gra{\ss}mann cogebra}.
If the coproduct is dualized from teh vee $\vee$ we denote it as 
$\Delta_{\vee}$.
\index{Gra{\ss}mann!algebra}
\index{Gra{\ss}mann!cogebra}

If the following compatibility laws are valid, and if one can
proof that an {\em antipode} exists we can establish a 
{\em Gra{\ss}mann Hopf algebra}.
\index{Gra{\ss}mann Hopf algebra}

In Hopf{\em al}gebras one demands as compatibility laws that product 
and unit are cogebra morphisms and that coproduct and counit are algebra 
morphisms.
\index{Hopf algebra!bihomomorphism axiom} 
\begin{align}
\label{eqn:hom}
\begin{array}{c@{\hskip 0.5truecm}c@{\hskip 0.5truecm}c}
\Rnode{1}{B\otimes B} & \Rnode{2}{B} & \Rnode{3}{B\otimes B} \\[8ex]
\Rnode{4}{B\otimes B\otimes B\otimes B} & & 
\Rnode{5}{B\otimes B\otimes B\otimes B}
\ncline{->}{1}{2}
\Aput{m_B}
\ncline{->}{2}{3}
\Aput{\Delta_B}
\ncline{->}{1}{4}
\Bput{\Delta_B \otimes \Delta_B}
\ncline{->}{4}{5}
\Aput{\Id \otimes \hat{\tau}\otimes \Id}
\ncline{->}{5}{3}
\Aput{m_B \otimes m_B}
\end{array}
%%%%%%%%%%%%%
\quad
%%%%%%%%%%%%%
\pspicture[0.5](0,0)(1,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,6)(0,5)
\psline(2,6)(2,5)
\psarc(1,5){1.0}{180}{360}
\psline(1,4)(1,2)
\psarc(1,1){1.0}{0}{180}
\psline(0,1)(0,0)
\psline(2,1)(2,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\rput(1.0,4.75){$m_B$}
\rput(1.0,1.25){$\Delta_B$}
\endpspicture
\hskip -10pt = \hskip 8pt 
\pspicture[0.5](0,0)(3,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,6)(1,5)
\psline(5,6)(5,5)
\psarc(1,4){1.0}{0}{180}
\psarc(5,4){1.0}{0}{180}
\psline(0,4)(0,2)
\psline(6,4)(6,2)
\psline{c-c}(4,4)(2,2)
\psline[border=4pt,bordercolor=white]{c-c}(2,4)(4,2)
\psarc(1,2){1.0}{180}{360}
\psarc(5,2){1.0}{180}{360}
\psline(1,1)(1,0)
\psline(5,1)(5,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,5){0.2}
\rput(1.0,4.25){$\Delta_B$}
\rput(1.0,1.75){$m_B$}
\rput(3.0,3.75){$\hat{\tau}$}
\rput(5.0,4.25){$\Delta_B$}
\rput(5.0,1.75){$m_B$}
\endpspicture
\end{align}
Finally we give the axioms for the {\em antipode}, an anti-homomorphism,
and a generalization of the inverse 
\index{antipode!definition}
\begin{align}
S(x_{(1)}) \wedge x_{(2)} = \epsilon(x) \,\Id =
x_{(1)} \wedge S(x_{(2)})  \hskip 2truecm \forall x \in V^{\wedge}
\end{align}
%%
%% Antipode Axiom (left and right)
%%
%%
\index{tangle!of antipode}
\begin{align}
\label{eqn:antipode}
\pspicture[0.5](0,0)(1,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,5)(1,4)
\psarc(1,3){1}{0}{180}
\psline(2,3)(2,2)
\psarc(1,2){1}{180}{360}
\psline(1,1)(1,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\rput(1,1.75){m}
\rput(1,3.25){$\Delta$}
\rput(0,2.5){S}
\endpspicture
\quad&=\quad
\pspicture[0.5](0,0)(1,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,5)(1,3)
\psline(1,0)(1,2)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\rput(1.5,3){$\epsilon$}
\rput(1.5,2){$\Id$}
\endpspicture
\quad=\quad
\pspicture[0.5](0,0)(1,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,5)(1,4)
\psarc(1,3){1}{0}{180}
\psline(0,3)(0,2)
\psarc(1,2){1}{180}{360}
\psline(1,1)(1,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\rput(1,1.75){m}
\rput(1,3.25){$\Delta$}
\rput(2,2.5){S}
\endpspicture
\qquad
\text{U}=\Id\circ\epsilon\,=\,\Id_{\text{conv}} 
\end{align}
A {\em Gra{\ss}mann Hopf algebra} is defined as the following septuple
$H^{\wedge} = (V^{\wedge},\wedge,\Id,$ $\Delta_{\wedge},
\epsilon\,;\hat\tau,S)$ fulfilling the above axioms. A classification 
of convolution algebras obeying a product and a coproduct can be
found in \cite{fauser:2002c}. There it was demonstrated that if
a convolutive unit $\Id_{\text{conv}}$ and an antipode exits then
the product and coproduct induce all other structure tensors in a 
Hopf gebra. This idea goes back to Oziewicz 
\cite{oziewicz:1997a,oziewicz:guzman:2001a}.

The rest of the paper is devoted to the task of showing that almost all
algebraic structures needed in geometry and physics can be {\em derived}
in a plain and natural way from the common generic root of Gra{\ss}mann 
Hopf gebra. In this way we follow Oziewicz \cite{oziewicz:1986a} from 
Gra{\ss}mann to Gra{\ss}mann-Cayley, Clifford, etc. adding in the same 
time the dual structures:\\
{\psset{nodesep=10pt}
\begin{align}
\hskip -12pt
\begin{tabular}{l@{\hskip 3truecm}l}
 & \Rnode{1}{meet, join -- GC algebras }\\[-3pt]
 & \Rnode{2}{comeet, cojoin}\\[-3pt]
 & \Rnode{3a}{left/right contractions}\\[-3pt]
\Rnode{GHG}{{\bf Gra{\ss}mann Hopf gebra}} & \Rnode{3b}{left/right 
co-contractions}\\[-3pt]
 & \Rnode{4}{cliffordization}\\[-3pt]
 & \Rnode{5}{cocliffordization}\\[-3pt]
 & \Rnode{6}{ordering \& renormalization}
\end{tabular}
\nccurve[angleA=0,angleB=180]{->}{GHG}{1}
\nccurve[angleA=0,angleB=180]{->}{GHG}{2}
\nccurve[angleA=0,angleB=180]{->}{GHG}{3a}
\nccurve[angleA=0,angleB=180]{->}{GHG}{3b}
\nccurve[angleA=0,angleB=180]{->}{GHG}{4}
\nccurve[angleA=0,angleB=180]{->}{GHG}{5}
\nccurve[angleA=0,angleB=180]{->}{GHG}{6}
\end{align}}
We will have no space to discuss the last point here, see 
\cite{brouder:2002a,fauser:2002c,brouder:fauser:frabetti:oeckl:2002a}.

\section{Gra{\ss}mann-Cayley double algebra}
\index{Gra{\ss}mann-Cayley algebra}

\subsection{Integrals and the bracket}

A {\em left (right) integral} is an element $\mu_{L}$ ($\mu_{R}) \in A^*$, 
i.e. a comultivector of the unital cogebra $A^*$ fulfilling:
\index{integral!of a Hopf algebra}
\index{tangle!of integrals}
\begin{align}
\label{eqn:lrintegral}
&\pspicture[0.5](0,0)(1,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,0)(0,2)
\psline(2,1)(2,2)
\psarc(1,2){1}{0}{180}
\psline(1,3)(1,5)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](2,1){0.2}
\rput(2,0.25){$\mu_R$}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,0)(0.5,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,0)(1,2)
\psline(1,3)(1,5)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,3){0.2}
\rput(1.75,2.75){$\mu_R$}
\endpspicture
%%
&&
\pspicture[0.5](0,0)(1,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,1)(0,2)
\psline(2,0)(2,2)
\psarc(1,2){1}{0}{180}
\psline(1,3)(1,5)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](0,1){0.2}
\rput(0,0.25){$\mu_L$}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,0)(0.5,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,0)(1,2)
\psline(1,3)(1,5)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,3){0.2}
\rput(1.75,2.75){$\mu_L$}
\endpspicture
%% 
\end{align}
\begin{align}
&(\Id\otimes \mu_R)\Delta(x) = \mu_R(x)\Id
&&(\mu_L\otimes\Id)\Delta(x) = \mu_L(x)\Id \,.
\end{align}
%
Gra{\ss}mann Hopf gebras are bi-augmented, bi-connected, see
\cite{milnor:moore:1965a,fauser:2002c} and possesses a unique 
left/right integral $\mu$. Integrals in general do {\em not} exist
in Clifford Hopf gebras \cite{fauser:2002c}.

\index{bracket}
The {\em bracket} $[\ldots ]$ of invariant theory is defined to be
a multilinear alternating normalized map of $s$ multivector arguments 
having total degree $n$, i.e. $\partial A_0+\partial A_1 +\ldots 
+\partial A_s = n = \text{dim} V$ and otherwise zero. 
\begin{align}
{}[A_0,...,A_s] &~~:~~ \otimes^s V^{s_i} \longrightarrow \openk \nn
{}[A_0,...,A_s] &~\equiv~ (\mu \circ \wedge^s)(A_0 \otimes \,...\, \otimes A_s)
\end{align}
In fact this is a determinantal map. The unique integral $\mu$ of a 
Gra{\ss}mann Hopf algebra turns out to be the projection onto the 
coefficient of the highest grade element. This allows to define the 
bracket in Gra{\ss}mann Hopf algebraic terms:
\index{tangle!of bracket}
\begin{align}
\label{eqn:bracket}
[A_0,\ldots,A_s]_{\mu} 
%
\quad&\cong\quad
%
\pspicture[0.5](0,0)(1.5,2.25)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1.5,0)(1.5,1)
\psline(0,2.5)(0,3.5)
\psline(3,2.5)(3,3.5)
\psarc(1.5,2.5){1.5}{180}{360}
\psline[linestyle=dotted](1,3)(2,3)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1.5,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1.5,0){0.2}
\rput(0,4){$A_0\otimes$}
\rput(1.5,4){$\ldots$}
\rput(3,4){$\otimes A_s$}
\rput(2,0){$\mu$}
\endpspicture
\end{align}
In what follows it is important to realize, that the bracket is 
a sort of {\em cup-tangle} on $n$-strands or equivalently an {\em 
$n \rightarrow 0$ map}. While the evaluation map in (\ref{eqn:eval})
was a pairing of a space and dual space, the bracket, using two arguments,
constitute a self pairing $[.,.] : V^{\wedge}\otimes V^{\wedge} \rightarrow
\openk$. In terms of tangles we can, however, easily transfer 
notions from one to the other case. This will be used in the next 
subsection. 
\index{pairing}
\index{pairing!self}
 
\subsection{Meet and join, linear logic}

\index{meet}
\index{join}
\index{logic!linear}
\index{extensor}
\index{extensor!support of an}
\index{logic!linear XOR}
Let $A$ be an {\em extensor}, i.e. a homogenous decomposable multivector 
which can be written as $A=a_0 \wedge \ldots \wedge a_r$. The linear space 
$\overline{A} = \text{span}\{a_0,\ldots,a_r\}$ is called {\em support of $A$}.
The {\em join ($A \wedge B$)} is defined as the {\em disjoint union} of 
the supports $\overline{A},\,\overline{B}$, i.e.
$\overline{A \wedge B} = \overline{A}\cap\overline{B}$, and zero otherwise
\cite{doubilet:rota:stein:1974a,barnabei:brini:rota:1985a}.
In logical terms this is aa {\em exclusive or (XOR)} on linear spaces.

Geometrically spoken the join connects disjoint geometric elements. Two 
points are joint to span a line, a point and a line may span a plane etc. 
It was already clear to Gra{\ss}mann that one needs a second operation called
{\em meet} (his regressive product, a section) which allows to compute 
common subspaces thereby lowering the degree of the algebraic objects. 
We will show that this notion is natural to a Gra{\ss}mann Hopf algebra.
\index{product!regressive}

{\bf Historical note:}
\index{product!vee -- $\vee$}
\index{Gra{\ss}mann!{\bf A1}}
\index{Gra{\ss}mann!{\bf A2}}
\index{Ergaenzung@Erg\"anzung}
\index{rule of the common factor}
\index{logic!linear NOT}
The {\em meet} or $\vee$-product was introduced by H. Gra{\ss}mann as
'ein\-ge\-wandtes Produkt' in \cite{grassmann:1878a} using what later
was called the {\em rule of the common factor}. He weakened this concept
and renamed the operation to the {\em regressive product} in the 
second Ausdehnungslehre [A2,1862] \cite{grassmann:1862a} using there 
the unary operation of 'Erg\"anzung'. This is the notion of an orthogonal 
complement and was denoted by a vertical line $a \rightarrow \vert a$ such
that $a \wedge \vert a = I$ where $I$ is an element of maximal grade. In 
logical terms this operation is a {\em negation} on a linear space. The 
Erg\"anzung makes explicite use of the total dimension of the underlying 
space $V$ via the element $I$, as it is also well known in logic that negation 
is based on a maximal element in an orthomodular lattice. This Erg\"anzungs
operation of taking the orthogonal complement needs, spoken in geometrical
terms, {\em necessarily} a symmetric polarity which leads necessarily to a 
symmetric polar bilinear form! It is this place where a restriction 
enters. Hence we can address the Erg\"anzung as {\em linear NOT} in
linear logic.

\index{logic!linear de Morgan law}
We call the following rule the {\em de Morgan law for linear spaces}. 
It can be found in Gra{\ss}mann's A2, \cite{grassmann:1862a} and was
reinvented several times, see second line.
\begin{align}
\vert(A\vee B) &= (\vert A) \wedge (\vert B) 
&&\text{[1862, A2]}\nn
A\vee B &= I^{-1}\cdot ((I\cdot A) \wedge (I\cdot B)) &&
\text{\cite{hestenes:sobczyk:1992a} needs a 'dot' product} 
\end{align}
It should be remarked that the usage of a dot- or scalar product is still 
more restrictive than the assumption of orthomodularity which fixes only
a class of polarities having the same determinant.

\index{product!universal formula (Lotze)}
A universal or {\em master formula} for the meet of $r$ factors not using 
any symmetric polarity was given by Alfred Lotze in 1955 \cite{lotze:1955a}%
\footnote{We make use of the definition given by Doubilet, Rota \& Stein 
\cite{doubilet:rota:stein:1974a} which is for two factors, but uses a more
compact notation.}. Lotze showed in a note added in proof of the above 
cited paper, that the meet product turns out to be an exterior product also.
\index{meet!double}
\index{duality!of meet and join}
\index{duality!of projective geometry}
Moreover, Lotze showed that the 'double meet' (meet w.r.t. the meet) is again
probably up to a sign the original wedge product. This is a remarkable
and beautiful duality. Furthermore, it shows that we can safely reject
the idea of Rota to switch the notion of wedge and vee products to come up 
with an direct analogy to set theory since duality spoils a fixed relation. 
Finally this duality shows that it is irrelevant what is a point and what a
hyperplane, but these notions can be interchanged {\em provided} one 
interchanges also the meaning of meet and join. This is the celebrated 
duality of projective geometry.
\myeenv

We are ready to define the meet now entirely in terms of the Gra{\ss}mann 
Hopf algebra as (the signs are due to a reordering of factors):
\index{tangle!of meet}
\begin{align}
A \vee B &:= (a_1\wedge\ldots\wedge a_r) \vee (b_1\wedge\ldots\wedge b_s) \\
&= [B_{(1)},A] \, B_{(2)} =  A_{(1)}\, [B,A_{(2)}] 
= \pm [A,B_{(1)}] \, B_{(2)} =  \pm A_{(1)}\, [A_{(2)},B] \nonumber
\end{align}
The tangle definition of the meet reads:
\begin{align}
\label{eqn:meet}
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,0)(1,1)
\psarc(1,2){1}{180}{360}
\psline(0,2)(0,4)
\psline(2,2)(2,4)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\rput(1,1.75){$\vee$}
\endpspicture
%
\quad:=\quad
%
\pm\,\,\pspicture[0.5](0,0)(2,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,4)(0,2)
\psline(3,4)(3,3)
\psarc(3,2){1}{0}{180}
\psarc(1,2){1}{180}{360}
\psline(1,1)(1,0.5)
\psline(4,2)(4,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,0.5){0.2}
\rput(1,1.75){$\wedge$}
\rput(3,1.75){$\Delta_\wedge$}
\endpspicture
%
\quad=\quad
%
\pm\,\,\pspicture[0.5](0,0)(2,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(4,4)(4,2)
\psline(1,4)(1,3)
\psarc(1,2){1}{0}{180}
\psarc(3,2){1}{180}{360}
\psline(3,1)(3,0.5)
\psline(0,2)(0,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,0.5){0.2}
\rput(3,1.75){$\wedge$}
\rput(1,1.75){$\Delta_\wedge$}
\endpspicture
\end{align}
This definition still needs the notion of a maximal grade to exist, 
but works out properly for arbitrary not necessarily symmetric 
non-degenerate bilinear forms too. The meet is a sort of contraction
w.r.t. the self pairing induced by the bracket, see below.

\subsection{Comeet and cojoin}

\index{comeet}
\index{cojoin}
Having the tangle definition it is simply a matter of dualizing to come
up with the notion of a cojoin and comeet. The {\em cojoin} turns out to 
be just the Gra{\ss}mann coproduct $\Delta_{\wedge}$. The {\em co-meet} 
$\Delta_{\vee}$ is given by categorial duality and involves the obvious 
notion of a {\em cointegral}. 
\index{tangle!of comeet}
\begin{align}
\label{eqn:comeet}
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,4)(1,3)
\psarc(1,2){1}{0}{180}
\psline(0,0)(0,2)
\psline(2,0)(2,2)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,3){0.2}
\rput(1,2.25){$\Delta_\vee$}
\endpspicture
%
\quad:=\quad
%
\pm\,\,\pspicture[0.5](0,0)(2,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,2)(0,0)
\psline(3,1)(3,0)
\psarc(3,2){1}{180}{360}
\psarc(1,2){1}{0}{180}
\psline(1,3)(1,3.5)
\psline(4,2)(4,4)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,3.5){0.2}
\rput(3,2.25){$\wedge$}
\rput(1,2.25){$\Delta_\wedge$}
\endpspicture
%
\quad=\quad
%
\pm\,\,\pspicture[0.5](0,0)(2,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(4,0)(4,2)
\psline(1,0)(1,1)
\psarc(1,2){1}{180}{360}
\psarc(3,2){1}{0}{180}
\psline(3,3)(3,3.5)
\psline(0,2)(0,4)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,3.5){0.2}
\rput(1,2.25){$\wedge$}
\rput(3,2.25){$\Delta_\wedge$}
\endpspicture
%
\end{align}
The comeet is a coproduct, i.e. a $1 \rightarrow 2$ map, it may be called
cocontraction w.r.t the cobracket.

\subsection{Gra{\ss}mann-Cayley and fourfold algebra}

\index{Gra{\ss}mann-Cayley algebra}
\index{GC algebra|see{Gra{\ss}mann-Cayley algebra}}
The {\em Gra{\ss}mann-Cayley algebra} is defined to be the
di-algebra $GC(\vee,\wedge)$ having two associative unital binary products.
The various duality relations allow us to identify the Gra{\ss}mann-Cayley
algebra with the Gra{\ss}mann Hopf algebras $H_{\wedge}$ or $H_{\vee}$ over
$V^{\wedge}$ or $V^{*\vee}$ and to introduce a Gra{\ss}mann-Cayley cogebra
$GC(\Delta_{\vee},\Delta_{\wedge})$. In a CD this dualities read as:
\index{tangle!Gra{\ss}mann-Cayley versus Hopf}
\begin{align}
&\begin{array}{ccc}
\Rnode{11}{GC(\vee,\wedge)} &\hskip 2truecm &
\Rnode{12}{GC(\Delta_{\vee},\Delta_{\wedge})} \\[6ex]
% 
\Rnode{21}{H_{\wedge}(\wedge,\Delta_{\vee})} & &
\Rnode{22}{H_{\vee}(\vee,\Delta_{\wedge})} 
\end{array}
\ncline{<->}{11}{12}
\ncline{<->}{11}{21}
\ncline{<->}{12}{22}
\ncline{<->}{21}{22}
\end{align}
Note that in Gra{\ss}mann Hopf algebras the exterior product and the 
exterior coproduct are {\em independent}. This has some subtle
consequences and was the motivation to use wedge and vee for the
exterior products on $V^{\wedge}$ and $V^{*\vee}$, see \cite{fauser:2002c}.
This independence makes it useful to introduce the {\em fourfold algebra}:
\index{algebra!fourfold}
\index{fourfold algebra}
\begin{align}
H_{\wedge}\oplus H_{\vee} &\simeq 
GC(\wedge,\Delta_{\vee},\vee,\Delta_{\wedge}).
\end{align}
It would be interesting to investigate in which way this is a 
Gra{\ss}mann-Cayley Hopf di-algebra. A reasonable assumption is
to relate the wedge $\wedge$ and $\vee$ vee product using an analogy 
of a co-(quasi) triangular structure (which might be trivial),
see \cite{brouder:fauser:frabetti:oeckl:2002a}.

\section{Bilinear forms and contractions}

\subsection{Scalar and coscalar products}

\index{scalar product}
\index{coscalar product}
\index{product!scalar}
\index{product!coscalar}
A {\em scalar product} $B$ on $V\otimes V$ is a map in the set
$\text{lin-hom}(V\otimes V,\openk)$ or similarly on the dual space
$D \in \text{lin-hom}(V^* \otimes V^*,\openk)$ . A {\em coscalar 
product} $C$ is an element of the set $\text{lin-hom}(\openk,V \otimes V)$
or from $\text{lin-hom}(\openk,V^* \otimes V^*)$. 
\vskip 5pt
\begin{align}
\Rnode{1}{V}\hskip 2truecm
\Rnode{2}{V^*}
\ncline[offset=1ex]{->}{1}{2}
\Aput{B}
\ncline[offset=1ex]{->}{2}{1}
\Aput{D}
%%%%%%%%%%%%%%%%
\qquad
\Rnode{1}{V\otimes V}\hskip 2truecm
\Rnode{2}{\openk}\hskip 2truecm
\Rnode{3}{V^*\otimes V^*}
\ncline[offset=1ex]{->}{1}{2}
\Aput{B}
\ncline[offset=1ex]{->}{2}{1}
\Aput{C}
\ncline[offset=1ex]{<-}{2}{3}
\Aput{D}
\ncline[offset=1ex]{<-}{3}{2}
\Aput{E}
\end{align}
\vskip 5pt
Scalar products are $2\rightarrow 0$ maps, i.e. cup-tangles while coscalar
products are $0 \rightarrow 2$ maps, i.e. cap-tangles. However, on the 
linear spaces $V^{\wedge}$ and $V^{*\vee}$ we have to give a meaning to
a scalar product $B^{\wedge}$, resp. $D^{\vee}$ in a {\em canonical way}. 
Later on we will investigate Clifford algebras where the scalar product is 
the polar bilinear form of a quadratic form on $V$ and the algebra structure 
allows to define a unique generalization.

\index{scalar product!exponentially extended}
If we demand that the scalar product is extended by an exponential map
one can check that this is related to co-(quasi) triangular structures.
Furthermore can show that only exponentially generated scalar products 
$B^{\wedge}$ on $V^{\wedge}\otimes V^{\wedge}$ come up with associative 
algebraic structures during a deformation process
\cite{brouder:2002a,fauser:2002c,brouder:fauser:frabetti:oeckl:2002a}.

The cup-tangles for scalar an coscalar products can be looked at in two 
ways, either as scalar products or as duality in $\text{lin-hom}(V^{\wedge},
V^{*\vee})$ resp. $\text{lin-hom}(V^{*\vee},V^{\wedge})$. This reads:
\index{tangle!of scalar product}
\index{tangle!of coscalar product}
\begin{align}
\label{eqn:cupcap}
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,4)(0,2)
\psline(2,4)(2,2)
\psline{->}(0,2.5)(0,2.25)
\psline{->}(2,2.5)(2,2.25)
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,1){0.2}
\rput(1,0.25){B}
\endpspicture
%
\quad\cong\quad
%
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,4)(0,2)
\psline(2,4)(2,2)
\psline{->}(0,2.5)(0,2.25)
\psline{->}(2,3.7)(2,3.5)
\psline{<-}(2,2.5)(2,2.25)
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](2,3){0.2}
\rput(1.25,3){B}
\rput(1,0.25){eval}
\endpspicture  
%%
\qquad&&~
%%
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(0,4)(0,2)
\psline(2,4)(2,2)
\psline{<-}(0,2.5)(0,2.25)
\psline{<-}(2,2.5)(2,2.25)
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,1){0.2}
\rput(1,0.25){D}
\endpspicture
%
\quad\quad\text{dualized:}\quad
%
\pspicture[0.5](0,-0.5)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psarc(1,1){1}{0}{180}
\psline(0,1)(0,0)
\psline(2,1)(2,0)
\psline{->}(0,0.5)(0,0.25)
\psline{->}(2,0.5)(2,0.25)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,2){0.2}
\rput(1,2.75){C}
\endpspicture
\end{align}
\index{scalar product!canonically induced}
Hence we define the {\em canonically induced scalar product} $B^{\wedge}$,
which fulfils the axioms of a co-(quasi) triangular structure, as:
\begin{align}
\label{eqn:expB}
B^{\wedge} = &\exp_{\wedge}(B) =
\epsilon\otimes\epsilon + B_{ij}\epsilon^i\otimes \epsilon^j
+ B_{[i_1i_2],[j_1j_2]} 
\epsilon^{i_1}\wedge\epsilon^{i_2} \otimes \epsilon^{j_1}\wedge\epsilon^{j_2}
+ \ldots 
%%
\nn
%%
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,4)(0,1)
\psline(2,4)(2,1)
\psline{->}(0,4)(0,3.5)
\psline{->}(2,4)(2,3.5)
\psarc(1,1){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,0){0.2}
\rput(1,0.75){$B^{\wedge}$}
\endpspicture
%
\,&=\,
%
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,4)(0,0)
\psline(2,4)(2,0)
\psline{->}(0,4)(0,3.5)
\psline{->}(2,4)(2,3.5)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](0,0){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,0){0.2}
\endpspicture
%
\,\oplus\,
%
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,4)(0,1)
\psline(2,4)(2,1)
\psline{->}(0,4)(0,3.5)
\psline{->}(2,4)(2,3.5)
\psarc(1,1){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,0){0.2}
\rput(1,0.75){$B$}
\endpspicture
%
\,\oplus\,
%
\frac{1}{2!}\,
%
\pspicture[0.5](0,0)(3,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,5)(1,4)
\psline(5,5)(5,4)
\psline{->}(1,5)(1,4.5)
\psline{->}(5,5)(5,4.5)
\psarc(1,3){1}{0}{180}
\psarc(5,3){1}{0}{180}
\psbezier(2,3)(2,1.5)(2,1.5)(3,1.5)
\psbezier(4,3)(4,1.5)(4,1.5)(3,1.5)
\psbezier(0,3)(0,0)(0,0)(3,0)
\psbezier(6,3)(6,0)(6,0)(3,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,1.5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,0){0.2}
\rput(3,0.75){$B$}
\rput(3,2.25){$B$}
\endpspicture
%
\,\oplus\,
%
\frac{1}{3!}\,
%
\pspicture[0.5](0,0)(4,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(2,6)(2,5)
\psline(6,6)(6,5)
\psline{->}(2,6)(2,5.5)
\psline{->}(6,6)(6,5.5)
\psarc(2,4){1}{0}{180}
\psarc(1,3){1}{0}{180}
\psarc(6,4){1}{0}{180}
\psarc(7,3){1}{0}{180}
\psbezier(3,4)(3,3)(3,3)(4,3)
\psbezier(5,4)(5,3)(5,3)(4,3)
\psbezier(2,3)(2,1.5)(2,1.5)(4,1.5)
\psbezier(6,3)(6,1.5)(6,1.5)(4,1.5)
\psbezier(0,3)(0,0)(0,0)(4,0)
\psbezier(8,3)(8,0)(8,0)(4,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](6,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](7,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](4,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](4,1.5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](4,0){0.2}
\rput(4,0.75){$B$}
\rput(4,2.25){$B$}
\rput(4,3.75){$B$}
\endpspicture
%
\quad\ldots
%
\end{align}
The coscalar product $C^{\Delta_{\vee}}$ is obtained in the same way
by categorial duality, i.e. mirroring the tangle horizontally (rotating 
by $\pi$).

\subsection{Contractions}
 
Using the scalar product $B^{\wedge}$ as cup-tangle, we can once
more exploit product coproduct duality. This time all input spaces are
of the same type and we get
\begin{align}
\pspicture[0.5](0,0)(1.5,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,5)(0,1)
\psline(1,5)(1,2)
\psline(3,5)(3,2)
\psline{->}(0,4)(0,3.75)
\psline{->}(1,4)(1,3.75)
\psline{->}(3,4)(3,3.75)
\psarc(1,1){1}{180}{360}
\psarc(2,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,0){0.2}
\rput(1,0.75){B}
\rput(2,1.75){$\wedge$}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,0)(3,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,5)(1,4)
\psline(4,5)(4,3)
\psline(6,5)(6,2)
\psline(0,3)(0,2)
\psline{->}(1,4.5)(1,4.25)
\psline{->}(4,4.5)(4,4.25)
\psline{->}(6,4.5)(6,4.25)
\psline(2,0)(4,0)
\psarc(1,3){1}{0}{180}
\psarc(3,3){1}{180}{360}
\psarc(2,2){2}{180}{270}
\psarc(4,2){2}{270}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,0){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,2){0.2}
\rput(3,0.75){B}
\rput(3,2.75){B}
\endpspicture
%
\quad=:\quad
%
\pspicture[0.5](0,0)(1.5,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(3,5)(3,1)
\psline(2,5)(2,2)
\psline(0,5)(0,2)
\psline{->}(3,4)(3,3.75)
\psline{->}(2,4)(2,3.75)
\psline{->}(0,4)(0,3.75)
\psarc(2,1){1}{180}{360}
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](2,0){0.2}
\rput(2,0.75){B}
\rput(1,1.75){$\LL_B$}
\endpspicture
\end{align}
This motivates the definition of the {\em right contraction} in terms
of a tangle equation as 
\index{contraction!right}
\index{tangle!of right contraction}
\begin{align}
\label{eqn:rightcon}
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,4)(0,2)
\psline(2,4)(2,2)
\psline(1,1)(1,0)
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\rput(1,1.75){$\LL_B$}
\endpspicture
%
\quad:=\quad
%
\pspicture[0.5](0,0)(2,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,4)(1,3)
\psline(0,2)(0,0)
\psline(4,4)(4,2)
\psarc(1,2){1}{0}{180}
\psarc(3,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,1){0.2}
\rput(3,0.25){$B$}
\rput(1,2){$\Delta^{\wedge}$}
\endpspicture
\end{align}
Moving the product from left to right in the product coproduct
duality (\ref{eqn:prcopr}) gives
\begin{align}
\pspicture[0.5](0,0)(1.5,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(3,5)(3,1)
\psline(2,5)(2,2)
\psline(0,5)(0,2)
\psline{->}(3,4)(3,3.75)
\psline{->}(2,4)(2,3.75)
\psline{->}(0,4)(0,3.75)
\psarc(2,1){1}{180}{360}
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](2,0){0.2}
\rput(1,2){$\wedge$}
\rput(2,0.75){B}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,0)(3,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(5,5)(5,4)
\psline(2,5)(2,3)
\psline(0,5)(0,2)
\psline(6,3)(6,2)
\psline(2,0)(4,0)
\psline{->}(5,4.5)(5,4.25)
\psline{->}(2,4.5)(2,4.25)
\psline{->}(0,4.5)(0,4.25)
\psline(4,0)(4,0)
\psarc(5,3){1}{0}{180}
\psarc(3,3){1}{180}{360}
\psarc(2,2){2}{180}{270}
\psarc(4,2){2}{270}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,0){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,2){0.2}
\rput(3,0.75){B}
\rput(3,2.75){B}
\endpspicture
%
\quad=:\quad
%
\pspicture[0.5](0,0)(1.5,2.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,5)(0,1)
\psline(1,5)(1,2)
\psline(3,5)(3,2)
\psline{->}(0,4)(0,3.75)
\psline{->}(1,4)(1,3.75)
\psline{->}(3,4)(3,3.75)
\psarc(1,1){1}{180}{360}
\psarc(2,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,0){0.2}
\rput(2,2){$\JJ_B$}
\rput(1,0.75){B}
\endpspicture
\end{align}
which motivates the definition of the {\em left contraction}
as:
\index{contraction!left}
\index{tangle!of left contraction}
\begin{align}
\label{eqn:leftcon}
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,4)(0,2)
\psline(2,4)(2,2)
\psline(1,1)(1,0)
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\rput(1,1.75){$\JJ_B$}
\endpspicture
%
\quad:=\quad
%
\pspicture[0.5](0,0)(2,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(3,4)(3,3)
\psline(4,2)(4,0)
\psline(0,4)(0,2)
\psarc(3,2){1}{0}{180}
\psarc(1,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,1){0.2}
\rput(1,0.25){$B$}
\rput(3,2){$\Delta^{\wedge}$}
\endpspicture
\end{align}
These two definitions are valid for arbitrary inhomogeneous elements 
of any grade. While in textbooks one finds such a definition using the
pairing e.g. \cite{greub:1976a}, there is no direct constructive rule 
for their evaluation. Since we can directly compute coproducts, our
formul\ae\
\begin{align}
\JJ_{B^{\wedge}}( A \otimes B) &= B^{\wedge}(A,B_{(1)})\, B_{(2)} \nn
\LL_{B^{\wedge}}( A \otimes B) &= A_{(1)} \,B^{\wedge}(A_{(2)},B)
\end{align}
are constructive and free of any grade, homogeneity or decomposability
restrictions.

\subsection{Chevalley formul\ae\ for any grade}

In Ref. \cite{chevalley:1997a} Chevalley introduced a recursive method
to compute the contraction. From the properties of the pairing he derived
the following well known rules for the left contraction. Of course
analogous formul\ae\ hold for right contractions. Let $x,y \in V$ 
and $u,v,w \in V^{\wedge}$ the left contraction obeys 
\index{Chevalley formulae@Chevalley formul\ae}
\index{Leibnitz rule!graded}
\begin{align}
\label{eqn:chevalley}
i)  &&  x \JJ_B\, y &= B(x,y)\,\Id = \epsilon( x \circ y)\,\Id \nn
ii) &&  x\JJ_B\, (u \wedge v) &= (x \JJ_B\, u) \wedge v + 
                       \hat{u} \wedge (x \JJ_B\, v) \nn
iii)&&  u \JJ_B\, (v \JJ_B\, w) &= (u \wedge v) \JJ_B\, w,
\end{align}
where $\hat{u}=(-1)^{\partial u}\,u$ is the grade involution which turns
out to be the antipode of the Gra{\ss}mann Hopf algebra \cite{fauser:2002c}.

To show that the above tangle definition of the left contraction is a 
generalization of Chevalley deformation we have to show that the three 
rules (\ref{eqn:chevalley}i--iii) follow from the tangle definition.
But our main aim is to generalize the Chevalley relations to arbitrary
inhomogeneous algebra elements of any grade.

\mybenv{Theorem:}
The left contraction as defined in (\ref{eqn:leftcon}) for 
arbitrary algebra elements generalizes the Chevalley formul\ae\ 
(\ref{eqn:chevalley}i--iii) and reduces to them for the one-vector 
specialization. The graded crossing $\hat{\tau}$ induces the grade 
involution (antipode) in the graded Leibnitz rule (\ref{eqn:chevalley}ii). 
\myeenv 

\noindent{\bf Proof:} of i):
We compute the defining tangle of the left contraction on two grade one 
elements $a,b \in V$:
\begin{align}
\JJ_B(a\otimes b) &= (B^{\wedge}\otimes \Id)\left(
(\Id\otimes \Delta)(a\otimes b)\right) \nn
&=(B^{\wedge}\otimes \Id)(a\otimes b \otimes Id + a\otimes\Id \otimes b) \nn
&=B(a,b)\Id \,. \\
\hskip 2truecm
\text{recall that~~} &~~~~~~ \Delta(b) = b\otimes \Id + \Id \otimes b 
\hskip 3.75truecm\rule{1ex}{1ex}\nonumber
\end{align}
\noindent
But the tangle definition is now valid for arbitrary elements
\begin{align}
\JJ_B(u\otimes v) &= (B^{\wedge}\otimes \Id)\left(
(\Id\otimes \Delta)(u\otimes v)\right) \nn
&=\Big(B^{\wedge}(u,v_{(1)})\Big) v_{(2)}
\end{align}
where only those terms survive having $\partial u = \partial v_{(1)}$.

\noindent{\bf Proof:} of iii):
We compute using tangles the following equation
\begin{align}
\pspicture[0.5](0,0)(1.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,7)(0,5)
\psline(2,7)(2,5)
\psline(3,7)(3,3)
\psline(1,4)(1,3)
\psline(2,2)(2,0)
\psarc(2,3){1}{180}{360}
\psarc(1,5){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,2){0.2}
\rput(2,2.75){$\JJ_B$}
\endpspicture
%
\quad&\overset{a)}{=}\quad
%
\pspicture[0.5](0,0)(2.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,7)(0,5)
\psline(2,7)(2,5)
\psline(4,7)(4,5)
\psline(1,4)(1,3)
\psline(5,4)(5,0)
\psline(3,4)(3,3)
\psarc(4,4){1}{0}{180}
\psarc(2,3){1}{180}{360}
\psarc(1,5){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](4,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](2,2){0.2}
\rput(2,2.75){$B$}
\endpspicture
%
\quad\overset{b)}{=}\quad
%
\pspicture[0.5](0,0)(3.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,7)(0,3)
\psline(2,7)(2,4)
\psline(6,7)(6,6)
\psline(7,5)(7,0)
\psline(6,4)(6,3)
\psarc(6,5){1}{0}{180}
\psarc(5,4){1}{0}{180}
\psarc(3,4){1}{180}{360}
\psarc(2,3){2}{180}{270}
\psarc(4,3){2}{270}{360}
\psline(2,1)(4,1)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](6,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,1){0.2}
\rput(3,1.75){$B$}
\rput(3,3.75){$B$}
\endpspicture
%%
%%
\nonumber \\[4ex]
%%
%%
&\overset{c)}{=}\quad
%
\pspicture[0.5](0,0)(3.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,7)(0,3)
\psline(2,7)(2,4)
\psline(5,7)(5,6)
\psline(7,4)(7,0)
\psline(4,5)(4,4)
\psline(5,4)(5,3)
\psarc(5,5){1}{0}{180}
\psarc(6,4){1}{0}{180}
\psarc(3,4){1}{180}{360}
\psarc(2,3){2}{180}{270}
\psarc(3,3){2}{270}{360}
\psline(2,1)(3,1)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](6,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](2.5,1){0.2}
\rput(2.5,1.75){$B$}
\rput(3,3.75){$B$}
\endpspicture
%
\quad\overset{a)}{=}\quad
%
\pspicture[0.5](0,0)(1.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(3,7)(3,5)
\psline(1,7)(1,5)
\psline(0,7)(0,3)
\psline(2,4)(2,3)
\psline(1,2)(1,0)
\psarc(1,3){1}{180}{360}
\psarc(2,5){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\rput(1,2.75){$\JJ_B$}
\rput(2,4.75){$\JJ_B$}
\endpspicture
\end{align}
We have used the definition of the contraction (\ref{eqn:leftcon}) in 
a), product coproduct duality (\ref{eqn:prcopr}) in b), coassociativity
(\ref{eqn:coass}) in c). This formula was already valid for any grade.
\myeenv

\noindent{\bf Proof:} of ii): The most complicated case is relation 
(\ref{eqn:chevalley}ii). We compute firstly the tangle equation for 
the general case and prove that the restriction to a one-vector argument
yields the well known graded Leibnitz rule.
\begin{align}
\label{eqn:iii)}
\pspicture[0.5](0,0)(1.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(3,7)(3,5)
\psline(1,7)(1,5)
\psline(0,7)(0,3)
\psline(2,4)(2,3)
\psline(1,2)(1,0)
\psarc(1,3){1}{180}{360}
\psarc(2,5){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\rput(1,2.75){$\JJ_B$}
\endpspicture
%
\quad&\overset{a)}{=}\quad
%
\pspicture[0.5](0,0)(2,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,7)(0,3)
\psline(2,7)(2,6)
\psline(4,7)(4,6)
\psline(3,5)(3,4)
\psline(4,3)(4,0)
\psarc(3,3){1}{0}{180}
\psarc(1,3){1}{180}{360}
\psarc(3,6){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,2){0.2}
\rput(1,2.75){$B$}
\endpspicture
%
\quad\overset{b)}{=}\quad
%
\pspicture[0.5](0,0)(3.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,7)(0,2)
\psline(1,5)(1,3)
\psline(2,7)(2,6)
\psline(6,7)(6,6)
\psline(6,2)(6,0)
\psline(7,5)(7,3)
\psarc(2,5){1}{0}{180}
\psarc(6,5){1}{0}{180}
\psarc(1,2){1}{180}{360}
\psarc(2,3){1}{180}{360}
\psarc(6,3){1}{180}{360}
\psbezier(5,5)(5,4)(3,4)(3,3)
\psbezier[border=4pt,bordercolor=white](3,5)(3,4)(5,4)(5,3)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,2){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](6,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](6,2){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,1){0.2}
\rput(1,1.75){$B$}
\endpspicture
%%
%%
\nonumber \\[4ex]
%%
%%
&\overset{c)}{=}\quad
%
\pspicture[0.5](0,0)(5,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,4)(0,3)
\psline(1,6)(1,5)
\psline(5,6)(5,5)
\psline(9,6)(9,5)
\psline(10,4)(10,2)
\psline(9,1)(9,0)
\psline(2,1)(4,1)
\psarc(1,4){1}{0}{180}
\psarc(5,4){1}{0}{180}
\psarc(9,4){1}{0}{180}
\psarc(9,2){1}{180}{360}
\psarc(2,3){2}{180}{270}
\psarc(3,4){1}{180}{360}
\psbezier(4,1)(5,1)(6,1)(6,2)
\psbezier(6,2)(6,3)(8,3)(8,4)
\psbezier[border=4pt,bordercolor=white](6,4)(6,3)(8,3)(8,2)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](9,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](9,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,3){0.2}
\rput(3,1.75){$B$}
\rput(3,3.75){$B$}
\endpspicture
%
\quad\overset{d)a)}{=}\quad
%
\pspicture[0.5](0,0)(3,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,7)(1,6)
\psline(4,7)(4,5)
\psline(6,7)(6,3)
\psline(4,1)(4,0)
\psline(0,5)(0,2)
\psbezier(0,2)(0,1)(3.5,4)(4,3)
\psline[border=4pt,bordercolor=white](3,4)(3,2)
\psarc(1,5){1}{0}{180}
\psarc(3,5){1}{180}{360}
\psarc(5,3){1}{180}{360}
\psarc(4,2){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,2){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](4,1){0.2}
\rput(3,4.75){$\JJ_B$}
\rput(5,2.75){$\JJ_B$}
\rput(0.5,1.5){eval}
\rput(3.85,3.6){coev}
\endpspicture
\end{align}
We have used the definition of the contraction (\ref{eqn:leftcon}) in 
a), the compatibility of algebra and cogebra structure (\ref{eqn:hom})
in b), product coproduct duality (\ref{eqn:prcopr}) in c), and the following
property of the crossing (\ref{eqn:cross}) in d). 
\begin{align}
\label{eqn:cross}
B^{cs}\tau^{ab}_{sd} &= \tau^{ca}_{ds}B^{sb} .
\hskip 1.5truecm
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psbezier(2,4)(2,3)(0,3)(0,2)
\psbezier[border=4pt,bordercolor=white](0,4)(0,3)(2,3)(2,2)
\psline(2,2)(2,0)
\psline(0,2)(0,0)
\psline{->}(2,1.5)(2,1)
\psline{->}(0,2)(0,1.75)
\psline{->}(0,0)(0,0.25)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](0,1){0.2}
\rput(0.75,1){$B$}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,0)(1,2)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psbezier(2,2)(2,1)(0,1)(0,0)
\psbezier[border=4pt,bordercolor=white](0,2)(0,1)(2,1)(2,0)
\psline(2,4)(2,2)
\psline(0,4)(0,2)
\psline{->}(0,3.5)(0,3)
\psline{<-}(2,3.75)(2,4)
\psline{->}(2,2)(2,2.25)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](2,3){0.2}
\rput(1.25,3){$B$}
\endpspicture
\end{align}
In algebraic terms the above given tangle equation (\ref{eqn:iii)}) reads:
\begin{align}
w\JJ_B (u\wedge v) &= (-1)^{(\vert w_{(1)}\vert\vert w_{(2)}\JJ_B\, u\vert)}
\, (w_{(2)}\JJ_B\, u)\wedge (w_{(1)}\JJ_B\, v)
\end{align}
To finish the proof we reduce the general formula to the case of 
a one vector contraction, i.e. we let  $w\rightarrow a \in V$
\begin{align}
a\JJ_B(u\wedge v) &= (a\JJ_B u)\wedge v + \hat{u}\wedge(a \JJ_B v),
\end{align}
remembering the definition of the graded switch (\ref{eqn:switch}) and 
specializing also to a one vector argument in the fist tensor slot
\begin{align}
\hat{\tau}(a \otimes u) &= (-1)^{\partial a\partial u}(u\otimes a) 
= ((-1)^{\partial u}u) \otimes a \nn
&= \hat{u} \otimes a.
\end{align}
we obtain the well known graded Leibnitz rule (\ref{eqn:chevalley}ii). 
\myeenv

Our calculation shows that the grade involution $\hat{u}$ originates
in the graded switch $\hat{\tau}$. The crossing is thus related to the 
derivation property. This observation has tremendous impact on commutation 
relations. Let
\begin{align}
a_i^\dagger \quad &\Leftrightarrow \quad a_i \wedge \nn
a_i         \quad &\Leftrightarrow \quad a_i \JJ_{\delta}  
\end{align}
an note that equation (\ref{eqn:chevalley}ii) defines then the 
commutation relations of such creation and annihilation operations,
i.e. a CAR algebra.
\begin{align}
&a_i a^\dagger_j \mid \phi\rangle = 
  \langle a_i \mid a^\dagger_j \rangle_{\delta} \mid \phi\rangle
- a^\dagger_j a_i \mid \phi\rangle
\end{align}
we have thus shown that all Chevalley deformation formul\ae\ 
follow from the Gra{\ss}mann Hopf gebra generically. Note that 
our formul\ae\ allow to compute expressions having arbitrary grade
or even being inhomogeneous. This will eventually be explored but
see \cite{fauser:1998a,fauser:2001b}.

\subsection{Left/right cocontractions}

\index{cocontraction!left/right}
Recalling that we had defined cap-tangles from co-scalar products
we can employ dualized product coproduct duality to define left
and right cocontractions. We write the tensor of the coscalar product
as $C^{\wedge}_{(1)} \otimes C^{\wedge}_{(2)}$ and define the
left cocontraction via:
\index{tangle!left cocontraction}
\begin{align}
\label{eqn:leftcocon}
\pspicture[0.5](0,0)(1.5,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,0)(0,4)
\psline(2,0)(2,4)
\psline(3,0)(3,5)
\psarc(1,4){1}{0}{180}
\psarc(2,5){1}{0}{180}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](2,6){0.2}
\rput(2,5.25){$C$}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,0)(3,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,0)(0,4)
\psline(2,0)(2,3)
\psline(5,0)(5,2)
\psline(2,6)(4,6)
\psline(6,4)(6,3)
\psarc(3,3){1}{0}{180}
\psarc(5,3){1}{180}{360}
\psarc(2,4){2}{90}{180}
\psarc(4,4){2}{0}{90}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,2){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,6){0.2}
\rput(3,5.25){$C$}
\rput(3,3.25){$C$}
\endpspicture
%
\quad&&\Rightarrow\quad
%
\pspicture[0.5](0,0)(1,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,0)(0,3)
\psline(2,0)(2,3)
\psline(1,4)(1,6)
\psarc(1,3){1}{0}{180}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\rput(1.1,3){$\Delta_{\JJ_C}$}
\endpspicture
%
\quad:=\quad
%
\pspicture[0.5](0,0)(2,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,0)(0,3)
\psline(3,0)(3,2)
\psline(4,3)(4,6)
\psarc(1,3){1}{0}{180}
\psarc(3,3){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,2){0.2}
\rput(1,4.75){$C$}
\endpspicture
\end{align}
The right cocontraction follows from
\index{tangle!right cocontraction}
\begin{align}
\label{eqn:rightcocon}
\pspicture[0.5](0,0)(1.5,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(3,0)(3,4)
\psline(1,0)(1,4)
\psline(0,0)(0,5)
\psarc(2,4){1}{0}{180}
\psarc(1,5){1}{0}{180}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](1,6){0.2}
\rput(1,5.25){$C$}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,0)(3,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(6,0)(6,4)
\psline(4,0)(4,3)
\psline(1,0)(1,2)
\psline(4,6)(2,6)
\psline(0,4)(0,3)
\psarc(3,3){1}{0}{180}
\psarc(1,3){1}{180}{360}
\psarc(4,4){2}{0}{90}
\psarc(2,4){2}{90}{180}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,6){0.2}
\rput(3,5.25){$C$}
\rput(3,3.25){$C$}
\endpspicture
%
\quad&&\Rightarrow\quad
%
\pspicture[0.5](0,0)(1,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(2,0)(2,3)
\psline(0,0)(0,3)
\psline(1,4)(1,6)
\psarc(1,3){1}{0}{180}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\rput(1.1,3){$\Delta_{\LL_C}$}
\endpspicture
%
\quad:=\quad
%
\pspicture[0.5](0,0)(2,3)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(4,0)(4,3)
\psline(1,0)(1,2)
\psline(0,3)(0,6)
\psarc(3,3){1}{0}{180}
\psarc(1,3){1}{180}{360}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,2){0.2}
\rput(3,4.75){$C$}
\endpspicture
\end{align}
In terms of algebraic formul\ae\ we find:
\begin{align}
\Delta_{\JJ_C}(x) &= C^{\wedge}_{(1)} \otimes (C^{\wedge}_{(2)} \wedge x) \nn
\Delta_{\LL_C}(x) &= (x\wedge C^{\wedge}_{(1)})\otimes C^{\wedge}_{(2)}
\end{align}

\subsection{Co-Chevalley formul\ae}

Having an exterior coproduct $\Delta$ and a cocontraction we can write 
down immediately the formul\ae\ of co-Chevalley deformation. Let $x \in V$, 
$u \in V^{\wedge}$ we find
\index{co-Chevalley formul\ae}
\index{co-Leibnitz rule}
\begin{align}
\label{eqn:cochevalley}
i)\qquad   & \Delta_{\JJ_C}(\Id) 
\,=\, C^{\wedge}_{(1)} \otimes C^{\wedge}_{(2)}
\nonumber\\[1ex]
i)^\prime\qquad   & \Delta_{\JJ_C}(u) 
\,=\, C^{\wedge}_{(1)} \otimes C^{\wedge}_{(2)} \wedge u
\nonumber\\[1ex]
ii)\qquad & (\Id\otimes \Delta)\Delta_{\JJ_C}(u)
\,=\, C^{\wedge}_{(1)} \otimes \Delta\big(C^{\wedge}_{(2)} \wedge u\big) 
\nonumber\\[1ex]
& 
\phantom{ (\Id\otimes \Delta)\Delta_{\JJ_C}(u)}
\,=\, (-1)^{\partial u_{(1)}\, \partial C^{\wedge}_{(22)}}\,\, 
C^{\wedge}_{(1)} \otimes 
C^{\wedge}_{(21)} \wedge u_{(1)} \otimes 
C^{\wedge}_{(22)} \wedge u_{(2)} 
\nonumber\\[1ex]
ii)^\prime\qquad & (\Id\otimes \Delta)\Delta_{\JJ_C}(x)
\,=\, 
C^{\wedge}_{(1)} \otimes 
C^{\wedge}_{(21)} \otimes 
C^{\wedge}_{(22)} \wedge x 
\nonumber\\[1ex]
& \phantom{\,=\, (\Id\otimes \Delta)\Delta_{\JJ_C}(x)}+
(-1)^{\partial C^{\wedge}_{(22)}}\, 
C^{\wedge}_{(1)} \otimes 
C^{\wedge}_{(21)} \wedge x \otimes 
C^{\wedge}_{(22)}  
\nonumber\\[1ex]
iii)\qquad & (\Delta\otimes \Id)\Delta_{\JJ_C}(u)
\,=\, 
C^{\wedge}_{(11)} \otimes
C^{\wedge}_{(12)} \otimes
C^{\wedge}_{(2)} \wedge u
\end{align}
where $i)$ is equivalent to the coscalar product, $i)^\prime$ is the 
general left cocontraction, $ii)$ is the general cocontraction
on a coproduct and $ii)^\prime$ the corresponding co-Leibnitz rule
for a one vector argument, while $iii)$ dualizes the general formula
(\ref{eqn:chevalley}iii).
These formul\ae\ are new according to our knowledge.

\section{Deformation and cliffordization}

\subsection{Chevalley deformation, cliffordization}

\index{Chevalley deformation}
\index{cliffordization}
Composing the contraction and the exterior multiplication Chevalley
\cite{chevalley:1997a} defined the Clifford product, denoted here as 
$\&c$, as an element $\gamma_x$ of the endomorphism algebra 
$\text{End}(V^{\wedge})$. Let $x \in V$ and $u \in V^{\wedge}$ he 
defined
\begin{align}
\gamma_x &\in \text{End}(V^{\wedge}) \qquad\qquad 
\gamma ~:~ V \otimes V^{\wedge}\rightarrow V^{\wedge}\nn
\gamma_x u &:= x \JJ_B\, u + x \wedge u
\,=\, x \,\&c\, u
\end{align}
Having now general expressions for the contraction and the wedge product 
at hand, its an easy task to write down a grade free Clifford product.
This formula, i.e. the leftmost tangle in (\ref{eqn:cliffordization}), 
was obtained by Rota and Stein \cite{rota:stein:1994a} using Laplace Hopf 
algebras and has been called `Rota-sausage` for obvious reasons by
Oziewicz \cite{oziewicz:2001b,fauser:ablamowicz:2000c}. This process is
a very general deformation of an algebra and not tied to the Clifford case
only. Rota and Stein coined the term {\em cliffordization} but it may
also be addressed as a Drinfeld twist in certain circumstances. The 
cup-tangle in the deformation is a co-(quasi) triangular structure. 
However, {\em only} our approach makes it explicite that cliffordization 
is nothing but the generalized Chevalley deformation and is directly 
composed from left or right contraction and the exterior product, examine 
therefor middle and right tangle.
\index{Chevalley deformation!generalized}
\index{tangle!Rota-sausage}
\index{tangle!of cliffordization}
\index{product!Clifford}
\begin{align}
\label{eqn:cliffordization}
\pspicture[0.5](0,0)(2.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,7)(1,6)
\psline(5,7)(5,6)
\psarc(1,5){1}{0}{180}
\psarc(5,5){1}{0}{180}
\psarc(3,5){1}{180}{360}
\psarc(3,5){3}{180}{360}
\psline(3,2)(3,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,2){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,6){0.2}
\endpspicture
%
\qquad&=\quad
%
\pspicture[0.5](0,0)(2,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(1,7)(1,6)
\psline(4,7)(4,5)
\psarc(1,5){1}{0}{180}
\psarc(3,5){1}{180}{360}
\psarc(1.5,2.5){1.5}{180}{360}
\psline(0,5)(0,2.5)
\psline(3,4)(3,2.5)
\psline(1.5,1)(1.5,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1.5,1){0.2}
\rput(3,4.75){$\JJ_B$}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,0)(2,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psline(3,7)(3,6)
\psline(0,7)(0,5)
\psarc(3,5){1}{0}{180}
\psarc(1,5){1}{180}{360}
\psarc(2.5,2.5){1.5}{180}{360}
\psline(4,5)(4,2.5)
\psline(1,4)(1,2.5)
\psline(2.5,1)(2.5,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2.5,1){0.2}
\rput(1,4.75){$\LL_B$}
\endpspicture
%
\end{align}
Note that this product is no longer graded, since we find
\begin{align}
\&c : V^{\wedge^r}\otimes V^{\wedge^s} &\rightarrow
V^{\wedge^{r+s}}\oplus \ldots \oplus V^{\wedge{\vert r-s\vert}}
\end{align}
but obeys only a filtration. This filtration depends on the chosen 
generators i.e. basis. Since the proof that this deformation comes up 
with the Clifford product is given in \cite{rota:stein:1994a} we give only 
a few examples:
\mybenv{Example:} Product of two one-vectors using (\ref{eqn:cliffordization})
middle and right tangle yields
\begin{align}
a \,\&c\, b &= a_{(1)}\wedge (a_{(2)} \JJ_B b) \nn
&= a \wedge (\Id \JJ_B b) + \Id \wedge (a\JJ_B b) \nn
&= a\wedge b + a\JJ_B b = \gamma_a \, b \nn
a \,\&c\, b &= (a \LL_B b_{(1)}) \wedge  b_{(2)} \nn
&= (a \LL_B \Id) \wedge b + (a\LL b)\wedge \Id \nn
&=a\wedge b + b\LL_B a = \gamma_a \, b . 
\end{align}
\myeenv
\mybenv{Example:} Product of two bivectors using (\ref{eqn:cliffordization})
middle tangle 
\begin{align}
(a\wedge b) \,\&c\, (x\wedge y) &= 
(a\wedge b )\wedge (x\wedge y) + a\wedge (b \JJ_B ((x\wedge y))) \nn
&\phantom{=} -b\wedge (a \JJ_B ((x\wedge y))) 
+ \Id\wedge((a\wedge b) \JJ_B (x\wedge y)) \nn
&=\phantom{+}
 a \wedge (b \wedge (x\wedge y) + b \JJ_B (x\wedge y)) \nn
&\phantom{=} +a \JJ_B  (b \wedge (x\wedge y) + b \JJ_B (x\wedge y)) 
-(a \JJ_B b) (x\wedge y) \nn
&=
\gamma_a (\gamma_b (x\wedge y)) -(a\JJ_B b) (x\wedge y) \nn
&=
(\gamma_a \wedge \gamma_b) (x \wedge y) 
\,=\, \gamma_{a\wedge b}(x\wedge y) \, . 
\end{align}
\myeenv

One can prove that \cite{fauser:2002c}:
\begin{itemize}
\item The Gra{\ss}mann Hopf gebra {\em unit $\Id$} remains to be the 
unit, also denoted as $\Id$, of the Clifford product if $B^{\wedge}$ 
is exponentially generated.
\item The Clifford product is {\em associative} if and only if 
$B^{\wedge}$ is exponentially generated.
\item The counit projects products onto the bilinear form 
$\epsilon( u \,\&c\, v) \,=\, B^{\wedge}(u,v)$ 
$(\,=\, \langle 0\mid u \,\&c\, v \mid 0 \rangle\,)$. This can be 
used as {\em vacuum expectation value} in quantum field theory.
\item If $F^{\wedge}$ is exponentially generated from an antisymmetric
bilinear form $F=-F^T$ then is the deformed product $\&c=\dot{\wedge}$ 
again an {\em exterior product}. 
\item The deformation w.r.t such an $F$ encodes the Wick transformation 
of (fer\-mi\-onic) quantum field theory in Hopf algebraic terms 
\cite{fauser:2001b}. 
\item Exponentially generated bilinear forms fulfil the axioms
of a {\em co-(quasi)-triangular structure.}
\item Clifford Hopf gebras are biaugmented but neither connected nor
coconnected, see \cite{milnor:moore:1965a,fauser:2002c} for definitions.
\end{itemize}
These properties result from considering an arbitrary, not exponentially
generated bilinear form ${\cal B\!F}$ on $V^{\wedge}\otimes V^{\wedge}$
in the cliffordization
\begin{align}
a \circ b &:= {\cal B\!F}(a_{(2)},b_{(1)}) a_{(1)} \wedge b_{(2)}
\end{align}
Examining unit, associativity, etc. yields the above claims, see 
\cite{fauser:2002c}.

\subsection{Co-cliffordization, co-Chevalley deformation}

From the Rota sausage tangle (\ref{eqn:cliffordization}), that is from 
the tangle definition of the Clifford product, we derive by categorial 
duality the cocliffordization and the {\em Clifford coproduct} denoted
as $\Delta_{c}$.
\index{cocliffordization}
\index{co-Chevalley deformation}
\index{tangle!co-Clifford product}
\index{coproduct!Clifford}
\begin{align}
\label{eqn:cocliffpr}
\pspicture[0.5](0,0)(1,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,0)(0,3)
\psline(2,0)(2,3)
\psarc(1,3){1}{0}{180}
\psline(1,4)(1,7)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,4){0.2}
\rput(1,3.25){$\Delta_c$}
\endpspicture
\quad&:=\quad
\pspicture[0.5](0,0)(2.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,0)(1,1)
\psline(5,0)(5,1)
\psarc(1,2){1}{180}{360}
\psarc(5,2){1}{180}{360}
\psarc(3,2){1}{0}{180}
\psarc(3,2){3}{0}{180}
\psline(3,5)(3,7)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,1){0.2}
\rput(1,1.75){$m_A$}
\rput(5,1.75){$m_A$}
\rput(3,2.25){$C$}
\rput(3,4.25){$\Delta$}
\endpspicture
\end{align}
Obviously duality tells us that this coproduct is derived from co-Chevalley
deformation also
\begin{align}
\label{eqn:cocliff}
\pspicture[0.5](0,0)(2.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,0)(1,1)
\psline(5,0)(5,1)
\psarc(1,2){1}{180}{360}
\psarc(5,2){1}{180}{360}
\psarc(3,2){1}{0}{180}
\psarc(3,2){3}{0}{180}
\psline(3,5)(3,7)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=black](3,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,1){0.2}
\endpspicture
%
\qquad&=\quad
%
\pspicture[0.5](0,0)(2,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,0)(1,1)
\psline(4,0)(4,2)
\psarc(1,2){1}{180}{360}
\psarc(3,2){1}{0}{180}
\psarc(1.5,4.5){1.5}{0}{180}
\psline(0,2)(0,4.5)
\psline(3,3)(3,4.5)
\psline(1.5,6)(1.5,7)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1.5,6){0.2}
\rput(3,1.25){$\Delta_{\JJ_C}$}
\endpspicture
%
\quad=\quad
%
\pspicture[0.5](0,0)(2,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(3,0)(3,1)
\psline(0,0)(0,2)
\psarc(3,2){1}{180}{360}
\psarc(1,2){1}{0}{180}
\psarc(2.5,4.5){1.5}{0}{180}
\psline(4,2)(4,4.5)
\psline(1,3)(1,4.5)
\psline(2.5,6)(2.5,7)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3,1){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2.5,6){0.2}
\rput(1.25,1.25){$\Delta_{\LL_C}$}
\endpspicture
%
\end{align}
and depends thus on the coscalar product in the same manner as the 
Clifford product depends on the scalar product.

\subsection{Deformation from cochains}

\index{Wick normalordering}
It was shown in \cite{fauser:2001b} that the Wick transformation
of normalordered operator products into (non renormalized) time ordered 
operator products can be given by a cliffordization w.r.t. an 
antisymmetric scalar product $F$ exponentially generalized to $F^{\wedge}$.
This is important since renormalization can then be introduced using the
Epstein-Glaser formalism. There is a hope that this can also be achieved
by a product deformation 
\cite{brouder:2002a,brouder:fauser:frabetti:oeckl:2002a}. 
We will not go into this difficult case, but try to show that the
normal ordering transformation is topologically trivial. Therefore we
show that the antisymmetric exponentially generated bilinear form $F^{\wedge}$
can be derived from a cocycle. For precise definitions see \cite{majid:1995a}.

An {\em $r$-cochain} is defined to be a map ${\sf p} : \otimes^r V^{\wedge}
\rightarrow \openk$. A cochain may act in a convolution product, defined
as $f \star g = m (f\otimes g) \Delta$, like an endomorphism ${\cal P} =
{\sf p} \star \Id = \Id \star {\sf p}$ from 
$V^{\wedge} \overset{{\sf p}}{\rightarrow}V^{\wedge}$ where $\Delta$ is
the Gra{\ss}mann coproduct and $m$ the product in $\openk$. Let 
furthermore $\partial$ be a (group like) co-boundary operator, so 
that $\partial {\sf p}$ is a {\em cocycle}. 

Tailoring a 1-cochain to obtain $F^{\wedge}$ as a particular 2-cocycle for
Wick reordering leads to the following requirements for the special 
cochain ${\sf p}$. Let ${\sf p}(\Id)=1$, ${\sf p}(a)=0$ $\forall a\in V$, 
${\sf p}(a\wedge b) = {\sf p}_{ab} \in \openk$ and expand the cochain 
via the Laplace like property ${\sf p}(u \wedge v \wedge w) = 
 \pm\,{\sf p}(u_{(1)},v) {\sf p}(u_{(2)},w)$ to $V^{\wedge}$. Then
define operators ${\cal P}~~{\sf and}~~{\cal P}^{-1}(x)
: V^{\wedge} \rightarrow V^{\wedge}$
\begin{align}
&&{\cal P}(x) = {\rm\sf p}(x_{(1)})x_{(2)} &&
{\cal P}^{-1}(x) = {\rm\sf p}^{-1}(x_{(1)})x_{(2)}&&
\end{align}
which are assumed to be commutative under convolution, i.e.
\begin{align}
{\cal P} &= {\rm\sf p}\star \Id \,=\, \Id \star {\rm\sf p} \nn
{\cal P}^{-1} &= {\rm\sf p}^{-1}\star \Id \,=\, \Id \star {\rm\sf p}^{-1},
\end{align}
The circle product $\circ^{\sf p}$ is defined as an product 
homomorphic to the exterior wedge product under ${\cal P}$.
\begin{align}
&&{\cal P}(x\circ^{\rm\sf p} y) = {\cal P}(x) \wedge {\cal P}(y),&&
{\cal P}^{-1}(x\wedge y) = {\cal P}^{-1}(x) \circ^{\rm\sf p}{\cal P}^{-1}(y),&&
\end{align}
The 2-cocycle derived from the cochain ${\sf p}$ is a bilinear form denoted 
as $\partial {\sf P}$. It is formally invertible and reads explicite
\begin{align}
\partial {\sf P}(u,v) &= 
{\rm\sf p}(u_{(1)}){\rm\sf p}(v_{(2)})
{\rm\sf p}^{-1}(u_{(2)}\wedge v_{(1)}) \nn
\partial {\sf P}^{-1}(u,v) &= 
{\rm\sf p}^{-1}(u_{(1)}){\rm\sf p}^{-1}(v_{(2)})
{\rm\sf p}(u_{(2)}\wedge v_{(1)})
\end{align}
One needs to show that this bilinear form is i) antisymmetric, 
ii) exponentially generated and iii) that the above homomorphism can be 
rewritten as a cliffordization w.r.t. this bilinear form. In terms of 
tangles one has to prove the '=' in the following tangle equation
\index{tangle!owl}
\begin{align}
\pspicture[0.5](0,0)(1,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(0,7)(0,4)
\psline(2,7)(2,4)
\psarc(1,4){1}{180}{360}
\psline(1,3)(1,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,3){0.2}
\rput(1,3.75){$\circ^{\rm\sf p}$}
\endpspicture
\quad:=\quad
\pspicture[0.5](0,0)(2.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,7)(1,6)
\psline(4,7)(4,6)
\psarc(1,5){1}{0}{180}
\psarc(4,5){1}{0}{180}
\psarc(2,5){2}{180}{270}
\psarc(3,5){2}{270}{360}
\psline(2.5,3)(2.5,2)
\psline(2,3)(3,3)
\psarc(2.5,1){1}{0}{180}
\psline(3.5,1)(3.5,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](4,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2.5,3){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2.5,2){0.2}
\rput(2,4.25){${\rm\sf p}$}
\rput(3,4.25){${\rm\sf p}$}
\rput(1.5,0.25){${\rm\sf p^{-1}}$}
\endpspicture
\quad=\quad
\pspicture[0.5](0,0)(3.5,3.5)
\psset{linewidth=\pstlw,xunit=0.5,yunit=0.5,runit=0.5}
\psset{arrowsize=2pt 2,arrowinset=0.2}
\psline(1,7)(1,6)
\psline(6,7)(6,6)
\psarc(1,5){1}{0}{180}
\psarc(2,4){1}{0}{180}
\psarc(6,5){1}{0}{180}
\psarc(5,4){1}{0}{180}
\psarc(2,4){1}{180}{270}
\psarc(5,4){1}{270}{360}
\psarc(2,3){2}{180}{270}
\psarc(5,3){2}{270}{360}
\psline(0,5)(0,3)
\psline(7,5)(7,3)
\psline(2,3)(5,3)
\psline(2,1)(5,1)
\psline(3.5,1)(3.5,0)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](1,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](2,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](6,6){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](5,5){0.2}
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3.5,1){0.2}
\rput(3,3.5){${\rm\sf p}$}
\rput(4,3.5){${\rm\sf p}$}
\rput(3.5,2){${\rm\sf p^{-1}}$}
\psline(3.5,3)(3.5,2.5)
\pscircle[linewidth=0.4pt,fillstyle=solid,fillcolor=white](3.5,3){0.2}
\endpspicture
\end{align}
where the rightmost tangle is called {\em owl tangle}.
This was done in \cite{fauser:2002c}. However, it is well known from 
deformation quantization that not every deformation can be written as
a homomorphism of products. Furthermore, since the bilinear form 
$\partial{\sf P}$ is equivalent to a 2-cocycle we see that both 
products, wedge and $\circ^{\sf p} \equiv \dot\wedge$, are topologically
equivalent. However, the related Hopf algebras are quite different
\cite{fauser:2001b}. While the Gra{\ss}mann Hopf algebra w.r.t. the 
wedge is biconnected, that w.r.t. the dotted wedge $\dot\wedge$ is not.

\section{Outlook}

For lack of place we will not give a summary but want to recall shortly the 
main idea and its further eventual development. Indeed the most striking
feature of our approach is its complete duality between algebra and cogebra
structures. Moreover we might have convinced the reader that cogebra
structures are implicitly used e.g. in determinants, combinatorial 
identities, more explicite in the Gra{\ss}mann-Cayley di-algebra having two
associative products one related to a coproduct on the dual space,
and most strikingly in the Clifford product and the very general 
procedure of cliffordization. It has become clear during the course of our
work that the Gra{\ss}mann Hopf algebra is the core and starting point
to develop systematically almost all algebraic structures and less known
costructures. We might remark at this point that it is possible on a formal
level to perform the same reasoning starting with the symmetric Hopf algebra
and deforming it into Weyl or synonymously symplectic Clifford algebras.
We have no time to show that cliffordization is also computationally
very efficient btu see \cite{ablamowicz:fauser:2002a,ablamowicz:fauser:2002b}.

The most intriguing questions for further research are among others the 
following:\\
i) Can a linear cogebra theory be developed including geometrical meaning
without making recourse to the algebra side of the world?\\
ii) Is there a set of axioms which directly characterizes Clifford
Hopf algebras?\\
iii) What is the link of this bigebraic mathematics to geometry and
physics? We know already, that the deformation has to do with quantization
and the propagator of quantum field theory \cite{fauser:1998a,fauser:2001e},
but this relation should be deepened.\\
iv) Since we deal with alternating multivector fields this structure
is very close to string and M-theory, what is the concrete relation?

Lots more questions could be added, but we will insist in a final 
statement, probably of morally nature. Regarding the present development
one {\em cannot go for the algebra only approach} any longer. We hope
that this chapter will push forward this idea.
\vskip 5pt

\noindent{\bf Acknowledgement:}
I would gratefully thank Prof. Heinz Dehnen and the organizers of the
ICCA 6 for financial support.

%%%%%%%%%%%%%%%%%%%%%Bibliography from bibtex database here
\small{
\bibliography{products}
\bibliographystyle{plain}
\def\topsep{0pt}
\def\parsep{0pt plus 5pt minus 1pt}
\def\itemsep{-0.5ex}
}
%%%%%%%%%%%%%%%%%%%%%information about author(s) here
\small
\vskip 1pc
{\obeylines
\noindent Bertfried Fauser
\noindent Universit\"at Konstanz 
\noindent Fachbereich Physik, Fach M678
\noindent D-78457 Konstanz, Germany
\noindent E-mail: Bertfried.Fauser@uni-konstanz.de
\noindent URL: clifford.physik.uni-konstanz.de/\~{}fauser/
}
\vskip 6pt
\noindent Submitted: \date; Revised: TBA.

\normalsize
\noindent
\tableofcontents
\printindex
\end{document}

pst-node.tex
%% BEGIN pst-node.tex
%%
%% Nodes with PSTricks 97.
%% See the betadoc documentation for usage. 
%% This uses the header file `pst-node.pro'.
%%
\def\fileversion{97 patch 9}
\def\filedate{1999/04/14}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN
%% archives in directory macros/latex/base/lppl.txt.
%%
\message{ v\fileversion, \filedate}
\csname PSTnodesLoaded\endcsname
\let\PSTnodesLoaded\endinput
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi\relax
\edef\TheAtCode{\the\catcode`\@}
\catcode`\@=11
\pstheader{pst-node.pro}
\def\pst@nodedict{tx@NodeDict begin }
\def\pst@zapspace#1 #2{%
#1%
\ifx#2\@empty\else\expandafter\pst@zapspace\fi
#2}
\def\pst@getnode#1#2{%
\pst@expandafter\pst@@getnode{#1},,\@nil#2}
\def\pst@@getnode#1,#2,#3\@nil#4{%
\ifx\@empty#3\@empty
\edef#4{/N@\pst@zapspace#1 \@empty\space}%
\else
\pst@cntg=#1\relax
\pst@cnth=#2\relax
\edef#4{/N@M-\ifnum\psmatrixcnt=\z@ 1\else\the\psmatrixcnt\fi
-\the\pst@cntg-\the\pst@cnth\space}%
\fi}
\def\tx@NewNode{NewNode }
\def\pst@newnode#1#2#3#4{%
\leavevmode
\pst@getnode{#1}\pst@thenode
\pst@Verb{%
\pst@nodedict
{#3}
\ifx\psk@name\relax false \else \psk@name true \fi
\pst@thenode
#2
{#4}
\tx@NewNode
end}%
\global\let\psk@name\relax
\pstree@nodehook
\global\let\pstree@nodehook\relax}
\let\pstree@nodehook\relax
\newif\ifnodealign
\def\psset@nodealign#1{\@nameuse{nodealign#1}}
\psset@nodealign{false}
\def\pst@nodealign{%
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg-\dp\pst@hbox
\divide\pst@dimg2
\lower\pst@dimg}
\def\tx@InitPnode{InitPnode }
\def\pnode{\@ifnextchar({\pnode@}{\pnode@(0,0)}}
\def\pnode@(#1)#2{%
\pst@@getcoor{#1}%
\pst@newnode{#2}{10}{\pst@coor}{\tx@InitPnode}%
\ignorespaces}
\def\tx@InitCnode{InitCnode }
\def\cnode{\pst@object{cnode}}
\def\cnode@i{\@ifnextchar({\cnode@ii}{\cnode@ii(0,0)}}
\def\cnode@ii(#1)#2#3{%
\leavevmode
\hbox{%
\use@par
\pst@@getcoor{#1}%
\pssetlength\pst@dimc{#2}%
\pst@dimg=\psk@dimen\pslinewidth
\advance\pst@dimc-\pst@dimg
\advance\pst@dimc.5\pslinewidth
\ifnodealign
\kern\pst@dimc
\vrule width\z@ height \pst@dimc depth \pst@dimc
\fi
\pscircle@do(#1){#2}%
\pst@newnode{#3}{11}{\pst@coor \pst@number\pst@dimc}{\tx@InitCnode}%
% DG/SR modification begin - Jul. 30, 1997 - Patch 2
%\ifnodealign \kern\pst@dimc\egroup \fi}%
\ifnodealign\kern\pst@dimc\fi}%
% DG/SR modification end
\ignorespaces}
\def\Cnode{\pst@object{Cnode}}
\def\Cnode@i{\@ifnextchar({\Cnode@ii}{\Cnode@ii(0,0)}}
\def\Cnode@ii(#1)#2{\cnode@ii(#1){\psk@radius}{#2}}%
\def\cnodeput{\pst@object{cnodeput}}
\def\cnodeput@i{\@ifnextchar({\cnodeput@iii}{\cnodeput@ii}}
\def\cnodeput@ii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\cnodeput@iii}{\cnodeput@iii(\z@,\z@)}}
\def\cnodeput@iii(#1)#2{%
\pst@killglue
\@fixedradiusfalse
\def\pst@nodehook{\cnodeput@iv{#2}}%
\pst@makebox{\cput@v{#1}}}
\def\cnodeput@iv#1{%
\pst@newnode{#1}{11}{\pscirclebox@iv \pst@number\pslinewidth add}%
{\tx@InitCnode}%
\global\let\pst@nodehook\relax}
\def\Cnodeput{\pst@object{Cnodeput}}
\def\Cnodeput@i{\@ifnextchar({\Cnodeput@iii}{\Cnodeput@ii}}
\def\Cnodeput@ii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\Cnodeput@iii}{\Cnodeput@iii(\z@,\z@)}}
\def\Cnodeput@iii(#1)#2{%
\pst@killglue
\@fixedradiustrue
\def\pst@nodehook{\Cnodeput@iv{#2}}%
\pst@makebox{\cput@iv{#1}}}
\def\Cnodeput@iv#1{%
\pst@newnode{#1}{11}{%
\pst@number{\wd\pst@hbox} 2 div \pst@number\pst@dima % x y
\pst@number\pst@dimb \pst@number\pslinewidth \psk@dimen .5 sub mul sub }% r
{\tx@InitCnode}%
\global\let\pst@nodehook\relax}
\def\circlenode{\pst@object{circlenode}}
\def\circlenode@i#1{\pst@makebox{\circlenode@ii{#1}}}
\def\circlenode@ii#1{%
\begingroup
\pst@useboxpar
\setbox\pst@hbox=\hbox{%
\cnodeput@iv{#1}%
\pscirclebox@iii
\box\pst@hbox}%
\ifnodealign \psboxseptrue \fi
\ifpsboxsep \pscirclebox@sep \fi
\leavevmode
\ifnodealign\pst@nodealign\fi
\box\pst@hbox
\endgroup}
\def\Circlenode{\pst@object{Circlenode}}
\def\Circlenode@i#1{\pst@makebox{\Circlenode@ii{#1}}}
\def\Circlenode@ii#1{%
\begingroup
\pst@useboxpar
\pst@dima=\ht\pst@hbox
\advance\pst@dima\dp\pst@hbox
\divide\pst@dima\tw@
\pssetlength\pst@dimb\psk@radius
\setbox\pst@hbox=\hbox{%
\Cnodeput@iv{#1}%
\pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}%
\box\pst@hbox}%
\ifnodealign \psboxseptrue \fi
\ifpsboxsep \psCirclebox@sep \fi
\leavevmode
\ifnodealign\pst@nodealign\fi
\box\pst@hbox
\endgroup}
\def\tx@GetRnodePos{GetRnodePos }
\def\tx@InitRnode{InitRnode }
\def\rnode{\@ifnextchar[{\rnode@i}{\def\pst@par{}\rnode@ii}}
\def\rnode@i[#1]{\def\pst@par{ref=#1}\rnode@ii}
\def\rnode@ii#1{\pst@makebox{\rnode@iii\rnode@iv{#1}}}
\def\rnode@iii#1#2{%
% DG modification begin - Jan. 1997
\leavevmode
% DG modification end
\begingroup
% DG/SR modification begin - Apr. 28, 1998 - Patch 6
\pst@useboxpar
% DG/SR modification end
#1%
\if@star\pst@starbox\fi
\ifnodealign\lower\pst@dimb\fi
\hbox{%
\pst@newnode{#2}{16}{%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\pst@number{\wd\pst@hbox}%
\pst@number\pst@dima
\pst@number\pst@dimb}%
{\tx@InitRnode}%
\box\pst@hbox}%
\endgroup}
\def\rnode@iv{%
\pst@dima=\psk@xref\wd\pst@hbox
\ifx\psk@yref\relax
\pst@dimb=\z@
\else
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\dp\pst@hbox
\pst@dimb=\psk@yref\pst@dimb
\advance\pst@dimb-\dp\pst@hbox
\fi}
\def\psset@href#1{\pst@checknum{#1}\psk@href}
\psset@href{0}
\def\psset@vref#1{\def\psk@vref{#1}}
\psset@vref{.7ex}
\def\Rnode{\pst@object{Rnode}}
\def\Rnode@i#1{\pst@makebox{\rnode@iii\Rnode@ii{#1}}}
\def\Rnode@ii{%
% DG modification begin - Jan. 1997
%   - \begingroup removed  as it seems to doesn't work any more
%   - \Rnode doesn't process the optional parameter changes
%\begingroup
\use@par
% DG modification end
\pst@dima=\psk@href\wd\pst@hbox
\advance\pst@dima\wd\pst@hbox
\divide\pst@dima 2
\pssetlength\pst@dimb{\psk@vref}}
\def\tx@DiaNodePos{DiaNodePos }
\def\dianode{\pst@object{dianode}}
\def\dianode@i#1{\pst@makebox{\dianode@ii{#1}}}
\def\dianode@ii#1{%
\begingroup
\pst@useboxpar
\psdiabox@iii
\setbox\pst@hbox=\hbox{%
\pst@newnode{#1}{14}{}{%
/X \pst@number\pst@dima def
/Y \pst@number\pst@dimb def
/w \pst@number\pst@dimc 2 mul def
/h \pst@number\pst@dimd 2 mul def
/NodePos { \tx@DiaNodePos } def}%
\box\pst@hbox}%
\ifnodealign\psboxseptrue\fi
\ifpsboxsep\psdiabox@sep\fi
% DG/SR modification begin - Sep. 2, 1997 - Patch 3
\leavevmode
% DG/SR modification end
\ifnodealign\lower\pst@dimb\fi
\box\pst@hbox
\endgroup}
\def\tx@TriNodePos{TriNodePos }
\def\tx@InitTriNode{InitTriNode }
\def\trinode{\pst@object{trinode}}
\def\trinode@i#1{\pst@makebox{\trinode@ii{#1}}}
\def\trinode@ii#1{%
\begingroup
\pst@useboxpar
\pstribox@iii
\setbox\pst@hbox=\hbox{%
\pst@newnode{#1}{14}{}{%
\pst@number\pst@dimc
\pst@number\pst@dimd
\ifodd\psk@trimode
exch
\pst@number\pst@dima
\else
\pst@number\pst@dimb
\fi
\psk@trimode
\pst@number{\wd\pst@hbox}%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\tx@InitTriNode}%
\box\pst@hbox}%
\ifnodealign\psboxseptrue\fi
\ifpsboxsep\pstribox@sep\fi
% DG/SR modification begin - Sep. 2, 1997 - Patch 3
\leavevmode
% DG/SR modification end
\ifnodealign\lower\pst@tempa\fi
\box\pst@hbox
\endgroup}
\def\tx@OvalNodePos{OvalNodePos }
\def\ovalnode{\pst@object{ovalnode}}
\def\ovalnode@i#1{\pst@makebox{\ovalnode@ii{#1}}}
\def\ovalnode@ii#1{%
\begingroup
\pst@useboxpar
\psovalbox@iii
\setbox\pst@hbox=\hbox{%
\pst@newnode{#1}{14}{}{%
/X \pst@number\pst@dima def
/Y \pst@number\pst@dimb def
/w \pst@number\pst@dimc def
/h \pst@number\pst@dimd def
/NodePos { \tx@OvalNodePos } def}%
\unhbox\pst@hbox}%
\ifnodealign\psboxseptrue\fi
\ifpsboxsep\psovalbox@sep\fi
% DG/SR modification begin - Sep. 2, 1997 - Patch 3
\leavevmode
% DG/SR modification end
\ifnodealign\lower\pst@dimb\fi
\box\pst@hbox
\endgroup}
\def\dotnode{\pst@object{dotnode}}
\def\dotnode@i{\@ifnextchar({\dotnode@ii}{\dotnode@ii(\z@,\z@)}}
\def\dotnode@ii(#1)#2{%
\leavevmode
\hbox{%
\use@par
\pst@@getcoor{#1}%
\pst@getdotsize
\pstree@nodehook
\ifnodealign
\pst@dima=\pst@dimg
\kern\pst@dima
\vrule width\z@ height \pst@dimh depth \pst@dimh
\fi
\pst@newnode{#2}{14}{}{%
\pst@coor
/Y ED /X ED
/w \pst@number\pst@dimg def
/h \pst@number\pst@dimh def
/NodePos { \tx@OvalNodePos } def}%
\psdot@ii(#1)%
\ifnodealign\kern\pst@dima\fi}%
\ignorespaces}
\def\psset@framesize#1{\pst@expandafter\psset@@framesize{#1} \@nil}
\def\psset@@framesize#1 #2\@nil{%
\pssetlength\pst@dimg{#1}%
\divide\pst@dimg2
\edef\psk@framewidth{\pst@number\pst@dimg}%
\ifx\@empty#2\@empty
\let\psk@frameheight\psk@framewidth
\else
\pssetlength\pst@dimg{#2}%
\divide\pst@dimg2
\edef\psk@frameheight{\pst@number\pst@dimg}%
\fi}
\psset@framesize{10pt}
\def\fnode{\pst@object{fnode}}
\def\fnode@i{\@ifnextchar({\fnode@ii}{\fnode@ii(\z@,\z@)}}
\def\fnode@ii(#1)#2{%
\leavevmode
\pst@killglue
\hbox{%
\use@par
\begin@ClosedObj
\ifnodealign
\kern\psk@framewidth\p@
\vrule width\z@ height \psk@frameheight\p@ depth \psk@frameheight\p@
\edef\pst@coor{0 0 }%
\else
\pst@@getcoor{#1}%
\fi
\pst@newnode{#2}{14}{}{%
\pst@coor
/Y ED /X ED
/d \psk@dimen .5 sub CLW mul neg def
/r \psk@framewidth d add def
/l r neg def
/u \psk@frameheight d add def
/d u neg def
/NodePos { \tx@GetRnodePos } def}%
\addto@pscode{%
/x2 \psk@framewidth CLW \psk@dimen mul sub def
/y2 \psk@frameheight CLW \psk@dimen mul sub def
\pst@coor 2 copy
y2 sub /y1 ED
x2 sub /x1 ED
y2 add /y2 ED
x2 add /x2 ED
\psk@cornersize
1 index 0 eq { pop pop \tx@Rect } { \tx@OvalFrame } ifelse}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj
\ifnodealign\kern\psk@framewidth\p@\fi}%
\ignorespaces}
\def\psset@nodesepA#1{%
\pst@getlength{#1}\psk@nodesepA
\def\psk@nodeseptypeA{0 }}
\def\psset@nodesepB#1{%
\pst@getlength{#1}\psk@nodesepB
\def\psk@nodeseptypeB{0 }}
\def\psset@nodesep#1{%
\pst@getlength{#1}\psk@nodesepA
\let\psk@nodesepB\psk@nodesepA
\def\psk@nodeseptypeA{0 }%
\def\psk@nodeseptypeB{0 }}
\psset@nodesep{0pt}
\def\psset@XnodesepA#1{%
\pst@getlength{#1}\psk@nodesepA
\def\psk@nodeseptypeA{1 }}
\def\psset@XnodesepB#1{%
\pst@getlength{#1}\psk@nodesepB
\def\psk@nodeseptypeB{1 }}
\def\psset@Xnodesep#1{%
\pst@getlength{#1}\psk@nodesepA
\let\psk@nodesepB\psk@nodesepA
\def\psk@nodeseptypeA{1 }%
\def\psk@nodeseptypeB{1 }}
\def\psset@YnodesepA#1{%
\pst@getlength{#1}\psk@nodesepA
\def\psk@nodeseptypeA{2 }}
\def\psset@YnodesepB#1{%
\pst@getlength{#1}\psk@nodesepB
\def\psk@nodeseptypeB{2 }}
\def\psset@Ynodesep#1{%
\pst@getlength{#1}\psk@nodesepA
\let\psk@nodesepB\psk@nodesepA
\def\psk@nodeseptypeA{2 }%
\def\psk@nodeseptypeB{2 }}
\def\psset@armA#1{%
\pst@getlength{#1}\psk@armA
\def\psk@armtypeA{0 }}
\def\psset@armB#1{%
\pst@getlength{#1}\psk@armB
\def\psk@armtypeB{0 }}
\def\psset@arm#1{%
\pst@getlength{#1}\psk@armA
\let\psk@armB\psk@armA
\def\psk@armtypeA{0 }%
\def\psk@armtypeB{0 }}
\psset@arm{10pt}
\def\psset@XarmA#1{%
\pst@getlength{#1}\psk@armA
\def\psk@armtypeA{1 }}
\def\psset@XarmB#1{%
\pst@getlength{#1}\psk@armB
\def\psk@armtypeB{1 }}
\def\psset@Xarm#1{%
\pst@getlength{#1}\psk@armA
\let\psk@armB\psk@armA
\def\psk@armtypeA{1 }%
\def\psk@armtypeB{1 }}
\def\psset@YarmA#1{%
\pst@getlength{#1}\psk@armA
\def\psk@armtypeA{2 }}
\def\psset@YarmB#1{%
\pst@getlength{#1}\psk@armB
\def\psk@armtypeB{2 }}
\def\psset@Yarm#1{%
\pst@getlength{#1}\psk@armA
\let\psk@armB\psk@armA
\def\psk@armtypeA{2 }%
\def\psk@armtypeB{2 }}
\def\psset@offsetA#1{\pst@getlength{#1}\psk@offsetA}
\def\psset@offsetB#1{\pst@getlength{#1}\psk@offsetB}
\def\psset@offset#1{\psset@offsetA{#1}\let\psk@offsetB\psk@offsetA}
\psset@offset{0pt}
\def\psset@angleA#1{\pst@getangle{#1}\psk@angleA}
\def\psset@angleB#1{\pst@getangle{#1}\psk@angleB}%
\def\psset@angle#1{%
\pst@getangle{#1}\psk@angleA
\let\psk@angleB\psk@angleA}
\psset@angle{0}
\def\psset@arcangleA#1{\pst@getangle{#1}\psk@arcangleA}
\def\psset@arcangleB#1{\pst@getangle{#1}\psk@arcangleB}%
\def\psset@arcangle#1{%
\pst@getangle{#1}\psk@arcangleA
\let\psk@arcangleB\psk@arcangleA}
\psset@arcangle{8}
\def\psset@ncurvA#1{\pst@checknum{#1}\psk@ncurvA}
\def\psset@ncurvB#1{\pst@checknum{#1}\psk@ncurvB}%
\def\psset@ncurv#1{\psset@ncurvA{#1}\let\psk@ncurvB\psk@ncurvA}
\psset@ncurv{.67}
\def\tx@GetCenter{GetCenter }
\def\tx@XYPos{XYPos }
\def\tx@GetEdge{GetEdge }
\def\tx@AddOffset{AddOffset }
\def\tx@GetEdgeA{GetEdgeA }
\def\tx@GetEdgeB{GetEdgeB }
\def\tx@GetArmA{GetArmA }
\def\tx@GetArmB{GetArmB }
\def\check@arrow#1#2{%
\check@@arrow#2-\@nil
\if@pst
\addto@par{arrows=#2}%
\def\next{#1}%
\else
\def\next{#1{#2}}%
\fi
\next}
\def\check@@arrow#1-#2\@nil{%
\ifx\@nil#2\@nil\@pstfalse\else\@psttrue\fi}
\def\tx@InitNC{InitNC }
\def\nc@object#1#2#3#4#5{%
\csname begin@#1Obj\endcsname
\showpointsfalse
\pst@getnode{#2}\pst@tempa
\pst@getnode{#3}\pst@tempb
\gdef\npos@default{#4 }%
\addto@pscode{%
/NCLW CLW def
\pst@nodedict
\psk@offsetA
\psk@offsetB neg
\psk@nodesepA
\psk@nodesepB
\psk@nodeseptypeA
\psk@nodeseptypeB
\pst@tempa
\pst@tempb
\tx@InitNC { #5 } if
end}%
\def\use@pscode{%
\pst@Verb{gsave \tx@STV newpath \pst@code\space grestore}%
\gdef\pst@code{}}%
\csname end@#1Obj\endcsname
\pst@shortput}
\def\npos@default{.5 }
\def\pc@object#1{%
\@ifnextchar({\pc@@object#1}{\pst@getarrows{\pc@@object#1}}}
\def\pc@@object#1(#2)(#3){%
\pnode(#2){@@A}\pnode(#3){@@B}%
#1{@@A}{@@B}}
\def\tx@LPutLine{LPutLine }
\def\tx@LPutLines{LPutLines }
\def\tx@BezierMidpoint{BezierMidpoint }
\def\tx@HPosBegin{HPosBegin }
\def\tx@HPosEnd{HPosEnd }
\def\tx@HPutLine{HPutLine }
\def\tx@HPutLines{HPutLines }
\def\tx@VPosBegin{VPosBegin }
\def\tx@VPosEnd{VPosEnd }
\def\tx@VPutLine{VPutLine }
\def\tx@VPutLines{VPutLines }
\def\tx@HPutCurve{HPutCurve }
\def\tx@NCCoor{NCCoor }
\def\tx@NCLine{NCLine }
\def\ncline{\pst@object{ncline}}
\def\ncline@i{\check@arrow{\ncline@ii}}
\def\ncline@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{\tx@NCLine}}
\def\pcline{\pst@object{pcline}}
\def\pcline@i{\pc@object\ncline@ii}
\def\ncLine{\pst@object{ncLine}}
\def\ncLine@i{\check@arrow{\ncLine@ii}}
\def\ncLine@ii#1#2{\nc@object{Open}{#1}{#2}{.5}%
% DG/SR modification begin - Apr. 14, 1999 - Patch 9
%{\tx@NCLine /LPutPos { xB xA yB yA \tx@LPutLine } def}}
{\tx@NCLine /LPutPos { xB yB xA yA \tx@LPutLine } def}}
% DG/SR modification end
\def\tx@NCLines{NCLines }
\def\nclines{\pst@object{nclines}}
\def\nclines@i{\check@arrow\nclines@ii}
\def\nclines@ii#1#2{%
\begingroup
\use@par
\def\pst@aftercoors{\nclines@iii{#1}{#2}}%
\def\pst@coors{}%
\pst@@getcoors}
\def\nclines@iii#1#2{%
\nc@object{Open}{#1}{#2}{.5}{%
tx@Dict begin \psline@iii pop end
mark \pst@coors \tx@NCLines}%
\endgroup
\ignorespaces}
\def\tx@NCCurve{NCCurve }
\def\nccurve{\pst@object{nccurve}}
\def\nccurve@i{\check@arrow{\nccurve@ii}}
\def\nccurve@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
/AngleA \psk@angleA\space def /AngleB \psk@angleB\space def
\psk@ncurvB\space \psk@ncurvA\space
\tx@NCCurve}}
\def\pccurve{\pst@object{pccurve}}
\def\pccurve@i{\pc@object\nccurve@ii}
\def\ncarc{\pst@object{ncarc}}
\def\ncarc@i{\check@arrow{\ncarc@ii}}
\def\ncarc@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
yB yA sub xB xA sub \tx@Atan dup
\psk@arcangleA\space add /AngleA ED
\psk@arcangleB\space sub 180 add /AngleB ED
\psk@ncurvB\space \psk@ncurvA\space
\tx@NCCurve}}
\def\pcarc{\pst@object{pcarc}}
\def\pcarc@i{\pc@object\ncarc@ii}
\def\tx@NCAngles{NCAngles }
\def\ncangles{\pst@object{ncangles}}
\def\ncangles@i{\check@arrow{\ncangles@ii}}
\def\ncangles@ii#1#2{%
\nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngles}}
\def\ncangles@iii{%
tx@Dict begin \psline@iii pop end
/AngleA \psk@angleA def
/AngleB \psk@angleB def
/ArmA \psk@armA def
/ArmB \psk@armB def
/ArmTypeA \psk@armtypeA def
/ArmTypeB \psk@armtypeB def }
\def\pcangles{\pst@object{pcangles}}
\def\pcangles@i{\pc@object\ncangles@ii}
\def\tx@NCAngle{NCAngle }
\def\ncangle{\pst@object{ncangle}}
\def\ncangle@i{\check@arrow{\ncangle@ii}}
\def\ncangle@ii#1#2{%
\nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCAngle}}
\def\pcangle{\pst@object{pcangle}}
\def\pcangle@i{\pc@object\ncangle@ii}
\def\tx@NCBar{NCBar }
\def\ncbar{\pst@object{ncbar}}
\def\ncbar@i{\check@arrow{\ncbar@ii}}
\def\ncbar@ii#1#2{\nc@object{Open}{#1}{#2}{1.5}{%
\ncangles@iii /AngleB \psk@angleA def \tx@NCBar}}
\def\pcbar{\pst@object{pcbar}}
\def\pcbar@i{\pc@object\ncbar@ii}
\def\tx@NCDiag{NCDiag }
\def\ncdiag{\pst@object{ncdiag}}
\def\ncdiag@i{\check@arrow{\ncdiag@ii}}
\def\ncdiag@ii#1#2{%
\nc@object{Open}{#1}{#2}{1.5}{\ncangles@iii \tx@NCDiag}}
\def\pcdiag{\pst@object{pcdiag}}
\def\pcdiag@i{\pc@object\ncdiag@ii}
\def\tx@NCDiagg{NCDiagg }
\def\ncdiagg{\pst@object{ncdiagg}}
\def\ncdiagg@i{\check@arrow{\ncdiagg@ii}}
\def\ncdiagg@ii#1#2{%
\nc@object{Open}{#1}{#2}{.5}{\ncangles@iii \tx@NCDiagg}}
\def\pcdiagg{\pst@object{pcdiagg}}
\def\pcdiagg@i{\pc@object\ncdiagg@ii}
\def\tx@NCLoop{NCLoop }
\def\psset@loopsize#1{\pst@getlength{#1}\psk@loopsize}
\psset@loopsize{1cm}
\def\ncloop{\pst@object{ncloop}}
\def\ncloop@i{\check@arrow{\ncloop@ii}}
\def\ncloop@ii#1#2{%
\nc@object{Open}{#1}{#2}{2.5}%
{\ncangles@iii /loopsize \psk@loopsize def \tx@NCLoop}}
\def\pcloop{\pst@object{pcloop}}
\def\pcloop@i{\pc@object\ncloop@ii}
\def\tx@NCCircle{NCCircle }
\def\nccircle{\pst@object{nccircle}}
\def\nccircle@i{\check@arrow{\nccircle@ii}}
\def\nccircle@ii#1#2{%
\pssetlength\pst@dima{#2}%
\nc@object{Open}{#1}{#1}{.5}{%
/AngleA \psk@angleA def
/r \pst@number\pst@dima def
\tx@NCCircle \psarc@v end}}
\def\tx@NCBox{NCBox }
\def\ncbox{\pst@object{ncbox}}
\def\ncbox@i{\check@arrow{\ncbox@ii}}
\def\ncbox@ii#1#2{%
\def\pst@linetype{2}%
\nc@object{Closed}{#1}{#2}{.5}{%
tx@Dict begin \psline@iii pop end
\psk@boxheight \psk@boxdepth
\tx@NCBox}}
\def\pcbox{\pst@object{pcbox}}
\def\pcbox@i{\pc@object\ncbox@ii}
\def\tx@NCArcBox{NCArcBox }
\def\psset@boxheight#1{\pst@getlength{#1}\psk@boxheight}
\def\psset@boxdepth#1{\pst@getlength{#1}\psk@boxdepth}
\def\psset@boxsize#1{%
\psset@boxheight{#1}%
\let\psk@boxdepth\psk@boxheight}
\psset@boxsize{.4cm}
\def\ncarcbox{\pst@object{ncarcbox}}
\def\ncarcbox@i{\check@arrow{\ncarcbox@ii}}
\def\ncarcbox@ii#1#2{%
\def\pst@linetype{1}%
\nc@object{Closed}{#1}{#2}{.5}{%
\psk@arcangleA \psk@boxheight \psk@boxdepth \pst@number\pslinearc
\tx@NCArcBox}}
\def\pcarcbox{\pst@object{pcarcbox}}
\def\pcarcbox@i{\pc@object\ncarcbox@ii}
\def\tx@Tfan{Tfan }
% Changed according pst-beta.bug December 3, 1993
% nrot=:<angle> does not work when : is active.
\begingroup
\catcode`\:=13
\gdef\pst@activerot{\def:{\string:}}
\endgroup
\def\psset@nrot#1{%
\begingroup
\pst@activerot
\pst@expandafter{\@ifnextchar:{\psset@@nrot}{\psset@@rot}}{#1}\@nil
\global\let\pst@tempg\psk@rot
\endgroup
\let\psk@nrot\pst@tempg}
\def\psset@@nrot:#1\@nil{%
\psset@@rot#1\@nil
\edef\psk@rot{NAngle \ifx\psk@rot\@empty\else\psk@rot add \fi}}
\psset@nrot{0}
\def\tx@LPutCoor{LPutCoor }
\def\tx@LPut{LPut }
\def\psset@npos#1{%
\def\pst@tempa{#1}%
\ifx\pst@tempa\@empty
\def\psk@npos{\npos@default}%
\else
\pst@checknum{#1}\psk@npos
\fi}
\psset@npos{}
\def\ncput{\pst@object{ncput}}
\def\ncput@i{\pst@killglue\pst@makebox{\ncput@ii}}
\def\ncput@ii{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@nrot\pst@hbox
\ncput@iii
\endgroup
\pst@shortput}
\def\ncput@iii{%
\leavevmode
\hbox{%
\pst@Verb{%
\pst@nodedict
/t \psk@npos def
\tx@LPut
end
\tx@PutBegin}%
\box\pst@hbox
\pst@Verb{\tx@PutEnd}}}
\def\naput{\pst@object{naput}}
\def\naput@i{\pst@killglue\pst@makebox{\naput@ii{NAngle 90 add}}}
\def\naput@ii#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\def\psk@refangle{#1 }%
\let\psk@rot\psk@nrot
\uput@vii
{exch pop add a \tx@PtoC h1 add exch w1 add exch }%
{tx@Dict /NCLW known { NCLW add } if }%
\ncput@iii
\endgroup
\pst@shortput}
\def\nbput{\pst@object{nbput}}
\def\nbput@i{\pst@killglue\pst@makebox{\naput@ii{NAngle 90 sub}}}
\def\psset@tpos#1{%
\pst@checknum{#1}\psk@tpos
\ifdim\psk@tpos \p@<\z@
\def\psk@tpos{.5}%
% DG/SR modification begin - Sep. 23, 1998 - Patch 7
%\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@epha
\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@ehpa
% DG/SR modification end
\else
\ifdim\psk@tpos \p@>\p@
\def\psk@tpos{.5}%
% DG/SR modification begin - Sep. 23, 1998 - Patch 7
%\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@epha
\@pstrickserr{Bad `tpos' value: `#1'. Must be 0<tpos<1}\@ehpa
% DG/SR modification end
\fi
\fi}
\psset@tpos{.5}
\def\tvput{\pst@object{tvput}}
\def\tvput@i{\pst@makebox{\psput@tput{H}{1}}}
\def\tlput{\pst@object{tlput}}
\def\tlput@i{\pst@makebox{\psput@tput{H}{true}}}
\def\trput{\pst@object{trput}}
\def\trput@i{\pst@makebox{\psput@tput{H}{false}}}
\def\thput{\pst@object{thput}}
\def\thput@i{\pst@makebox{\psput@tput{V}{1}}}
\def\taput{\pst@object{taput}}
\def\taput@i{\pst@makebox{\psput@tput{V}{true}}}
\def\tbput{\pst@object{tbput}}
\def\tbput@i{\pst@makebox{\psput@tput{V}{false}}}
\def\tx@HPutAdjust{HPutAdjust }
\def\tx@VPutAdjust{VPutAdjust }
\def\psput@tput#1#2{%
\begingroup
\use@par
\pst@tputmakesmall
\leavevmode
\hbox{%
\pst@Verb{%
\pst@nodedict
/t \psk@tpos \pst@tposflip def
tx@NodeDict /HPutPos known
{ #1PutPos }
{ CP /Y ED /X ED /NAngle 0 def /NCLW 0 def }
ifelse
/Sin NAngle sin def
/Cos NAngle cos def
/s \pst@number\pslabelsep NCLW add def
/l \pst@number\pst@dima def
/r \pst@number\pst@dimb def
/h \pst@number\pst@dimc def
/d \pst@number\pst@dimd def
% DG/SR modification begin - Sep. 26, 1997 - Patch 4
%\ifnum1=0#2\else
\ifnum1=0#2 \else
% DG/SR modification end
/flag #2 def
\csname tx@#1PutAdjust\endcsname
\fi
\tx@LPutCoor
end
\tx@PutBegin}%
\box\pst@hbox
\pst@Verb{\tx@PutEnd}}%
\endgroup
\pst@shortput}
\def\pst@tposflip{}
\def\pst@tputmakesmall{%
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\pst@dimg=\psk@href\pst@dimg
\pst@dimb\pst@dima
\advance\pst@dima\pst@dimg % leftsize
\advance\pst@dimb-\pst@dimg % rightsize
\pst@dimd=\psk@vref\relax
\pst@dimc=\ht\pst@hbox
\advance\pst@dimc-\pst@dimd % height
\advance\pst@dimd\dp\pst@hbox % depth
\setbox\pst@hbox=\hbox to\z@{%
\kern-\pst@dima\vbox to\z@{\vss\box\pst@hbox\vskip-\pst@dimd}\hss}}
\def\MakeShortNab#1#2{%
  \def\pst@shortput@nab{%
    \def\pst@tempg{\next}%
    \ifx#1\next
      \let\pst@tempg\naput
    \else
      \ifx#2\next
        \let\pst@tempg\nbput
      \else
        \ifx\@sptoken\next
          \let\pst@tempg\pst@shortput
        \fi
      \fi
    \fi
    \pst@tempg}}
\MakeShortNab{^}{_}
\def\MakeShortTablr#1#2#3#4{%
  \def\pst@shortput@tablr{%
    \def\pst@tempg{\next}%
    \ifx#1\next
      \let\pst@tempg\taput
    \else
      \ifx#2\next
        \let\pst@tempg\tbput
      \else
        \ifx#3\next
          \let\pst@tempg\tlput
        \else
          \ifx#4\next
            \let\pst@tempg\trput
          \else
            \ifx\@sptoken\next
              \let\pst@tempg\pst@shortput
            \fi
          \fi
        \fi
      \fi
    \fi
    \pst@tempg}}
\MakeShortTablr{^}{_}{<}{>}
\def\MakeShortTab#1#2{%
  \def\pst@shortput@tab{%
    \def\pst@tempg{\next}%
    \ifx#1\next
      \def\pst@tempg{%
        \@nameuse{%
          t\ifodd\psk@treemode\ifpstreeflip b\else a\fi
          \else\ifpstreeflip r\else l\fi\fi put}}%
    \else
      \ifx#2\next
        \def\pst@tempg{%
          \@nameuse{%
            t\ifodd\psk@treemode\ifpstreeflip a\else b\fi
            \else\ifpstreeflip l\else r\fi\fi put}}%
      \else
        \ifx\@sptoken\next
          \let\pst@tempg\pst@shortput
        \fi
      \fi
    \fi
    \pst@tempg}}
\MakeShortTab{^}{_}
\def\psset@shortput#1{%
\def\pst@tempg{#1}%
\ifx\pst@tempg\@none
\let\pst@shortput\ignorespaces
\else
\@ifundefined{pst@shortput@#1}%
{\@pstrickserr{Bad short put: `#1'}\@ehpa}%
{\edef\pst@shortput{\noexpand\afterassignment\expandafter\noexpand
\csname pst@shortput@#1\endcsname\noexpand\let\noexpand\next}}%
\fi}
\psset@shortput{none}
\def\lput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\lput@i}{\lput@ii}}}
\def\lput@i[#1]{\addto@par{ref=#1}\lput@ii}
\def\lput@ii{\@ifnextchar({\lput@iv}{\lput@iii}}
\def\lput@iii#1{\addto@par{nrot=#1}\@ifnextchar({\lput@iv}{\ncput@i}}
\def\lput@iv(#1){\addto@par{npos=#1}\ncput@i}
\def\mput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\mput@i}{\ncput@i}}}
\def\mput@i[#1]{\addto@par{ref=#1}\ncput@i}
\def\Lput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Lput@ii}{\Lput@i}}}
\def\Lput@i#1{\addto@par{labelsep=#1}\Lput@ii}
\def\Lput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Lput@iv}{\Lput@iii}}
\def\Lput@iii#1{\addto@par{nrot={#1}}\@ifnextchar({\Lput@iv}{\Lput@v}}
\def\Lput@iv(#1){\addto@par{npos=#1}\Lput@v}
\def\Lput@v{\pst@killglue\pst@makebox{\Lput@vi}}
\def\Lput@vi{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\Rput@vi
\pst@makesmall\pst@hbox
\pst@rotate\psk@nrot\pst@hbox
\ncput@iii
\endgroup
\pst@shortput}
\def\Mput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Mput@ii}{\Mput@i}}}
\def\Mput@i#1{\addto@par{labelsep=#1}\Mput@ii}
\def\Mput@ii[#1]{\addto@par{ref={#1}}\Lput@v}
\def\aput@#1{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\aput@i#1}{\aput@ii#1}}}
\def\aput@i#1[#2]{\addto@par{labelsep=#2}\aput@ii#1}
\def\aput@ii#1{\@ifnextchar({\aput@iv#1}{\aput@iii#1}}
\def\aput@iii#1#2{\addto@par{nrot=#2}\@ifnextchar({\aput@iv#1}{#1}}
\def\aput@iv#1(#2){\addto@par{npos=#2}#1}
\def\aput{\aput@\naput@i}
\def\bput{\aput@\nbput@i}
\def\Aput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Aput@i}{\naput@i}}}
\def\Aput@i[#1]{\addto@par{labelsep=#1}\naput@i}
\def\Bput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Bput@i}{\nbput@i}}}
\def\Bput@i[#1]{\addto@par{labelsep=#1}\nbput@i}
\def\node@coor#1;#2\@nil{%
\pst@getnode{#1}\pst@tempg
\edef\pst@coor{%
\pst@nodedict
tx@NodeDict \pst@tempg known
{ \pst@tempg load \tx@GetCenter }
{ 0 0 }
ifelse
end }}
\def\Node@coor[#1]#2;#3\@nil{%
\begingroup
\psset{#1}%
\@ifnextchar\bgroup{\Node@@@coor}{\Node@@coor}#2\@nil
\endgroup
\let\pst@coor\pst@tempg}
\def\Node@@coor#1\@nil{%
\pst@getnode{#1}\pst@tempg
\xdef\pst@tempg{%
\pst@nodedict
tx@NodeDict \pst@tempg known
{ \psk@nodesepA \psk@angleA
\pst@tempg load \psk@nodeseptypeA \tx@GetEdge
\psk@offsetA \psk@angleA \tx@AddOffset
\pst@tempg load \tx@GetCenter
3 -1 roll add 3 1 roll add exch }
{ CP }
ifelse
end }}%
\def\Node@@@coor#1{%
\pst@@getcoor{#1}%
\def\psk@angleA{%
\pst@tempg load \tx@GetCenter \pst@coor
3 -1 roll sub 3 1 roll sub neg \tx@Atan}%
\Node@@coor}
\def\nput{\pst@object{nput}}
\def\nput@i#1#2{\pst@killglue\pst@makebox{\nput@ii{#1}{#2}}}
\def\nput@ii#1#2{%
\begingroup
\use@par
\psset@refangle{#1}%
\let\psk@angleA\psk@refangle
\edef\psk@nodesepA{\pst@number\pslabelsep}%
\def\psk@nodeseptypeA{0 }%
\pslabelsep\z@
\uput@vi
\Node@@coor#2\@nil
\let\pst@coor\pst@tempg
\leavevmode
\psput@special\pst@hbox
\endgroup
\ignorespaces}
\newcount\psrow
\newcount\pscol
\newcount\psmatrixcnt
\newskip\psrowsep
\newskip\pscolsep
\def\psset@colsep#1{\pssetlength\pscolsep{#1}}
\def\psset@rowsep#1{\pssetlength\psrowsep{#1}}
\psset@colsep{1.5cm}
\psset@rowsep{1.5cm}
\newif\ifpsmatrix
% DG/SR modification begin - Nov. 27, 1998 - Patch 8
%\let\mscount\@multicnt
\ifx\mscount\@undefined\let\mscount\@multicnt\fi
% DG/SR modification end
\def\psmatrix{%
  \begingroup
{\ifnum0=`}\fi % Don't want to expand any &.
\@ifnextchar[{\psmatrix@i}{\ifnum0=`{\fi}{}\psmatrix@ii}}
\def\psmatrix@i[#1]{%
\ifnum0=`{\fi}{}%
\psset{#1}%
\psmatrix@ii}
\def\psmatrix@ii{%
\KillGlue
\edef\psm@beginmath{%
\ifmmode$\m@th\ifinner\textstyle\else\displaystyle\fi\fi}%
\edef\psm@endmath{\ifmmode$\fi}%
\let\\\psm@cr
\advance\psmatrixcnt 1
\def\psm@thenode{M-\the\psmatrixcnt-\the\psrow-\the\pscol}%
\tabskip\z@
\psrow1
\pscol\z@
\psset@shortput{tablr}%
\leavevmode
\vbox\bgroup\halign\bgroup&%
\begingroup
\global\advance\pscol 1
\csname psrowhook\romannumeral\psrow\endcsname
\csname pscolhook\romannumeral\pscol\endcsname
\psm@beginnode##\psm@endnode\endgroup
\cr}
\def\endpsmatrix{%
\crcr\egroup\unskip\egroup
\endgroup}
\def\psm@cr{{\ifnum0=`}\fi\@ifnextchar[{\psm@@cr}{\psm@@@cr{}}}
\def\psm@@cr[#1]{\psm@@@cr{\vskip#1\relax}}
\def\psm@@@cr#1{%
\ifnum0=`{\fi}{}\cr
\noalign{%
\global\advance\psrow 1
\global\pscol\z@
\vskip\psrowsep
#1}}
\def\psm@beginnode{%
\@ifnextchar\psm@endnode
{\let\psm@endnode@i\relax\setbox\pst@hbox=\hbox{}}%
{\pst@object{psm@beginnode}}}
\def\psm@beginnode@i{%
\setbox\pst@hbox=\hbox\bgroup
\psm@beginmath
\begingroup
\ignorespaces}
\def\psm@endnode@i{%
\unskip
\endgroup
\psm@endmath
\egroup
\use@par
\@psttrue}
\def\psm@endnode{%
\@pstfalse
\psm@endnode@i
\ifnum\pscol>1 \hskip\pscolsep \fi
\psk@mnodesize
\hfil
\nodealigntrue
\if@pst
\csname mnode@\psk@mnode\endcsname
\else
\csname mnode@\psk@emnode\endcsname
\fi
\psk@mcol
\psk@@mnodesize}
\def\psspan#1{\mscount#1\relax\loop\ifnum\mscount>\@ne \sp@n\repeat}
\def\psset@name#1{\pst@getnode{#1}\psk@name}
\let\psk@name\relax
\def\psset@mcol#1{%
\ifx r#1\relax
\let\psk@mcol\relax
\else
\ifx l#1\relax
\let\psk@mcol\hfill
\else
\let\psk@mcol\hfil
\fi
\fi}
\psset@mcol{c}
\def\psset@mnodesize#1{%
\pssetlength\pst@dimg{#1}%
\ifdim\pst@dimg<\z@
\let\psk@mnodesize\relax
\let\psk@@mnodesize\relax
\else
\edef\psk@mnodesize{\noexpand\hbox to\number\pst@dimg sp\noexpand\bgroup}%
\let\psk@@mnodesize\egroup
\fi}
\psset@mnodesize{-1pt}
\def\mnode@R{\rnode@iii\Rnode@ii{\psm@thenode}}
\def\mnode@r{\rnode@iii\rnode@iv{\psm@thenode}}
\def\mnode@oval{\ovalnode@ii{\psm@thenode}}
\def\mnode@tri{\trinode@ii{\psm@thenode}}
\def\mnode@dia{\dianode@ii{\psm@thenode}}
\def\mnode@C{{\nodealigntrue\cnode@ii(\z@,\z@){\psk@radius}{\psm@thenode}}}
\def\mnode@f{{\nodealigntrue\fnode@ii(\z@,\z@){\psm@thenode}}}
\def\mnode@circle{\circlenode@ii{\psm@thenode}}
\def\mnode@p{\pnode(\z@,\z@){\psm@thenode}}
% DG/SR modification begin - Jul. 22, 1997 - Patch 1
\def\mnode@dot{\dotnode@ii(\z@,\z@){\psm@thenode}}
% DG/SR modification end
\def\mnode@none{\box\pst@hbox}
\def\psset@mnode#1{%
\@ifundefined{mnode@#1}%
{\@pstrickserr{\string\psmatrix\space node `#1' not defined.}\@ehpa}%
{\edef\psk@mnode{#1}}}
\def\psset@emnode#1{%
\@ifundefined{mnode@#1}%
{\@pstrickserr{\string\psmatrix\space node `#1' not defined.}\@ehpa}%
{\edef\psk@emnode{#1}}}
\psset@mnode{R}
\psset@emnode{none}
%%%% FROM pst-coil.tex
\def\nccoil{\pst@object{nccoil}}
\def\nccoil@i{\check@arrow{\nccoil@ii}}
\def\nccoil@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
\tx@NCCoor
tx@Dict begin
% DG/SR modification begin - Mar. 19, 1998 - Patch 5
4 2 roll
% DG/SR modification end
\psk@coilwidth \pscoilheight
\psk@coilarmA \psk@coilarmB
\psk@coilaspect \psk@coilinc
\pst@coildict \tx@Coil end
end}}
\def\nczigzag{\pst@object{nczigzag}}
\def\nczigzag@i{\check@arrow{\nczigzag@ii}}
\def\nczigzag@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{%
\tx@NCCoor
tx@Dict begin
% DG/SR modification begin - Mar. 19, 1998 - Patch 5
4 2 roll
% DG/SR modification end
\pscoilheight
\psk@coilwidth
\psk@coilarmA
\psk@coilarmB
\pst@coildict \tx@ZigZag end
\psline@iii
\tx@Line
end}}
\catcode`\@=\TheAtCode\relax
\endinput
%%
%% END pst-node.tex

pstricks.tex
%% BEGIN: pstricks.tex
%%
%% PostScript macros for Generic TeX: main input file for PSTricks 97.
%% See the PSTricks User's Guide for description.
%% This uses the header file `pstricks.pro'.
%%
\def\fileversion{97 patch 10}
\def\filedate{1999/03/24}
%%
%% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu.
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN
%% archives in directory macros/latex/base/lppl.txt.
%%
\csname PSTricksLoaded\endcsname
\let\PSTricksLoaded\endinput
\edef\PstAtCode{\the\catcode`\@}
\catcode`\@=11\relax
\expandafter\ifx\csname @latexerr\endcsname\relax
\long\def\@ifundefined#1#2#3{\expandafter\ifx\csname
#1\endcsname\relax#2\else#3\fi}
\def\@namedef#1{\expandafter\def\csname #1\endcsname}
\def\@nameuse#1{\csname #1\endcsname}
\def\@eha{%
Your command was ignored.^^J
Type \space I <command> <return> \space to replace
it with another command,^^J
or \space <return> \space to continue without it.}
\def\@spaces{\space\space\space\space}
\def\typeout#1{\immediate\write\@unused{#1}}
\alloc@7\write\chardef\sixt@@n\@unused
\def\@empty{}
\def\@gobble#1{}
\def\@nnil{\@nil}
\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}
\begingroup
\def\:{\global\let\@sptoken= } \:
\def\:{\@xifnch} \expandafter\gdef\: {\futurelet\@tempc\@ifnch}
\endgroup
\fi
\typeout{`PSTricks' v\fileversion\space\space <\filedate> (tvz)}
\def\@pstrickserr#1#2{%
\begingroup
\newlinechar`\^^J
\edef\pst@tempc{#2}%
\expandafter\errhelp\expandafter{\pst@tempc}%
\typeout{%
PSTricks error. \space See User's Guide for further information.^^J
\@spaces\@spaces\@spaces\@spaces
Type \space H <return> \space for immediate help.}%
\errmessage{#1}%
\endgroup}
\def\@ehpa{%
Your command was ignored. Default value substituted.^^J
Type \space <return> \space to procede.}
\def\@ehpb{%
Your command was ignored. Will recover best I can.^^J
Type \space <return> \space to procede.}
\def\@ehpc{%
You better fix this before proceding.^^J
See the PSTricks User's Guide or ask your system administrator for help.^^J
Type \space X <return> \space to quit.}
\def\pst@misplaced#1{\@pstrickserr{Misplaced \string#1 command}\@ehpb}
\newdimen\pst@dima
\newdimen\pst@dimb
\newdimen\pst@dimc
\newdimen\pst@dimd
\newdimen\pst@dimg
\newdimen\pst@dimh
\newbox\pst@hbox
\newbox\pst@boxg
\newcount\pst@cnta
\newcount\pst@cntb
\newcount\pst@cntc
\newcount\pst@cntd
\newcount\pst@cntg
\newcount\pst@cnth
\newif\if@pst
\newtoks\pst@toks
\newif\if@star
\def\pst@ifstar#1{%
\@ifnextchar*{\@startrue\def\next*{#1}\next}{\@starfalse#1}}
\def\pst@expandafter#1#2{%
\def\next{#1}%
\edef\@tempa{#2}%
\ifx\@tempa\@empty
\@pstrickserr{Unexpected empty argument!}\@ehpb
\def\@tempa{\@empty}%
\fi
\expandafter\next\@tempa}
\def\pst@dimtonum#1#2{\edef#2{\pst@@dimtonum#1}}
\def\pst@@dimtonum#1{\expandafter\pst@@@dimtonum\the#1}
{\catcode`\p=12 \catcode`\t=12 \global\@namedef{pst@@@dimtonum}#1pt{#1}}
\def\pst@pyth#1#2#3{%
\ifdim#1>#2\pst@@pyth#1#2#3\else\pst@@pyth#2#1#3\fi}
\def\pst@@pyth#1#2#3{%
\ifdim4#1>9#2%
#3=#1\advance#3 .2122#2%
\else
#3=.8384#1\advance#3 .5758#2%
\fi}
\def\pst@divide#1#2#3{%
\pst@@divide{#1}{#2}%
\pst@dimtonum\pst@dimg{#3}}
\def\pst@@divide#1#2{%
\pst@dimg=#1\relax
\pst@dimh=#2\relax
\pst@cntg=\pst@dimh
\pst@cnth=67108863
\pst@@@divide\pst@@@divide\pst@@@divide\pst@@@divide
\divide\pst@dimg\pst@cntg}
\def\pst@@@divide{%
\ifnum
\ifnum\pst@dimg<\z@-\fi\pst@dimg<\pst@cnth
\multiply\pst@dimg\sixt@@n
\else
\divide\pst@cntg\sixt@@n
\fi}
\def\pst@configerr#1{%
\@pstrickserr{\string#1 not defined in pstricks.con}\@ehpc}
% % \begin{macrocode}
\def\pstVerb#1{\pst@configerr\pstVerb}
\def\pstverb#1{\pst@configerr\pstverb}
\def\pstverbscale{\pst@configerr\pstverbscale}
\def\pstrotate{\pst@configerr\pstrotate}
\def\pstheader#1{\pst@configerr\pstheader}
\def\pstdriver{\pst@configerr\pstdriver}
\@ifundefined{pstcustomize}%
{\def\pstcustomize{\endinput\let\pstcustomize\relax}}{}
\input pstricks.con
\newif\ifPSTricks
\PSTrickstrue
\def\PSTricksOff{%
\def\pstheader##1{}%
\def\pstverb##1{}%
\def\pstVerb##1{}%
\PSTricksfalse}
\@ifundefined{pst@def}{\def\pst@def#1<#2>{\@namedef{tx@#1}{#2 }}}{}
\@ifundefined{pst@ATH}{\def\pst@ATH<#1>{}}{}
\pstheader{pstricks.pro}
\def\pst@dict{tx@Dict begin }
\def\pst@theheaders{pstricks.pro}
\def\pst@Verb#1{\pstVerb{\pst@dict #1 end}}
\def\tx@Atan{Atan }
\def\tx@Div{Div }
\def\tx@NET{NET }
\def\tx@Pyth{Pyth }
\def\tx@PtoC{PtoC }
\def\tx@PathLength@{PathLength@ }
\def\tx@PathLength{PathLength }
\pst@dimg=\pstunit\relax
\ifdim\pst@dimg=1bp
\def\pst@stp{.996264 dup scale}
\else
\edef\pst@stp{1 \pst@@dimtonum\pst@dimg\space div dup scale}
\fi
\def\tx@STP{STP }
\def\tx@STV{STV }
\def\pst@number#1{\pst@@dimtonum#1\space}
\def\pst@checknum#1#2{%
\edef\next{#1}%
\ifx\next\@empty
\let\pst@num\z@
\else
\expandafter\pst@@checknum\next..\@nil
\fi
\ifnum\pst@num=\z@
\@pstrickserr{Bad number: `#1'. 0 substituted.}\@ehpa
\def#2{0 }%
\else
\edef#2{\ifnum\pst@num=\tw@-\fi\the\pst@cntg.%
\expandafter\@gobble\the\pst@cnth\space}%
\fi}
\def\pst@@checknum{%
\@ifnextchar-%
{\let\pst@num\tw@\expandafter\pst@@@checknum\@gobble}%
{\let\pst@num\@ne\pst@@@checknum}}
\def\pst@@@checknum#1.#2.#3\@nil{%
\afterassignment\pst@@@@checknum\pst@cntg=0#1\relax\@nil
\afterassignment\pst@@@@checknum\pst@cnth=1#2\relax\@nil}
\def\pst@@@@checknum#1\relax\@nil{%
\ifx\@nil#1\@nil\else\let\pst@num\z@\fi}
\def\pst@getnumii#1 #2 #3\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph}
\def\pst@getnumiii#1 #2 #3 #4\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi}
\def\pst@getnumiv#1 #2 #3 #4 #5\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi
\pst@checknum{#4}\pst@tempj}
\def\pst@getdimnum#1 #2 #3\@nil{%
\pssetlength\pst@dimg{#1}%
\pst@checknum{#2}\pst@tempg}
% DG/SR modification begin - Jan. 7, 1998 - Patch 9
% Missing from pstricks.bug 0.93
%\def\pst@getscale#1#2{%
%\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
%\@psttrue
%\ifdim\pst@tempg\p@=\z@
%\@pstrickserr{Bad scaling argument `#1'}\@ehpa
%\def\pst@tempg{1 }%
%\@pstfalse
%\fi
%\ifdim\pst@temph\p@=\z@
%\if@pst\@pstrickserr{Bad scaling argument `#1'}\@ehpa\fi
%\def\pst@temph{1 }%
%\fi
%\edef#2{\pst@tempg\space \pst@temph\space scale }%
%\ifdim\pst@tempg\p@=\p@ \ifdim\pst@temph\p@=\p@
%\def#2{}%
%\fi\fi}
\def\pst@getscale#1#2{%
\edef\pst@tempg{#1}%
\ifx\pst@tempg\@none
\def#2{}%
\else
\pst@expandafter\pst@getnumii{#1 #1} {} {} {}\@nil
\ifdim\pst@tempg\p@=\z@
\@pstrickserr{Bad scaling argument `#1'}\@ehpa
\def#2{}%
\else
\ifdim\pst@temph\p@=\z@
\@pstrickserr{Bad scaling argument `#1'}\@ehpa
\def#2{}%
\else
\edef#2{\pst@tempg\space \pst@temph\space scale }%
\fi
\fi
\fi}
% DG/SR modification end
\def\pst@getint#1#2{%
\pst@cntg=#1\relax
\edef#2{\the\pst@cntg\space}}
\begingroup
\catcode`\{=12
\catcode`\}=12
\catcode`\[=1
\catcode`\]=2
\gdef\pslbrace[{ ]
\gdef\psrbrace[} ]
\endgroup
\def\@newcolor#1#2{%
\expandafter\edef\csname #1\endcsname{\noexpand\pst@color{#2}}%
\expandafter\edef\csname color@#1\endcsname{#2}%
\ignorespaces}
\def\pst@color#1{%
\def\pst@currentcolor{#1}\pstVerb{#1}\aftergroup\pst@endcolor}
\def\pst@endcolor{\pstVerb{\pst@currentcolor}}
\def\pst@currentcolor{0 setgray}
\def\altcolormode{%
\def\pst@color##1{%
\pstVerb{gsave ##1}\aftergroup\pst@endcolor}%
\def\pst@endcolor{\pstVerb{\pst@grestore}}}
\def\pst@grestore{%
currentpoint
matrix currentmatrix
currentfont
grestore
setfont
setmatrix
moveto}
\def\pst@usecolor#1{\csname color@#1\endcsname\space}
\def\newgray#1#2{%
\pst@checknum{#2}\pst@tempg
\@newcolor{#1}{\pst@tempg setgray}}
\def\newrgbcolor#1#2{%
\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi setrgbcolor}}
\def\newhsbcolor#1#2{%
\pst@expandafter\pst@getnumiii{#2} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi sethsbcolor}}
\def\newcmykcolor#1#2{%
\pst@expandafter\pst@getnumiv{#2} {} {} {} {} {}\@nil
\@newcolor{#1}{\pst@tempg \pst@temph \pst@tempi \pst@tempj setcmykcolor}}
\newgray{black}{0}
\newgray{darkgray}{.25}
\newgray{gray}{.5}
\newgray{lightgray}{.75}
\newgray{white}{1}
\newrgbcolor{red}{1 0 0}
\newrgbcolor{green}{0 1 0}
\newrgbcolor{blue}{0 0 1}
\newrgbcolor{yellow}{1 1 0}
\newrgbcolor{cyan}{0 1 1}
\newrgbcolor{magenta}{1 0 1}
\def\psset#1{\@psset#1,\@nil\ignorespaces}
\def\@psset#1,{%
\@@psset#1==\@nil
\@ifnextchar\@nil{\@gobble}{\@psset}}
\def\@@psset#1=#2=#3\@nil{%
\@ifundefined{psset@#1}%
{\@pstrickserr{Graphics parameter `#1' not defined.}\@ehpa}%
{\@nameuse{psset@#1}{#2}}}%
\def\psset@style#1{%
\@ifundefined{pscs@#1}%
{\@pstrickserr{Custom style `#1' undefined}\@ehpa}%
{\@nameuse{pscs@#1}}}
\def\newpsstyle#1#2{\@namedef{pscs@#1}{\psset{#2}}}
\def\@none{none}
\def\pst@getcolor#1#2{%
\@ifundefined{color@#1}%
{\@pstrickserr{Color `#1' not defined}\@eha}%
{\edef#2{#1}}}
\newdimen\psunit \psunit 1cm
\newdimen\psxunit \psxunit 1cm
\newdimen\psyunit \psyunit 1cm
\let\psrunit\psunit
\def\pstunit@off{\let\@psunit\ignorespaces\ignorespaces}
\def\pssetlength#1#2{%
\let\@psunit\psunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\psaddtolength#1#2{%
\let\@psunit\psunit
\afterassignment\pstunit@off
\advance#1 #2\@psunit}
\def\pssetxlength#1#2{%
\let\@psunit\psxunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\pssetylength#1#2{%
\let\@psunit\psyunit
\afterassignment\pstunit@off
#1 #2\@psunit}
\def\psset@unit#1{%
\pssetlength\psunit{#1}%
\psxunit=\psunit
\psyunit=\psunit}
\def\psset@runit#1{\pssetlength\psrunit{#1}}
\def\psset@xunit#1{\pssetxlength\psxunit{#1}}
\def\psset@yunit#1{\pssetylength\psyunit{#1}}
\def\pst@getlength#1#2{%
\pssetlength\pst@dimg{#1}%
\edef#2{\pst@number\pst@dimg}}
\def\pst@@getlength#1#2{%
\pssetlength\pst@dimg{#1}%
\edef#2{\number\pst@dimg sp}}
\def\pst@getcoor#1#2{\pst@@getcoor{#1}\let#2\pst@coor}
\def\pst@coor{0 0 }
\def\pst@getcoors#1#2{%
\def\pst@aftercoors{\addto@pscode{#1 \pst@coors }#2}%
\def\pst@coors{}%
\pst@@getcoors}
\def\pst@@getcoors(#1){%
\pst@@getcoor{#1}%
\edef\pst@coors{\pst@coor\pst@coors}%
\@ifnextchar({\pst@@getcoors}{\pst@aftercoors}}
\def\pst@getangle#1#2{\pst@@getangle{#1}\let#2\pst@angle}
\def\pst@angle{0 }
\def\cartesian@coor#1,#2,#3\@nil{%
\pssetxlength\pst@dimg{#1}%
\pssetylength\pst@dimh{#2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}
\def\NormalCoor{%
\def\pst@@getcoor##1{\pst@expandafter\cartesian@coor{##1},\relax,\@nil}%
\def\pst@@getangle##1{%
\pst@checknum{##1}\pst@angle
\edef\pst@angle{\pst@angle \pst@angleunit}}%
\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}}
\NormalCoor
\def\degrees{\@ifnextchar[{\@degrees}{\def\pst@angleunit{}}}
\def\@degrees[#1]{%
\pst@checknum{#1}\pst@tempg
\edef\pst@angleunit{360 \pst@tempg div mul }%
\ignorespaces}
\def\radians{\def\pst@angleunit{57.2956 mul }}
\def\pst@angleunit{}
\def\SpecialCoor{%
\def\pst@@getcoor##1{%
\begingroup
\pst@activecoor
\xdef\pst@tempg{##1}%
\endgroup
\expandafter\special@coor\pst@tempg||\@nil}%
\def\pst@@getangle##1{%
\begingroup
\pst@activecoor
\xdef\pst@tempg{##1}%
\endgroup
\expandafter\special@angle\pst@tempg\@empty)\@nil}%
\def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@special}}
\begingroup
\catcode`\|=13
\catcode`\;=13
\catcode`\!=13
\gdef\pst@activecoor{%
\def|{\string|}%
\def;{\string;}%
\def!{\string!}}
\endgroup
\def\special@coor#1|#2|#3\@nil{%
\ifx#3|\relax
\mixed@coor{#1}{#2}%
\else
\special@@coor#1;;\@nil
\fi}
\def\special@@coor#1{%
\ifcat#1a\relax
\def\next{\node@coor#1}%
\else
\ifx#1[\relax
\def\next{\Node@coor[}%
\else
\ifx#1!\relax
\def\next{\raw@coor}%
\else
\def\next{\special@@@coor#1}%
\fi
\fi
\fi
\next}
\def\special@@@coor#1;#2;#3\@nil{%
\ifx#3;\relax
\polar@coor{#1}{#2}%
\else
\cartesian@coor#1,\relax,\@nil
\fi}
\def\mixed@coor#1#2{%
\begingroup
% DG/SR modification begin - Oct. 27, 1997 - Patch 6
%\specialcoor@ii#1;;\@nil
%\let\pst@tempa\pst@coor
%\specialcoor@ii#2;;\@nil
\special@@coor#1;;\@nil
\let\pst@tempa\pst@coor
\special@@coor#2;;\@nil
% DG/SR modification end
\xdef\pst@tempg{\pst@tempa pop \pst@coor exch pop }%
\endgroup
\let\pst@coor\pst@tempg}
\def\polar@coor#1#2{%
\pssetlength\pst@dimg{#1}%
\pst@@getangle{#2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@angle \tx@PtoC}}
\def\raw@coor#1;#2\@nil{%
\edef\pst@coor{%
#1 \pst@number\psyunit mul exch \pst@number\psxunit mul exch }}
\def\node@coor#1\@nil{%
\@pstrickserr{You must load `pst-node.tex' to use node coordinates.}\@ehps
\def\pst@coor{0 0 }}
\def\Node@coor{\node@coor}
\def\special@angle#1#2)#3\@nil{%
\ifx!#1\relax
\edef\pst@angle{#2 \pst@angleunit}%
\else
\ifx(#1\relax
\pst@@getcoor{#2}%
\edef\pst@angle{\pst@coor exch \tx@Atan}%
\else
\pst@checknum{#1#2}\pst@angle
\edef\pst@angle{\pst@angle \pst@angleunit}%
\fi
\fi}
\def\Cartesian{%
\def\cartesian@coor##1,##2,##3\@nil{%
\pssetxlength\pst@dimg{##1}%
\pssetylength\pst@dimh{##2}%
\edef\pst@coor{\pst@number\pst@dimg \pst@number\pst@dimh}}%
\@ifnextchar({\Cartesian@}{}}
\def\Cartesian@(#1,#2){%
\pssetxlength\psxunit{#1}%
\pssetylength\psyunit{#2}%
\ignorespaces}
\def\Polar{%
\def\psput@cartesian{\psput@special}%
\def\cartesian@coor##1,##2,##3\@nil{\polar@coor{##1}{##2}}}%
\def\psset@origin#1{%
\pst@@getcoor{#1}%
\edef\psk@origin{\pst@coor \tx@NET }}
\def\psk@origin{}
\newif\ifswapaxes
\def\psset@swapaxes#1{%
\@nameuse{@pst#1}%
\if@pst
\def\psk@swapaxes{-90 rotate -1 1 scale }%
\else
\def\psk@swapaxes{}%
\fi}
\psset@swapaxes{false}
\newif\ifshowpoints
\def\psset@showpoints#1{\@nameuse{showpoints#1}}
\psset@showpoints{false}
\let\pst@setrepeatarrowsflag\relax
\def\psset@border#1{%
\pst@getlength{#1}\psk@border
\pst@setrepeatarrowsflag}
\psset@border{0pt}
\def\psset@bordercolor#1{\pst@getcolor{#1}\psbordercolor}
\psset@bordercolor{white}
\newif\ifpsdoubleline
\def\psset@doubleline#1{%
\@nameuse{psdoubleline#1}%
\pst@setrepeatarrowsflag}
\psset@doubleline{false}
\def\psset@doublesep#1{\def\psdoublesep{#1}}
\psset@doublesep{1.25\pslinewidth}
\def\psset@doublecolor#1{\pst@getcolor{#1}\psdoublecolor}
\psset@doublecolor{white}
\newif\ifpsshadow
\def\psset@shadow#1{%
\@nameuse{psshadow#1}%
\pst@setrepeatarrowsflag}
\psset@shadow{false}
\def\psset@shadowsize#1{\pst@getlength{#1}\psk@shadowsize}
\psset@shadowsize{3pt}
\def\psset@shadowangle#1{\pst@getangle{#1}\psk@shadowangle}
\psset@shadowangle{-45}
\def\psset@shadowcolor#1{\pst@getcolor{#1}\psshadowcolor}
\psset@shadowcolor{darkgray}
\def\pst@repeatarrowsflag{\z@}
\def\pst@setrepeatarrowsflag{%
\edef\pst@repeatarrowsflag{%
\ifdim\psk@border\p@>\z@ 1\else\ifpsdoubleline 1\else
\ifpsshadow 1\else \z@\fi\fi\fi}}
\def\psls@none{}
\newdimen\pslinewidth
\def\psset@linewidth#1{\pssetlength\pslinewidth{#1}}
\psset@linewidth{.8pt}
\def\psset@linecolor#1{\pst@getcolor{#1}\pslinecolor}
\psset@linecolor{black}
\def\psls@solid{0 setlinecap stroke }
\def\pst@missing{%
\z@
\@pstrickserr{Missing number or dimension. 0 substituted}\@ehpa}
\def\psset@dash#1{%
\pst@expandafter\psset@@dash{#1} {\pst@missing} {\pst@missing} {}\@nil
\edef\psk@dash{\pst@number\pst@dimg \pst@number\pst@dimh}}
\def\psset@@dash#1 #2 #3\@nil{%
\pssetlength\pst@dimg{#1}%
\pssetlength\pst@dimh{#2}}
\psset@dash{5pt 3pt}
\newif\ifpsdashadjust
\def\psset@dashadjust#1{\@nameuse{psdashadjust#1}}
\psset@dashadjust{true}
\def\psls@dashed{%
\ifpsdashadjust
\psk@dash \pst@linetype\space \tx@DashLine
\else
[ \psk@dash ] 0 setdash stroke
\fi}
\def\tx@DashLine{DashLine }
\def\psset@dotsep#1{\pst@getlength{#1}\psk@dotsep}
\psset@dotsep{3pt}
\def\psls@dotted{%
\ifpsdashadjust
\psk@dotsep \pst@linetype\space \tx@DotLine
\else
[ 0 \psk@dotsep CLW add ] 0 setdash 1 setlinecap stroke
\fi}
\def\tx@DotLine{DotLine }
\def\psset@linestyle#1{%
\@ifundefined{psls@#1}%
{\@pstrickserr{Line style `#1' not defined}\@eha}%
{\edef\pslinestyle{#1}}}
\psset@linestyle{solid}
\def\psfs@none{}
\def\psset@fillcolor#1{\pst@getcolor{#1}\psfillcolor}
\psset@fillcolor{white}
\def\psfs@solid{\pst@fill{\pst@usecolor\psfillcolor fill}}
\def\psset@hatchwidth#1{\pst@getlength{#1}\psk@hatchwidth}
\psset@hatchwidth{.8pt}
\def\psset@hatchsep#1{\pst@getlength{#1}\psk@hatchsep}
\psset@hatchsep{4pt}
\def\psset@hatchcolor#1{\pst@getcolor{#1}\pshatchcolor}
\psset@hatchcolor{black}
\def\psset@hatchangle#1{\pst@getangle{#1}\psk@hatchangle}
\psset@hatchangle{45}
\def\pst@linefill{%
\psk@hatchangle rotate
\psk@hatchwidth SLW
\pst@usecolor\pshatchcolor
\psk@hatchsep \tx@LineFill}
\def\psfs@vlines{\pst@fill\pst@linefill}
\@namedef{psfs@vlines*}{\psfs@solid \psfs@vlines}
\def\psfs@hlines{\pst@fill{90 rotate \pst@linefill}}
\@namedef{psfs@hlines*}{\psfs@solid \psfs@hlines}
\def\psfs@crosshatch{\psfs@vlines \psfs@hlines}
\@namedef{psfs@crosshatch*}{\psfs@solid \psfs@vlines \psfs@hlines}
\def\tx@LineFill{LineFill }
\def\psset@fillstyle#1{%
\edef\pst@tempg{#1}\def\pst@temph{none}%
\ifx\pst@tempg\pst@temph
\let\psk@fillstyle\relax
\else
\@ifundefined{psfs@#1}%
{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
{\edef\psk@fillstyle{\expandafter\noexpand\csname psfs@#1\endcsname}}%
\fi}
\def\psset@addfillstyle#1{%
\@ifundefined{psfs@#1}%
{\@pstrickserr{Undefined fill style: `#1'}\@eha}%
{\edef\psk@fillstyle{%
\expandafter\noexpand\psk@fillstyle
\expandafter\noexpand\csname psfs@#1\endcsname}}}
\psset@fillstyle{none}
\def\psset@arrows#1{%
\begingroup
\pst@activearrows
\xdef\pst@tempg{#1}%
\endgroup
\expandafter\psset@@arrows\pst@tempg\@empty-\@empty\@nil
\if@pst\else
\@pstrickserr{Bad arrows specification: #1}\@ehpa
\fi}
\def\psset@@arrows#1-#2\@empty#3\@nil{%
\@psttrue
\def\next##1,#1-##2,##3\@nil{\def\pst@tempg{##2}}%
\expandafter\next\pst@arrowtable,#1-#1,\@nil
\@ifundefined{psas@\pst@tempg}%
{\@pstfalse\def\psk@arrowA{}}%
{\let\psk@arrowA\pst@tempg}%
\@ifundefined{psas@#2}%
{\@pstfalse\def\psk@arrowB{}}%
{\def\psk@arrowB{#2}}}
\def\psk@arrowA{}
\def\psk@arrowB{}
\def\pst@arrowtable{,<->,<<->>,>-<,>>-<<,(-),[-]}
\begingroup
\catcode`\<=13
\catcode`\>=13
\catcode`\|=13
\gdef\pst@activearrows{\def<{\string<}\def>{\string>}\def|{\string|}}
\endgroup
\def\tx@BeginArrow{BeginArrow }
\def\tx@EndArrow{EndArrow }
\def\psset@arrowscale#1{\pst@getscale{#1}\psk@arrowscale}
\psset@arrowscale{1}
\def\psset@arrowsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@arrowsize{\pst@number\pst@dimg \pst@tempg}}
\psset@arrowsize{1.5pt 2}
\def\psset@arrowlength#1{\pst@checknum{#1}\psk@arrowlength}
\psset@arrowlength{1.4}
\def\psset@arrowinset#1{\pst@checknum{#1}\psk@arrowinset}%
\psset@arrowinset{.4}
\def\tx@Arrow{Arrow }
\@namedef{psas@>}{%
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@>>}{%
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
0 h T
gsave
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
CP
grestore
CP newpath moveto
2 copy
L
stroke
moveto}
\@namedef{psas@<}{%
true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@<<}{%
true \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow
CP newpath moveto 0 a neg L stroke 0 h neg T
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\def\psset@tbarsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@tbarsize{\pst@number\pst@dimg \pst@tempg}}
\psset@tbarsize{2pt 5}
\def\tx@Tbar{Tbar }
\@namedef{psas@|}{\psk@tbarsize \tx@Tbar}
\@namedef{psas@|*}{0 CLW -2 div T \psk@tbarsize \tx@Tbar}
\@namedef{psas@>|}{%
\psk@tbarsize \tx@Tbar
0 CLW 2 div T
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\@namedef{psas@>|*}{%
0 CLW -2 div T
\psk@tbarsize \tx@Tbar
0 CLW 2 div T
newpath
false \psk@arrowinset \psk@arrowlength \psk@arrowsize \tx@Arrow}
\edef\pst@arrowtable{\pst@arrowtable,|<*->|*,|<->|}
\def\psset@bracketlength#1{\pst@checknum{#1}\psk@bracketlength}
\psset@bracketlength{.15}
\def\tx@Bracket{Bracket }
\@namedef{psas@]}{\psk@bracketlength \psk@tbarsize \tx@Bracket}
\def\psset@rbracketlength#1{\pst@checknum{#1}\psk@rbracketlength}
\psset@rbracketlength{.15}
\def\tx@RoundBracket{RoundBracket }
\@namedef{psas@)}{\psk@rbracketlength \psk@tbarsize \tx@RoundBracket}
\def\psas@c{1 \psas@@c}
\def\psas@cc{0 CLW 2 div T 1 \psas@@c}
\def\psas@C{2 \psas@@c}
\def\psas@@c{%
setlinecap
0 0 moveto
0 CLW 2 div L
stroke
0 0 moveto}
\def\psas@{}
\psset@arrows{-}
\def\tx@SD{SD }
\def\tx@EndDot{EndDot }
\def\psas@oo{{\pst@usecolor\psfillcolor true} true \psk@dotsize \tx@EndDot}
\def\psas@o{{\pst@usecolor\psfillcolor true} false \psk@dotsize \tx@EndDot}
\@namedef{psas@**}{{false} true \psk@dotsize \tx@EndDot}
\@namedef{psas@*}{{false} false \psk@dotsize \tx@EndDot}
\def\pst@par{}
\def\addto@par#1{%
\ifx\pst@par\@empty
\def\pst@par{#1}%
\else
\expandafter\def\expandafter\pst@par\expandafter{\pst@par,#1}%
\fi}
\def\addbefore@par#1{%
\ifx\pst@par\@empty
\def\pst@par{#1}%
\else
\toks@{#1}%
\pst@toks\expandafter{\pst@par}%
\edef\pst@par{\the\toks@,\the\pst@toks}%
\fi}
\def\use@par{%
\ifx\pst@par\@empty\else
\expandafter\@psset\pst@par,\@nil
\def\pst@par{}%
\fi}
\def\pst@object#1{%
\pst@ifstar{%
\@ifnextchar[%
{\pst@@object{#1}}%
{\def\pst@par{}\@nameuse{#1@i}}}}
\def\pst@@object#1[#2]{%
\def\pst@par{#2}%
\@ifnextchar+{\@nameuse{#1@i}}{\@nameuse{#1@i}}}
\def\newpsobject#1#2#3{%
\@ifundefined{#2@i}%
{\@pstrickserr{Graphics object `#2' not defined}\@eha}{%
\@namedef{#1}{\pst@object{#1}}%
\@namedef{#1@i}{\addbefore@par{#3}\@nameuse{#2@i}}}%
\ignorespaces}
\def\pst@getarrows#1{\@ifnextchar({#1}{\pst@@getarrows{#1}}}
\def\pst@@getarrows#1#2{\addto@par{arrows=#2}#1}
\def\begin@ClosedObj{%
\leavevmode
\pst@killglue
\begingroup
\use@par
\solid@star
\ifpsdoubleline \pst@setdoublesep \fi
\init@pscode}
\def\end@ClosedObj{%
\ifpsshadow \pst@closedshadow \fi
\ifdim\psk@border\p@>\z@ \pst@addborder \fi
\psk@fillstyle
\pst@stroke
\ifpsdoubleline \pst@doublestroke \fi
\ifshowpoints
% DG modification begin - Mar. 4, 1995
%\addto@pscode{Points aload length 2 div cvi /N ED \psdots@iii}%
\pst@OpenShowPoints
% DG modification end
\fi
\use@pscode
\endgroup
\ignorespaces}
\def\begin@OpenObj{%
\begin@ClosedObj
\let\pst@linetype\pst@arrowtype
\pst@addarrowdef}
\def\begin@AltOpenObj{%
\begin@ClosedObj
\def\pst@repeatarrowsflag{\z@}%
\def\pst@linetype{0}}
\def\end@OpenObj{%
\ifpsshadow \pst@openshadow \fi
\ifdim\psk@border\p@>\z@ \pst@addborder \fi
\psk@fillstyle
\pst@stroke
\ifpsdoubleline \pst@doublestroke \fi
\ifnum\pst@repeatarrowsflag>\z@ \pst@repeatarrows \fi
\ifshowpoints \pst@OpenShowPoints \fi
\use@pscode
\endgroup
\ignorespaces}
\def\begin@SpecialObj{%
\leavevmode
\pst@killglue
\begingroup
\use@par
\init@pscode}
\def\end@SpecialObj{%
\use@pscode
\endgroup
\ignorespaces}
\def\pst@code{}%
\def\init@pscode{%
\addto@pscode{%
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}
\def\addto@pscode#1{\xdef\pst@code{\pst@code#1\space}}
\def\use@pscode{%
\pstverb{%
\pst@dict
\tx@STP
\pst@newpath
\psk@origin
\psk@swapaxes
\pst@code
end}%
\gdef\pst@code{}}
\def\pst@newpath{newpath }
\def\pst@@killglue{\unskip\ifdim\lastskip>\z@\expandafter\pst@@killglue\fi}
\def\KillGlue{\let\pst@killglue\pst@@killglue}
\def\DontKillGlue{\let\pst@killglue\relax}
\DontKillGlue
\def\solid@star{%
\if@star
\pslinewidth=\z@
\psdoublelinefalse
\def\pslinestyle{none}%
\def\psk@fillstyle{\psfs@solid}%
\let\psfillcolor\pslinecolor
\fi}
\def\pst@setdoublesep{%
\pst@getlength\psdoublesep\psdoublesep
\pslinewidth=2\pslinewidth
\advance\pslinewidth\psdoublesep\p@
\let\pst@setdoublesep\relax}
\def\tx@Shadow{Shadow }
\def\pst@closedshadow{%
\addto@pscode{%
gsave
\psk@shadowsize \psk@shadowangle \tx@PtoC
\tx@Shadow
\pst@usecolor\psshadowcolor
gsave fill grestore
stroke
grestore
gsave
\pst@usecolor\psfillcolor
gsave fill grestore
stroke
grestore}}
\def\pst@openshadow{%
\addto@pscode{%
gsave
\psk@shadowsize \psk@shadowangle \tx@PtoC
\tx@Shadow
\pst@usecolor\psshadowcolor
\ifx\psk@fillstyle\relax\else
gsave fill grestore
\fi
stroke}%
\pst@repeatarrows
\addto@pscode{grestore}
\ifx\psk@fillstyle\relax\else
\addto@pscode{%
gsave
\pst@usecolor\psfillcolor
gsave fill grestore
stroke
grestore}
\fi}
\def\pst@addborder{%
\addto@pscode{%
gsave
\psk@border 2 mul
CLW add SLW
\pst@usecolor\psbordercolor
stroke
grestore}}
\def\pst@stroke{%
\ifx\pslinestyle\@none\else
\addto@pscode{%
gsave
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor
\@nameuse{psls@\pslinestyle}
grestore}%
\fi}
\def\pst@fill#1{\addto@pscode{gsave #1 grestore}}%
\def\pst@doublestroke{%
\addto@pscode{%
gsave
\psdoublesep SLW
\pst@usecolor\psdoublecolor
stroke
grestore}}
\def\pst@arrowtype{%
\ifx\psk@arrowB\@empty 0 \else -2 \fi
\ifx\psk@arrowA\@empty 0 \else -1 \fi
add}
\def\pst@addarrowdef{%
\addto@pscode{%
/ArrowA {
\ifx\psk@arrowA\@empty
\pst@oplineto
\else
\pst@arrowdef{A}
moveto
\fi
} def
/ArrowB {
\ifx\psk@arrowB\@empty \else \pst@arrowdef{B} \fi
} def}}
\def\pst@arrowdef#1{%
\ifnum\pst@repeatarrowsflag>\z@
/Arrow#1c [ 6 2 roll ] cvx def Arrow#1c
\fi
\tx@BeginArrow
\psk@arrowscale
\@nameuse{psas@\@nameuse{psk@arrow#1}}
\tx@EndArrow}
\def\pst@repeatarrows{%
\addto@pscode{%
gsave
\ifx\psk@arrowA\@empty\else
ArrowAc ArrowA pop pop
\fi
\ifx\psk@arrowB\@empty\else
ArrowBc ArrowB pop pop pop pop
\fi
grestore}}
\def\pst@OpenShowPoints{%
\addto@pscode{%
gsave
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}
newpath
Points aload length 2 div 2 sub cvi /N ED
N 0 ge
{ \ifx\psk@arrowA\@empty
Dot
\else
pop pop
\fi
N { Dot } repeat
\ifx\psk@arrowB\@empty
Dot
\else
pop pop
\fi }
{ N 2 mul { pop } repeat }
ifelse
grestore}}
\def\pscustom{\pst@object{pscustom}}
\long\def\pscustom@i#1{%
\begin@SpecialObj
\solid@star
\let\pst@ifcustom\iftrue
\let\begin@ClosedObj\begin@CustomObj
\let\end@ClosedObj\endgroup
\def\begin@OpenObj{\begin@CustomObj\pst@addarrowdef}%
\let\end@OpenObj\endgroup
\let\begin@AltOpenObj\begin@CustomObj
\def\begin@SpecialObj{%
\begingroup
\pst@misplaced{special graphics object}%
\def\addto@pscode####1{}
\let\end@SpecialObj\endgroup}%
\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
\def\psclip##1{\pst@misplaced\psclip}%
\def\pst@repeatarrowsflag{\z@}%
\let\pst@setrepeatarrowsflag\relax
\showpointsfalse
\let\showpointstrue\relax
\def\pst@linetype{\pslinetype}%
\let\psset@liftpen\psset@@liftpen
\psset@liftpen{\z@}%
\def\pst@cp{/currentpoint load stopped pop }%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\def\pst@optcp##1##2{%
\ifnum##1=\z@\def##2{/currentpoint load stopped { 0 0 } if }\fi}%
\let\caddto@pscode\addto@pscode
\def\cuse@par##1{{\use@par##1}}%
\the\pst@customdefs
\setbox\pst@hbox=\hbox{#1}%
\psk@fillstyle
\pst@stroke
\end@SpecialObj}
\def\begin@CustomObj{%
\begingroup
\use@par
\addto@pscode{%
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}
\def\pst@oplineto{moveto }
\def\pst@cp{}
\def\pst@optcp#1#2{}
\def\psset@liftpen#1{}
\def\psset@@liftpen#1{%
\ifcase#1\relax
\def\psk@liftpen{\z@}%
\def\pst@cp{/currentpoint load stopped pop }%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\or
\def\psk@liftpen{1}%
\def\pst@cp{}%
\def\pst@oplineto{/lineto load stopped { moveto } if }%
\or
\def\psk@liftpen{2}%
\def\pst@cp{}%
\def\pst@oplineto{moveto }%
\fi}
\psset@liftpen{0}
\def\psk@liftpen{-1}
\def\psset@linetype#1{%
\pst@getint{#1}\pslinetype
\ifnum\pst@dimg<-3
\@pstrickserr{linetype must be greater than -3}\@ehpa
\def\pslinetype{0}%
\fi}
\psset@linetype{0}
\def\caddto@pscode#1{%
\@pstrickserr{Command can only be used in \string\pscustom}\@ehpa}
\let\cuse@par\caddto@pscode
\def\tx@MSave{%
/msavemtrx
[ tx@Dict /msavemtrx known { msavemtrx aload pop } if CM ]
def }
\def\tx@MRestore{%
tx@Dict /msavemtrx known { length 0 gt } { false } ifelse
{ /msavematrx [ msavematrx aload pop setmatrix ] def }
if }
\newtoks\pst@customdefs
\pst@customdefs{%
\def\newpath{\addto@pscode{newpath}}%
\def\moveto(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
\def\closepath{\addto@pscode{closepath}}%
\def\gsave{\begingroup\addto@pscode{gsave}}%
\def\grestore{\endgroup\addto@pscode{grestore}}%
% DG/SR modification begin - May 12, 1997 - Patch 2
%\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor moveto}}%
\def\translate(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor translate}}%
% DG/SR modification end
\def\rotate#1{\pst@@getangle{#1}\addto@pscode{\pst@angle rotate}}%
\def\scale#1{\pst@getscale{#1}\pst@tempg\addto@pscode{\pst@tempg}}%
\def\msave{\addto@pscode{\tx@MSave}}%
\def\mrestore{\addto@pscode{\tx@MRestore}}%
\def\swapaxes{\addto@pscode{-90 rotate -1 1 scale}}%
\def\stroke{\pst@object{stroke}}%
\def\fill{\pst@object{fill}}%
\def\openshadow{\pst@object{openshadow}}%
\def\closedshadow{\pst@object{closedshadow}}%
% DG/SR modification begin - Jan. 7, 1998 - Patch 8
%\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor tx@Shadow}}%
\def\movepath(#1){\pst@@getcoor{#1}\addto@pscode{\pst@coor \tx@Shadow}}%
% DG/SR modification end
\def\lineto{\pst@onecoor{lineto}}%
\def\rlineto{\pst@onecoor{rlineto}}%
\def\curveto{\pst@threecoor{curveto}}%
\def\rcurveto{\pst@threecoor{rcurveto}}%
\def\code#1{\addto@pscode{#1}}%
\def\coor(#1){\pst@@getcoor{#1}\addto@pscode\pst@coor\@ifnextchar({\coor}{}}%
\def\rcoor{\pst@getcoors{}{}}%
\def\dim#1{\pssetlength\pst@dimg{#1}\addto@pscode{\pst@number\pst@dimg}}%
\def\setcolor#1{%
\@ifundefined{color@#1}{}{\addto@pscode{\use@color{#1}}}}%
\def\arrows#1{{\psset@arrows{#1}\pst@addarrowdef}}%
\let\file\pst@rawfile
} % END \pst@customdefs
\def\closedshadow@i{\cuse@par\pst@closedshadow}
\def\openshadow@i{\cuse@par\pst@openshadow}
\def\stroke@i{\cuse@par\pst@stroke}%
\def\fill@i{\cuse@par\psk@fillstyle}%
\def\pst@onecoor#1(#2){%
\pst@@getcoor{#2}%
\addto@pscode{\pst@coor #1}}
\def\pst@threecoor#1(#2)#3(#4)#5(#6){%
\begingroup
\pst@getcoor{#2}\pst@tempa
\pst@getcoor{#4}\pst@tempb
\pst@getcoor{#6}\pst@tembc
\addto@pscode{\pst@tempa \pst@tempb \pst@tempc #1}%
\endgroup}
\def\pst@rawfile#1{%
\begingroup
\def\do##1{\catcode`##1=12\relax}"
\dospecials
\catcode`\%=14
\pst@@rawfile{#1}%
\endgroup}
\def\pst@@rawfile#1{%
\immediate\openin1 #1
\ifeof1
\@pstrickserr{File `#1' not found}\@ehpa
\else
\immediate\read1 to \pst@tempg
\loop
\ifeof1 \@pstfalse\else\@psttrue\fi
\if@pst
\addto@pscode\pst@tempg
\immediate\read1 to \pst@tempg
\repeat
\fi
\immediate\closein1\relax}
\def\tx@NArray{NArray }
\def\tx@NArray{NArray }
\def\tx@Line{Line }
\def\tx@Arcto{Arcto }
\def\tx@CheckClosed{CheckClosed }
\def\tx@Polygon{Polygon }
\def\psset@gangle#1{\pst@getangle{#1}\psk@gangle}
\psset@gangle{0}
\def\tx@Diamond{Diamond }
\def\psdiamond{\pst@object{psdiamond}}
\def\psdiamond@i(#1){%
\@ifnextchar({\psdiamond@ii(#1)}{\psdiamond@ii(0,0)(#1)}}
\def\psdiamond@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\addto@pscode{%
\psline@iii
pop
\psk@dimen
\pst@tempb
\psk@gangle
\pst@tempa
\tx@Diamond}%
\def\pst@linetype{4}%
\end@ClosedObj}
\def\tx@Triangle{Triangle }
\def\pstriangle{\pst@object{pstriangle}}
\def\pstriangle@i(#1){%
\@ifnextchar({\pstriangle@ii(#1)}{\pstriangle@ii(0,0)(#1)}}
\def\pstriangle@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\addto@pscode{%
\psline@iii
pop
\psk@dimen
\pst@tempb
\psk@gangle
\pst@tempa
\tx@Triangle}%
\def\pst@linetype{2}%
\end@ClosedObj}
\def\tx@CCA{CCA }
\def\tx@CCA{CCA }
\def\tx@CC{CC }
\def\tx@IC{IC }
\def\tx@BOC{BOC }
\def\tx@NC{NC }
\def\tx@EOC{EOC }
\def\tx@BAC{BAC }
\def\tx@NAC{NAC }
\def\tx@EAC{EAC }
\def\tx@OpenCurve{OpenCurve }
\def\tx@AltCurve{AltCurve }
\def\tx@ClosedCurve{ClosedCurve }
\def\psset@curvature#1{%
\edef\pst@tempg{#1 }%
\expandafter\psset@@curvature\pst@tempg * * * \@nil}
\def\psset@@curvature#1 #2 #3 #4\@nil{%
\pst@checknum{#1}\pst@tempg
\pst@checknum{#2}\pst@temph
\pst@checknum{#3}\pst@tempi
\edef\psk@curvature{\pst@tempg \pst@temph \pst@tempi}}
\psset@curvature{1 .1 0}
\def\pscurve{\pst@object{pscurve}}
\def\pscurve@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\pscurve@ii}}
\def\pscurve@ii{%
\addto@pscode{%
\pst@cp
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@OpenCurve}%
\end@OpenObj}
\def\psecurve{\pst@object{psecurve}}
\def\psecurve@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psecurve@ii}}
\def\psecurve@ii{%
\addto@pscode{%
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@AltCurve}%
\end@OpenObj}
\def\psccurve{\pst@object{psccurve}}
\def\psccurve@i{%
\begin@ClosedObj
\pst@getcoors[\psccurve@ii}
\def\psccurve@ii{%
\addto@pscode{%
\psk@curvature\space /c ED /b ED /a ED
\ifshowpoints true \else false \fi
\tx@ClosedCurve}%
\def\pst@linetype{1}%
\end@ClosedObj}
\def\psset@dotsize#1{%
\pst@expandafter\pst@getdimnum{#1} 0 {} {}\@nil
\edef\psk@@dotsize{\pst@number\pst@dimg}%
\let\psk@@@dotsize\pst@tempg
\edef\psk@dotsize{%
/DS \psk@@dotsize \psk@@@dotsize CLW mul add 2 div def }}
\psset@dotsize{2pt 2}
\def\psset@dotscale#1{%
\pst@getscale{#1}\psk@dotscale
\ifx\psk@dotscale\@empty
\def\psk@xdotscale{1 }%
\def\psk@ydotscale{1 }%
\else
\let\psk@xdotscale\pst@tempg
\let\psk@ydotscale\pst@temph
% DG/SR modification begin - Oct. 17, 1997 - Patch 5
%\fi}
\fi
\pst@getdotsize%
\psset@dotsize{\pst@dimg\space\pst@@dimtonum\pst@dimh}}
%\psset@dotscale{1}
% DG/SR modification end
\def\pst@Getangle#1#2{%
\pst@getangle{#1}\pst@tempg
\def\pst@temph{0. }%
\ifx\pst@tempg\pst@temph
\def#2{}%
\else
\edef#2{\pst@tempg\space rotate }%
\fi}
\def\psset@dotangle#1{%
\pst@getangle{#1}\psk@@dotangle
\ifdim\psk@@dotangle\p@=\z@
\let\psk@dotangle\@empty
\else
% DG/SR modification begin - Aug. 8, 1997 - Patch 4
%\edef\psk@dotangle{\psk@@dotangle rotate }
\edef\psk@dotangle{\psk@@dotangle rotate }%
% DG/SR modification end
\fi}
\psset@dotangle{0}
\def\pst@getdotsize{%
\pst@dimg=\psk@@@dotsize\pslinewidth
\advance\pst@dimg\psk@@dotsize\p@
\pst@dimh=\psk@ydotscale\pst@dimg
\pst@dimg=\psk@xdotscale\pst@dimg
\divide\pst@dimh 2
\divide\pst@dimg 2\relax}
% DG/SR modification begin - Oct. 17, 1997 - Patch 5
\psset@dotscale{1}
% DG/SR modification end
\def\psdot{\pst@object{psdot}}
\def\psdot@i{\@ifnextchar({\psdot@ii}{\psdot@ii(\z@,\z@)}}
\def\psdot@ii(#1){%
\begin@SpecialObj
\pst@@getcoor{#1}%
\addto@pscode{%
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}%
\pst@coor Dot}%
\end@SpecialObj}
\def\psdots{\pst@object{psdots}}
\def\psdots@i{%
\begin@SpecialObj
\pst@getcoors[\psdots@ii}
\def\psdots@ii{%
\addto@pscode{false \tx@NArray \psdots@iii}%
\end@SpecialObj}
\def\psdots@iii{%
\psk@dotsize
\@nameuse{psds@\psk@dotstyle}
newpath
n { transform floor .5 add exch floor .5 add exch itransform Dot } repeat}
% DG: dead code (to suppress until \psset@dotstyle) ? - Aug. 4, 1997
\def\tx@SQ{SQ }
\def\tx@ST{ST }
\def\tx@SP{SP }
\def\pst@gdot#1{/Dot { gsave T \psk@dotangle \psk@dotscale #1 grestore } def }
\@namedef{psds@*}{\pst@gdot{0 0 DS \tx@SD}}
\@namedef{psds@o}{%
/r2 DS CLW sub def
\pst@gdot{0 0 DS \tx@SD \pst@usecolor\psfillcolor 0 0 r2 \tx@SD}}
\@namedef{psds@square*}{%
/r1 DS .886 mul def
\pst@gdot{r1 \tx@SQ}}
\@namedef{psds@square}{%
/r1 DS .886 mul def /r2 r1 CLW sub def
\pst@gdot{r1 \tx@SQ \pst@usecolor\psfillcolor r2 \tx@SQ}}
\@namedef{psds@triangle*}{%
/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
\pst@gdot{x1 y1 \tx@ST}}
\@namedef{psds@triangle}{%
/y1 DS .778 mul neg def /x1 y1 1.732 mul neg def
/y2 y1 CLW add def /x2 y2 1.732 mul neg def
\pst@gdot{x1 y1 \tx@ST \pst@usecolor\psfillcolor x2 y2 \tx@ST}}
\@namedef{psds@pentagon*}{%
/r1 DS 1.149 mul def
\pst@gdot{r1 \tx@SP}}
\@namedef{psds@pentagon}{%
DS .93 mul dup 1.236 mul /r1 ED CLW sub 1.236 mul /r2 ED
\pst@gdot{r1 \tx@SP \pst@usecolor\psfillcolor r2 \tx@SP}}
\@namedef{psds@+}{%
/DS DS 1.253 mul def
\pst@gdot{DS 0 moveto DS neg 0 L stroke 0 DS moveto 0 DS neg L stroke}}
\@namedef{psds@|}{%
\psk@tbarsize CLW mul add 2 div /DS ED
\pst@gdot{0 DS moveto 0 DS neg L stroke}}
% DG: end dead code?
\def\psset@dotstyle#1{%
\@ifundefined{psds@#1}%
{\@pstrickserr{Dot style `#1' not defined}\@eha}%
{\edef\psk@dotstyle{#1}}}
\psset@dotstyle{*}
\def\tx@FontDot{FontDot }
\def\newpsfontdot#1[#2]#3#4{%
\@namedef{psds@#1}{%
/#3 \psk@@dotangle [#2] \tx@FontDot
/Dot { moveto #4 show } bind def }}
\def\newpsfontdotH#1[#2]#3#4#5{%
\@namedef{psds@#1}{%
/#3 \psk@@dotangle [#2] \tx@FontDot
/Dot {
moveto
\iftrue
gsave \pst@usecolor\psfillcolor #5 show grestore
\fi
#4 show
} bind def }}
\pstheader{pst-dots.pro}
\newpsfontdot{*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(b)}
\newpsfontdotH{o}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(c)}{(b)}
\newpsfontdotH{Bo}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(C)}{(b)}
\newpsfontdotH{triangle}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(t)}{(u)}
\newpsfontdotH{Btriangle}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(T)}{(u)}
\newpsfontdot{triangle*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(u)}
\newpsfontdotH{square}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(s)}{(r)}
\newpsfontdotH{Bsquare}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(S)}{(r)}
\newpsfontdot{square*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(r)}
\newpsfontdotH{pentagon}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(p)}{(q)}
\newpsfontdotH{Bpentagon}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(P)}{(q)}
\newpsfontdot{pentagon*}%
[1.0 0.0 0.0 1.0 0.0 0.0]{PSTricksDotFont}{(q)}
% DG/SR modification begin - Mar. 18, 1997
%\newpsfontdot{diamond*}%
%[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{<E0>}
%\newpsfontdot{diamond}%
%[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{<A8>}
\newpsfontdot{diamond}%
[1.9 0.0 0.0 1.9 -0.4598 -0.70775]{Symbol}{<E0>}
\newpsfontdot{diamond*}%
[2.3 0.0 0.0 2.3 -0.8533 -0.5336]{Symbol}{<A8>}
% DG/SR modification end
\newpsfontdot{oplus}%
[1.44928 0.0 0.0 1.44928 -0.562319 -0.478261]{Symbol}{<C5>}
\newpsfontdot{otimes}%
[1.44928 0.0 0.0 1.44928 -0.562319 -0.475362]{Symbol}{<C4>}
\newpsfontdot{x}%
[1.8 0.0 0.0 1.8 -0.495 -0.4788]{Symbol}{<B4>}
\newpsfontdot{+}%
[2.3 0.0 0.0 2.3 -0.6486 -0.5819]{Times-Roman}{<2B>}
\newpsfontdot{asterisk}%
[2.43309 0.0 0.0 2.43309 -0.609489 -1.14477]{Times-Roman}{<2A>}
\newpsfontdot{B+}%
[2.3 0.0 0.0 2.3 -0.6555 -0.5819]{Times-Bold}{<2B>}
\newpsfontdot{Basterisk}%
[2.29358 0.0 0.0 2.29358 -0.576835 -1.08486]{Times-Bold}{<2A>}
\newpsfontdot{|}%
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.258929 -0.712302]{Helvetica}{(|)}
[1.98413 0.0 0.0 1.38 -0.258929 -0.5]{Helvetica}{(|)}
% DG/SR modification end
\newpsfontdot{B|}%
% DG/SR modification begin - Oct. 27, 1997 - Patch 7
%[1.98413 0.0 0.0 1.98413 -0.277778 -0.78302]{Helvetica-Bold}{(|)}
[1.98413 0.0 0.0 1.38 -0.277778 -0.5]{Helvetica-Bold}{(|)}
% DG/SR modification end
\iffalse
\newpsfontdot{*}%
[2.77778 0.0 0.0 2.77778 -0.638889 -0.813889]{Symbol}{<B7>}
\newpsfontdot{o}%
[3.33333 0.0 0.0 3.33333 -0.666667 -1.78167]{Symbol}{<B0>}
\newpsfontdot{Bo}%
[4.69484 0.0 0.0 4.69484 -0.78169 -2.97418]{Times-Bold}{<CA>}
\fi
\newdimen\pslinearc
\def\psset@linearc#1{\pssetlength\pslinearc{#1}}
\psset@linearc{0pt}
\def\psline{\pst@object{psline}}
\def\psline@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psline@ii}}
\def\psline@ii{%
\addto@pscode{\pst@cp \psline@iii \tx@Line}%
\end@OpenObj}
\def\psline@iii{%
\ifdim\pslinearc>\z@
/r \pst@number\pslinearc def
/Lineto { \tx@Arcto } def
\else
/Lineto /lineto load def
\fi
\ifshowpoints true \else false \fi}
\def\qline(#1)(#2){%
\def\pst@par{}%
\begin@SpecialObj
\def\pst@linetype{0}%
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{%
\pst@tempa moveto \pst@coor L
\@nameuse{psls@\pslinestyle}}%
\end@SpecialObj}
\def\pspolygon{\pst@object{pspolygon}}
\def\pspolygon@i{%
\begin@ClosedObj
\def\pst@cp{}%
\pst@getcoors[\pspolygon@ii}
\def\pspolygon@ii{%
\addto@pscode{\psline@iii \tx@Polygon}%
\def\pst@linetype{1}%
\end@ClosedObj}
\def\psset@framearc#1{\pst@checknum{#1}\psk@framearc}
\psset@framearc{0}
\def\psset@cornersize#1{%
\pst@expandafter\psset@@cornersize{#1}\@nil}
\def\psset@@cornersize#1#2\@nil{%
\if #1a\relax
\def\psk@cornersize{\pst@number\pslinearc false }%
\else
\def\psk@cornersize{\psk@framearc true }%
\fi}
\psset@cornersize{relative}
\def\tx@Rect{Rect }
\def\tx@OvalFrame{OvalFrame }
\def\tx@Frame{Frame }
\def\psset@dimen#1{%
\pst@expandafter\psset@@dimen{#1}\@nil}
\def\psset@@dimen#1#2\@nil{%
\if #1o\relax
\def\psk@dimen{.5 }%
\else
\if #1m\relax
\def\psk@dimen{0 }%
\else
\if #1i\relax
\def\psk@dimen{-.5 }%
\fi
\fi
\fi}
\psset@dimen{outer}
\def\psframe{\pst@object{psframe}}
\def\psframe@i(#1){%
\@ifnextchar({\psframe@ii(#1)}{\psframe@ii(0,0)(#1)}}
\def\psframe@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{\psk@cornersize \pst@tempa \pst@coor \psk@dimen \tx@Frame}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj}
\def\tx@BezierNArray{BezierNArray }
\def\tx@OpenBezier{OpenBezier }
\def\tx@ClosedBezier{ClosedBezier }
\def\tx@BezierShowPoints{BezierShowPoints }
\def\psbezier{\pst@object{psbezier}}
\def\psbezier@i{%
\pst@getarrows{%
\begin@OpenObj
\pst@getcoors[\psbezier@ii}}
\def\psbezier@ii{%
\addto@pscode{%
% DG/SR modification begin - Apr. 28, 1997 - Patch 1
% \psbezier doesn't work inside \pscustom
%\pst@cp
% DG/SR modification end
\ifshowpoints true \else false \fi
\tx@OpenBezier
\ifshowpoints \tx@BezierShowPoints \fi}%
\end@OpenObj}
\def\pscbezier{\pst@object{pscbezier}}
\def\pscbezier@i{%
\begin@ClosedObj
\pst@getcoors[\pscbezier@ii}
\def\pscbezier@ii{%
\addto@pscode{%
\ifshowpoints true \else false \fi
\tx@ClosedBezier
\ifshowpoints \tx@BezierShowPoints \fi}%
\chardef\pst@linetype=1
\end@ClosedObj}
\def\tx@Parab{Parab }
\def\parabola{\pst@object{parabola}}
\def\parabola@i{\pst@getarrows\parabola@ii}
\def\parabola@ii#1(#2)#3(#4){%
\begin@OpenObj
\pst@getcoor{#2}\pst@tempa
\pst@@getcoor{#4}%
\addto@pscode{\pst@tempa \pst@coor \tx@Parab}%
\end@OpenObj}
\def\psset@gridwidth#1{\pst@getlength{#1}\psk@gridwidth}
\psset@gridwidth{.8pt}
\def\psset@griddots#1{%
\pst@cntg=#1\relax
\edef\psk@griddots{\the\pst@cntg}}
\psset@griddots{0}
\def\psset@gridcolor#1{\pst@getcolor{#1}\psgridcolor}
\psset@gridcolor{black}
\def\psset@subgridwidth#1{\pst@getlength{#1}\psk@subgridwidth}
\psset@subgridwidth{.4pt}
\def\psset@subgridcolor#1{\pst@getcolor{#1}\pssubgridcolor}
\psset@subgridcolor{gray}
\def\psset@subgriddots#1{%
\pst@cntg=#1\relax\edef\psk@subgriddots{\the\pst@cntg}}
\psset@subgriddots{0}
\def\psset@subgriddiv#1{%
\pst@cntg=#1\relax\edef\psk@subgriddiv{\the\pst@cntg}}
\psset@subgriddiv{5}
\def\psset@gridlabels#1{\pst@getlength{#1}\psk@gridlabels}
\psset@gridlabels{10pt}
\def\psset@gridlabelcolor#1{\pst@getcolor{#1}\psgridlabelcolor}
\psset@gridlabelcolor{black}
\def\tx@Grid{Grid }
\def\psgrid{\pst@object{psgrid}}
\def\psgrid@i{\@ifnextchar(%
{\psgrid@ii}{\expandafter\psgrid@iv\pic@coor}}
\def\psgrid@ii(#1){\@ifnextchar(%
{\psgrid@iii(#1)}{\psgrid@iv(0,0)(0,0)(#1)}}
\def\psgrid@iii(#1)(#2){\@ifnextchar(%
{\psgrid@iv(#1)(#2)}{\psgrid@iv(#1)(#1)(#2)}}
\def\psgrid@iv(#1)(#2)(#3){%
\begin@SpecialObj
\pst@getcoor{#1}\pst@tempa
\pst@getcoor{#2}\pst@tempb
\pst@@getcoor{#3}%
\ifnum\psk@subgriddiv>1
\addto@pscode{gsave
\psk@subgridwidth SLW \pst@usecolor\pssubgridcolor
\pst@tempb \pst@coor \pst@tempa
\pst@number\psxunit \pst@number\psyunit
\psk@subgriddiv\space \psk@subgriddots\space
{} 0 \tx@Grid grestore}%
\fi
\addto@pscode{gsave
\psk@gridwidth SLW \pst@usecolor\psgridcolor
\pst@tempb \pst@coor \pst@tempa
\pst@number\psxunit \pst@number\psyunit
1 \psk@griddots\space { \pst@usecolor\psgridlabelcolor }
\psk@gridlabels \tx@Grid grestore}%
\end@SpecialObj}
\newif\ifpsmathbox
\psmathboxtrue
\def\pst@mathflag{\z@}
\newtoks\everypsbox
\let\pst@thisbox\relax
\long\def\pst@makenotverbbox#1#2{%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\setbox\pst@hbox=\hbox{%
\ifcase\pst@mathflag\or$\m@th\textstyle\or$\m@th\displaystyle\fi
{\pst@thisbox\the\everypsbox#2}%
\ifnum\pst@mathflag>\z@$\fi}%
#1}
\def\pst@makeverbbox#1{%
\def\pst@afterbox{#1}%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\afterassignment\pst@beginbox
\setbox\pst@hbox\hbox}
\def\pst@beginbox{%
\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
\bgroup\aftergroup\pst@endbox
\pst@thisbox
\the\everypsbox}
\def\pst@endbox{%
\ifnum\pst@mathflag>\z@$\fi
\egroup
\pst@afterbox}
\def\pst@makebox{\pst@@makebox}
\def\psverbboxtrue{\def\pst@@makebox{\pst@makeverbbox}}
\def\psverbboxfalse{\def\pst@@makebox{\pst@makenotverbbox}}
\psverbboxfalse
\def\pst@longbox{%
\def\pst@makebox{%
\gdef\pst@makebox{\pst@@makebox}%
\pst@makelongbox}}
\def\pst@makelongbox#1{%
\def\pst@afterbox{#1}%
\edef\pst@mathflag{%
\ifpsmathbox\ifmmode\ifinner 1\else 2\fi\else \z@\fi\else \z@\fi}%
\setbox\pst@hbox\hbox\bgroup
\aftergroup\pst@afterbox
\ifcase\pst@mathflag\or$\m@th\or$\m@th\displaystyle\fi
\begingroup
\pst@thisbox
\the\everypsbox}
\def\pst@endlongbox{%
\endgroup
\ifnum\pst@mathflag>\z@$\fi
\egroup}
\def\pslongbox#1#2{%
\@namedef{#1}{\pst@longbox#2}%
\@namedef{end#1}{\pst@endlongbox}}
\newdimen\psframesep
\def\psset@framesep#1{\pssetlength\psframesep{#1}}
\psset@framesep{3pt}
\newif\ifpsboxsep
\def\psset@boxsep#1{\@nameuse{psboxsep#1}}
\psset@boxsep{true}
\def\pst@useboxpar{%
\use@par
\if@star
\let\pslinecolor\psfillcolor
\solid@star
\let\solid@star\relax
\fi
\ifpsdoubleline \pst@setdoublesep \fi}
\def\psframebox{\pst@object{psframebox}}
\def\psframebox@i{\pst@makebox\psframebox@ii}
\def\psframebox@ii{%
\begingroup
\pst@useboxpar
\pst@dima=\pslinewidth
\advance\pst@dima by \psframesep
\pst@dimc=\wd\pst@hbox\advance\pst@dimc by \pst@dima
\pst@dimb=\dp\pst@hbox\advance\pst@dimb by \pst@dima
\pst@dimd=\ht\pst@hbox\advance\pst@dimd by \pst@dima
\setbox\pst@hbox=\hbox{%
\ifpsboxsep\kern\pst@dima\fi
\begin@ClosedObj
\addto@pscode{%
\psk@cornersize
\pst@number\pst@dima neg
\pst@number\pst@dimb neg
\pst@number\pst@dimc
\pst@number\pst@dimd
.5
\tx@Frame}%
\def\pst@linetype{2}%
\showpointsfalse
\end@ClosedObj
\box\pst@hbox
\ifpsboxsep\kern\pst@dima\fi}%
\ifpsboxsep\dp\pst@hbox=\pst@dimb\ht\pst@hbox=\pst@dimd\fi
\leavevmode\box\pst@hbox
\endgroup}
\def\psdblframebox{\pst@object{psdblframebox}}
\def\psdblframebox@i{\addto@par{doubleline=true}\psframebox@i}
\def\psclip#1{%
\leavevmode
\begingroup
\begin@psclip
\begingroup
\def\use@pscode{%
\pstVerb{%
\pst@dict
/mtrxc CM def
CP CP T
\tx@STV
\psk@origin
\psk@swapaxes
newpath
\pst@code
clip
newpath
mtrxc setmatrix
moveto
0 setgray
end}%
\gdef\pst@code{}}%
\def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}%
\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
\hbox to\z@{#1}%
\endgroup
\def\endpsclip{%
\end@psclip
\endgroup}%
\ignorespaces}
\def\endpsclip{\pst@misplaced\endpsclip}
\let\begin@psclip\relax
\def\end@psclip{\pstVerb{currentpoint initclip moveto}}
\def\AltClipMode{%
\def\end@psclip{\pstVerb{\pst@grestore}}%
\def\begin@psclip{\pstVerb{gsave}}}
\def\clipbox{\@ifnextchar[{\clipbox@}{\clipbox@[\z@]}}
% DG modification begin - Apr. 3, 1997
% From paulus@immd5.informatik.uni-erlangen.de (Dietrich Paulus)
%\def\clipbox@[#1]{\pst@makebox\clipbox@@{#1}}
\def\clipbox@[#1]{\pst@makebox{\clipbox@@{#1}}}
% DG modification end
\def\clipbox@@#1{%
\pssetlength\pst@dimg{#1}%
\leavevmode\hbox{%
\begin@psclip
\pst@Verb{%
CM \tx@STV CP T newpath
/a \pst@number\pst@dimg def
/w \pst@number{\wd\pst@hbox}a add def
/d \pst@number{\dp\pst@hbox}a add neg def
/h \pst@number{\ht\pst@hbox}a add def
a neg d moveto
a neg h L
w h L
w d L
closepath
clip
newpath
0 0 moveto
setmatrix}%
\unhbox\pst@hbox
\end@psclip}}
\def\psshadowbox{\pst@object{psshadowbox}}
\def\psshadowbox@i{\pst@makebox\psshadowbox@ii}
\def\psshadowbox@ii{%
\begingroup
\pst@useboxpar
\psshadowtrue
\psboxseptrue
\def\psk@shadowangle{-45 }%
\setbox\pst@hbox=\hbox{\psframebox@ii}%
\pst@dimh=\psk@shadowsize\p@
\pst@dimh=.7071\pst@dimh
\pst@dimg=\dp\pst@hbox
\advance\pst@dimg\pst@dimh
\dp\pst@hbox=\pst@dimg
\pst@dimg=\wd\pst@hbox
\advance\pst@dimg\pst@dimh
\wd\pst@hbox=\pst@dimg
\leavevmode
\box\pst@hbox
\endgroup}
\def\pscirclebox{\pst@object{pscirclebox}}
\def\pscirclebox@i{\pst@makebox\pscirclebox@ii}
\def\pscirclebox@ii{%
\begingroup
\pst@useboxpar
\setbox\pst@hbox=\hbox{%
\pst@nodehook
\pscirclebox@iii
\box\pst@hbox}%
\ifpsboxsep \pscirclebox@sep \fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\pscirclebox@iii{%
\if@star
\pslinewidth\z@
\pstverb{\pst@dict \tx@STP \pst@usecolor\psfillcolor
newpath \pscirclebox@iv \tx@SD end}%
\else
\begin@ClosedObj
\def\pst@linetype{4}\showpointsfalse
\addto@pscode{%
\pscirclebox@iv CLW 2 div add 0 360 arc closepath}%
\end@ClosedObj
\fi}
\def\pscirclebox@iv{%
\pst@number{\wd\pst@hbox}2 div
\pst@number{\ht\pst@hbox}\pst@number{\dp\pst@hbox}add 2 div
2 copy \pst@number{\dp\pst@hbox}sub 4 2 roll
\tx@Pyth \pst@number\psframesep add }
\def\pscirclebox@sep{%
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\dp\pst@hbox
\divide\pst@dimb 2
\pst@dima=.5\wd\pst@hbox
\pst@pyth\pst@dima\pst@dimb\pst@dimc
\advance\pst@dimc\pslinewidth
\advance\pst@dimc\psframesep
\advance\pst@dimb-\pst@dimc
\setbox\pst@hbox=\hbox to2\pst@dimc{%
\hss
\vbox{\kern-\pst@dimb\box\pst@hbox}%
\hss}%
\advance\pst@dimb-\dp\pst@hbox
\dp\pst@hbox=-\pst@dimb}
\let\pst@nodehook\relax
\def\psCirclebox{\pst@object{psCirclebox}}
\def\psCirclebox@i{\pst@makebox\psCirclebox@ii}
\def\psCirclebox@ii{%
\begingroup
\pst@useboxpar
\pst@dima=\ht\pst@hbox
\advance\pst@dima\dp\pst@hbox
\divide\pst@dima\tw@
\pssetlength\pst@dimb\psk@radius
\setbox\pst@hbox=\hbox{%
\pst@nodehook
\pscircle(.5\wd\pst@hbox,\pst@dima){\pst@dimb}%
\box\pst@hbox}%
\ifpsboxsep \psCirclebox@sep \fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psCirclebox@sep{%
\pst@dimc=\pst@dimb
\advance\pst@dimb-\pst@dima
\advance\pst@dima\pst@dimc
\setbox\pst@hbox=\hbox to\tw@\pst@dimc{%
\hss
\vrule width \z@ depth \pst@dimb height \pst@dima
\box\pst@hbox
\hss}}%
\def\psovalbox{\pst@object{psovalbox}}
\def\psovalbox@i{\pst@makebox{\psovalbox@ii}}
\def\psovalbox@ii{%
\begingroup
\pst@useboxpar
\psovalbox@iii
\ifpsboxsep\psovalbox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psovalbox@iii{%
\psovalbox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
0 360
\pst@number\pst@dimc CLW 2 div sub
\pst@number\pst@dimd CLW 2 div sub
\pst@number\pst@dima
\pst@number\pst@dimb
\tx@Ellipse
closepath}%
\def\pst@linetype{2}%
\end@ClosedObj
\unhbox\pst@hbox}}
\def\psovalbox@iv{%
\pst@dimc=\pslinewidth\advance\pst@dimc\psframesep
\pst@dimd=\ht\pst@hbox\advance\pst@dimd\dp\pst@hbox
\pst@dima=.5\wd\pst@hbox
\pst@dimb=.5\pst@dimd\advance\pst@dimb-\dp\pst@hbox
\pst@dimd=.707\pst@dimd
\advance\pst@dimd\pst@dimc
\advance\pst@dimc.707\wd\pst@hbox}
\def\psovalbox@sep{%
\setbox\pst@hbox\hbox to 2\pst@dimc{\hss\unhbox\pst@hbox\hss}%
\pst@dimg=\pst@dimd
\advance\pst@dimg-\pst@dimb
\dp\pst@hbox=\pst@dimg
\advance\pst@dimd\pst@dimb
\ht\pst@hbox=\pst@dimd}
\def\psdiabox{\pst@object{psdiabox}}
\def\psdiabox@i{\pst@makebox{\psdiabox@ii}}
\def\psdiabox@ii{%
\begingroup
\pst@useboxpar
\psdiabox@iii
\ifpsboxsep\psdiabox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\psdiabox@iv{%
\pst@dimg=.707\pslinewidth
\advance\pst@dimg.707\psframesep
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\pst@dimc=\pst@dima
\advance\pst@dimc\pst@dimg
\pst@dimd=\ht\pst@hbox
\advance\pst@dimd\dp\pst@hbox
\divide\pst@dimd 2
\pst@dimb=\pst@dimd
\advance\pst@dimb-\dp\pst@hbox
\advance\pst@dimd\pst@dimg}
\def\psdiabox@iii{%
\psdiabox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
\psline@iii
pop
.5
\pst@number\pst@dimc 2 mul \pst@number\pst@dimd 2 mul
0
\pst@number\pst@dima \pst@number\pst@dimb
\tx@Diamond}%
\def\pst@linetype{4}%
\end@ClosedObj
\box\pst@hbox}}
\def\psdiabox@sep{%
\setbox\pst@hbox\hbox to 4\pst@dimc{\hss\unhbox\pst@hbox\hss}%
\multiply\pst@dimd 2
\advance\pst@dimd\pst@dimb
\ht\pst@hbox\pst@dimd
\advance\pst@dimd-2\pst@dimb
\dp\pst@hbox\pst@dimd}
\def\psset@trimode#1{\pst@expandafter\psset@@trimode{#1}\@empty\@empty\@nil}
\def\psset@@trimode#1#2#3\@nil{%
\let\pst@tempg#1\relax
\ifx\pst@tempg*%
\let\psk@@trimode\@empty
\let\pst@tempg#2\relax
\else
\let\psk@@trimode\relax
\fi
\edef\psk@trimode{%
\ifx R\pst@tempg 1 \else\ifx D\pst@tempg 2
\else\ifx L\pst@tempg 3 \else 0 \fi\fi\fi}}
\psset@trimode{U}
\def\pstribox{\pst@object{pstribox}}
\def\pstribox@i{\pst@makebox{\pstribox@ii}}
\def\pstribox@ii{%
\begingroup
\pst@useboxpar
\pstribox@iii
\ifpsboxsep\pstribox@sep\fi
\leavevmode
\box\pst@hbox
\endgroup}
\def\pstribox@iii{%
\pstribox@iv
\setbox\pst@hbox=\hbox{%
\begin@ClosedObj
\addto@pscode{%
\psline@iii
pop
.5
\pst@number\pst@dimc \pst@number\pst@dimd
\ifodd\psk@trimode exch \fi
\psk@trimode -90 mul
\pst@number\pst@dima \pst@number\pst@dimb
\tx@Triangle}%
\def\pst@linetype{2}%
\end@ClosedObj
\box\pst@hbox}}
\def\pstribox@iv{%
\pst@dimh=\pslinewidth
\advance\pst@dimh\psframesep
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg-\dp\pst@hbox
\divide\pst@dimg 2
\edef\pst@tempa{\number\pst@dimg sp}% For use by nodes.
\ifodd\psk@trimode
\pst@dimb\pst@dimg
\else
\pst@dima=\wd\pst@hbox
\divide\pst@dima 2
\fi
\ifcase\psk@trimode
\pst@dimb=-\dp\pst@hbox
\advance\pst@dimb-\pst@dimh
\or
\pst@dima=-\pst@dimh
\or
\pst@dimb=\ht\pst@hbox
\advance\pst@dimb\pst@dimh
\or
\pst@dima=\wd\pst@hbox
\advance\pst@dima\pst@dimh
\fi
\pst@dimd=\dp\pst@hbox
\advance\pst@dimd\ht\pst@hbox
\ifx\psk@@trimode\relax
\pst@dimc=\wd\pst@hbox
\advance\pst@dimc\ifodd\psk@trimode 1.447\else 1.789\fi\pst@dimh
\multiply\pst@dimc 2
\advance\pst@dimd\ifodd\psk@trimode 1.789\else 1.447\fi\pst@dimh
\multiply\pst@dimd 2
\else
\ifodd\psk@trimode
\advance\pst@dimd 1.1547\wd\pst@hbox
\advance\pst@dimd 3.4641\pst@dimh
\pst@dimc=.866\pst@dimd
\else
\advance\pst@dimd .866\wd\pst@hbox %.866=(sqrt(3)/2)
\advance\pst@dimd 3\pst@dimh
\pst@dimc=1.1547\pst@dimd % 1.1547=(2/sqrt(3))
\fi
\fi}
\def\pstribox@sep{%
\ifodd\psk@trimode
\advance\pst@dimb.5\pst@dimd
\ht\pst@hbox=\pst@dimb
\advance\pst@dimd-\pst@dimb
\dp\pst@hbox=\pst@dimd
\else
\setbox\pst@hbox\hbox to \pst@dimc{\hss\unhbox\pst@hbox\hss}%
\global\pst@dimg=.5\pst@dimc
\fi
\ifcase\psk@trimode
\dp\pst@hbox-\pst@dimb
\advance\pst@dimd\pst@dimb
\ht\pst@hbox\pst@dimd
\or
\pst@dimg=.5\wd\pst@hbox
\global\advance\pst@dimg-\pst@dima
\setbox\pst@hbox\hbox to \pst@dimc{\kern-\pst@dima\box\pst@hbox\hss}%
\or
\ht\pst@hbox\pst@dimb
\advance\pst@dimd-\pst@dimb
\dp\pst@hbox\pst@dimd
\or
\pst@dimg=\pst@dimc
\advance\pst@dimg-\pst@dima
\global\advance\pst@dimg.5\wd\pst@hbox
\setbox\pst@hbox\hbox to \pst@dimc{%
\hss\box\pst@hbox\kern\psframesep\kern\pslinewidth}%
\fi}
\def\psset@arcsepA#1{\pst@getlength{#1}\psk@arcsepA}
\def\psset@arcsepB#1{\pst@getlength{#1}\psk@arcsepB}
\def\psset@arcsep#1{%
\psset@arcsepA{#1}\let\psk@arcsepB\psk@arcsepA}
\psset@arcsep{0}
\def\tx@ArcArrow{ArcArrow }
\def\psarc{\pst@object{psarc}}
\def\psarc@i{%
\@ifnextchar({\psarc@iii}{\psarc@ii}}
\def\psarc@ii#1{\addto@par{arrows=#1}%
\@ifnextchar({\psarc@iii}{\psarc@iii(0,0)}}
\def\psarc@iii(#1)#2#3#4{%
\begin@OpenObj
\pst@getangle{#3}\pst@tempa
\pst@getangle{#4}\pst@tempb
\pst@@getcoor{#1}%
\pssetlength\pst@dima{#2}%
\addto@pscode{\psarc@iv \psarc@v}%
\gdef\psarc@type{0}%
\showpointsfalse
\end@OpenObj}
\def\psarc@iv{%
\pst@coor /y ED /x ED
/r \pst@number\pst@dima def
/c 57.2957 r \tx@Div def
/angleA
\pst@tempa
\psk@arcsepA c mul 2 div
\ifcase \psarc@type add \or sub \fi
def
/angleB
\pst@tempb
\psk@arcsepB c mul 2 div
\ifcase \psarc@type sub \or add \fi
def
\ifshowpoints\psarc@showpoints\fi
\ifx\psk@arrowA\@empty
\ifnum\psk@liftpen=2
r angleA \tx@PtoC
y add exch x add exch
moveto
\fi
\fi}
\def\psarc@v{%
x y r
angleA
\ifx\psk@arrowA\@empty\else
{ ArrowA CP }
{ \ifcase\psarc@type add \or sub \fi }
\tx@ArcArrow
\fi
angleB
\ifx\psk@arrowB\@empty\else
{ ArrowB }
{ \ifcase\psarc@type sub \or add \fi }
\tx@ArcArrow
\fi
\ifcase\psarc@type arc \or arcn \fi}
\def\psarc@type{0}
\def\psarc@showpoints{%
gsave
newpath
x y moveto
x y r \pst@tempa \pst@tempb
\ifcase\psarc@type arc \or arcn \fi
closepath
CLW 2 div SLW
[ \psk@dash\space ] 0 setdash stroke
grestore }
\def\psarcn{\pst@object{psarcn}}
\def\psarcn@i{\def\psarc@type{1}\psarc@i}
\def\pscircle{\pst@object{pscircle}}
\def\pscircle@i{\@ifnextchar({\pscircle@do}{\pscircle@do(0,0)}}
\def\pscircle@do(#1)#2{%
\if@star
{\use@par\qdisk(#1){#2}}%
\else
\begin@ClosedObj
\pst@@getcoor{#1}%
\pssetlength\pst@dimc{#2}%
\def\pst@linetype{4}%
\addto@pscode{%
\pst@coor
\pst@number\pst@dimc
\psk@dimen CLW mul sub
0 360 arc
closepath}%
\showpointsfalse
\end@ClosedObj
\fi
\ignorespaces}
\def\qdisk(#1)#2{%
\def\pst@par{}%
\begin@SpecialObj
\pst@@getcoor{#1}%
\pssetlength\pst@dimg{#2}%
\addto@pscode{\pst@coor \pst@number\pst@dimg \tx@SD}%
\end@SpecialObj}
\def\psset@radius#1{\pst@@getlength{#1}\psk@radius}
\psset@radius{.25cm}
\def\psCircle{\pst@object{psCircle}}
\def\psCircle@i{\@ifnextchar({\psCircle@ii}{\psCircle@ii(0,0)}}
\def\psCircle@ii(#1){\pscircle@do(#1){\psk@radius}}
\def\pswedge{\pst@object{pswedge}}
\def\pswedge@i{\@ifnextchar({\pswedge@ii}{\pswedge@ii(0,0)}}
\def\pswedge@ii(#1)#2#3#4{%
\begin@ClosedObj
\pssetlength\pst@dimc{#2}
\pst@getangle{#3}\pst@tempa
\pst@getangle{#4}\pst@tempb
\pst@@getcoor{#1}%
\def\pst@linetype{1}%
\addto@pscode{%
\pst@coor
2 copy
moveto
\pst@number\pst@dimc \psk@dimen CLW mul sub % Adjusted radius
\pst@tempa \pst@tempb
arc
closepath}%
\showpointsfalse
\end@ClosedObj}
\def\tx@Ellipse{Ellipse }
\def\psellipse{\pst@object{psellipse}}
\def\psellipse@i(#1){\@ifnextchar(%
{\psellipse@ii(#1)}{\psellipse@ii(0,0)(#1)}}
\def\psellipse@ii(#1)(#2){%
\begin@ClosedObj
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\addto@pscode{%
0 360
\pst@coor
\ifdim\psk@dimen\p@=\z@\else
\psk@dimen CLW mul
dup 4 -1 roll sub neg 3 1 roll sub
\fi
\pst@tempa
\tx@Ellipse
closepath}%
\def\pst@linetype{2}%
\end@ClosedObj}
\def\multips{\@ifnextchar({\def\pst@par{}\multips@ii}{\multips@i}}
\def\multips@i#1{\def\pst@par{rot=#1}\multips@ii}
\def\multips@ii(#1){\@ifnextchar({\multips@iii(#1)}{\multips@iii(\z@,\z@)(#1)}}
\long\def\multips@iii(#1)(#2)#3#4{%
\begingroup
\use@par
\pst@getcoor{#1}\pst@tempa
\pst@@getcoor{#2}%
\pst@cnta=#3\relax
\init@pscode
\addto@pscode{%
\pst@tempa T \the\pst@cnta\space \pslbrace
gsave \ifx\psk@rot\@empty\else\psk@rot rotate \fi}%
\hbox to\z@{%
\def\init@pscode{%
\addto@pscode{%
gsave
\pst@number\pslinewidth SLW
\pst@usecolor\pslinecolor}}%
\def\use@pscode{\addto@pscode{grestore}}%
\def\psclip##1{\pst@misplaced\psclip}%
\def\nc@object##1##2##3##4{\pst@misplaced{node connection}}%
#4}%
\addto@pscode{grestore \pst@coor T \psrbrace repeat}%
\leavevmode
\use@pscode
\endgroup
\ignorespaces}
\def\scalebox#1{\pst@makebox{\@scalebox{#1}}}
\def\@scalebox#1{%
\begingroup
\pst@getscale{#1}\pst@tempa
\let\pst@tempc\pst@tempg
\let\pst@tempd\pst@temph
\@@scalebox
\endgroup}
\def\@@scalebox{%
\leavevmode
\hbox{%
\ifdim\pst@tempd\p@<\z@
\pst@dimg=\pst@tempd\ht\pst@hbox
\pst@dimh=\pst@tempd\dp\pst@hbox
\dp\pst@hbox=-\pst@dimg
\ht\pst@hbox=-\pst@dimh
\else
\ht\pst@hbox=\pst@tempd\ht\pst@hbox
\dp\pst@hbox=\pst@tempd\dp\pst@hbox
\fi
\pst@dima=\pst@tempc\wd\pst@hbox
\ifdim\pst@dima<\z@\kern-\pst@dima\fi
\pst@Verb{CP CP translate \pst@tempa \tx@NET}%
\hbox to \z@{\box\pst@hbox\hss}%
\pst@Verb{%
CP CP translate
1 \pst@tempc div 1 \pst@tempd div scale
\tx@NET}%
\ifdim\pst@dima>\z@\kern\pst@dima\fi}}
\pslongbox{Scalebox}{\scalebox}
\def\scaleboxto(#1,#2){\pst@makebox{\@scaleboxto(#1,#2)}}
\def\@scaleboxto(#1,#2){%
\begingroup
\pssetlength\pst@dima{#1}%
\pssetlength\pst@dimb{#2}%
\ifdim\pst@dima=\z@\else
\pst@divide{\pst@dima}{\wd\pst@hbox}\pst@tempc
\edef\pst@tempc{\pst@tempc\space}%
\fi
\ifdim\pst@dimb=\z@
\ifdim\pst@dima=\z@
\@pstrickserr{%
\string\scaleboxto\space dimensions cannot both be zero}\@ehpa
\def\pst@tempa{}%
\def\pst@tempc{1 }%
\def\pst@tempd{1 }%
\else
\let\pst@tempd\pst@tempc
\fi
\else
\pst@dimc=\ht\pst@hbox
\advance\pst@dimc\dp\pst@hbox
\pst@divide{\pst@dimb}{\pst@dimc}\pst@tempd
\edef\pst@tempd{\pst@tempd\space}%
\ifdim\pst@dima=\z@ \let\pst@tempc\pst@tempd \fi
\fi
\edef\pst@tempa{\pst@tempc \pst@tempd scale }%
\@@scalebox
\endgroup}
\pslongbox{Scaleboxto}{\scaleboxto}
\def\tx@Rot{Rot }
\def\rotateleft{\pst@makebox{\@rotateleft\pst@hbox}}
\def\@rotateleft#1{%
\leavevmode\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
\pst@Verb{90 \tx@Rot}
\vbox to \z@{\vss\hbox to \z@{\box#1\hss}\vskip\z@}%
\pst@Verb{-90 \tx@Rot}}}}
\def\rotateright{\pst@makebox{\@rotateright\pst@hbox}}
\def\@rotateright#1{%
\hbox{\hskip\ht#1\hskip\dp#1\vbox{\vskip\wd#1%
\pst@Verb{-90 \tx@Rot}
\vbox to \z@{\hbox to \z@{\hss\box#1}\vss}%
\pst@Verb{90 \tx@Rot}}}}
\def\rotatedown{\pst@makebox{\@rotatedown\pst@hbox}}
\def\@rotatedown#1{%
\hbox{\hskip\wd#1\vbox{\vskip\ht#1\vskip\dp#1%
\pst@Verb{180 \tx@Rot}%
\vbox to \z@{\hbox to \z@{\box#1\hss}\vss}%
\pst@Verb{-180 \tx@Rot}}}}
\pslongbox{Rotateleft}{\rotateleft}
\pslongbox{Rotateright}{\rotateright}
\pslongbox{Rotatedown}{\rotatedown}
\def\pst@starbox{%
\setbox\pst@hbox\hbox{\psframebox*[boxsep=false]{\unhbox\pst@hbox}}}
\def\pst@@makesmall#1{%
\setbox#1=\hbox to\z@{\hss\vbox to \z@{\vss\box#1\vss}\hss}}
\def\pst@@@makesmall#1{%
\pst@dimh=\psk@xref\wd#1%
\ifx\psk@yref\relax
\pst@dimg=\dp#1%
\else
\pst@dimg=\psk@yref\ht#1%
\advance\pst@dimg\psk@yref\dp#1%
\fi
\setbox#1=\hbox to\z@{%
\kern-\pst@dimh\vbox to\z@{\vss\box#1\kern-\pst@dimg}\hss}}
\def\psset@ref#1{\pst@expandafter\psset@@ref{#1}\@empty,,\@nil}
\def\psset@@ref#1#2,#3,#4\@nil{%
\def\psk@xref{.5}%
\def\psk@yref{.5}%
\let\pst@makesmall\pst@@@makesmall
\ifx\@empty#3\@empty
\@nameuse{getref@#1}%
\@nameuse{getref@#2}%
\else
\pst@checknum{#1#2}\psk@xref
\pst@checknum{#3}\psk@yref
\fi}
\def\getref@c{\let\pst@makesmall\pst@@makesmall}
\def\getref@t{\def\psk@yref{1}}
\def\getref@b{\def\psk@yref{0}}
\def\getref@B{\let\psk@yref\relax}
\def\getref@l{\def\psk@xref{0}}
\def\getref@r{\def\psk@xref{1}}
\psset@ref{c}
\def\psset@rot#1{%
\pst@expandafter{\@ifnextchar*{\psset@@@rot}{\psset@@rot}}{#1}\@nil}
\def\psset@@rot#1\@nil{%
\def\next##1@#1=##2@##3\@nil{%
\ifx\relax##2%
\pst@getangle{#1}\psk@rot
\else
\def\psk@rot{##2}%
\fi}%
\expandafter\next\pst@rottable @#1=\relax @\@nil}
\def\psset@@@rot#1#2\@nil{%
\psset@@rot#2\@nil
\edef\psk@rot{\pst@rotlist \ifx\psk@rot\@empty\else\psk@rot add \fi}}
\def\pst@rotlist{mark RAngle /a ED cleartomark a neg }
\def\pst@rottable{%
@0=%
@U=%
@L=90 %
@D=180 %
@R=-90 %
@N=\pst@rotlist
@W=\pst@rotlist 90 add %
@S=\pst@rotlist 180 add %
@E=\pst@rotlist 90 sub }
\psset@rot{0}
\def\tx@RotBegin{RotBegin }
\def\tx@RotEnd{RotEnd }
\def\pst@rotate#1#2{%
\ifx#1\@empty\else
\setbox#2=\hbox{\pst@Verb{#1 \tx@RotBegin}\box#2\pst@Verb{\tx@RotEnd}}%
\fi}
\def\psput@cartesian#1{%
\hbox to \z@{\kern\pst@dimg{\vbox to \z@{\vss\box#1\vskip\pst@dimh}\hss}}}
\def\psput@special#1{%
\hbox{%
\pst@Verb{{ \pst@coor } \tx@PutCoor \tx@PutBegin}%
\box#1%
\pst@Verb{\tx@PutEnd}}}
\def\tx@PutCoor{PutCoor }
\def\tx@PutBegin{PutBegin }
\def\tx@PutEnd{PutEnd }
\def\rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\rput@i}{\rput@ii}}}
\def\rput@i[#1]{\addto@par{ref={#1}}\rput@ii}
\def\rput@ii{\@ifnextchar({\rput@iv}{\rput@iii}}
\def\rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\rput@iv}{\rput@iv(\z@,\z@)}}
\def\rput@iv(#1){\pst@killglue\pst@makebox{\rput@v{#1}}}
\def\rput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\multirput{%
\def\pst@par{}%
\pst@ifstar{\@ifnextchar[{\multirput@i}{\multirput@ii}}}
\def\multirput@i[#1]{\addto@par{ref={#1}}\multirput@ii}
\def\multirput@ii{\@ifnextchar({\multirput@iv}{\multirput@iii}}
\def\multirput@iii#1{\addto@par{rot={#1}}\multirput@iv}
\def\multirput@iv(#1){%
\@ifnextchar({\multirput@v(#1)}{\multirput@v(\z@,\z@)(#1)}}
\def\multirput@v(#1,#2)(#3,#4)#5{%
\pst@makebox{\multirput@vi(#1,#2)(#3,#4){#5}}}
\def\multirput@vi(#1,#2)(#3,#4)#5{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\pssetxlength\pst@dima{#1}%
\pssetylength\pst@dimb{#2}%
\pssetxlength\pst@dimc{#3}%
\pssetylength\pst@dimd{#4}%
\pst@cntg=#5\relax
\pst@cnth=\@ne
\leavevmode
\loop
\vbox to \z@{%
\vss
\hbox to \z@{\kern\pst@dima\copy\pst@hbox\hss}%
\vskip\pst@dimb}%
\ifnum\pst@cntg>\pst@cnth
\advance\pst@dima\pst@dimc
\advance\pst@dimb\pst@dimd
\advance\pst@cnth\@ne
\repeat
\endgroup
\ignorespaces}
\newif\if@fixedradius
\def\cput{\pst@object{cput}}
\def\cput@i{\@fixedradiusfalse\cput@ii}
\def\cput@ii{\pst@killglue\@ifnextchar({\cput@iv}{\cput@iii}}
\def\cput@iii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\cput@iv}{\cput@iv(\z@,\z@)}}
\def\cput@iv(#1){\pst@makebox{\cput@v{#1}}}
\def\cput@v#1{%
\begingroup
\use@par
\setbox\pst@hbox=\hbox{%
\psboxsepfalse
\if@fixedradius\psCirclebox@ii\else\pscirclebox@ii\fi}%
\pst@@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\Cput{\pst@object{Cput}}
\def\Cput@i{\@fixedradiustrue\cput@ii}
\newdimen\pslabelsep
\def\psset@labelsep#1{\pssetlength\pslabelsep{#1}}
\psset@labelsep{5pt}
\def\psset@refangle#1{\pst@expandafter\psset@@refangle{#1}\@nil}
\def\psset@@refangle#1\@nil{%
\def\next##1@#1=##2"##3@##4\@nil{%
\ifx\relax##2%
\pst@getangle{#1}\psk@refangle
\def\psk@uputref{}%
\else
\def\psk@refangle{##2 }%
\def\psk@uputref{##3}%
\fi}%
\expandafter\next\pst@refangletable @#1=\relax"@\@nil}
\def\pst@refangletable{%
@r=0"20%
@u=90"02%
@l=180"10%
@d=-90"01%
@ur=45"22%
@ul=135"12%
@dr=-135"21%
@dl=-45"11}
\psset@refangle{0}
% DG/SR modification begin - Mar. 24, 1999 - Patch 10
%\def\uput{\def\pst@par{}\@ifnextchar[{\uput@ii}{\uput@i}}
\def\uput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\uput@ii}{\uput@i}}} 
% DG/SR modification end
\def\uput@i#1{\addto@par{labelsep=#1}\uput@ii}
\def\uput@ii[#1]{%
\addto@par{refangle={#1}}%
\@ifnextchar({\uput@iv}{\uput@iii}}
\def\uput@iii#1{%
\addto@par{rot={#1}}%
\@ifnextchar({\uput@iv}{\uput@iv(\z@,\z@)}}
\def\uput@iv(#1){\pst@killglue\pst@makebox{\uput@v{#1}}}
\def\uput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\uput@vi
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\uput@vi{%
\ifx\psk@uputref\@empty
\uput@vii\tx@UUput{}%
\else
\ifx\psk@rot\@empty
\expandafter\uput@viii\psk@uputref
\else
\uput@vii\tx@UUput{}%
\fi
\fi}
\def\uput@vii#1#2{%
\edef\pst@coor{%
\pst@number\pslabelsep
#2%
\pst@number{\wd\pst@hbox}%
\pst@number{\ht\pst@hbox}%
\pst@number{\dp\pst@hbox}%
\psk@refangle\space \ifx\psk@rot\@empty\else\psk@rot\space sub \fi
\tx@Uput #1}%
\setbox\pst@hbox=\hbox to\z@{\hss\vbox to\z@{\vss\box\pst@hbox\vss}\hss}%
\setbox\pst@hbox=\psput@special\pst@hbox
\ifx\psk@rot\@empty\else\pst@rotate\psk@rot\pst@hbox\fi}
\def\uput@viii#1#2{%
\ifnum#1>\z@\ifnum#2>\z@\pslabelsep=.707\pslabelsep\fi\fi
\setbox\pst@hbox=\vbox to\z@{%
\ifnum#2=1 \vskip\pslabelsep\else\vss\fi
\hbox to\z@{%
\ifnum#1=2 \hskip\pslabelsep\else\hss\fi
\box\pst@hbox
\ifnum#1=1 \hskip\pslabelsep\else\hss\fi}%
\ifnum#2=2 \vskip\pslabelsep\else\vss\fi}}
\def\tx@Uput{Uput }
\def\tx@UUput{UUput }
\def\Rput{\def\pst@par{}\pst@ifstar{\@ifnextchar[{\Rput@ii}{\Rput@i}}}
\def\Rput@i#1{\addto@par{labelsep=#1}\Rput@ii}
\def\Rput@ii[#1]{\addto@par{ref={#1}}\@ifnextchar({\Rput@iv}{\Rput@iii}}
\def\Rput@iii#1{\addto@par{rot={#1}}\@ifnextchar({\Rput@iv}{\Rput@iv(\z@,\z@)}}
\def\Rput@iv(#1){\pst@killglue\pst@makebox{\Rput@v{#1}}}
\def\Rput@v#1{%
\begingroup
\use@par
\if@star\pst@starbox\fi
\Rput@vi
\pst@makesmall\pst@hbox
\pst@rotate\psk@rot\pst@hbox
\psput@{#1}\pst@hbox
\endgroup
\ignorespaces}
\def\Rput@vi{%
\pst@dimg=\dp\pst@hbox
\advance\pst@dimg\pslabelsep
\dp\pst@hbox=\pst@dimg
\pst@dimg=\ht\pst@hbox
\advance\pst@dimg\pslabelsep
\ht\pst@hbox=\pst@dimg
\setbox\pst@hbox\hbox{\kern\pslabelsep\box\pst@hbox\kern\pslabelsep}}%
\def\oldpsput{%
\def\pst@par{}\pst@ifstar{\@ifnextchar[{\oldpsput@i}{\oldpsput@ii}}}
\def\oldpsput@i[#1]{\addto@par{ref={#1}}\oldpsput@ii}
\def\oldpsput@ii{\@ifnextchar<{\oldpsput@iii}{\oldpsput@iv}}
\def\oldpsput@iii<#1>{\rput@iii{#1}}
\def\OldPsput{\let\psput\oldpsput}
\def\NewPsput{\let\psput\rput}
\def\pspicture{\begingroup\pst@ifstar\pst@picture}
\def\pst@picture{%
\@ifnextchar[{\pst@@picture}{\pst@@picture[0]}}
\def\pst@@picture[#1]#2(#3,#4){%
\@ifnextchar({\pst@@@picture[#1](#3,#4)}%
{\pst@@@picture[#1](0,0)(#3,#4)}}
\def\pst@@@picture[#1](#2,#3)(#4,#5){%
\pssetxlength\pst@dima{#2}%
\pssetylength\pst@dimb{#3}%
\pssetxlength\pst@dimc{#4}%
\pssetylength\pst@dimd{#5}%
\ifdim\pst@dima>\pst@dimc
\pst@dimg=\pst@dima
\pst@dima=\pst@dimc
\pst@dimc=\pst@dimg
\fi
\ifdim\pst@dimb>\pst@dimd
\pst@dimg=\pst@dimb
\pst@dimb=\pst@dimd
\pst@dimd=\pst@dimg
\fi
\def\pst@tempa{#1}%
\setbox\pst@hbox=\hbox\bgroup
\begingroup\KillGlue
\@ifundefined{@latexerr}{}{\let\unitlength\psunit}%
\edef\pic@coor{(#2,#3)(#2,#3)(#4,#5)}\ignorespaces}
\def\pic@coor{(0,0)(0,0)(10,10)}
\def\endpspicture{%
\pst@killglue
\endgroup
\egroup
\ifdim\wd\pst@hbox=\z@\else
%\@pstrickserr{Extraneous space in the pspicture environment}%
%{Type \space <return> \space to procede.}%
\fi
\ht\pst@hbox=\pst@dimd
\dp\pst@hbox=-\pst@dimb
\setbox\pst@hbox=\hbox{%
\kern-\pst@dima
\ifx\pst@tempa\@empty\else
\advance\pst@dimd-\pst@dimb
\pst@dimd=\pst@tempa\pst@dimd
\advance\pst@dimd\pst@dimb
\lower\pst@dimd
\fi
\box\pst@hbox
\kern\pst@dimc}%
\if@star\setbox\pst@hbox=\hbox{\clipbox@@\z@}\fi
\leavevmode\box\pst@hbox
\endgroup}
\@namedef{pspicture*}{\pspicture*}
\@namedef{endpspicture*}{\endpspicture}
\def\tx@BeginOL{BeginOL }
\def\tx@InitOL{InitOL }
\def\pst@initoverlay#1{\pst@Verb{\tx@InitOL /TheOL (#1) def}}
\def\AltOverlayMode{%
\def\pst@initoverlay##1{%
\pst@Verb{%
\tx@InitOL
/Visible { initclip } def
/Invisible {
CP newpath OLUnit itransform moveto clip newpath moveto
} def
/TheOL (##1) def}}}
\def\pst@overlay#1{%
\edef\curr@overlay{#1}%
\pst@Verb{(#1) BOL}%
\aftergroup\pst@endoverlay}
\def\pst@endoverlay{%
\pst@Verb{(\curr@overlay) BOL}}
\def\curr@overlay{all}
\newbox\theoverlaybox
\def\overlaybox{%
\global\setbox\theoverlaybox=\hbox\bgroup
\begingroup
\let\psoverlay\pst@overlay
\def\overlaybox{%
\@pstrickserr{Overlays cannot be nested}\@eha}%
\def\putoverlaybox{%
\@pstrickserr{You must end the overlay box
before using \string\putoverlaybox}}%
\psoverlay{main}%
\ignorespaces}
\def\endoverlaybox{\endgroup\egroup}
\def\putoverlaybox#1{%
\hbox{\pst@initoverlay{#1}\copy\theoverlaybox}}
\def\psoverlay{\@pstrickserr{\string\psoverlay\space
can only be used after \string\overlaybox}}
\ifx\pstcustomize\relax \input pstricks.con \fi
\catcode`\@=\PstAtCode\relax
%
\endinput
%%
%% END: pstricks.tex

products.bbl
\begin{thebibliography}{10}

\bibitem{ablamowicz:fauser:2002a}
Rafa{\l} Ab{\l}amowicz and Bertfried Fauser.
\newblock Efficient algorithms for {C}lifford products using {H}opf gebra
  methods.
\newblock 2002.
\newblock in preparation.

\bibitem{ablamowicz:fauser:2002b}
Rafa{\l} Ab{\l}amowicz and Bertfried Fauser.
\newblock Efficient algorithms for meet and join in {G}ra{\ss}mann-{C}ayley
  algebras.
\newblock 2002.
\newblock in preparation.

\bibitem{barnabei:brini:rota:1985a}
Marilena Barnabei, Andrea Brini, and {Gian-Carlo} Rota.
\newblock On the exterior calculus of invariant theory.
\newblock {\em Journal of Algebra}, 96:120--160, 1985.

\bibitem{brouder:2002a}
Chrisitan Brouder.
\newblock A quantum field algebra.
\newblock {\em J. Phys. A: Math. Gen. submitted}, 2002.
\newblock math-ph/0201033.

\bibitem{brouder:fauser:frabetti:oeckl:2002a}
Christian Brouder, Bertfried Fauser, Alessandra Frabetti, and Robert Oeckl.
\newblock Quantum groups and quantum field theory.
\newblock 2002.
\newblock preprint.

\bibitem{chevalley:1997a}
Claude Chevalley.
\newblock {\em {The Algebraic Theory of Spinors and Clifford Algebras}}.
\newblock Springer-Verlag, Berlin, 1997.
\newblock Collected Works Vol. 2, Pierre Cartier, Catherine Chevalley Eds.

\bibitem{doubilet:rota:stein:1974a}
Peter Doubilet, {Gian-Carlo} Rota, and Joel Stein.
\newblock On the foundations of combinatorial theory: {IX} {C}ombinatorial
  methods in invariant theory.
\newblock {\em Studies in Applied Mathematics}, LIII(3):185--216, September
  1974.

\bibitem{dyson:1974a}
Freeman~J. Dyson.
\newblock Missed opportunities.
\newblock {\em Bull. Amer. Math. Soc.}, 78:635--652, 1974.

\bibitem{fauser:1998a}
Bertfried Fauser.
\newblock On an easy transition from operator dynamics to generating
  functionals by {C}lifford algebras.
\newblock {\em Journal of Mathematical Physics}, 39(9):4928--4947, 1998.
\newblock hep-th/9710186.

\bibitem{fauser:2001e}
Bertfried Fauser.
\newblock Clifford geometric parameterization of inequivalent vacua.
\newblock {\em Mathematical Methods in the Applied Sciences}, 24:885--912,
  2001.
\newblock hep-th/9710047v2.

\bibitem{fauser:2001b}
Bertfried Fauser.
\newblock On the {H}opf-algebraic origin of {W}ick normal-ordering.
\newblock {\em Journal of Physics A: Mathematical and General}, 34:105--115,
  2001.
\newblock hep-th/0007032.

\bibitem{fauser:2002c}
Bertfried Fauser.
\newblock {A Treatise on Quantum Clifford Algebras}.
\newblock Konstanz, 2002.
\newblock Habilitationsschrift, arXiv:math.QA/0202059.

\bibitem{fauser:ablamowicz:2000c}
Bertfried Fauser and Rafa{\l} Ab{\l}amowicz.
\newblock On the decomposition of {C}lifford algebras of arbitrary bilinear
  form.
\newblock In Rafa{\l} Ab{\l}amowicz and Bertfried Fauser, editors, {\em
  Clifford Algebras and their Applications in Mathematical Physics}, pages
  341--366, Boston, 2000. Birkh\"auser.
\newblock math.QA/9911180.

\bibitem{grassmann:1862a}
Hermann Gra{\ss}mann.
\newblock {\em Die Ausdehnungslehre; {V}ollst\"andig und in strenger {F}orm
  bearbeitet}.
\newblock Verlag von Th. Chr. Fr. Enslin (Adolph Enslin), Berlin, 1862.

\bibitem{grassmann:1878a}
Hermann Gra{\ss}mann.
\newblock {\em Die lineale Ausdehnungslehre; ein neuer Zweig der Mathematik}.
\newblock Verlag Otto Wigand, Leipzig, 1878.
\newblock (reprint of the original 1844 edition, with anotations of
  Gra{\ss}mann).

\bibitem{greub:1976a}
Werner Greub.
\newblock {\em Lineare Algebra}.
\newblock Springer-Verlag, Berlin, 1976.
\newblock Heidelberger Taschenb\"ucher, 179.

\bibitem{hestenes:sobczyk:1992a}
David Hestenes and Garret Sobczyk.
\newblock {\em {Clifford algebra to geometric calculus}}.
\newblock Kluwer Academic Publishers, Dordrecht, 1992.
\newblock 1st. ed 1984, Reprinted with corrections.

\bibitem{lotze:1955a}
Alfred Lotze.
\newblock {\"U}ber eine neue {B}egr\"undung der regressiven {M}ultiplikation
  extensiver {G}r\"o{\ss}en in einem {H}auptgebiet $n$-ter {S}tufe.
\newblock {\em Jahresbericht der DMV}, 57:102--110, 1955.

\bibitem{majid:1995a}
Shahn Majid.
\newblock {\em Foundations of {Q}uantum {G}roup {T}heory}.
\newblock Cambridge University Press, Cambridge, 1995.

\bibitem{milnor:moore:1965a}
John~W. Milnor and John~C. Moore.
\newblock On the structure of {H}opf algebras.
\newblock {\em Annals of Mathematics}, 81:211--264, 1965.

\bibitem{oziewicz:1986a}
Zbigniew Oziewicz.
\newblock From {G}rassmann to {C}lifford.
\newblock In J.S.R. Chisholm and A.K. Common, editors, {\em Clifford Algebras
  and their Applications in Mathematical Physics}, pages 245--256, Dordrecht,
  1986. Kluwer.
\newblock Canterbury, 1985.

\bibitem{oziewicz:1997a}
Zbigniew Oziewicz.
\newblock Clifford {H}opf gebra and biuniversal {H}opf gebra.
\newblock {\em Czechoslovak Journal of Physics}, 47(12):1267--1274, 1997.
\newblock q-alg/9709016.

\bibitem{oziewicz:2001b}
Zbigniew Oziewicz.
\newblock Guest editor's note: Clifford algebras and their applications.
\newblock {\em Internation Journal of Theoretical Physics}, 40(1):1--13, 2001.

\bibitem{oziewicz:guzman:2001a}
Zbigniew Oziewicz and Jose de Jesu de~Cruz Guzman.
\newblock Unital and antipodal biconvolution and {H}opf gebra.
\newblock {\em Miscellanea Algebraicae}, 2001.
\newblock in press.

\bibitem{rota:stein:1994a}
{Gian-Carlo} Rota and {Joel A.} Stein.
\newblock Plethystic {H}opf algebras.
\newblock {\em Proc. Natl. Acad. Sci. USA}, 91:13057--13061, December 1994.

\bibitem{sweedler:1969a}
{Moss E.} Sweedler.
\newblock {\em Hopf {A}lgebras}.
\newblock W. A. Benjamin, INC., New York, 1996.

\end{thebibliography}
