solve(x*y) ;
solve(x*y, PrincipalValue) ;
domain Perm(n: Type::NonNegInt)
    category Cat::CombinatorialClass;
    inherits combinat::permutations;
    axiom Ax::systemRep;

    list  := () -> combinat::permutations::list(n);
    count := () -> n!;

begin
    if n < 0 then error("n must be non negative"); end
end;    
domain SGAx(n: Type::NonNegInt)
    category Cat::AlgebraWithBasis(Dom::ExpressionField());
    inherits Dom::FreeModule(Dom::ExpressionField(), Perm(n));
    axiom Ax::normalRep;

    one := dom::term( [ $ 1..n ] );

    mult2Basis :=
    proc(p1: dom::basisIndices, p2: dom::basisIndices)
    begin
	dom::term( dom::basisIndices::_mult(p1,p2) );
    end_proc;

end_domain;
///--- Erreur dans ce bloc
domain Perm(n: Type::NonNegInt)
    category Cat::CombinatorialClass;
    inherits combinat::permutations;
    axiom Ax::systemRep;

    list  := () -> combinat::permutations::list(n);
    count := () -> n!;

begin
    if n < 0 then error("n must be non negative"); end
end;    
///--- Fin du bloc avec une erreur
///--- Erreur dans ce bloc
domain SGAx(n: Type::NonNegInt)
    category Cat::AlgebraWithBasis(Dom::ExpressionField());
    inherits Dom::FreeModule(Dom::ExpressionField(), Perm(n));
    axiom Ax::normalRep;

    one := dom::term( [ $ 1..n ] );

    mult2Basis :=
    proc(p1: dom::basisIndices, p2: dom::basisIndices)
    begin
	dom::term( dom::basisIndices::_mult(p1,p2) );
    end_proc;

end_domain;
///--- Fin du bloc avec une erreur
///--- Erreur dans ce bloc
domain SGAx(n: Type::NonNegInt)
    category Cat::AlgebraWithBasis(Dom::ExpressionField());
    inherits Dom::FreeModule(Dom::ExpressionField(), Perm(n));
    axiom Ax::normalRep;

    one := dom::term( [ $ 1..n ] );

    mult2Basis :=
    proc(p1: dom::basisIndices, p2: dom::basisIndices)
    begin ;
///--- Fin du bloc avec une erreur
domain Hecke0(n: Type::NonNegInt)
    category Cat::AlgebraWithBasis(Dom::ExpressionField());
    inherits Dom::FreeModule(Dom::ExpressionField(), Perm(n));
    axiom Ax::normalRep;

    basisName := hold(pi);

    one := dom::term( [ $ 1..n ] );

    mult2Basis :=
    proc(p1: dom::basisIndices, p2: dom::basisIndices)
	local tmp;
    begin
	for t in combinat::permutations::reducedWord(p2) do
	    if p1[t]<p1[t+1] then
		tmp    := p1[t];
		p1[t]  := p1[t+1];
		p1[t+1]:= tmp;		
	    end_if;
	end_for;
	dom::term(p1);
    end_proc;

end_domain ;
H3 := Hecke0(3);
H3([2,1,3])^2;
Pi1 := H3([2,1,3]);
Pi2 := H3([1,3,2]);
Pi1*Pi2*Pi1 - Pi2*Pi1*Pi2;
Perm3:=Perm(3);
///--- Erreur dans ce bloc
_plus(Perm3::sign(p)*Hecke0(p) $ p in Perm3::list()) ;
///--- Fin du bloc avec une erreur
_plus(Perm3::sign(p)*H3(p) $ p in Perm3::list()) ;
x:=_plus(Perm3::sign(p)*H3(p) $ p in Perm3::list()) ;
x^2;
x^2-x ;
y := _plus( a[op(p)]*H3(p) $ p in Perm3::list() ) ;
H3::genericElement() ;
H3::genericElement(a) ;
y:=H3::genericElement(a) ;
y^2-y ;
solve([coeff(y^2-y)], H3::genericCoefficients(a)) ;
res:=%:
nops(res) ;
