1% Test only multipliation:
2easy1 := (x1+1*x2)*(x1-1*x2);
3
4
5           2     2
6easy1 := x1  - x2
7
8easy2 := (a()*partial(x1)+b())*(c()*partial(x1)+d());
9
10
11                              2
12easy2 := (a()*c())*partial(x1)
13
14 + (a()*d() + a()*diff(c(),x1,1) + b()*c())*partial(x1)
15
16 + (a()*diff(d(),x1,1) + b()*d())
17
18
19% Domain for the next factorizations:
20lpdoset lpdoweyl(1,x1,x2);
21
22
23{-1}
24
25
26% Not really binomial but caused problems at some point:
27b3 := (a-partial(x1))*(a+partial(x1));
28
29
30                    2    2
31b3 :=  - partial(x1)  + a
32
33lpdofactorize b3;
34
35
36{{partial(x1) + abs(a), - partial(x1) + abs(a)}}
37
38
39% Differential binomial formulas:
40bin1 := (a()+partial(x1))*(a()+partial(x1));
41
42
43                   2                                                           2
44bin1 := partial(x1)  + (2*a_00_ + 2*a_01_*x2 + 2*a_10_*x1)*partial(x1) + (a_00_
45
46                                                 2   2
47    + 2*a_00_*a_01_*x2 + 2*a_00_*a_10_*x1 + a_01_ *x2  + 2*a_01_*a_10_*x1*x2
48
49           2   2
50    + a_10_ *x1  + a_10_)
51
52lpdofactorize bin1;
53
54
55{{partial(x1) + (a_00_ + a_01_*x2 + a_10_*x1),partial(x1)
56
57   + (a_00_ + a_01_*x2 + a_10_*x1)}}
58
59bin2 := (a()-partial(x1))*(a()-partial(x1));
60
61
62                   2
63bin2 := partial(x1)  + ( - 2*a_00_ - 2*a_01_*x2 - 2*a_10_*x1)*partial(x1) + (
64
65        2                                              2   2
66   a_00_  + 2*a_00_*a_01_*x2 + 2*a_00_*a_10_*x1 + a_01_ *x2
67
68                                 2   2
69    + 2*a_01_*a_10_*x1*x2 + a_10_ *x1  - a_10_)
70
71lpdofactorize bin2;
72
73
74{{partial(x1) + ( - a_00_ - a_01_*x2 - a_10_*x1),
75
76  partial(x1) + ( - a_00_ - a_01_*x2 - a_10_*x1)}}
77
78bin3 := (a()-partial(x1))*(a()+partial(x1));
79
80
81                      2         2
82bin3 :=  - partial(x1)  + (a_00_  + 2*a_00_*a_01_*x2 + 2*a_00_*a_10_*x1
83
84           2   2                              2   2
85    + a_01_ *x2  + 2*a_01_*a_10_*x1*x2 + a_10_ *x1  - a_10_)
86
87lpdofactorize bin3;
88
89
90{{partial(x1) + ( - a_00_ - a_01_*x2 - a_10_*x1),
91
92   - partial(x1) + ( - a_00_ - a_01_*x2 - a_10_*x1)}}
93
94
95% Beals-Kartashova 2005, Section 5.3, special case
96bkf := (partial(x1)+partial(x2)+(a10-a01)/2) *
97   (partial(x1)-partial(x2)+(a10+a01)/2);
98
99
100                  2              2
101bkf := partial(x1)  - partial(x2)  + a10*partial(x1) + a01*partial(x2)
102
103          2      2
104     - a01  + a10
105 + ----------------
106          4
107
108lpdofactorize bkf;
109
110
111                                - a01 + a10
112{{partial(x1) + partial(x2) + --------------,partial(x1) - partial(x2)
113                                    2
114
115      a01 + a10
116   + -----------}}
117          2
118
119
120% Ad hoc example:
121sth := (partial(x1)+partial(x2)+(a10+a01)) *
122   (partial(x1)-partial(x2)+(a10+a01));
123
124
125                  2              2
126sth := partial(x1)  - partial(x2)  + (2*a01 + 2*a10)*partial(x1)
127
128       2                  2
129 + (a01  + 2*a01*a10 + a10 )
130
131lpdofactorize sth;
132
133
134{{partial(x1) + partial(x2) + (a01 + a10),partial(x1) - partial(x2)
135
136   + (a01 + a10)}}
137
138
139% Blumberg 1912:
140p := partial(x1)+x1*partial(x2);
141
142
143p := partial(x1) + x1*partial(x2)
144
145q := partial(x1)+1;
146
147
148q := partial(x1) + 1
149
150r := partial(x1)^2+x1*partial(x1)*partial(x2)+partial(x1)+
151   (2+x1)*partial(x2);
152
153
154r :=
155
156           2
157partial(x1)  + x1*partial(x1)*partial(x2) + partial(x1) + (x1 + 2)*partial(x2)
158
159d := partial(x1)^3+x1*partial(x1)^2*partial(x2)+2*partial(x1)^2+
160   2*(x1+1)*partial(x1)*partial(x2)+(x1+2)*partial(x2)+partial(x1);
161
162
163                3                 2                            2
164d := partial(x1)  + x1*partial(x1) *partial(x2) + 2*partial(x1)
165
166 + (2*x1 + 2)*partial(x1)*partial(x2) + partial(x1) + (x1 + 2)*partial(x2)
167
168d - q*q*p;
169
170
1710
172
173d - r*q;
174
175
1760
177
178lpdofactorize(d,a()*partial(x1)+b());
179
180
181                             2
182{{partial(x1) + 1,partial(x1)  + x1*partial(x1)*partial(x2) + partial(x1)
183
184   + (x1 + 1)*partial(x2)}}
185
186
187% Approximate factorisations:
188
189% Blumberg 1912:
190lpdofactorizex(r,-1<x1<1 and -1<x2<1,q,p);
191
192
193{{epsilon - 1 >= 0,{partial(x1) + 1,partial(x1)}}}
194
195
196sol1 := lpdofactorizex(r,-1<x1<1 and -1<x2<1,q,partial(x1)+a()*partial(x2),1);
197
198
199                                               3*x1
200sol1 := {{true,{partial(x1) + 1,partial(x1) + ------*partial(x2)}}}
201                                                2
202
203r - first second first sol1 * second second first sol1;
204
205
206  - x1                              - x1 + 1
207-------*partial(x1)*partial(x2) + -----------*partial(x2)
208   2                                   2
209
210
211sol2 := lpdofactorizex(r,-2<x1<2 and -2<x2<2,q,partial(x1)+a()*partial(x2),1);
212
213
214sol2 := {{true,{partial(x1) + 1,partial(x1) + x1*partial(x2)}}}
215
216r - first second first sol2 * second second first sol2;
217
218
219partial(x2)
220
221
222end;
223
224Tested on x86_64-pc-windows CSL
225Time (counter 1): 750 ms  plus GC time: 47 ms
226
227End of Lisp run after 0.75+0.14 seconds
228real 1.13
229user 0.01
230sys 0.06
231