\section{Introduction}

In this chapter we suppose that the user is already familiar with
{\bf bergman} and is able to start and use it in the simplest cases.
The aim of this chapter is to explain  more detailed how to use
{\bf bergman}.


{\bf Bergman} is  written in Standard Lisp, and uses Lisp syntax.
Nevertheless in this chapter we do not suppose that the user is
familiar with
Lisp.
%so we start this chapter from the very brief introduction
%into LISP, mainly explaining how to understand the notations that follows.
Chapter \ref{LISP-APP} contains some information about Lisp
and its dialect Standard Lisp, used in {\bf bergman}. The reader is recommended
to look through it though here  he mainly need not
deep knowledge in Lisp.

      \section{Bergman: philosophy and approach}


The philosophy of {\bf bergman} is to give the user a possibility
to use Bergman's Diamond Lemma with a maximum flexibility.
It means that {\bf bergman} is mainly a powerful instrument for
calculating Gr\"{o}bner basis  in the several modifications: commutative and
noncommutative algebras, modules over them.

Besides that it provides some facilities to calculate
appropriate invariants of the algebras and modules:
Poincar\'{e} and Hilbert series, Anick's resolution and
Betti numbers.

Main principals are maximum efficiency with minimum
restrictions (except one --homogeneity). User need not
care how long might be coefficient if he wants to work
over rationals, but should also have a possibility
to work over prime characteristic or to include
indeterminants as coefficients.

Nevertheless {\bf bergman} is not a language. Rather it is a box,
containing several useful routines, so it takes
some efforts from the user to find them here and to use
in a correct way.  Additional problems might appear
because of Lisp--oriented form of the procedures. But
this box is not black: the user can read, change the procedures
and create its own. Moreover, he can use them together
with Reduce, so from this point of view, {\bf bergman}
can be considered as a package for Reduce. (You can read
more about this in  Chapter \ref{reduce}).
The aim of this chapter is to explain {\bf bergman} as a
black box, describing all its main procedures. {\bf bergman}
inside  is the content of Chapter \ref{prof}.


    \section{Bergman: main restrictions}
BERGMAN has only two main restrictions. First, it is not a
separate program and cannot be used without PSL (or Reduce,
which contains PSL). Second, and important - HOMOGENEITY.
All input to the simple top level procedures must be
homogeneous (by the natural grading, where each variable has degree
one). There is no automatic check of homogenity. The possibility to
use weighted variables permits to extend the class of problems which
can be solved by {\bf bergman}.



%There are some
%experimental procedures which under some restrictions test for
%homogenity, homogenise input, and dehomogenise output; see the
% sub-section \ref{homog} below.

In the commutative case homogenity is not the  principal restriction.
It is not so difficult to homogenise relations to obtain the
same, in principal, result. But for the noncommutative algebras
this restriction is essential and this is price for the efficiency.
But unfortunately it means that it is impossible to use {\bf bergman}
for investigations of the groups or most of the finite dimension
algebras (such as matrix algebras), everything that contains
nontrivial idempotents.

Note also that  {\bf bergman} has no  routines for the polynomial
factorisation. So, the applications of {\bf bergman} to the solutions
of the nonlinear systems of equations are sufficiently restricted.

%\section{LISP NOTATIONS}


