--- /home/rubey/axiom/mnt/linux/src/algebra/combfunc.spad	2004-05-21 18:51:33.000000000 +0200
+++ combfunc.spad	2004-05-25 13:14:16.000000000 +0200
@@ -163,8 +163,9 @@
     K2fact    : (K, List SE) -> F
     smpfact   : (SMP, List SE) -> F
 
-    dummy := new()$SE :: F
-
+    dummy == new()$SE :: F
+-- this works if we don't accidently use such a symbol as a bound of summation
+-- or product 
     opfact  := operator("factorial"::Symbol)$CommonOperators
     opperm  := operator("permutation"::Symbol)$CommonOperators
     opbinom := operator("binomial"::Symbol)$CommonOperators
@@ -212,10 +213,12 @@
     summand l            == eval(first l, retract(second l)@K, third l)
 
     product(x:F, i:SE) ==
-      opprod [eval(x, k := kernel(i)$K, dummy), dummy, k::F]
+      dm := dummy
+      opprod [eval(x, k := kernel(i)$K, dm), dm, k::F]
 
     summation(x:F, i:SE) ==
-      opsum [eval(x, k := kernel(i)$K, dummy), dummy, k::F]
+      dm := dummy
+      opsum [eval(x, k := kernel(i)$K, dm), dm, k::F]
 
     dvsum(l, x) ==
       k  := retract(second l)@K
@@ -237,11 +240,13 @@
 
     product(x:F, s:SegmentBinding F) ==
       k := kernel(variable s)$K
-      opdprod [eval(x,k,dummy), dummy, k::F, lo segment s, hi segment s]
+      dm := dummy
+      opdprod [eval(x,k,dm), dm, k::F, lo segment s, hi segment s]
 
     summation(x:F, s:SegmentBinding F) ==
       k := kernel(variable s)$K
-      opdsum [eval(x,k,dummy), dummy, k::F, lo segment s, hi segment s]
+      dm := dummy
+      opdsum [eval(x,k,dm), dm, k::F, lo segment s, hi segment s]
 
     smpfact(p, l) ==
       map(K2fact(#1, l), #1::F, p)$PolynomialCategoryLifting(
