Closed tueda closed 7 years ago
More details:
CF f;
CT t;
V p,q;
I i;
L F =
* Found:
+ p
+ f(p)
+ p(i)
* Not found:
+ p.p
+ p.q
+ t(p)
;
if (occurs(p));
P "%t";
endif;
.end
CF f;
CT t;
V p;
I i;
L F =
* Found:
+ i
+ f(i)
+ p(i)
* Freeze:
+ t(i)
;
if (occurs(i));
P "%t";
endif;
.end
Repaired
In the above examples, the problems for tensors still remain:
CT t;
V p;
L F =
* Not found:
+ t(p)
;
if (occurs(p)) P "%t";
.end
CT t;
I i;
L F =
* Freeze:
+ t(i)
;
if (occurs(i)) P "%t";
.end
The latter could have a more practical problem when one wants to detect something going wrong by checking occurrence of a symbol, for example,
S x;
I mu;
L F =
g_(1,mu)
;
* Check if the symbol "x" wrongly remains in the expression, unfortunately will freeze.
if (occurs(x)) P "%t";
.end
Still it has problems in the following test set:
*--#[ Issue74 :
S x,y; I i,j; V p,q; CT t; CF f,g;
L F1 = 1; L F2 = x; L F3 = 1/x; L F4 = i; L F5 = p; L F6 = p(i); L F7 = p(N1?); L F8 = p.p; L F9 = p.q; L F10 = t; L F11 = t(i); L F12 = t(p); L F13 = f; L F14 = f(1); L F15 = f(x); L F16 = f(-x); L F17 = f(1/x); L F18 = f(x+y); L F19 = f(i); L F20 = f(-i); L F21 = f(i+j); L F22 = f(p); L F23 = f(-p); L F24 = f(p+q); L F25 = f(p(i)); L F26 = f(p(N1?)); L F27 = f(p.p); L F28 = f(p.q); L F29 = f(t); L F30 = f(t(i)); L F31 = f(t(p)); L F32 = g(f(x)); L F33 = g(f(i)); L F34 = g(f(p)); L F35 = g(f(t)); L F36 = g(g(f)); L F37 = g(i,p); L F38 = g(1,i,p); L F39 = g(1,g(2,3-f(x))+g(t(p),t(i)));
if (occurs(x)) multiply a(1); if (occurs(i)) multiply a(2); if (occurs(p)) multiply a(3); if (occurs(t)) multiply a(4); if (occurs(f)) multiply a(5); chainin a;
antiputinside acc,a; id acc(?a) = 1;
P; .end assert succeeded? assert result("F1") =~ expr("1") assert result("F2") =~ expr("a(1)") assert result("F3") =~ expr("a(1)") assert result("F4") =~ expr("a(2)") assert result("F5") =~ expr("a(3)") assert result("F6") =~ expr("a(2,3)") assert result("F7") =~ expr("a(3)") assert result("F8") =~ expr("a(3)") assert result("F9") =~ expr("a(3)") assert result("F10") =~ expr("a(4)") assert result("F11") =~ expr("a(2,4)") assert result("F12") =~ expr("a(3,4)") assert result("F13") =~ expr("a(5)") assert result("F14") =~ expr("a(5)") assert result("F15") =~ expr("a(1,5)") assert result("F16") =~ expr("a(1,5)") assert result("F17") =~ expr("a(1,5)") assert result("F18") =~ expr("a(1,5)") assert result("F19") =~ expr("a(2,5)") assert result("F20") =~ expr("a(2,5)") assert result("F21") =~ expr("a(2,5)") assert result("F22") =~ expr("a(3,5)") assert result("F23") =~ expr("a(3,5)") assert result("F24") =~ expr("a(3,5)") assert result("F25") =~ expr("a(2,3,5)") assert result("F26") =~ expr("a(3,5)") assert result("F27") =~ expr("a(3,5)") assert result("F28") =~ expr("a(3,5)") assert result("F29") =~ expr("a(4,5)") assert result("F30") =~ expr("a(2,4,5)") assert result("F31") =~ expr("a(3,4,5)") assert result("F32") =~ expr("a(1,5)") assert result("F33") =~ expr("a(2,5)") assert result("F34") =~ expr("a(3,5)") assert result("F35") =~ expr("a(4,5)") assert result("F36") =~ expr("a(5)") assert result("F37") =~ expr("a(2,3)") assert result("F38") =~ expr("a(2,3)") assert result("F39") =~ expr("a(1,2,3,4,5)") *--#] Issue74 :
Update (3 Nov 2016)
occurs()
still have a problem with tensors. See below.The following program doesn't print the term: