1
2(SDEFUN |GROUPP;groupPresentation;LL$;1|
3        ((|gens1| |List| (|NonNegativeInteger|))
4         (|rels1| |List| (|List| (|Integer|))) ($ $))
5        (SPROG
6         ((#1=#:G459 NIL) (|r| NIL) (#2=#:G458 NIL)
7          (|g| (|PrimitiveArray| (|NonNegativeInteger|))))
8         (SEQ (LETT |g| (SPADCALL |gens1| (QREFELT $ 9)))
9              (EXIT
10               (CONS |g|
11                     (PROGN
12                      (LETT #2# NIL)
13                      (SEQ (LETT |r| NIL) (LETT #1# |rels1|) G190
14                           (COND
15                            ((OR (ATOM #1#) (PROGN (LETT |r| (CAR #1#)) NIL))
16                             (GO G191)))
17                           (SEQ
18                            (EXIT
19                             (COND
20                              ((NULL (NULL |r|)) (LETT #2# (CONS |r| #2#))))))
21                           (LETT #1# (CDR #1#)) (GO G190) G191
22                           (EXIT (NREVERSE #2#)))))))))
23
24(SDEFUN |GROUPP;groupPresentation;L$;2|
25        ((|gens1| |List| (|NonNegativeInteger|)) ($ $))
26        (SPROG
27         ((|rels2| (|List| (|List| (|Integer|))))
28          (|g| (|PrimitiveArray| (|NonNegativeInteger|))))
29         (SEQ (LETT |g| (SPADCALL |gens1| (QREFELT $ 9))) (LETT |rels2| NIL)
30              (EXIT (CONS |g| |rels2|)))))
31
32(SDEFUN |GROUPP;groupPresentation;$;3| (($ $))
33        (SPROG
34         ((|rels1| (|List| (|List| (|Integer|))))
35          (|gens1| (|List| (|NonNegativeInteger|))))
36         (SEQ (LETT |gens1| NIL) (LETT |rels1| NIL)
37              (EXIT (SPADCALL |gens1| |rels1| (QREFELT $ 11))))))
38
39(SDEFUN |GROUPP;mapGen|
40        ((|a| |Integer|)
41         (|ms| |List|
42          (|Record| (|:| |OldGen| (|NonNegativeInteger|))
43                    (|:| |NewGen| (|NonNegativeInteger|))))
44         ($ |Integer|))
45        (SPROG ((#1=#:G471 NIL) (#2=#:G472 NIL) (|m| NIL))
46               (SEQ
47                (EXIT
48                 (SEQ
49                  (SEQ (LETT |m| NIL) (LETT #2# |ms|) G190
50                       (COND
51                        ((OR (ATOM #2#) (PROGN (LETT |m| (CAR #2#)) NIL))
52                         (GO G191)))
53                       (SEQ
54                        (COND
55                         ((EQL (ABS |a|) (QCAR |m|))
56                          (PROGN (LETT #1# (QCDR |m|)) (GO #3=#:G470))))
57                        (EXIT
58                         (COND
59                          ((EQL (ABS |a|) (- (QCAR |m|)))
60                           (PROGN (LETT #1# (- (QCDR |m|))) (GO #3#))))))
61                       (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
62                  (|error|
63                   (SPADCALL
64                    (LIST "cant map " (STRINGIMAGE |a|) " in refactor")
65                    (QREFELT $ 16)))
66                  (EXIT |a|)))
67                #3# (EXIT #1#))))
68
69(SDEFUN |GROUPP;refactor;2$;5| ((|a| $) ($ $))
70        (SPROG
71         ((|gens1| (|List| (|NonNegativeInteger|))) (#1=#:G489 NIL) (|gn| NIL)
72          (#2=#:G488 NIL) (|rels1| (|List| (|List| (|Integer|))))
73          (|newRel| (|List| (|Integer|))) (|newEle| (|Integer|))
74          (#3=#:G487 NIL) (|ele| NIL) (#4=#:G486 NIL) (|rel| NIL)
75          (|gms|
76           (|List|
77            (|Record| (|:| |OldGen| (|NonNegativeInteger|))
78                      (|:| |NewGen| (|NonNegativeInteger|)))))
79          (|gm|
80           (|Record| (|:| |OldGen| (|NonNegativeInteger|))
81                     (|:| |NewGen| (|NonNegativeInteger|))))
82          (#5=#:G484 NIL) (|g| NIL) (#6=#:G485 NIL))
83         (SEQ (LETT |gms| NIL)
84              (SEQ (LETT |gn| 1)
85                   (LETT #6# (SPADCALL (QCAR |a|) (QREFELT $ 19)))
86                   (LETT |g| NIL)
87                   (LETT #5# (SPADCALL (QCAR |a|) (QREFELT $ 17))) G190
88                   (COND
89                    ((OR (ATOM #5#) (PROGN (LETT |g| (CAR #5#)) NIL)
90                         (|greater_SI| |gn| #6#))
91                     (GO G191)))
92                   (SEQ (LETT |gm| (CONS |g| |gn|))
93                        (EXIT
94                         (LETT |gms| (SPADCALL |gms| |gm| (QREFELT $ 22)))))
95                   (LETT #5# (PROG1 (CDR #5#) (LETT |gn| (|inc_SI| |gn|))))
96                   (GO G190) G191 (EXIT NIL))
97              (LETT |rels1| NIL)
98              (SEQ (LETT |rel| NIL) (LETT #4# (QCDR |a|)) G190
99                   (COND
100                    ((OR (ATOM #4#) (PROGN (LETT |rel| (CAR #4#)) NIL))
101                     (GO G191)))
102                   (SEQ (LETT |newRel| NIL)
103                        (SEQ (LETT |ele| NIL) (LETT #3# |rel|) G190
104                             (COND
105                              ((OR (ATOM #3#)
106                                   (PROGN (LETT |ele| (CAR #3#)) NIL))
107                               (GO G191)))
108                             (SEQ
109                              (LETT |newEle| (|GROUPP;mapGen| |ele| |gms| $))
110                              (EXIT
111                               (LETT |newRel|
112                                     (SPADCALL |newRel| |newEle|
113                                               (QREFELT $ 25)))))
114                             (LETT #3# (CDR #3#)) (GO G190) G191 (EXIT NIL))
115                        (EXIT
116                         (LETT |rels1|
117                               (SPADCALL |rels1| |newRel| (QREFELT $ 26)))))
118                   (LETT #4# (CDR #4#)) (GO G190) G191 (EXIT NIL))
119              (LETT |gens1|
120                    (PROGN
121                     (LETT #2# NIL)
122                     (SEQ (LETT |gn| 1)
123                          (LETT #1# (SPADCALL (QCAR |a|) (QREFELT $ 19))) G190
124                          (COND ((|greater_SI| |gn| #1#) (GO G191)))
125                          (SEQ (EXIT (LETT #2# (CONS |gn| #2#))))
126                          (LETT |gn| (|inc_SI| |gn|)) (GO G190) G191
127                          (EXIT (NREVERSE #2#)))))
128              (EXIT (SPADCALL |gens1| |rels1| (QREFELT $ 11))))))
129
130(SDEFUN |GROUPP;=;2$B;6| ((|a| $) (|b| $) ($ |Boolean|))
131        (SPROG
132         ((|brs| #1=(|List| (|List| (|Integer|)))) (|ars| #1#) (#2=#:G494 NIL)
133          (|bgs| #3=(|List| (|NonNegativeInteger|))) (|ags| #3#) (|br| ($))
134          (|ar| ($)))
135         (SEQ
136          (EXIT
137           (SEQ (LETT |ar| (SPADCALL |a| (QREFELT $ 27)))
138                (LETT |br| (SPADCALL |b| (QREFELT $ 27)))
139                (LETT |ags| (SPADCALL (QCAR |ar|) (QREFELT $ 17)))
140                (LETT |bgs| (SPADCALL (QCAR |br|) (QREFELT $ 17)))
141                (COND
142                 ((SPADCALL (SPADCALL |ags| (QREFELT $ 29))
143                            (SPADCALL |bgs| (QREFELT $ 29)) (QREFELT $ 31))
144                  (PROGN (LETT #2# NIL) (GO #4=#:G493))))
145                (LETT |ars| (SPADCALL (QCDR |ar|) (QREFELT $ 32)))
146                (LETT |brs| (SPADCALL (QCDR |br|) (QREFELT $ 32)))
147                (EXIT
148                 (SPADCALL (SPADCALL |ars| (QREFELT $ 34))
149                           (SPADCALL |brs| (QREFELT $ 34)) (QREFELT $ 35)))))
150          #4# (EXIT #2#))))
151
152(SDEFUN |GROUPP;outputGen| ((|i2| |Integer|) ($ |OutputForm|))
153        (SPROG
154         ((#1=#:G498 NIL) (|n| (|OutputForm|)) (|letters| (|String|))
155          (|i| #2=(|Integer|)) (|suffix| #3=(|Integer|))
156          (|#G18| (|Record| (|:| |quotient| #3#) (|:| |remainder| #2#))))
157         (SEQ
158          (EXIT
159           (SEQ
160            (PROGN
161             (LETT |#G18| (DIVIDE2 (ABS |i2|) 25))
162             (LETT |suffix| (QCAR |#G18|))
163             (LETT |i| (QCDR |#G18|))
164             |#G18|)
165            (LETT |letters| "eabcdfghijklmnopqrstuvwxyz")
166            (LETT |n|
167                  (SPADCALL (SPADCALL |letters| (+ |i| 1) (QREFELT $ 38))
168                            (QREFELT $ 40)))
169            (COND
170             ((> |suffix| 0)
171              (LETT |n|
172                    (SPADCALL |n| (SPADCALL (+ |suffix| 1) (QREFELT $ 41))
173                              (QREFELT $ 42)))))
174            (COND
175             ((< |i2| 0)
176              (PROGN
177               (LETT #1#
178                     (SPADCALL (SPADCALL "-" (QREFELT $ 43)) |n|
179                               (QREFELT $ 42)))
180               (GO #4=#:G497))))
181            (EXIT |n|)))
182          #4# (EXIT #1#))))
183
184(SDEFUN |GROUPP;outputRel| ((|r| |List| (|Integer|)) ($ |OutputForm|))
185        (SPROG
186         ((|seperator| #1=(|OutputForm|)) (|eleout| #1#)
187          (|newterm| (|OutputForm|)) (#2=#:G503 NIL) (|ele| NIL))
188         (SEQ (LETT |eleout| (SPADCALL "" (QREFELT $ 43)))
189              (LETT |seperator| (SPADCALL " " (QREFELT $ 43)))
190              (SEQ (LETT |ele| NIL) (LETT #2# |r|) G190
191                   (COND
192                    ((OR (ATOM #2#) (PROGN (LETT |ele| (CAR #2#)) NIL))
193                     (GO G191)))
194                   (SEQ (LETT |newterm| (|GROUPP;outputGen| |ele| $))
195                        (LETT |eleout|
196                              (SPADCALL (LIST |eleout| |seperator| |newterm|)
197                                        (QREFELT $ 44)))
198                        (EXIT
199                         (LETT |seperator| (SPADCALL "*" (QREFELT $ 43)))))
200                   (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
201              (EXIT |eleout|))))
202
203(SDEFUN |GROUPP;outputRelList|
204        ((|i2| |List| (|List| (|Integer|))) ($ |OutputForm|))
205        (SPROG
206         ((#1=#:G508 NIL) (|rels1| (|List| (|OutputForm|))) (#2=#:G509 NIL)
207          (|r| NIL))
208         (SEQ
209          (EXIT
210           (SEQ (LETT |rels1| NIL)
211                (SEQ (LETT |r| NIL) (LETT #2# |i2|) G190
212                     (COND
213                      ((OR (ATOM #2#) (PROGN (LETT |r| (CAR #2#)) NIL))
214                       (GO G191)))
215                     (SEQ
216                      (EXIT
217                       (LETT |rels1|
218                             (SPADCALL |rels1| (|GROUPP;outputRel| |r| $)
219                                       (QREFELT $ 46)))))
220                     (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
221                (COND
222                 ((> (LENGTH |rels1|) 0)
223                  (PROGN
224                   (LETT #1# (SPADCALL |rels1| (QREFELT $ 47)))
225                   (GO #3=#:G507))))
226                (EXIT (SPADCALL " " (QREFELT $ 43)))))
227          #3# (EXIT #1#))))
228
229(SDEFUN |GROUPP;outputGenList|
230        ((|ps| |List| (|NonNegativeInteger|)) ($ |OutputForm|))
231        (SPROG
232         ((#1=#:G514 NIL) (|gens1| (|List| (|OutputForm|))) (#2=#:G515 NIL)
233          (|p| NIL))
234         (SEQ
235          (EXIT
236           (SEQ (LETT |gens1| NIL)
237                (SEQ (LETT |p| NIL) (LETT #2# |ps|) G190
238                     (COND
239                      ((OR (ATOM #2#) (PROGN (LETT |p| (CAR #2#)) NIL))
240                       (GO G191)))
241                     (SEQ
242                      (EXIT
243                       (LETT |gens1|
244                             (SPADCALL |gens1| (|GROUPP;outputGen| |p| $)
245                                       (QREFELT $ 46)))))
246                     (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
247                (COND
248                 ((> (LENGTH |gens1|) 0)
249                  (PROGN
250                   (LETT #1# (SPADCALL |gens1| (QREFELT $ 48)))
251                   (GO #3=#:G513))))
252                (EXIT (SPADCALL " " (QREFELT $ 43)))))
253          #3# (EXIT #1#))))
254
255(SDEFUN |GROUPP;indexesOfRelUsingGen|
256        ((|s| $) (|gen| |NonNegativeInteger|)
257         ($ |List| (|NonNegativeInteger|)))
258        (SPROG
259         ((|res| (|List| (|NonNegativeInteger|))) (#1=#:G522 NIL) (|rel| NIL)
260          (#2=#:G523 NIL) (|reln| NIL) (|r| (|List| (|List| (|Integer|)))))
261         (SEQ (LETT |res| NIL) (LETT |r| (QCDR |s|))
262              (SEQ (LETT |reln| 1) (LETT #2# (LENGTH |r|)) (LETT |rel| NIL)
263                   (LETT #1# |r|) G190
264                   (COND
265                    ((OR (ATOM #1#) (PROGN (LETT |rel| (CAR #1#)) NIL)
266                         (|greater_SI| |reln| #2#))
267                     (GO G191)))
268                   (SEQ
269                    (COND
270                     ((SPADCALL |gen| |rel| (QREFELT $ 49))
271                      (LETT |res| (SPADCALL |res| |reln| (QREFELT $ 50)))))
272                    (EXIT
273                     (COND
274                      ((> |gen| 0)
275                       (COND
276                        ((SPADCALL (- |gen|) |rel| (QREFELT $ 49))
277                         (LETT |res|
278                               (SPADCALL |res| |reln| (QREFELT $ 50)))))))))
279                   (LETT #1# (PROG1 (CDR #1#) (LETT |reln| (|inc_SI| |reln|))))
280                   (GO G190) G191 (EXIT NIL))
281              (EXIT |res|))))
282
283(SDEFUN |GROUPP;removeGen|
284        ((|gens1| |PrimitiveArray| (|NonNegativeInteger|))
285         (|val| |NonNegativeInteger|)
286         ($ |PrimitiveArray| (|NonNegativeInteger|)))
287        (SPADCALL |val| |gens1| (QREFELT $ 51)))
288
289(SDEFUN |GROUPP;removeGen2|
290        ((|rels1| |List| (|List| (|Integer|))) (|val| |NonNegativeInteger|)
291         ($ |List| (|List| (|Integer|))))
292        (SPROG ((#1=#:G528 NIL) (|rel| NIL) (#2=#:G527 NIL))
293               (SEQ
294                (PROGN
295                 (LETT #2# NIL)
296                 (SEQ (LETT |rel| NIL) (LETT #1# |rels1|) G190
297                      (COND
298                       ((OR (ATOM #1#) (PROGN (LETT |rel| (CAR #1#)) NIL))
299                        (GO G191)))
300                      (SEQ
301                       (EXIT
302                        (LETT #2#
303                              (CONS
304                               (SPADCALL (- |val|)
305                                         (SPADCALL |val| |rel| (QREFELT $ 52))
306                                         (QREFELT $ 52))
307                               #2#))))
308                      (LETT #1# (CDR #1#)) (GO G190) G191
309                      (EXIT (NREVERSE #2#)))))))
310
311(SDEFUN |GROUPP;replaceGen|
312        ((|rels1| |List| (|List| (|Integer|))) (|val1| |NonNegativeInteger|)
313         (|val2| |Integer|) ($ |List| (|List| (|Integer|))))
314        (SPROG
315         ((|rels2| (|List| (|List| (|Integer|)))) (|rel2| (|List| (|Integer|)))
316          (|e| (|Integer|)) (#1=#:G537 NIL) (|ele| NIL) (#2=#:G536 NIL)
317          (|rel| NIL))
318         (SEQ (LETT |rels2| NIL)
319              (SEQ (LETT |rel| NIL) (LETT #2# |rels1|) G190
320                   (COND
321                    ((OR (ATOM #2#) (PROGN (LETT |rel| (CAR #2#)) NIL))
322                     (GO G191)))
323                   (SEQ (LETT |rel2| NIL)
324                        (SEQ (LETT |ele| NIL) (LETT #1# |rel|) G190
325                             (COND
326                              ((OR (ATOM #1#)
327                                   (PROGN (LETT |ele| (CAR #1#)) NIL))
328                               (GO G191)))
329                             (SEQ (LETT |e| (ABS |ele|))
330                                  (COND ((EQL |e| |val1|) (LETT |e| |val2|)))
331                                  (COND ((< |ele| 0) (LETT |e| (- |e|))))
332                                  (EXIT
333                                   (LETT |rel2|
334                                         (SPADCALL |rel2| |e|
335                                                   (QREFELT $ 25)))))
336                             (LETT #1# (CDR #1#)) (GO G190) G191 (EXIT NIL))
337                        (EXIT
338                         (LETT |rels2|
339                               (SPADCALL |rels2| |rel2| (QREFELT $ 26)))))
340                   (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
341              (EXIT |rels2|))))
342
343(SDEFUN |GROUPP;TTRemoveGeneratorIfIdentity|
344        ((|s| $) (|trace| |Boolean|) ($ $))
345        (SPROG
346         ((|rels1| (|List| (|List| (|Integer|))))
347          (|gens1| (|PrimitiveArray| (|NonNegativeInteger|))) (#1=#:G543 NIL)
348          (|toBeRemoved| (|NonNegativeInteger|)) (#2=#:G544 NIL) (|rel| NIL))
349         (SEQ
350          (EXIT
351           (SEQ (LETT |gens1| (QCAR |s|)) (LETT |rels1| (QCDR |s|))
352                (LETT |toBeRemoved| 0)
353                (SEQ (LETT |rel| NIL) (LETT #2# |rels1|) G190
354                     (COND
355                      ((OR (ATOM #2#) (PROGN (LETT |rel| (CAR #2#)) NIL))
356                       (GO G191)))
357                     (SEQ
358                      (EXIT
359                       (COND
360                        ((EQL (LENGTH |rel|) 1)
361                         (COND
362                          ((EQL |toBeRemoved| 0)
363                           (LETT |toBeRemoved| (ABS (|SPADfirst| |rel|)))))))))
364                     (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
365                (COND
366                 ((EQL |toBeRemoved| 0) (PROGN (LETT #1# |s|) (GO #3=#:G542))))
367                (COND
368                 (|trace|
369                  (SPADCALL
370                   (SPADCALL
371                    (LIST (SPADCALL "simplify: generator '" (QREFELT $ 43))
372                          (|GROUPP;outputGen| |toBeRemoved| $)
373                          (SPADCALL "' is identity so remove it"
374                                    (QREFELT $ 43)))
375                    (QREFELT $ 44))
376                   (QREFELT $ 54))))
377                (LETT |gens1| (|GROUPP;removeGen| |gens1| |toBeRemoved| $))
378                (LETT |rels1| (|GROUPP;removeGen2| |rels1| |toBeRemoved| $))
379                (COND
380                 (|trace|
381                  (SPADCALL (|GROUPP;outputRelList| |rels1| $)
382                            (QREFELT $ 54))))
383                (EXIT (CONS |gens1| |rels1|))))
384          #3# (EXIT #1#))))
385
386(SDEFUN |GROUPP;TTRenameGenerator| ((|s| $) (|trace| |Boolean|) ($ $))
387        (SPROG
388         ((|rels1| (|List| (|List| (|Integer|))))
389          (|gens1| (|PrimitiveArray| (|NonNegativeInteger|))) (#1=#:G552 NIL)
390          (|replaceFrom| (|NonNegativeInteger|)) (|replaceTo| (|Integer|))
391          (#2=#:G553 NIL) (|rel| NIL))
392         (SEQ
393          (EXIT
394           (SEQ (LETT |gens1| (QCAR |s|)) (LETT |rels1| (QCDR |s|))
395                (LETT |replaceFrom| 0) (LETT |replaceTo| 0)
396                (SEQ (LETT |rel| NIL) (LETT #2# |rels1|) G190
397                     (COND
398                      ((OR (ATOM #2#) (PROGN (LETT |rel| (CAR #2#)) NIL))
399                       (GO G191)))
400                     (SEQ
401                      (EXIT
402                       (COND
403                        ((EQL (LENGTH |rel|) 2)
404                         (COND
405                          ((EQL |replaceFrom| 0)
406                           (SEQ
407                            (LETT |replaceTo| (SPADCALL |rel| (QREFELT $ 55)))
408                            (LETT |replaceFrom| (ABS (|SPADfirst| |rel|)))
409                            (COND
410                             ((> (|SPADfirst| |rel|) 0)
411                              (LETT |replaceTo| (- |replaceTo|))))
412                            (EXIT
413                             (COND
414                              ((EQL |replaceFrom| (ABS |replaceTo|))
415                               (LETT |replaceFrom| 0)))))))))))
416                     (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
417                (COND
418                 ((EQL |replaceFrom| 0) (PROGN (LETT #1# |s|) (GO #3=#:G551))))
419                (COND
420                 (|trace|
421                  (SPADCALL
422                   (SPADCALL
423                    (LIST (SPADCALL "simplify: generator '" (QREFELT $ 43))
424                          (|GROUPP;outputGen| |replaceFrom| $)
425                          (SPADCALL "' is replaced by '" (QREFELT $ 43))
426                          (|GROUPP;outputGen| |replaceTo| $)
427                          (SPADCALL "'" (QREFELT $ 43)))
428                    (QREFELT $ 44))
429                   (QREFELT $ 54))))
430                (LETT |gens1| (|GROUPP;removeGen| |gens1| |replaceFrom| $))
431                (LETT |rels1|
432                      (|GROUPP;replaceGen| |rels1| |replaceFrom| |replaceTo|
433                       $))
434                (COND
435                 (|trace|
436                  (SPADCALL (|GROUPP;outputRelList| |rels1| $)
437                            (QREFELT $ 54))))
438                (EXIT (CONS |gens1| |rels1|))))
439          #3# (EXIT #1#))))
440
441(SDEFUN |GROUPP;TTRemoveEmpty| ((|s| $) (|trace| |Boolean|) ($ $))
442        (SPROG
443         ((|rels2| (|List| (|List| (|Integer|)))) (#1=#:G558 NIL) (|rel| NIL)
444          (|rels1| (|List| (|List| (|Integer|))))
445          (|gens1| (|PrimitiveArray| (|NonNegativeInteger|))))
446         (SEQ (LETT |gens1| (QCAR |s|)) (LETT |rels1| (QCDR |s|))
447              (LETT |rels2| NIL)
448              (SEQ (LETT |rel| NIL) (LETT #1# |rels1|) G190
449                   (COND
450                    ((OR (ATOM #1#) (PROGN (LETT |rel| (CAR #1#)) NIL))
451                     (GO G191)))
452                   (SEQ
453                    (EXIT
454                     (COND
455                      ((NULL (NULL |rel|))
456                       (LETT |rels2|
457                             (SPADCALL |rels2| |rel| (QREFELT $ 26)))))))
458                   (LETT #1# (CDR #1#)) (GO G190) G191 (EXIT NIL))
459              (EXIT (CONS |gens1| |rels2|)))))
460
461(SDEFUN |GROUPP;TTRemoveZero| ((|s| $) (|trace| |Boolean|) ($ $))
462        (SPROG
463         ((|rels1| (|List| (|List| (|Integer|))))
464          (|gens1| (|PrimitiveArray| (|NonNegativeInteger|))))
465         (SEQ (LETT |gens1| (QCAR |s|)) (LETT |rels1| (QCDR |s|))
466              (LETT |gens1| (|GROUPP;removeGen| |gens1| 0 $))
467              (LETT |rels1| (|GROUPP;removeGen2| |rels1| 0 $))
468              (EXIT (CONS |gens1| |rels1|)))))
469
470(SDEFUN |GROUPP;TTRemoveEleTimesInverse| ((|s| $) (|trace| |Boolean|) ($ $))
471        (SPROG
472         ((|rels2| (|List| (|List| (|Integer|)))) (|rel2| (|List| (|Integer|)))
473          (|lastele| (|Integer|)) (|changed| (|Boolean|)) (#1=#:G576 NIL)
474          (|ele| NIL) (#2=#:G575 NIL) (|rel| NIL)
475          (|rels1| (|List| (|List| (|Integer|))))
476          (|gens1| (|PrimitiveArray| (|NonNegativeInteger|))))
477         (SEQ (LETT |gens1| (QCAR |s|)) (LETT |rels1| (QCDR |s|))
478              (LETT |rels2| NIL) (LETT |changed| NIL)
479              (SEQ (LETT |rel| NIL) (LETT #2# |rels1|) G190
480                   (COND
481                    ((OR (ATOM #2#) (PROGN (LETT |rel| (CAR #2#)) NIL))
482                     (GO G191)))
483                   (SEQ (LETT |rel2| NIL) (LETT |lastele| 0)
484                        (SEQ (LETT |ele| NIL) (LETT #1# |rel|) G190
485                             (COND
486                              ((OR (ATOM #1#)
487                                   (PROGN (LETT |ele| (CAR #1#)) NIL))
488                               (GO G191)))
489                             (SEQ
490                              (EXIT
491                               (COND
492                                ((EQL (ABS |ele|) (ABS |lastele|))
493                                 (COND
494                                  ((SPADCALL (SPADCALL |ele| (QREFELT $ 56))
495                                             (SPADCALL |lastele|
496                                                       (QREFELT $ 56))
497                                             (QREFELT $ 57))
498                                   (SEQ
499                                    (COND
500                                     (|trace|
501                                      (SPADCALL
502                                       (SPADCALL
503                                        (LIST
504                                         (SPADCALL "simplify: generator '"
505                                                   (QREFELT $ 43))
506                                         (|GROUPP;outputGen| |ele| $)
507                                         (SPADCALL
508                                          "' is adjacent to its inverse"
509                                          (QREFELT $ 43)))
510                                        (QREFELT $ 44))
511                                       (QREFELT $ 54))))
512                                    (LETT |changed| 'T)
513                                    (EXIT (LETT |lastele| 0))))
514                                  ('T
515                                   (SEQ
516                                    (COND
517                                     ((SPADCALL |lastele| 0 (QREFELT $ 57))
518                                      (LETT |rel2|
519                                            (SPADCALL |rel2| |lastele|
520                                                      (QREFELT $ 25)))))
521                                    (EXIT (LETT |lastele| |ele|))))))
522                                ('T
523                                 (SEQ
524                                  (COND
525                                   ((SPADCALL |lastele| 0 (QREFELT $ 57))
526                                    (LETT |rel2|
527                                          (SPADCALL |rel2| |lastele|
528                                                    (QREFELT $ 25)))))
529                                  (EXIT (LETT |lastele| |ele|)))))))
530                             (LETT #1# (CDR #1#)) (GO G190) G191 (EXIT NIL))
531                        (COND
532                         ((SPADCALL |lastele| 0 (QREFELT $ 57))
533                          (LETT |rel2|
534                                (SPADCALL |rel2| |lastele| (QREFELT $ 25)))))
535                        (EXIT
536                         (COND
537                          ((NULL (NULL |rel2|))
538                           (LETT |rels2|
539                                 (SPADCALL |rels2| |rel2| (QREFELT $ 26)))))))
540                   (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
541              (COND
542               (|trace|
543                (COND
544                 (|changed|
545                  (SPADCALL (|GROUPP;outputRelList| |rels2| $)
546                            (QREFELT $ 54))))))
547              (EXIT (CONS |gens1| |rels2|)))))
548
549(SDEFUN |GROUPP;invertRelation|
550        ((|relationIn| |List| (|Integer|)) ($ |List| (|Integer|)))
551        (SPROG
552         ((|relationOut| (|List| (|Integer|))) (#1=#:G580 NIL) (|ele| NIL))
553         (SEQ (LETT |relationOut| NIL)
554              (SEQ (LETT |ele| NIL) (LETT #1# |relationIn|) G190
555                   (COND
556                    ((OR (ATOM #1#) (PROGN (LETT |ele| (CAR #1#)) NIL))
557                     (GO G191)))
558                   (SEQ
559                    (EXIT (LETT |relationOut| (CONS (- |ele|) |relationOut|))))
560                   (LETT #1# (CDR #1#)) (GO G190) G191 (EXIT NIL))
561              (EXIT |relationOut|))))
562
563(SDEFUN |GROUPP;cycleRelation|
564        ((|relationIn| |List| (|Integer|)) ($ |List| (|Integer|)))
565        (SPROG ((|relationOut| (|List| (|Integer|))))
566               (SEQ
567                (LETT |relationOut|
568                      (SPADCALL (CDR |relationIn|) (|SPADfirst| |relationIn|)
569                                (QREFELT $ 25)))
570                (EXIT |relationOut|))))
571
572(SDEFUN |GROUPP;relationEquivalent|
573        ((|relA| |List| (|Integer|)) (|relB| |List| (|Integer|)) ($ |Boolean|))
574        (SPROG
575         ((#1=#:G590 NIL) (|relBCycle| (|List| (|Integer|))) (#2=#:G591 NIL)
576          (|n| NIL))
577         (SEQ
578          (EXIT
579           (SEQ
580            (COND
581             ((SPADCALL (LENGTH |relA|) (LENGTH |relB|) (QREFELT $ 58))
582              (PROGN (LETT #1# NIL) (GO #3=#:G589))))
583            (COND
584             ((SPADCALL |relA| |relB| (QREFELT $ 59))
585              (PROGN (LETT #1# 'T) (GO #3#))))
586            (COND
587             ((SPADCALL |relA| (|GROUPP;invertRelation| |relB| $)
588                        (QREFELT $ 59))
589              (PROGN (LETT #1# 'T) (GO #3#))))
590            (LETT |relBCycle| (SPADCALL |relB| (QREFELT $ 60)))
591            (SEQ (LETT |n| 1) (LETT #2# (LENGTH |relA|)) G190
592                 (COND ((|greater_SI| |n| #2#) (GO G191)))
593                 (SEQ (LETT |relBCycle| (|GROUPP;cycleRelation| |relBCycle| $))
594                      (COND
595                       ((SPADCALL |relA| |relBCycle| (QREFELT $ 59))
596                        (PROGN (LETT #1# 'T) (GO #3#))))
597                      (EXIT
598                       (COND
599                        ((SPADCALL |relA|
600                                   (|GROUPP;invertRelation| |relBCycle| $)
601                                   (QREFELT $ 59))
602                         (PROGN (LETT #1# 'T) (GO #3#))))))
603                 (LETT |n| (|inc_SI| |n|)) (GO G190) G191 (EXIT NIL))
604            (EXIT NIL)))
605          #3# (EXIT #1#))))
606
607(SDEFUN |GROUPP;TTRemoveDuplicateRelation| ((|s| $) (|trace| |Boolean|) ($ $))
608        (SPROG
609         ((|rels2| (|List| (|List| (|Integer|)))) (|include| (|Boolean|))
610          (#1=#:G602 NIL) (|relb| NIL) (#2=#:G603 NIL) (|nrelb| NIL)
611          (#3=#:G600 NIL) (|rela| NIL) (#4=#:G601 NIL) (|nrela| NIL)
612          (|rels1| (|List| (|List| (|Integer|))))
613          (|gens1| (|PrimitiveArray| (|NonNegativeInteger|))))
614         (SEQ (LETT |gens1| (QCAR |s|)) (LETT |rels1| (QCDR |s|))
615              (LETT |rels2| NIL)
616              (SEQ (LETT |nrela| 1) (LETT #4# (LENGTH |rels1|))
617                   (LETT |rela| NIL) (LETT #3# |rels1|) G190
618                   (COND
619                    ((OR (ATOM #3#) (PROGN (LETT |rela| (CAR #3#)) NIL)
620                         (|greater_SI| |nrela| #4#))
621                     (GO G191)))
622                   (SEQ (LETT |include| 'T)
623                        (SEQ (LETT |nrelb| 1) (LETT #2# (LENGTH |rels1|))
624                             (LETT |relb| NIL) (LETT #1# |rels1|) G190
625                             (COND
626                              ((OR (ATOM #1#)
627                                   (PROGN (LETT |relb| (CAR #1#)) NIL)
628                                   (|greater_SI| |nrelb| #2#))
629                               (GO G191)))
630                             (SEQ
631                              (EXIT
632                               (COND
633                                ((> |nrela| |nrelb|)
634                                 (COND
635                                  ((|GROUPP;relationEquivalent| |rela| |relb|
636                                    $)
637                                   (SEQ (LETT |include| NIL)
638                                        (EXIT
639                                         (COND
640                                          (|trace|
641                                           (SPADCALL
642                                            (SPADCALL
643                                             (SPADCALL
644                                              (SPADCALL
645                                               (SPADCALL
646                                                "TTRemoveDuplicateRelation duplicate found "
647                                                (QREFELT $ 43))
648                                               (SPADCALL |rela| (QREFELT $ 61))
649                                               (QREFELT $ 42))
650                                              (SPADCALL "=" (QREFELT $ 43))
651                                              (QREFELT $ 42))
652                                             (SPADCALL |relb| (QREFELT $ 61))
653                                             (QREFELT $ 42))
654                                            (QREFELT $ 54))))))))))))
655                             (LETT #1#
656                                   (PROG1 (CDR #1#)
657                                     (LETT |nrelb| (|inc_SI| |nrelb|))))
658                             (GO G190) G191 (EXIT NIL))
659                        (EXIT
660                         (COND
661                          (|include|
662                           (LETT |rels2|
663                                 (SPADCALL |rels2| |rela| (QREFELT $ 26)))))))
664                   (LETT #3#
665                         (PROG1 (CDR #3#) (LETT |nrela| (|inc_SI| |nrela|))))
666                   (GO G190) G191 (EXIT NIL))
667              (EXIT (CONS |gens1| |rels2|)))))
668
669(SDEFUN |GROUPP;TTMinimiseInverses| ((|s| $) (|trace| |Boolean|) ($ $))
670        (SPROG
671         ((|rels2| (|List| (|List| (|Integer|))))
672          (|numNonInverts| #1=(|NonNegativeInteger|)) (|numInverts| #1#)
673          (#2=#:G610 NIL) (|ele| NIL) (#3=#:G609 NIL) (|rel| NIL)
674          (|rels1| (|List| (|List| (|Integer|))))
675          (|gens1| (|PrimitiveArray| (|NonNegativeInteger|))))
676         (SEQ (LETT |gens1| (QCAR |s|)) (LETT |rels1| (QCDR |s|))
677              (LETT |rels2| NIL)
678              (SEQ (LETT |rel| NIL) (LETT #3# |rels1|) G190
679                   (COND
680                    ((OR (ATOM #3#) (PROGN (LETT |rel| (CAR #3#)) NIL))
681                     (GO G191)))
682                   (SEQ (LETT |numInverts| 0) (LETT |numNonInverts| 0)
683                        (SEQ (LETT |ele| NIL) (LETT #2# |rel|) G190
684                             (COND
685                              ((OR (ATOM #2#)
686                                   (PROGN (LETT |ele| (CAR #2#)) NIL))
687                               (GO G191)))
688                             (SEQ
689                              (EXIT
690                               (COND
691                                ((< |ele| 0)
692                                 (LETT |numInverts| (+ |numInverts| 1)))
693                                ('T
694                                 (LETT |numNonInverts|
695                                       (+ |numNonInverts| 1))))))
696                             (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
697                        (EXIT
698                         (COND
699                          ((> |numInverts| |numNonInverts|)
700                           (LETT |rels2|
701                                 (SPADCALL |rels2|
702                                           (|GROUPP;invertRelation| |rel| $)
703                                           (QREFELT $ 26))))
704                          ('T
705                           (LETT |rels2|
706                                 (SPADCALL |rels2| |rel| (QREFELT $ 26)))))))
707                   (LETT #3# (CDR #3#)) (GO G190) G191 (EXIT NIL))
708              (EXIT (CONS |gens1| |rels2|)))))
709
710(SDEFUN |GROUPP;generatorOccurrences|
711        ((|rel| |List| (|Integer|)) (|gen| |NonNegativeInteger|)
712         ($ |NonNegativeInteger|))
713        (SPROG ((|res| (|NonNegativeInteger|)) (#1=#:G617 NIL) (|g| NIL))
714               (SEQ (LETT |res| 0)
715                    (SEQ (LETT |g| NIL) (LETT #1# |rel|) G190
716                         (COND
717                          ((OR (ATOM #1#) (PROGN (LETT |g| (CAR #1#)) NIL))
718                           (GO G191)))
719                         (SEQ (COND ((EQL |g| |gen|) (LETT |res| (+ |res| 1))))
720                              (EXIT
721                               (COND
722                                ((> |gen| 0)
723                                 (COND
724                                  ((EQL |g| (- |gen|))
725                                   (LETT |res| (+ |res| 1))))))))
726                         (LETT #1# (CDR #1#)) (GO G190) G191 (EXIT NIL))
727                    (EXIT |res|))))
728
729(SDEFUN |GROUPP;removeRelations|
730        ((|rels1| |List| (|List| (|Integer|))) (|val| |NonNegativeInteger|)
731         ($ |List| (|List| (|Integer|))))
732        (SPROG
733         ((|res| (|List| (|List| (|Integer|)))) (#1=#:G623 NIL) (|rel| NIL))
734         (SEQ (LETT |res| NIL)
735              (SEQ (LETT |rel| NIL) (LETT #1# |rels1|) G190
736                   (COND
737                    ((OR (ATOM #1#) (PROGN (LETT |rel| (CAR #1#)) NIL))
738                     (GO G191)))
739                   (SEQ
740                    (EXIT
741                     (COND
742                      ((NULL (SPADCALL |val| |rel| (QREFELT $ 49)))
743                       (COND
744                        ((NULL (SPADCALL (- |val|) |rel| (QREFELT $ 49)))
745                         (LETT |res|
746                               (SPADCALL |res| |rel| (QREFELT $ 26)))))))))
747                   (LETT #1# (CDR #1#)) (GO G190) G191 (EXIT NIL))
748              (EXIT |res|))))
749
750(SDEFUN |GROUPP;TTSubstitute| ((|s| $) (|trace| |Boolean|) ($ $))
751        (SPROG
752         ((|rels1| #1=(|List| (|List| (|Integer|))))
753          (|gens1| (|PrimitiveArray| (|NonNegativeInteger|)))
754          (|newRel| (|List| (|Integer|))) (#2=#:G647 NIL) (|x| (|Integer|))
755          (|replacement| (|List| (|Integer|))) (|postr| (|List| (|Integer|)))
756          (|restr| (|List| #3=(|Integer|))) (|prer| (|List| (|Integer|)))
757          (|genInverted| #4=(|Boolean|)) (|found| #4#) (#5=#:G645 NIL)
758          (|genToBeRemoved| #6=(|NonNegativeInteger|)) (|n2| #6#)
759          (|r2| (|List| (|Integer|))) (|n1| #6#) (|r1| (|List| #3#))
760          (|n3| (|NonNegativeInteger|)) (|r3| (|List| (|Integer|)))
761          (|indexes| (|List| (|NonNegativeInteger|))) (#7=#:G646 NIL) (|g| NIL)
762          (|rs| #1#) (|gs| (|List| (|NonNegativeInteger|))))
763         (SEQ
764          (EXIT
765           (SEQ (LETT |gs| (SPADCALL (QCAR |s|) (QREFELT $ 17)))
766                (LETT |rs| (QCDR |s|)) (LETT |r1| NIL) (LETT |r2| NIL)
767                (LETT |n1| 0) (LETT |n2| 0) (LETT |genToBeRemoved| 0)
768                (SEQ (LETT |g| NIL) (LETT #7# |gs|) G190
769                     (COND
770                      ((OR (ATOM #7#) (PROGN (LETT |g| (CAR #7#)) NIL))
771                       (GO G191)))
772                     (SEQ
773                      (LETT |indexes|
774                            (|GROUPP;indexesOfRelUsingGen| |s| |g| $))
775                      (EXIT
776                       (COND
777                        ((EQL (SPADCALL |indexes| (QREFELT $ 62)) 2)
778                         (COND
779                          ((EQL |genToBeRemoved| 0)
780                           (SEQ (LETT |genToBeRemoved| |g|)
781                                (LETT |r1|
782                                      (SPADCALL |rs|
783                                                (SPADCALL |indexes| 1
784                                                          (QREFELT $ 63))
785                                                (QREFELT $ 64)))
786                                (LETT |r2|
787                                      (SPADCALL |rs|
788                                                (SPADCALL |indexes| 2
789                                                          (QREFELT $ 63))
790                                                (QREFELT $ 64)))
791                                (LETT |n1|
792                                      (|GROUPP;generatorOccurrences| |r1| |g|
793                                       $))
794                                (LETT |n2|
795                                      (|GROUPP;generatorOccurrences| |r2| |g|
796                                       $))
797                                (COND
798                                 ((SPADCALL |n1| 1 (QREFELT $ 58))
799                                  (SEQ (LETT |r3| |r1|) (LETT |n3| |n1|)
800                                       (LETT |r1| |r2|) (LETT |n1| |n2|)
801                                       (LETT |r2| |r3|)
802                                       (EXIT (LETT |n2| |n3|)))))
803                                (EXIT
804                                 (COND
805                                  ((SPADCALL |n1| 1 (QREFELT $ 58))
806                                   (LETT |genToBeRemoved| 0)))))))))))
807                     (LETT #7# (CDR #7#)) (GO G190) G191 (EXIT NIL))
808                (COND
809                 ((SPADCALL |n1| 1 (QREFELT $ 58))
810                  (PROGN (LETT #5# |s|) (GO #8=#:G644))))
811                (COND
812                 (|trace|
813                  (SEQ
814                   (SPADCALL
815                    (SPADCALL
816                     (SPADCALL
817                      (SPADCALL "simplify: TTSubstitute (" (QREFELT $ 43))
818                      (SPADCALL |s| (QREFELT $ 65)) (QREFELT $ 42))
819                     (SPADCALL ")" (QREFELT $ 43)) (QREFELT $ 42))
820                    (QREFELT $ 54))
821                   (SPADCALL
822                    (SPADCALL
823                     (SPADCALL
824                      (SPADCALL
825                       (SPADCALL
826                        (SPADCALL (SPADCALL "genToBeRemoved=" (QREFELT $ 43))
827                                  (|GROUPP;outputGen| |genToBeRemoved| $)
828                                  (QREFELT $ 42))
829                        (SPADCALL " r1=" (QREFELT $ 43)) (QREFELT $ 42))
830                       (|GROUPP;outputRel| |r1| $) (QREFELT $ 42))
831                      (SPADCALL " r2=" (QREFELT $ 43)) (QREFELT $ 42))
832                     (|GROUPP;outputRel| |r2| $) (QREFELT $ 42))
833                    (QREFELT $ 54))
834                   (EXIT
835                    (SPADCALL
836                     (SPADCALL
837                      (SPADCALL
838                       (SPADCALL (SPADCALL "n1=" (QREFELT $ 43))
839                                 (SPADCALL |n1| (QREFELT $ 66)) (QREFELT $ 42))
840                       (SPADCALL " n2=" (QREFELT $ 43)) (QREFELT $ 42))
841                      (SPADCALL |n2| (QREFELT $ 66)) (QREFELT $ 42))
842                     (QREFELT $ 54))))))
843                (LETT |restr| |r1|) (LETT |prer| NIL) (LETT |found| NIL)
844                (LETT |genInverted| NIL)
845                (SEQ G190
846                     (COND
847                      ((NULL (NULL (OR (NULL |restr|) |found|))) (GO G191)))
848                     (SEQ (LETT |x| (|SPADfirst| |restr|))
849                          (LETT |restr| (CDR |restr|))
850                          (EXIT
851                           (COND
852                            ((OR (EQL |x| |genToBeRemoved|)
853                                 (EQL |x| (- |genToBeRemoved|)))
854                             (SEQ (LETT |found| 'T)
855                                  (EXIT
856                                   (COND
857                                    ((< |x| 0) (LETT |genInverted| 'T))))))
858                            ('T
859                             (LETT |prer|
860                                   (SPADCALL |prer| |x| (QREFELT $ 25)))))))
861                     NIL (GO G190) G191 (EXIT NIL))
862                (LETT |postr| NIL)
863                (SEQ G190 (COND ((NULL (NULL (NULL |restr|))) (GO G191)))
864                     (SEQ (LETT |x| (|SPADfirst| |restr|))
865                          (LETT |restr| (CDR |restr|))
866                          (EXIT
867                           (LETT |postr|
868                                 (SPADCALL |postr| |x| (QREFELT $ 25)))))
869                     NIL (GO G190) G191 (EXIT NIL))
870                (LETT |replacement|
871                      (SPADCALL (|GROUPP;invertRelation| |prer| $)
872                                (|GROUPP;invertRelation| |postr| $)
873                                (QREFELT $ 67)))
874                (COND
875                 (|trace|
876                  (SPADCALL
877                   (SPADCALL
878                    (SPADCALL
879                     (SPADCALL
880                      (SPADCALL
881                       (SPADCALL
882                        (SPADCALL "we will substitute " (QREFELT $ 43))
883                        (|GROUPP;outputRel| |replacement| $) (QREFELT $ 42))
884                       (SPADCALL " for " (QREFELT $ 43)) (QREFELT $ 42))
885                      (|GROUPP;outputGen| |genToBeRemoved| $) (QREFELT $ 42))
886                     (SPADCALL " in " (QREFELT $ 43)) (QREFELT $ 42))
887                    (|GROUPP;outputRel| |r2| $) (QREFELT $ 42))
888                   (QREFELT $ 54))))
889                (LETT |newRel| NIL)
890                (SEQ (LETT |x| NIL) (LETT #2# |r2|) G190
891                     (COND
892                      ((OR (ATOM #2#) (PROGN (LETT |x| (CAR #2#)) NIL))
893                       (GO G191)))
894                     (SEQ
895                      (EXIT
896                       (COND
897                        ((EQL (ABS |x|) (ABS |genToBeRemoved|))
898                         (COND
899                          (|genInverted|
900                           (LETT |newRel|
901                                 (SPADCALL |newRel|
902                                           (|GROUPP;invertRelation|
903                                            |replacement| $)
904                                           (QREFELT $ 67))))
905                          ('T
906                           (LETT |newRel|
907                                 (SPADCALL |newRel| |replacement|
908                                           (QREFELT $ 67))))))
909                        ('T
910                         (LETT |newRel|
911                               (SPADCALL |newRel| |x| (QREFELT $ 25)))))))
912                     (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
913                (COND
914                 (|trace|
915                  (SPADCALL
916                   (SPADCALL (SPADCALL "newRel=" (QREFELT $ 43))
917                             (|GROUPP;outputRel| |newRel| $) (QREFELT $ 42))
918                   (QREFELT $ 54))))
919                (LETT |gens1| (QCAR |s|)) (LETT |rels1| (QCDR |s|))
920                (LETT |gens1| (|GROUPP;removeGen| |gens1| |genToBeRemoved| $))
921                (LETT |rels1|
922                      (|GROUPP;removeRelations| |rels1| |genToBeRemoved| $))
923                (LETT |rels1| (SPADCALL |rels1| |newRel| (QREFELT $ 26)))
924                (COND
925                 (|trace|
926                  (SPADCALL
927                   (SPADCALL
928                    (SPADCALL
929                     (SPADCALL (SPADCALL "gens=" (QREFELT $ 43))
930                               (|GROUPP;outputGenList|
931                                (SPADCALL |gens1| (QREFELT $ 17)) $)
932                               (QREFELT $ 42))
933                     (SPADCALL " rels=" (QREFELT $ 43)) (QREFELT $ 42))
934                    (|GROUPP;outputRelList| |rels1| $) (QREFELT $ 42))
935                   (QREFELT $ 54))))
936                (EXIT (CONS |gens1| |rels1|))))
937          #8# (EXIT #5#))))
938
939(SDEFUN |GROUPP;isSimpler?| ((|a| $) (|b| $) ($ |Boolean|))
940        (SPROG
941         ((#1=#:G654 NIL) (|relationCompleityB| #2=(|NonNegativeInteger|))
942          (#3=#:G656 NIL) (|rel| NIL) (|relationCompleityA| #2#)
943          (#4=#:G655 NIL) (|relsb| #5=(|List| (|List| (|Integer|))))
944          (|gensb| #6=(|PrimitiveArray| (|NonNegativeInteger|))) (|relsa| #5#)
945          (|gensa| #6#))
946         (SEQ
947          (EXIT
948           (SEQ (LETT |gensa| (QCAR |a|)) (LETT |relsa| (QCDR |a|))
949                (LETT |gensb| (QCAR |b|)) (LETT |relsb| (QCDR |b|))
950                (COND
951                 ((< (SPADCALL |gensa| (QREFELT $ 19))
952                     (SPADCALL |gensb| (QREFELT $ 19)))
953                  (PROGN (LETT #1# 'T) (GO #7=#:G653))))
954                (COND
955                 ((< (LENGTH |relsa|) (LENGTH |relsb|))
956                  (PROGN (LETT #1# 'T) (GO #7#))))
957                (LETT |relationCompleityA| 0)
958                (SEQ (LETT |rel| NIL) (LETT #4# |relsa|) G190
959                     (COND
960                      ((OR (ATOM #4#) (PROGN (LETT |rel| (CAR #4#)) NIL))
961                       (GO G191)))
962                     (SEQ
963                      (EXIT
964                       (LETT |relationCompleityA|
965                             (+ |relationCompleityA| (LENGTH |rel|)))))
966                     (LETT #4# (CDR #4#)) (GO G190) G191 (EXIT NIL))
967                (LETT |relationCompleityB| 0)
968                (SEQ (LETT |rel| NIL) (LETT #3# |relsb|) G190
969                     (COND
970                      ((OR (ATOM #3#) (PROGN (LETT |rel| (CAR #3#)) NIL))
971                       (GO G191)))
972                     (SEQ
973                      (EXIT
974                       (LETT |relationCompleityB|
975                             (+ |relationCompleityB| (LENGTH |rel|)))))
976                     (LETT #3# (CDR #3#)) (GO G190) G191 (EXIT NIL))
977                (COND
978                 ((< |relationCompleityA| |relationCompleityB|)
979                  (PROGN (LETT #1# 'T) (GO #7#))))
980                (EXIT NIL)))
981          #7# (EXIT #1#))))
982
983(SDEFUN |GROUPP;simplify;2$;29| ((|s| $) ($ $))
984        (SPADCALL |s| NIL (QREFELT $ 68)))
985
986(SDEFUN |GROUPP;simplify;$B$;30| ((|s| $) (|trace| |Boolean|) ($ $))
987        (SPROG
988         ((|lastpass| ($)) (|level| #1=(|NonNegativeInteger|)) (#2=#:G664 NIL)
989          (|res| ($)) (|loopBreaker| #1#))
990         (SEQ
991          (EXIT
992           (SEQ
993            (COND
994             (|trace|
995              (SPADCALL
996               (SPADCALL
997                (SPADCALL (SPADCALL "simplify(" (QREFELT $ 43))
998                          (SPADCALL |s| (QREFELT $ 65)) (QREFELT $ 42))
999                (SPADCALL ")" (QREFELT $ 43)) (QREFELT $ 42))
1000               (QREFELT $ 54))))
1001            (LETT |res| |s|) (LETT |lastpass| |s|) (LETT |level| 0)
1002            (LETT |loopBreaker| 0)
1003            (SEQ G190 (COND ((NULL (< |loopBreaker| 10000)) (GO G191)))
1004                 (SEQ (LETT |loopBreaker| (+ |loopBreaker| 1))
1005                      (COND
1006                       ((EQL |level| 0)
1007                        (LETT |res| (|GROUPP;TTRemoveEmpty| |res| |trace| $))))
1008                      (COND
1009                       ((EQL |level| 1)
1010                        (LETT |res| (|GROUPP;TTRemoveZero| |res| |trace| $))))
1011                      (COND
1012                       ((EQL |level| 2)
1013                        (LETT |res|
1014                              (|GROUPP;TTRemoveGeneratorIfIdentity| |res|
1015                               |trace| $))))
1016                      (COND
1017                       ((EQL |level| 3)
1018                        (LETT |res|
1019                              (|GROUPP;TTRenameGenerator| |res| |trace| $))))
1020                      (COND
1021                       ((EQL |level| 4)
1022                        (LETT |res|
1023                              (|GROUPP;TTRemoveEleTimesInverse| |res| |trace|
1024                               $))))
1025                      (COND
1026                       ((EQL |level| 5)
1027                        (LETT |res|
1028                              (|GROUPP;TTRemoveDuplicateRelation| |res| |trace|
1029                               $))))
1030                      (COND
1031                       ((EQL |level| 6)
1032                        (LETT |res| (|GROUPP;TTSubstitute| |res| |trace| $))))
1033                      (COND
1034                       ((EQL |level| 7)
1035                        (PROGN
1036                         (LETT #2#
1037                               (|GROUPP;TTMinimiseInverses| |res| |trace| $))
1038                         (GO #3=#:G663))))
1039                      (COND
1040                       ((|GROUPP;isSimpler?| |res| |lastpass| $)
1041                        (LETT |level| 0))
1042                       ('T (LETT |level| (+ |level| 1))))
1043                      (COND
1044                       (|trace|
1045                        (SPADCALL
1046                         (SPADCALL
1047                          (SPADCALL
1048                           (SPADCALL
1049                            (SPADCALL
1050                             (SPADCALL (SPADCALL " level=" (QREFELT $ 43))
1051                                       (SPADCALL |level| (QREFELT $ 66))
1052                                       (QREFELT $ 42))
1053                             (SPADCALL " loop=" (QREFELT $ 43)) (QREFELT $ 42))
1054                            (SPADCALL |loopBreaker| (QREFELT $ 66))
1055                            (QREFELT $ 42))
1056                           (SPADCALL " res=" (QREFELT $ 43)) (QREFELT $ 42))
1057                          (SPADCALL |res| (QREFELT $ 65)) (QREFELT $ 42))
1058                         (QREFELT $ 54))))
1059                      (EXIT (LETT |lastpass| |res|)))
1060                 NIL (GO G190) G191 (EXIT NIL))
1061            (SPADCALL
1062             (SPADCALL
1063              (SPADCALL "simplify excessive time - loop suspected"
1064                        (QREFELT $ 43))
1065              (SPADCALL |s| (QREFELT $ 65)) (QREFELT $ 42))
1066             (QREFELT $ 54))
1067            (EXIT |res|)))
1068          #3# (EXIT #2#))))
1069
1070(SDEFUN |GROUPP;offsetIndexes| ((|a| $) (|offset| |NonNegativeInteger|) ($ $))
1071        (SPROG
1072         ((|rb| (|List| (|List| (|Integer|)))) (#1=#:G675 NIL) (|y| NIL)
1073          (#2=#:G674 NIL) (#3=#:G673 NIL) (|z| NIL) (#4=#:G672 NIL)
1074          (|gb| (|List| (|NonNegativeInteger|))) (#5=#:G671 NIL) (|x| NIL)
1075          (#6=#:G670 NIL) (|ra| (|List| (|List| (|Integer|))))
1076          (|ga| (|List| (|NonNegativeInteger|))))
1077         (SEQ (LETT |ga| (SPADCALL (QCAR |a|) (QREFELT $ 17)))
1078              (LETT |ra| (QCDR |a|))
1079              (LETT |gb|
1080                    (PROGN
1081                     (LETT #6# NIL)
1082                     (SEQ (LETT |x| NIL) (LETT #5# |ga|) G190
1083                          (COND
1084                           ((OR (ATOM #5#) (PROGN (LETT |x| (CAR #5#)) NIL))
1085                            (GO G191)))
1086                          (SEQ (EXIT (LETT #6# (CONS (+ |x| |offset|) #6#))))
1087                          (LETT #5# (CDR #5#)) (GO G190) G191
1088                          (EXIT (NREVERSE #6#)))))
1089              (LETT |rb|
1090                    (PROGN
1091                     (LETT #4# NIL)
1092                     (SEQ (LETT |z| NIL) (LETT #3# |ra|) G190
1093                          (COND
1094                           ((OR (ATOM #3#) (PROGN (LETT |z| (CAR #3#)) NIL))
1095                            (GO G191)))
1096                          (SEQ
1097                           (EXIT
1098                            (LETT #4#
1099                                  (CONS
1100                                   (PROGN
1101                                    (LETT #2# NIL)
1102                                    (SEQ (LETT |y| NIL) (LETT #1# |z|) G190
1103                                         (COND
1104                                          ((OR (ATOM #1#)
1105                                               (PROGN
1106                                                (LETT |y| (CAR #1#))
1107                                                NIL))
1108                                           (GO G191)))
1109                                         (SEQ
1110                                          (EXIT
1111                                           (LETT #2#
1112                                                 (CONS
1113                                                  (COND
1114                                                   ((> |y| 0) (+ |y| |offset|))
1115                                                   ('T (- |y| |offset|)))
1116                                                  #2#))))
1117                                         (LETT #1# (CDR #1#)) (GO G190) G191
1118                                         (EXIT (NREVERSE #2#))))
1119                                   #4#))))
1120                          (LETT #3# (CDR #3#)) (GO G190) G191
1121                          (EXIT (NREVERSE #4#)))))
1122              (EXIT (SPADCALL |gb| |rb| (QREFELT $ 11))))))
1123
1124(SDEFUN |GROUPP;quotient;$L$;32|
1125        ((|a| $) (|remgen| |List| (|NonNegativeInteger|)) ($ $))
1126        (SPROG
1127         ((|rels1| (|List| (|List| (|Integer|))))
1128          (|gens1| (|PrimitiveArray| (|NonNegativeInteger|))) (#1=#:G680 NIL)
1129          (|toBeRemoved| NIL))
1130         (SEQ (LETT |gens1| (QCAR |a|)) (LETT |rels1| (QCDR |a|))
1131              (SEQ (LETT |toBeRemoved| NIL) (LETT #1# |remgen|) G190
1132                   (COND
1133                    ((OR (ATOM #1#) (PROGN (LETT |toBeRemoved| (CAR #1#)) NIL))
1134                     (GO G191)))
1135                   (SEQ
1136                    (LETT |gens1| (|GROUPP;removeGen| |gens1| |toBeRemoved| $))
1137                    (EXIT
1138                     (LETT |rels1|
1139                           (|GROUPP;removeGen2| |rels1| |toBeRemoved| $))))
1140                   (LETT #1# (CDR #1#)) (GO G190) G191 (EXIT NIL))
1141              (EXIT
1142               (SPADCALL
1143                (SPADCALL (SPADCALL |gens1| (QREFELT $ 17)) |rels1|
1144                          (QREFELT $ 11))
1145                (QREFELT $ 69))))))
1146
1147(SDEFUN |GROUPP;quotient;$L$;33|
1148        ((|a| $) (|addrel| |List| (|List| (|Integer|))) ($ $))
1149        (SPROG
1150         ((|rels1| (|List| (|List| (|Integer|))))
1151          (|gens1| (|List| (|NonNegativeInteger|))))
1152         (SEQ (LETT |gens1| (SPADCALL (QCAR |a|) (QREFELT $ 17)))
1153              (LETT |rels1| (QCDR |a|))
1154              (EXIT
1155               (SPADCALL
1156                (SPADCALL (SPADCALL |gens1| (QREFELT $ 71))
1157                          (SPADCALL |rels1| |addrel| (QREFELT $ 72))
1158                          (QREFELT $ 11))
1159                (QREFELT $ 69))))))
1160
1161(SDEFUN |GROUPP;directProduct;3$;34| ((|a| $) (|b| $) ($ $))
1162        (SPROG
1163         ((|rc| (|List| (|List| (|Integer|)))) (|gcx| (|List| (|Integer|)))
1164          (#1=#:G689 NIL) (|gbx| NIL) (#2=#:G688 NIL) (|gax| NIL)
1165          (|rb| #3=(|List| (|List| (|Integer|))))
1166          (|gb| #4=(|List| (|NonNegativeInteger|))) (|b2| ($))
1167          (|sa| (|NonNegativeInteger|)) (|ra| #3#) (|ga| #4#) (|a2| ($)))
1168         (SEQ (LETT |a2| (SPADCALL |a| (QREFELT $ 27)))
1169              (LETT |ga| (SPADCALL (QCAR |a2|) (QREFELT $ 17)))
1170              (LETT |ra| (QCDR |a2|))
1171              (LETT |sa| (SPADCALL |ga| (QREFELT $ 62)))
1172              (LETT |b2|
1173                    (|GROUPP;offsetIndexes| (SPADCALL |b| (QREFELT $ 27)) |sa|
1174                     $))
1175              (LETT |gb| (SPADCALL (QCAR |b2|) (QREFELT $ 17)))
1176              (LETT |rb| (QCDR |b2|)) (LETT |rc| NIL)
1177              (SEQ (LETT |gax| NIL) (LETT #2# |ga|) G190
1178                   (COND
1179                    ((OR (ATOM #2#) (PROGN (LETT |gax| (CAR #2#)) NIL))
1180                     (GO G191)))
1181                   (SEQ
1182                    (EXIT
1183                     (SEQ (LETT |gbx| NIL) (LETT #1# |gb|) G190
1184                          (COND
1185                           ((OR (ATOM #1#) (PROGN (LETT |gbx| (CAR #1#)) NIL))
1186                            (GO G191)))
1187                          (SEQ (LETT |gcx| (LIST |gax| |gbx| |gax| |gbx|))
1188                               (EXIT
1189                                (LETT |rc|
1190                                      (SPADCALL |rc| |gcx| (QREFELT $ 26)))))
1191                          (LETT #1# (CDR #1#)) (GO G190) G191 (EXIT NIL))))
1192                   (LETT #2# (CDR #2#)) (GO G190) G191 (EXIT NIL))
1193              (EXIT
1194               (SPADCALL
1195                (SPADCALL (SPADCALL |ga| (QREFELT $ 71)) |gb| (QREFELT $ 74))
1196                (SPADCALL (LIST |ra| |rb| |rc|) (QREFELT $ 75))
1197                (QREFELT $ 11))))))
1198
1199(SDEFUN |GROUPP;cyclicGroup;Pi$;35| ((|n| |PositiveInteger|) ($ $))
1200        (SPROG
1201         ((|ra| (|List| (|List| (|Integer|)))) (#1=#:G694 NIL) (|x| NIL)
1202          (#2=#:G693 NIL) (|ga| (|List| (|NonNegativeInteger|))))
1203         (SEQ (LETT |ga| (LIST 1))
1204              (LETT |ra|
1205                    (LIST
1206                     (PROGN
1207                      (LETT #2# NIL)
1208                      (SEQ (LETT |x| 1) (LETT #1# |n|) G190
1209                           (COND ((|greater_SI| |x| #1#) (GO G191)))
1210                           (SEQ (EXIT (LETT #2# (CONS 1 #2#))))
1211                           (LETT |x| (|inc_SI| |x|)) (GO G190) G191
1212                           (EXIT (NREVERSE #2#))))))
1213              (EXIT (SPADCALL |ga| |ra| (QREFELT $ 11))))))
1214
1215(SDEFUN |GROUPP;dihedralGroup;Pi$;36| ((|n| |PositiveInteger|) ($ $))
1216        (SPROG ((|c2| ($)) (|c1| ($)))
1217               (SEQ (LETT |c1| (SPADCALL |n| (QREFELT $ 78)))
1218                    (LETT |c2| (SPADCALL 2 (QREFELT $ 78)))
1219                    (EXIT (SPADCALL |c1| |c2| (QREFELT $ 76))))))
1220
1221(SDEFUN |GROUPP;symmetricGroup;Pi$;37| ((|n| |PositiveInteger|) ($ $))
1222        (SPROG
1223         ((|r| (|List| (|List| (|Integer|)))) (|y| (|List| (|Integer|)))
1224          (#1=#:G713 NIL) (|b| NIL) (#2=#:G712 NIL) (|a| NIL)
1225          (|ga| (|List| (|NonNegativeInteger|))) (#3=#:G711 NIL) (|x| NIL)
1226          (#4=#:G710 NIL) (|m| (|PositiveInteger|)) (#5=#:G697 NIL)
1227          (#6=#:G709 NIL))
1228         (SEQ
1229          (EXIT
1230           (SEQ
1231            (COND
1232             ((< |n| 2)
1233              (PROGN (LETT #6# (SPADCALL NIL (QREFELT $ 12))) (GO #7=#:G708))))
1234            (LETT |m|
1235                  (PROG1 (LETT #5# (- |n| 1))
1236                    (|check_subtype2| (> #5# 0) '(|PositiveInteger|)
1237                                      '(|Integer|) #5#)))
1238            (LETT |ga|
1239                  (PROGN
1240                   (LETT #4# NIL)
1241                   (SEQ (LETT |x| 1) (LETT #3# |m|) G190
1242                        (COND ((|greater_SI| |x| #3#) (GO G191)))
1243                        (SEQ (EXIT (LETT #4# (CONS |x| #4#))))
1244                        (LETT |x| (|inc_SI| |x|)) (GO G190) G191
1245                        (EXIT (NREVERSE #4#)))))
1246            (LETT |r| NIL)
1247            (SEQ (LETT |a| 1) (LETT #2# |m|) G190
1248                 (COND ((|greater_SI| |a| #2#) (GO G191)))
1249                 (SEQ
1250                  (EXIT
1251                   (SEQ (LETT |b| 1) (LETT #1# |m|) G190
1252                        (COND ((|greater_SI| |b| #1#) (GO G191)))
1253                        (SEQ
1254                         (COND
1255                          ((EQL |a| |b|)
1256                           (SEQ (LETT |y| (LIST |a| |a|))
1257                                (EXIT (LETT |r| (CONS |y| |r|))))))
1258                         (COND
1259                          ((< (+ |a| 1) |b|)
1260                           (SEQ (LETT |y| (LIST |a| |b| (- |a|) (- |b|)))
1261                                (EXIT (LETT |r| (CONS |y| |r|))))))
1262                         (EXIT
1263                          (COND
1264                           ((EQL (+ |a| 1) |b|)
1265                            (SEQ (LETT |y| (LIST |a| |b| |a| |b| |a| |b|))
1266                                 (EXIT (LETT |r| (CONS |y| |r|))))))))
1267                        (LETT |b| (|inc_SI| |b|)) (GO G190) G191 (EXIT NIL))))
1268                 (LETT |a| (|inc_SI| |a|)) (GO G190) G191 (EXIT NIL))
1269            (EXIT (SPADCALL |ga| (NREVERSE |r|) (QREFELT $ 11)))))
1270          #7# (EXIT #6#))))
1271
1272(SDEFUN |GROUPP;outCosetTable|
1273        ((|ct| |TwoDimensionalArray| (|NonNegativeInteger|))
1274         (|np| . #1=(|NonNegativeInteger|)) ($ |OutputForm|))
1275        (SPROG
1276         ((|cts| (|List| (|TwoDimensionalArray| (|NonNegativeInteger|))))
1277          (|part2| (|NonNegativeInteger|)) (#2=#:G715 NIL) (|part1| #1#)
1278          (#3=#:G721 NIL))
1279         (SEQ
1280          (EXIT
1281           (SEQ
1282            (COND
1283             ((< |np| 1)
1284              (PROGN
1285               (LETT #3# (SPADCALL |ct| (QREFELT $ 82)))
1286               (GO #4=#:G720))))
1287            (COND
1288             ((> (SPADCALL |ct| (QREFELT $ 83)) |np|)
1289              (SEQ (LETT |part1| |np|)
1290                   (LETT |part2|
1291                         (PROG2
1292                             (LETT #2#
1293                                   (SPADCALL (SPADCALL |ct| (QREFELT $ 83))
1294                                             |np| (QREFELT $ 85)))
1295                             (QCDR #2#)
1296                           (|check_union2| (QEQCAR #2# 0)
1297                                           (|NonNegativeInteger|)
1298                                           (|Union| (|NonNegativeInteger|)
1299                                                    "failed")
1300                                           #2#)))
1301                   (LETT |cts|
1302                         (SPADCALL |ct| (LIST |part1| |part2|) (QREFELT $ 86)))
1303                   (EXIT (LETT |ct| (SPADCALL |cts| 1 (QREFELT $ 88)))))))
1304            (EXIT (SPADCALL |ct| (QREFELT $ 82)))))
1305          #4# (EXIT #3#))))
1306
1307(SDEFUN |GROUPP;outStatus|
1308        ((|state| |Record|
1309          (|:| |coset_table| #1=(|TwoDimensionalArray| (|NonNegativeInteger|)))
1310          (|:| |equiv_table| (|OneDimensionalArray| (|NonNegativeInteger|)))
1311          (|:| |inverse_table| (|OneDimensionalArray| (|NonNegativeInteger|)))
1312          (|:| |closed_point| (|NonNegativeInteger|))
1313          (|:| |number_of_generators| (|NonNegativeInteger|))
1314          (|:| |number_of_indices| #2=(|NonNegativeInteger|))
1315          (|:| |number_of_points| (|NonNegativeInteger|))
1316          (|:| |max_number_of_indices| (|NonNegativeInteger|)))
1317         ($ |OutputForm|))
1318        (SPROG ((|np| #2#) (|ct| #1#))
1319               (SEQ (LETT |ct| (QVELT |state| 0)) (LETT |np| (QVELT |state| 5))
1320                    (EXIT (|GROUPP;outCosetTable| |ct| |np| $)))))
1321
1322(SDEFUN |GROUPP;find|
1323        ((|et| |OneDimensionalArray| (|NonNegativeInteger|))
1324         (|ind| |NonNegativeInteger|) ($ |NonNegativeInteger|))
1325        (SPROG
1326         ((|j| (|NonNegativeInteger|)) (|nj| (|NonNegativeInteger|))
1327          (|pj| (|NonNegativeInteger|)))
1328         (SEQ
1329          (COND ((OR (EQL |ind| 0) (EQL (QAREF1O |et| |ind| 1) |ind|)) |ind|)
1330                ('T
1331                 (SEQ (LETT |j| |ind|) (LETT |pj| 0)
1332                      (SEQ G190 (COND ((NULL (NULL (EQL |j| |pj|))) (GO G191)))
1333                           (SEQ (LETT |pj| |j|)
1334                                (EXIT (LETT |j| (QAREF1O |et| |j| 1))))
1335                           NIL (GO G190) G191 (EXIT NIL))
1336                      (LETT |j| |ind|)
1337                      (SEQ G190 (COND ((NULL (NULL (EQL |j| |pj|))) (GO G191)))
1338                           (SEQ (LETT |nj| (QAREF1O |et| |j| 1))
1339                                (QSETAREF1O |et| |j| |pj| 1)
1340                                (EXIT (LETT |j| |nj|)))
1341                           NIL (GO G190) G191 (EXIT NIL))
1342                      (EXIT |pj|)))))))
1343
1344(SDEFUN |GROUPP;infer_coincidencies|
1345        ((|ct| |TwoDimensionalArray| (|NonNegativeInteger|))
1346         (|et| |OneDimensionalArray| (|NonNegativeInteger|))
1347         (|pb| . #1=(|NonNegativeInteger|)) (|pe| . #2=(|NonNegativeInteger|))
1348         (|trace| |Boolean|) ($ |Void|))
1349        (SPROG
1350         ((|i2| #3=(|NonNegativeInteger|)) (|i1| #3#) (#4=#:G742 NIL) (|i| NIL)
1351          (#5=#:G741 NIL) (|nn| (|Integer|)) (|#G135| #1#) (|#G134| #2#))
1352         (SEQ
1353          (COND
1354           (|trace|
1355            (SPADCALL
1356             (SPADCALL
1357              (SPADCALL
1358               (SPADCALL (SPADCALL "coincidence: begin=" (QREFELT $ 43))
1359                         (SPADCALL |pb| (QREFELT $ 66)) (QREFELT $ 42))
1360               (SPADCALL " end=" (QREFELT $ 43)) (QREFELT $ 42))
1361              (SPADCALL |pe| (QREFELT $ 66)) (QREFELT $ 42))
1362             (QREFELT $ 54))))
1363          (COND
1364           ((< |pe| |pb|)
1365            (PROGN
1366             (LETT |#G134| |pe|)
1367             (LETT |#G135| |pb|)
1368             (LETT |pb| |#G134|)
1369             (LETT |pe| |#G135|))))
1370          (QSETAREF1O |et| |pe| |pb| 1)
1371          (LETT |nn| (SPADCALL |ct| (QREFELT $ 89)))
1372          (SEQ (LETT |i| 1) (LETT #5# |nn|) G190
1373               (COND ((|greater_SI| |i| #5#) (GO G191)))
1374               (SEQ (LETT |i1| (QAREF2O |ct| |pb| |i| 1 1))
1375                    (LETT |i2| (QAREF2O |ct| |pe| |i| 1 1))
1376                    (EXIT
1377                     (COND ((EQL |i2| 0) "skip")
1378                           ((EQL |i1| 0)
1379                            (QSETAREF2O |ct| |pb| |i| |i2| 1 1)))))
1380               (LETT |i| (|inc_SI| |i|)) (GO G190) G191 (EXIT NIL))
1381          (EXIT
1382           (SEQ (LETT |i| 1) (LETT #4# |nn|) G190
1383                (COND ((|greater_SI| |i| #4#) (GO G191)))
1384                (SEQ (LETT |i1| (QAREF2O |ct| |pb| |i| 1 1))
1385                     (EXIT
1386                      (COND ((EQL |i1| 0) "skip")
1387                            ('T
1388                             (SEQ (LETT |i2| (QAREF2O |ct| |pe| |i| 1 1))
1389                                  (EXIT
1390                                   (COND ((EQL |i2| 0) "skip")
1391                                         ('T
1392                                          (SEQ
1393                                           (LETT |i1|
1394                                                 (|GROUPP;find| |et| |i1| $))
1395                                           (LETT |i2|
1396                                                 (|GROUPP;find| |et| |i2| $))
1397                                           (EXIT
1398                                            (COND ((EQL |i1| |i2|) "skip")
1399                                                  ('T
1400                                                   (|GROUPP;infer_coincidencies|
1401                                                    |ct| |et| |i1| |i2| |trace|
1402                                                    $)))))))))))))
1403                (LETT |i| (|inc_SI| |i|)) (GO G190) G191 (EXIT NIL))))))
1404
1405(SDEFUN |GROUPP;inferFromRelations|
1406        ((|state| |Record|
1407          (|:| |coset_table| #1=(|TwoDimensionalArray| (|NonNegativeInteger|)))
1408          (|:| |equiv_table| #2=(|OneDimensionalArray| (|NonNegativeInteger|)))
1409          (|:| |inverse_table|
1410               #3=(|OneDimensionalArray| (|NonNegativeInteger|)))
1411          (|:| |closed_point| (|NonNegativeInteger|))
1412          (|:| |number_of_generators| (|NonNegativeInteger|))
1413          (|:| |number_of_indices| #4=(|NonNegativeInteger|))
1414          (|:| |number_of_points| (|NonNegativeInteger|))
1415          (|:| |max_number_of_indices| (|NonNegativeInteger|)))
1416         (|rels| |List| #5=(|List| (|NonNegativeInteger|)))
1417         (|rrels| |List| (|List| (|NonNegativeInteger|)))
1418         (|rel_lens| |List| (|NonNegativeInteger|)) (|trace| |Boolean|)
1419         ($ |Boolean|))
1420        (SPROG
1421         ((#6=#:G785 NIL) (|npb| #7=(|NonNegativeInteger|)) (|npe| #7#)
1422          (|genIn| (|Integer|)) (|pb| #8=(|NonNegativeInteger|))
1423          (|gb| #9=(|NonNegativeInteger|)) (|gap| (|Integer|))
1424          (|add_gen| (|Integer|)) (|n_ind| #4#) (|o_size| (|Integer|))
1425          (|et| #2#) (|ct| #1#) (#10=#:G801 NIL) (|i| #8#) (#11=#:G800 NIL)
1426          (|j| NIL) (#12=#:G799 NIL)
1427          (|net| (|OneDimensionalArray| (|NonNegativeInteger|)))
1428          (|nct| (|TwoDimensionalArray| (|NonNegativeInteger|)))
1429          (|n_ct_cols| (|Integer|)) (|n_size| (|NonNegativeInteger|))
1430          (#13=#:G789 NIL) (|prel| #5#) (|add_to| #9#) (#14=#:G798 NIL)
1431          (#15=#:G797 NIL) (#16=#:G796 NIL) (#17=#:G795 NIL) (|pe| #8#)
1432          (|ge| #9#) (#18=#:G786 NIL) (|genInv| (|Integer|)) (#19=#:G794 NIL)
1433          (|genIndex| NIL) (#20=#:G787 NIL) (#21=#:G793 NIL) (#22=#:G790 NIL)
1434          (|rel| NIL) (#23=#:G791 NIL) (|rrel| NIL) (#24=#:G792 NIL)
1435          (|r_len| NIL) (#25=#:G788 NIL) (|closed| (|Boolean|)) (|pn| #8#)
1436          (|add_gap| (|Integer|)) (|inv_tab| #3#))
1437         (SEQ
1438          (EXIT
1439           (SEQ (LETT |ct| (QVELT |state| 0)) (LETT |et| (QVELT |state| 1))
1440                (LETT |n_ind| (QVELT |state| 5))
1441                (LETT |inv_tab| (QVELT |state| 2))
1442                (COND
1443                 (|trace|
1444                  (SPADCALL
1445                   (SPADCALL
1446                    (SPADCALL "inferFromRelations rels=" (QREFELT $ 43))
1447                    (SPADCALL |rels| (QREFELT $ 91)) (QREFELT $ 42))
1448                   (QREFELT $ 54))))
1449                (LETT |add_to| 0) (LETT |add_gen| 0) (LETT |add_gap| 0)
1450                (LETT |pn| (+ (QVELT |state| 3) 1))
1451                (EXIT
1452                 (COND ((> |pn| |n_ind|) NIL)
1453                       ('T
1454                        (SEQ (QSETVELT |state| 3 |pn|)
1455                             (COND
1456                              ((NULL (EQL (QAREF1O |et| |pn| 1) |pn|))
1457                               (EXIT 'T)))
1458                             (LETT |o_size| (SPADCALL |ct| (QREFELT $ 92)))
1459                             (LETT |closed| NIL)
1460                             (SEQ
1461                              (EXIT
1462                               (SEQ G190
1463                                    (COND ((NULL (NULL |closed|)) (GO G191)))
1464                                    (SEQ (LETT |closed| 'T)
1465                                         (COND
1466                                          ((NULL
1467                                            (EQL (QAREF1O |et| |pn| 1) |pn|))
1468                                           (EXIT
1469                                            (PROGN
1470                                             (LETT #25# |$NoValue|)
1471                                             (GO #26=#:G781)))))
1472                                         (SEQ (LETT |r_len| NIL)
1473                                              (LETT #24# |rel_lens|)
1474                                              (LETT |rrel| NIL)
1475                                              (LETT #23# |rrels|)
1476                                              (LETT |rel| NIL)
1477                                              (LETT #22# |rels|) G190
1478                                              (COND
1479                                               ((OR (ATOM #22#)
1480                                                    (PROGN
1481                                                     (LETT |rel| (CAR #22#))
1482                                                     NIL)
1483                                                    (ATOM #23#)
1484                                                    (PROGN
1485                                                     (LETT |rrel| (CAR #23#))
1486                                                     NIL)
1487                                                    (ATOM #24#)
1488                                                    (PROGN
1489                                                     (LETT |r_len| (CAR #24#))
1490                                                     NIL))
1491                                                (GO G191)))
1492                                              (SEQ (LETT |gb| 0)
1493                                                   (LETT |pb| |pn|)
1494                                                   (LETT |i| |pn|)
1495                                                   (LETT |genIn| 0)
1496                                                   (SEQ
1497                                                    (EXIT
1498                                                     (SEQ (LETT |genIndex| NIL)
1499                                                          (LETT #21# |rel|)
1500                                                          G190
1501                                                          (COND
1502                                                           ((OR (ATOM #21#)
1503                                                                (PROGN
1504                                                                 (LETT
1505                                                                  |genIndex|
1506                                                                  (CAR #21#))
1507                                                                 NIL))
1508                                                            (GO G191)))
1509                                                          (SEQ
1510                                                           (LETT |genIn|
1511                                                                 |genIndex|)
1512                                                           (LETT |i|
1513                                                                 (QAREF2O |ct|
1514                                                                          |i|
1515                                                                          |genIndex|
1516                                                                          1 1))
1517                                                           (EXIT
1518                                                            (COND
1519                                                             ((EQL |i| 0)
1520                                                              (PROGN
1521                                                               (LETT #20#
1522                                                                     |$NoValue|)
1523                                                               (GO
1524                                                                #27=#:G749)))
1525                                                             ('T
1526                                                              (SEQ
1527                                                               (LETT |i|
1528                                                                     (|GROUPP;find|
1529                                                                      |et| |i|
1530                                                                      $))
1531                                                               (LETT |gb|
1532                                                                     (+ |gb|
1533                                                                        1))
1534                                                               (EXIT
1535                                                                (LETT |pb|
1536                                                                      |i|)))))))
1537                                                          (LETT #21#
1538                                                                (CDR #21#))
1539                                                          (GO G190) G191
1540                                                          (EXIT NIL)))
1541                                                    #27# (EXIT #20#))
1542                                                   (LETT |gap|
1543                                                         (- |r_len| |gb|))
1544                                                   (LETT |ge| 0)
1545                                                   (LETT |pe| |pn|)
1546                                                   (LETT |i| |pn|)
1547                                                   (LETT |genInv| 0)
1548                                                   (SEQ
1549                                                    (EXIT
1550                                                     (SEQ (LETT |genIndex| NIL)
1551                                                          (LETT #19# |rrel|)
1552                                                          G190
1553                                                          (COND
1554                                                           ((OR (ATOM #19#)
1555                                                                (PROGN
1556                                                                 (LETT
1557                                                                  |genIndex|
1558                                                                  (CAR #19#))
1559                                                                 NIL)
1560                                                                (NULL
1561                                                                 (< |ge|
1562                                                                    |gap|)))
1563                                                            (GO G191)))
1564                                                          (SEQ
1565                                                           (LETT |genInv|
1566                                                                 |genIndex|)
1567                                                           (LETT |i|
1568                                                                 (QAREF2O |ct|
1569                                                                          |i|
1570                                                                          |genIndex|
1571                                                                          1 1))
1572                                                           (EXIT
1573                                                            (COND
1574                                                             ((EQL |i| 0)
1575                                                              (PROGN
1576                                                               (LETT #18#
1577                                                                     |$NoValue|)
1578                                                               (GO
1579                                                                #28=#:G752)))
1580                                                             ('T
1581                                                              (SEQ
1582                                                               (LETT |i|
1583                                                                     (|GROUPP;find|
1584                                                                      |et| |i|
1585                                                                      $))
1586                                                               (LETT |ge|
1587                                                                     (+ |ge|
1588                                                                        1))
1589                                                               (EXIT
1590                                                                (LETT |pe|
1591                                                                      |i|)))))))
1592                                                          (LETT #19#
1593                                                                (CDR #19#))
1594                                                          (GO G190) G191
1595                                                          (EXIT NIL)))
1596                                                    #28# (EXIT #18#))
1597                                                   (LETT |gap| (- |gap| |ge|))
1598                                                   (COND
1599                                                    ((> |gap| 1)
1600                                                     (SEQ (LETT |add_to| |pb|)
1601                                                          (LETT |add_gen|
1602                                                                |genIn|)
1603                                                          (SEQ
1604                                                           (COND
1605                                                            ((>= |n_ind|
1606                                                                 |o_size|)
1607                                                             (COND
1608                                                              ((EQL |n_ind|
1609                                                                    (QVELT
1610                                                                     |state|
1611                                                                     7))
1612                                                               (PROGN
1613                                                                (LETT #13# 'T)
1614                                                                (GO
1615                                                                 #29=#:G784)))
1616                                                              ('T
1617                                                               (SEQ
1618                                                                (LETT |n_size|
1619                                                                      (MIN
1620                                                                       (* 2
1621                                                                          |o_size|)
1622                                                                       (QVELT
1623                                                                        |state|
1624                                                                        7)))
1625                                                                (LETT
1626                                                                 |n_ct_cols|
1627                                                                 (SPADCALL |ct|
1628                                                                           (QREFELT
1629                                                                            $
1630                                                                            89)))
1631                                                                (LETT |nct|
1632                                                                      (SPADCALL
1633                                                                       |n_size|
1634                                                                       |n_ct_cols|
1635                                                                       0
1636                                                                       (QREFELT
1637                                                                        $ 93)))
1638                                                                (LETT |net|
1639                                                                      (SPADCALL
1640                                                                       |n_size|
1641                                                                       0
1642                                                                       (QREFELT
1643                                                                        $ 95)))
1644                                                                (SEQ
1645                                                                 (LETT |i| 1)
1646                                                                 (LETT #17#
1647                                                                       |o_size|)
1648                                                                 G190
1649                                                                 (COND
1650                                                                  ((|greater_SI|
1651                                                                    |i| #17#)
1652                                                                   (GO G191)))
1653                                                                 (SEQ
1654                                                                  (QSETAREF1O
1655                                                                   |net| |i|
1656                                                                   (QAREF1O
1657                                                                    |et| |i| 1)
1658                                                                   1)
1659                                                                  (EXIT
1660                                                                   (SEQ
1661                                                                    (LETT |j|
1662                                                                          1)
1663                                                                    (LETT #16#
1664                                                                          |n_ct_cols|)
1665                                                                    G190
1666                                                                    (COND
1667                                                                     ((|greater_SI|
1668                                                                       |j|
1669                                                                       #16#)
1670                                                                      (GO
1671                                                                       G191)))
1672                                                                    (SEQ
1673                                                                     (EXIT
1674                                                                      (QSETAREF2O
1675                                                                       |nct|
1676                                                                       |i| |j|
1677                                                                       (QAREF2O
1678                                                                        |ct|
1679                                                                        |i| |j|
1680                                                                        1 1)
1681                                                                       1 1)))
1682                                                                    (LETT |j|
1683                                                                          (|inc_SI|
1684                                                                           |j|))
1685                                                                    (GO G190)
1686                                                                    G191
1687                                                                    (EXIT
1688                                                                     NIL))))
1689                                                                 (LETT |i|
1690                                                                       (|inc_SI|
1691                                                                        |i|))
1692                                                                 (GO G190) G191
1693                                                                 (EXIT NIL))
1694                                                                (SEQ
1695                                                                 (LETT |i|
1696                                                                       (+
1697                                                                        |o_size|
1698                                                                        1))
1699                                                                 (LETT #15#
1700                                                                       |n_size|)
1701                                                                 G190
1702                                                                 (COND
1703                                                                  ((> |i| #15#)
1704                                                                   (GO G191)))
1705                                                                 (SEQ
1706                                                                  (EXIT
1707                                                                   (QSETAREF1O
1708                                                                    |net| |i|
1709                                                                    |i| 1)))
1710                                                                 (LETT |i|
1711                                                                       (+ |i|
1712                                                                          1))
1713                                                                 (GO G190) G191
1714                                                                 (EXIT NIL))
1715                                                                (LETT |ct|
1716                                                                      |nct|)
1717                                                                (LETT |et|
1718                                                                      |net|)
1719                                                                (LETT |o_size|
1720                                                                      |n_size|)
1721                                                                (QSETVELT
1722                                                                 |state| 0
1723                                                                 |ct|)
1724                                                                (EXIT
1725                                                                 (QSETVELT
1726                                                                  |state| 1
1727                                                                  |et|)))))))
1728                                                           (LETT |n_ind|
1729                                                                 (+ |n_ind| 1))
1730                                                           (COND
1731                                                            (|trace|
1732                                                             (SPADCALL
1733                                                              (SPADCALL
1734                                                               (SPADCALL
1735                                                                (SPADCALL
1736                                                                 (SPADCALL
1737                                                                  (SPADCALL
1738                                                                   (SPADCALL
1739                                                                    #30="adding action of "
1740                                                                    (QREFELT $
1741                                                                             43))
1742                                                                   (SPADCALL
1743                                                                    |add_gen|
1744                                                                    (QREFELT $
1745                                                                             96))
1746                                                                   (QREFELT $
1747                                                                            42))
1748                                                                  (SPADCALL
1749                                                                   #31=" on "
1750                                                                   (QREFELT $
1751                                                                            43))
1752                                                                  (QREFELT $
1753                                                                           42))
1754                                                                 (SPADCALL
1755                                                                  |add_to|
1756                                                                  (QREFELT $
1757                                                                           66))
1758                                                                 (QREFELT $
1759                                                                          42))
1760                                                                (SPADCALL
1761                                                                 #32=" to be "
1762                                                                 (QREFELT $
1763                                                                          43))
1764                                                                (QREFELT $ 42))
1765                                                               (SPADCALL
1766                                                                |n_ind|
1767                                                                (QREFELT $ 66))
1768                                                               (QREFELT $ 42))
1769                                                              (QREFELT $ 54))))
1770                                                           (QSETAREF2O |ct|
1771                                                                       |add_to|
1772                                                                       |add_gen|
1773                                                                       |n_ind|
1774                                                                       1 1)
1775                                                           (LETT |add_gen|
1776                                                                 (SPADCALL
1777                                                                  |inv_tab|
1778                                                                  |add_gen|
1779                                                                  (QREFELT $
1780                                                                           97)))
1781                                                           (QSETAREF2O |ct|
1782                                                                       |n_ind|
1783                                                                       |add_gen|
1784                                                                       |add_to|
1785                                                                       1 1)
1786                                                           (COND
1787                                                            (|trace|
1788                                                             (SPADCALL
1789                                                              (|GROUPP;outStatus|
1790                                                               |state| $)
1791                                                              (QREFELT $ 54))))
1792                                                           (EXIT
1793                                                            (QSETVELT |state| 5
1794                                                                      |n_ind|)))
1795                                                          (LETT |gap|
1796                                                                (- |gap| 1))
1797                                                          (LETT |prel| |rel|)
1798                                                          (SEQ (LETT |i| 0)
1799                                                               (LETT #14# |gb|)
1800                                                               G190
1801                                                               (COND
1802                                                                ((|greater_SI|
1803                                                                  |i| #14#)
1804                                                                 (GO G191)))
1805                                                               (SEQ
1806                                                                (EXIT
1807                                                                 (LETT |prel|
1808                                                                       (CDR
1809                                                                        |prel|))))
1810                                                               (LETT |i|
1811                                                                     (|inc_SI|
1812                                                                      |i|))
1813                                                               (GO G190) G191
1814                                                               (EXIT NIL))
1815                                                          (LETT |gb|
1816                                                                (+ |gb| 1))
1817                                                          (SEQ G190
1818                                                               (COND
1819                                                                ((NULL
1820                                                                  (> |gap| 1))
1821                                                                 (GO G191)))
1822                                                               (SEQ
1823                                                                (LETT |add_to|
1824                                                                      |n_ind|)
1825                                                                (LETT |add_gen|
1826                                                                      (|SPADfirst|
1827                                                                       |prel|))
1828                                                                (LETT |prel|
1829                                                                      (CDR
1830                                                                       |prel|))
1831                                                                (SEQ
1832                                                                 (COND
1833                                                                  ((>= |n_ind|
1834                                                                       |o_size|)
1835                                                                   (COND
1836                                                                    ((EQL
1837                                                                      |n_ind|
1838                                                                      (QVELT
1839                                                                       |state|
1840                                                                       7))
1841                                                                     (PROGN
1842                                                                      (LETT
1843                                                                       #13# 'T)
1844                                                                      (GO
1845                                                                       #29#)))
1846                                                                    ('T
1847                                                                     (SEQ
1848                                                                      (LETT
1849                                                                       |n_size|
1850                                                                       (MIN
1851                                                                        (* 2
1852                                                                           |o_size|)
1853                                                                        (QVELT
1854                                                                         |state|
1855                                                                         7)))
1856                                                                      (LETT
1857                                                                       |n_ct_cols|
1858                                                                       (SPADCALL
1859                                                                        |ct|
1860                                                                        (QREFELT
1861                                                                         $
1862                                                                         89)))
1863                                                                      (LETT
1864                                                                       |nct|
1865                                                                       (SPADCALL
1866                                                                        |n_size|
1867                                                                        |n_ct_cols|
1868                                                                        0
1869                                                                        (QREFELT
1870                                                                         $
1871                                                                         93)))
1872                                                                      (LETT
1873                                                                       |net|
1874                                                                       (SPADCALL
1875                                                                        |n_size|
1876                                                                        0
1877                                                                        (QREFELT
1878                                                                         $
1879                                                                         95)))
1880                                                                      (SEQ
1881                                                                       (LETT
1882                                                                        |i| 1)
1883                                                                       (LETT
1884                                                                        #12#
1885                                                                        |o_size|)
1886                                                                       G190
1887                                                                       (COND
1888                                                                        ((|greater_SI|
1889                                                                          |i|
1890                                                                          #12#)
1891                                                                         (GO
1892                                                                          G191)))
1893                                                                       (SEQ
1894                                                                        (QSETAREF1O
1895                                                                         |net|
1896                                                                         |i|
1897                                                                         (QAREF1O
1898                                                                          |et|
1899                                                                          |i|
1900                                                                          1)
1901                                                                         1)
1902                                                                        (EXIT
1903                                                                         (SEQ
1904                                                                          (LETT
1905                                                                           |j|
1906                                                                           1)
1907                                                                          (LETT
1908                                                                           #11#
1909                                                                           |n_ct_cols|)
1910                                                                          G190
1911                                                                          (COND
1912                                                                           ((|greater_SI|
1913                                                                             |j|
1914                                                                             #11#)
1915                                                                            (GO
1916                                                                             G191)))
1917                                                                          (SEQ
1918                                                                           (EXIT
1919                                                                            (QSETAREF2O
1920                                                                             |nct|
1921                                                                             |i|
1922                                                                             |j|
1923                                                                             (QAREF2O
1924                                                                              |ct|
1925                                                                              |i|
1926                                                                              |j|
1927                                                                              1
1928                                                                              1)
1929                                                                             1
1930                                                                             1)))
1931                                                                          (LETT
1932                                                                           |j|
1933                                                                           (|inc_SI|
1934                                                                            |j|))
1935                                                                          (GO
1936                                                                           G190)
1937                                                                          G191
1938                                                                          (EXIT
1939                                                                           NIL))))
1940                                                                       (LETT
1941                                                                        |i|
1942                                                                        (|inc_SI|
1943                                                                         |i|))
1944                                                                       (GO
1945                                                                        G190)
1946                                                                       G191
1947                                                                       (EXIT
1948                                                                        NIL))
1949                                                                      (SEQ
1950                                                                       (LETT
1951                                                                        |i|
1952                                                                        (+
1953                                                                         |o_size|
1954                                                                         1))
1955                                                                       (LETT
1956                                                                        #10#
1957                                                                        |n_size|)
1958                                                                       G190
1959                                                                       (COND
1960                                                                        ((> |i|
1961                                                                            #10#)
1962                                                                         (GO
1963                                                                          G191)))
1964                                                                       (SEQ
1965                                                                        (EXIT
1966                                                                         (QSETAREF1O
1967                                                                          |net|
1968                                                                          |i|
1969                                                                          |i|
1970                                                                          1)))
1971                                                                       (LETT
1972                                                                        |i|
1973                                                                        (+ |i|
1974                                                                           1))
1975                                                                       (GO
1976                                                                        G190)
1977                                                                       G191
1978                                                                       (EXIT
1979                                                                        NIL))
1980                                                                      (LETT
1981                                                                       |ct|
1982                                                                       |nct|)
1983                                                                      (LETT
1984                                                                       |et|
1985                                                                       |net|)
1986                                                                      (LETT
1987                                                                       |o_size|
1988                                                                       |n_size|)
1989                                                                      (QSETVELT
1990                                                                       |state|
1991                                                                       0 |ct|)
1992                                                                      (EXIT
1993                                                                       (QSETVELT
1994                                                                        |state|
1995                                                                        1
1996                                                                        |et|)))))))
1997                                                                 (LETT |n_ind|
1998                                                                       (+
1999                                                                        |n_ind|
2000                                                                        1))
2001                                                                 (COND
2002                                                                  (|trace|
2003                                                                   (SPADCALL
2004                                                                    (SPADCALL
2005                                                                     (SPADCALL
2006                                                                      (SPADCALL
2007                                                                       (SPADCALL
2008                                                                        (SPADCALL
2009                                                                         (SPADCALL
2010                                                                          #30#
2011                                                                          (QREFELT
2012                                                                           $
2013                                                                           43))
2014                                                                         (SPADCALL
2015                                                                          |add_gen|
2016                                                                          (QREFELT
2017                                                                           $
2018                                                                           96))
2019                                                                         (QREFELT
2020                                                                          $
2021                                                                          42))
2022                                                                        (SPADCALL
2023                                                                         #31#
2024                                                                         (QREFELT
2025                                                                          $
2026                                                                          43))
2027                                                                        (QREFELT
2028                                                                         $ 42))
2029                                                                       (SPADCALL
2030                                                                        |add_to|
2031                                                                        (QREFELT
2032                                                                         $ 66))
2033                                                                       (QREFELT
2034                                                                        $ 42))
2035                                                                      (SPADCALL
2036                                                                       #32#
2037                                                                       (QREFELT
2038                                                                        $ 43))
2039                                                                      (QREFELT
2040                                                                       $ 42))
2041                                                                     (SPADCALL
2042                                                                      |n_ind|
2043                                                                      (QREFELT
2044                                                                       $ 66))
2045                                                                     (QREFELT $
2046                                                                              42))
2047                                                                    (QREFELT $
2048                                                                             54))))
2049                                                                 (QSETAREF2O
2050                                                                  |ct| |add_to|
2051                                                                  |add_gen|
2052                                                                  |n_ind| 1 1)
2053                                                                 (LETT
2054                                                                  |add_gen|
2055                                                                  (SPADCALL
2056                                                                   |inv_tab|
2057                                                                   |add_gen|
2058                                                                   (QREFELT $
2059                                                                            97)))
2060                                                                 (QSETAREF2O
2061                                                                  |ct| |n_ind|
2062                                                                  |add_gen|
2063                                                                  |add_to| 1 1)
2064                                                                 (COND
2065                                                                  (|trace|
2066                                                                   (SPADCALL
2067                                                                    (|GROUPP;outStatus|
2068                                                                     |state| $)
2069                                                                    (QREFELT $
2070                                                                             54))))
2071                                                                 (EXIT
2072                                                                  (QSETVELT
2073                                                                   |state| 5
2074                                                                   |n_ind|)))
2075                                                                (LETT |gap|
2076                                                                      (- |gap|
2077                                                                         1))
2078                                                                (EXIT
2079                                                                 (LETT |gb|
2080                                                                       (+ |gb|
2081                                                                          1))))
2082                                                               NIL (GO G190)
2083                                                               G191 (EXIT NIL))
2084                                                          (LETT |pb| |n_ind|)
2085                                                          (EXIT
2086                                                           (LETT |genIn|
2087                                                                 (|SPADfirst|
2088                                                                  |prel|))))))
2089                                                   (EXIT
2090                                                    (COND
2091                                                     ((EQL |gap| 1)
2092                                                      (SEQ
2093                                                       (EXIT
2094                                                        (SEQ
2095                                                         (SEQ
2096                                                          (LETT |npe|
2097                                                                (QAREF2O |ct|
2098                                                                         |pb|
2099                                                                         |genIn|
2100                                                                         1 1))
2101                                                          (EXIT
2102                                                           (COND
2103                                                            ((NULL
2104                                                              (EQL |npe| 0))
2105                                                             (PROGN
2106                                                              (LETT #6#
2107                                                                    (COND
2108                                                                     ((EQL
2109                                                                       |npe|
2110                                                                       |pe|)
2111                                                                      "skip")
2112                                                                     ('T
2113                                                                      (SEQ
2114                                                                       (COND
2115                                                                        (|trace|
2116                                                                         (SPADCALL
2117                                                                          (SPADCALL
2118                                                                           (SPADCALL
2119                                                                            (SPADCALL
2120                                                                             (SPADCALL
2121                                                                              (SPADCALL
2122                                                                               (SPADCALL
2123                                                                                (SPADCALL
2124                                                                                 (SPADCALL
2125                                                                                  "coincidence: "
2126                                                                                  (QREFELT
2127                                                                                   $
2128                                                                                   43))
2129                                                                                 (SPADCALL
2130                                                                                  |pe|
2131                                                                                  (QREFELT
2132                                                                                   $
2133                                                                                   66))
2134                                                                                 (QREFELT
2135                                                                                  $
2136                                                                                  42))
2137                                                                                (SPADCALL
2138                                                                                 " "
2139                                                                                 (QREFELT
2140                                                                                  $
2141                                                                                  43))
2142                                                                                (QREFELT
2143                                                                                 $
2144                                                                                 42))
2145                                                                               (SPADCALL
2146                                                                                |npe|
2147                                                                                (QREFELT
2148                                                                                 $
2149                                                                                 66))
2150                                                                               (QREFELT
2151                                                                                $
2152                                                                                42))
2153                                                                              (SPADCALL
2154                                                                               " rel = "
2155                                                                               (QREFELT
2156                                                                                $
2157                                                                                43))
2158                                                                              (QREFELT
2159                                                                               $
2160                                                                               42))
2161                                                                             (SPADCALL
2162                                                                              |rel|
2163                                                                              (QREFELT
2164                                                                               $
2165                                                                               98))
2166                                                                             (QREFELT
2167                                                                              $
2168                                                                              42))
2169                                                                            (SPADCALL
2170                                                                             " pn = "
2171                                                                             (QREFELT
2172                                                                              $
2173                                                                              43))
2174                                                                            (QREFELT
2175                                                                             $
2176                                                                             42))
2177                                                                           (SPADCALL
2178                                                                            |pn|
2179                                                                            (QREFELT
2180                                                                             $
2181                                                                             66))
2182                                                                           (QREFELT
2183                                                                            $
2184                                                                            42))
2185                                                                          (QREFELT
2186                                                                           $
2187                                                                           54))))
2188                                                                       (EXIT
2189                                                                        (|GROUPP;infer_coincidencies|
2190                                                                         |ct|
2191                                                                         |et|
2192                                                                         |pe|
2193                                                                         |npe|
2194                                                                         |trace|
2195                                                                         $))))))
2196                                                              (GO
2197                                                               #33=#:G776))))))
2198                                                         (COND
2199                                                          (|trace|
2200                                                           (SPADCALL
2201                                                            (SPADCALL
2202                                                             (SPADCALL
2203                                                              (SPADCALL
2204                                                               (SPADCALL
2205                                                                "inferFromRelations genIn="
2206                                                                (QREFELT $ 43))
2207                                                               (SPADCALL
2208                                                                |genIn|
2209                                                                (QREFELT $ 96))
2210                                                               (QREFELT $ 42))
2211                                                              (SPADCALL " gb="
2212                                                                        (QREFELT
2213                                                                         $ 43))
2214                                                              (QREFELT $ 42))
2215                                                             (SPADCALL |gb|
2216                                                                       (QREFELT
2217                                                                        $ 66))
2218                                                             (QREFELT $ 42))
2219                                                            (QREFELT $ 54))))
2220                                                         (COND
2221                                                          ((NULL
2222                                                            (EQL
2223                                                             (QAREF1O |inv_tab|
2224                                                                      |genIn|
2225                                                                      1)
2226                                                             |genInv|))
2227                                                           (EXIT
2228                                                            (|error|
2229                                                             "impossible 3"))))
2230                                                         (QSETAREF2O |ct| |pb|
2231                                                                     |genIn|
2232                                                                     |pe| 1 1)
2233                                                         (SEQ
2234                                                          (LETT |npb|
2235                                                                (QAREF2O |ct|
2236                                                                         |pe|
2237                                                                         |genInv|
2238                                                                         1 1))
2239                                                          (EXIT
2240                                                           (COND
2241                                                            ((NULL
2242                                                              (EQL |npb| 0))
2243                                                             (PROGN
2244                                                              (LETT #6#
2245                                                                    (COND
2246                                                                     ((EQL
2247                                                                       |npb|
2248                                                                       |pb|)
2249                                                                      "skip")
2250                                                                     ('T
2251                                                                      (SEQ
2252                                                                       (COND
2253                                                                        (|trace|
2254                                                                         (SPADCALL
2255                                                                          (SPADCALL
2256                                                                           (SPADCALL
2257                                                                            (SPADCALL
2258                                                                             (SPADCALL
2259                                                                              (SPADCALL
2260                                                                               (SPADCALL
2261                                                                                (SPADCALL
2262                                                                                 (SPADCALL
2263                                                                                  "coincidence: "
2264                                                                                  (QREFELT
2265                                                                                   $
2266                                                                                   43))
2267                                                                                 (SPADCALL
2268                                                                                  |npb|
2269                                                                                  (QREFELT
2270                                                                                   $
2271                                                                                   66))
2272                                                                                 (QREFELT
2273                                                                                  $
2274                                                                                  42))
2275                                                                                (SPADCALL
2276                                                                                 " "
2277                                                                                 (QREFELT
2278                                                                                  $
2279                                                                                  43))
2280                                                                                (QREFELT
2281                                                                                 $
2282                                                                                 42))
2283                                                                               (SPADCALL
2284                                                                                |pb|
2285                                                                                (QREFELT
2286                                                                                 $
2287                                                                                 66))
2288                                                                               (QREFELT
2289                                                                                $
2290                                                                                42))
2291                                                                              (SPADCALL
2292                                                                               " rel = "
2293                                                                               (QREFELT
2294                                                                                $
2295                                                                                43))
2296                                                                              (QREFELT
2297                                                                               $
2298                                                                               42))
2299                                                                             (SPADCALL
2300                                                                              |rel|
2301                                                                              (QREFELT
2302                                                                               $
2303                                                                               98))
2304                                                                             (QREFELT
2305                                                                              $
2306                                                                              42))
2307                                                                            (SPADCALL
2308                                                                             " pn = "
2309                                                                             (QREFELT
2310                                                                              $
2311                                                                              43))
2312                                                                            (QREFELT
2313                                                                             $
2314                                                                             42))
2315                                                                           (SPADCALL
2316                                                                            |pn|
2317                                                                            (QREFELT
2318                                                                             $
2319                                                                             66))
2320                                                                           (QREFELT
2321                                                                            $
2322                                                                            42))
2323                                                                          (QREFELT
2324                                                                           $
2325                                                                           54))))
2326                                                                       (EXIT
2327                                                                        (|GROUPP;infer_coincidencies|
2328                                                                         |ct|
2329                                                                         |et|
2330                                                                         |pb|
2331                                                                         |npb|
2332                                                                         |trace|
2333                                                                         $))))))
2334                                                              (GO #33#))))))
2335                                                         (EXIT
2336                                                          (QSETAREF2O |ct| |pe|
2337                                                                      |genInv|
2338                                                                      |pb| 1
2339                                                                      1))))
2340                                                       #33# (EXIT #6#)))
2341                                                     ((EQL |gap| 0)
2342                                                      (COND
2343                                                       ((EQL |pb| |pe|) "skip")
2344                                                       ('T
2345                                                        (SEQ
2346                                                         (COND
2347                                                          (|trace|
2348                                                           (SPADCALL
2349                                                            (SPADCALL
2350                                                             (SPADCALL
2351                                                              (SPADCALL
2352                                                               (SPADCALL
2353                                                                (SPADCALL
2354                                                                 (SPADCALL
2355                                                                  (SPADCALL
2356                                                                   (SPADCALL
2357                                                                    "coincidence: "
2358                                                                    (QREFELT $
2359                                                                             43))
2360                                                                   (SPADCALL
2361                                                                    |pb|
2362                                                                    (QREFELT $
2363                                                                             66))
2364                                                                   (QREFELT $
2365                                                                            42))
2366                                                                  (SPADCALL " "
2367                                                                            (QREFELT
2368                                                                             $
2369                                                                             43))
2370                                                                  (QREFELT $
2371                                                                           42))
2372                                                                 (SPADCALL |pe|
2373                                                                           (QREFELT
2374                                                                            $
2375                                                                            66))
2376                                                                 (QREFELT $
2377                                                                          42))
2378                                                                (SPADCALL
2379                                                                 " rel = "
2380                                                                 (QREFELT $
2381                                                                          43))
2382                                                                (QREFELT $ 42))
2383                                                               (SPADCALL |rel|
2384                                                                         (QREFELT
2385                                                                          $
2386                                                                          98))
2387                                                               (QREFELT $ 42))
2388                                                              (SPADCALL
2389                                                               " pn = "
2390                                                               (QREFELT $ 43))
2391                                                              (QREFELT $ 42))
2392                                                             (SPADCALL |pn|
2393                                                                       (QREFELT
2394                                                                        $ 66))
2395                                                             (QREFELT $ 42))
2396                                                            (QREFELT $ 54))))
2397                                                         (EXIT
2398                                                          (|GROUPP;infer_coincidencies|
2399                                                           |ct| |et| |pb| |pe|
2400                                                           |trace| $))))))
2401                                                     ('T
2402                                                      (|error|
2403                                                       "impossible 4")))))
2404                                              (LETT #22#
2405                                                    (PROG1 (CDR #22#)
2406                                                      (LETT #23#
2407                                                            (PROG1 (CDR #23#)
2408                                                              (LETT #24#
2409                                                                    (CDR
2410                                                                     #24#))))))
2411                                              (GO G190) G191 (EXIT NIL))
2412                                         (EXIT
2413                                          (COND
2414                                           ((NULL |closed|)
2415                                            (|error| "impossible 5")))))
2416                                    NIL (GO G190) G191 (EXIT NIL)))
2417                              #26# (EXIT #25#))
2418                             (EXIT 'T)))))))
2419          #29# (EXIT #13#))))
2420
2421(SDEFUN |GROUPP;invertMap|
2422        ((|a| |TwoDimensionalArray| (|NonNegativeInteger|))
2423         ($ |TwoDimensionalArray| (|NonNegativeInteger|)))
2424        (SPROG
2425         ((|i| (|NonNegativeInteger|)) (#1=#:G806 NIL) (|x| NIL)
2426          (|invm| (|TwoDimensionalArray| (|NonNegativeInteger|))))
2427         (SEQ
2428          (LETT |invm|
2429                (SPADCALL (SPADCALL |a| (QREFELT $ 83))
2430                          (SPADCALL |a| (QREFELT $ 99)) 0 (QREFELT $ 93)))
2431          (SEQ (LETT |x| 1) (LETT #1# (SPADCALL |a| (QREFELT $ 83))) G190
2432               (COND ((|greater_SI| |x| #1#) (GO G191)))
2433               (SEQ (LETT |i| (SPADCALL |a| |x| 1 (QREFELT $ 100)))
2434                    (EXIT
2435                     (COND
2436                      ((SPADCALL |i| 0 (QREFELT $ 58))
2437                       (SPADCALL |invm| |i| 1 |x| (QREFELT $ 101))))))
2438               (LETT |x| (|inc_SI| |x|)) (GO G190) G191 (EXIT NIL))
2439          (EXIT |invm|))))
2440
2441(SDEFUN |GROUPP;relatorTables|
2442        ((|state| |Record|
2443          (|:| |coset_table| #1=(|TwoDimensionalArray| (|NonNegativeInteger|)))
2444          (|:| |equiv_table| (|OneDimensionalArray| (|NonNegativeInteger|)))
2445          (|:| |inverse_table| (|OneDimensionalArray| (|NonNegativeInteger|)))
2446          (|:| |closed_point| (|NonNegativeInteger|))
2447          (|:| |number_of_generators| (|NonNegativeInteger|))
2448          (|:| |number_of_indices| #2=(|NonNegativeInteger|))
2449          (|:| |number_of_points| (|NonNegativeInteger|))
2450          (|:| |max_number_of_indices| (|NonNegativeInteger|)))
2451         (|rels| |List| (|List| (|Integer|)))
2452         ($ |List| (|TwoDimensionalArray| (|NonNegativeInteger|))))
2453        (SPROG
2454         ((|relators| (|List| (|TwoDimensionalArray| (|NonNegativeInteger|))))
2455          (|relatorTrim| #3=(|TwoDimensionalArray| (|NonNegativeInteger|)))
2456          (|cts| (|List| (|TwoDimensionalArray| (|NonNegativeInteger|))))
2457          (|part2| (|NonNegativeInteger|)) (#4=#:G816 NIL) (|part1| #2#)
2458          (|relator| (|TwoDimensionalArray| (|NonNegativeInteger|)))
2459          (|fst| (|Boolean|)) (|relatorn| #3#) (|gNum| (|NonNegativeInteger|))
2460          (#5=#:G811 NIL) (#6=#:G827 NIL) (|g| NIL) (#7=#:G826 NIL) (|r| NIL)
2461          (|invGenLists|
2462           (|List| (|TwoDimensionalArray| (|NonNegativeInteger|))))
2463          (#8=#:G825 NIL) (|a| NIL) (#9=#:G824 NIL)
2464          (|genLists| (|List| (|TwoDimensionalArray| (|NonNegativeInteger|))))
2465          (#10=#:G809 NIL) (|np| #2#) (|ct| #1#))
2466         (SEQ (LETT |ct| (QVELT |state| 0)) (LETT |np| (QVELT |state| 5))
2467              (LETT |genLists|
2468                    (SPADCALL |ct|
2469                              (PROG1 (LETT #10# (SPADCALL |ct| (QREFELT $ 99)))
2470                                (|check_subtype2| (> #10# 0)
2471                                                  '(|PositiveInteger|)
2472                                                  '(|NonNegativeInteger|)
2473                                                  #10#))
2474                              (QREFELT $ 102)))
2475              (LETT |invGenLists|
2476                    (PROGN
2477                     (LETT #9# NIL)
2478                     (SEQ (LETT |a| NIL) (LETT #8# |genLists|) G190
2479                          (COND
2480                           ((OR (ATOM #8#) (PROGN (LETT |a| (CAR #8#)) NIL))
2481                            (GO G191)))
2482                          (SEQ
2483                           (EXIT
2484                            (LETT #9# (CONS (|GROUPP;invertMap| |a| $) #9#))))
2485                          (LETT #8# (CDR #8#)) (GO G190) G191
2486                          (EXIT (NREVERSE #9#)))))
2487              (LETT |relators| NIL)
2488              (SEQ (LETT |r| NIL) (LETT #7# |rels|) G190
2489                   (COND
2490                    ((OR (ATOM #7#) (PROGN (LETT |r| (CAR #7#)) NIL))
2491                     (GO G191)))
2492                   (SEQ (LETT |relator| (SPADCALL 0 0 0 (QREFELT $ 93)))
2493                        (LETT |fst| 'T)
2494                        (SEQ (LETT |g| NIL) (LETT #6# |r|) G190
2495                             (COND
2496                              ((OR (ATOM #6#) (PROGN (LETT |g| (CAR #6#)) NIL))
2497                               (GO G191)))
2498                             (SEQ
2499                              (LETT |gNum|
2500                                    (PROG1 (LETT #5# (ABS |g|))
2501                                      (|check_subtype2| (>= #5# 0)
2502                                                        '(|NonNegativeInteger|)
2503                                                        '(|Integer|) #5#)))
2504                              (LETT |relatorn|
2505                                    (COND
2506                                     ((> |g| 0)
2507                                      (SPADCALL |genLists| |gNum|
2508                                                (QREFELT $ 88)))
2509                                     ('T
2510                                      (SPADCALL |invGenLists| |gNum|
2511                                                (QREFELT $ 88)))))
2512                              (EXIT
2513                               (COND
2514                                (|fst|
2515                                 (SEQ (LETT |relator| |relatorn|)
2516                                      (EXIT (LETT |fst| NIL))))
2517                                ('T
2518                                 (LETT |relator|
2519                                       (SPADCALL |relator| |relatorn|
2520                                                 (QREFELT $ 103)))))))
2521                             (LETT #6# (CDR #6#)) (GO G190) G191 (EXIT NIL))
2522                        (LETT |relatorTrim| |relator|)
2523                        (COND
2524                         ((> (SPADCALL |relatorTrim| (QREFELT $ 83)) |np|)
2525                          (SEQ (LETT |part1| |np|)
2526                               (LETT |part2|
2527                                     (PROG2
2528                                         (LETT #4#
2529                                               (SPADCALL
2530                                                (SPADCALL |relatorTrim|
2531                                                          (QREFELT $ 83))
2532                                                |np| (QREFELT $ 85)))
2533                                         (QCDR #4#)
2534                                       (|check_union2| (QEQCAR #4# 0)
2535                                                       (|NonNegativeInteger|)
2536                                                       (|Union|
2537                                                        (|NonNegativeInteger|)
2538                                                        "failed")
2539                                                       #4#)))
2540                               (LETT |cts|
2541                                     (SPADCALL |relatorTrim|
2542                                               (LIST |part1| |part2|)
2543                                               (QREFELT $ 86)))
2544                               (EXIT
2545                                (LETT |relatorTrim|
2546                                      (SPADCALL |cts| 1 (QREFELT $ 88)))))))
2547                        (EXIT
2548                         (LETT |relators|
2549                               (SPADCALL |relators| |relatorTrim|
2550                                         (QREFELT $ 104)))))
2551                   (LETT #7# (CDR #7#)) (GO G190) G191 (EXIT NIL))
2552              (EXIT |relators|))))
2553
2554(SDEFUN |GROUPP;generators2Permutation|
2555        ((|state| |Record|
2556          (|:| |coset_table| #1=(|TwoDimensionalArray| (|NonNegativeInteger|)))
2557          (|:| |equiv_table| #2=(|OneDimensionalArray| (|NonNegativeInteger|)))
2558          (|:| |inverse_table| (|OneDimensionalArray| (|NonNegativeInteger|)))
2559          (|:| |closed_point| (|NonNegativeInteger|))
2560          (|:| |number_of_generators| #3=(|NonNegativeInteger|))
2561          (|:| |number_of_indices| #4=(|NonNegativeInteger|))
2562          (|:| |number_of_points| (|NonNegativeInteger|))
2563          (|:| |max_number_of_indices| (|NonNegativeInteger|)))
2564         (|trace| |Boolean|) ($ |PermutationGroup| (|Integer|)))
2565        (SPROG
2566         ((|pl| (|List| (|Permutation| (|Integer|))))
2567          (|p| (|Permutation| (|Integer|))) (|gl| (|List| (|Integer|)))
2568          (#5=#:G847 NIL) (|j| (|SingleInteger|)) (|kk| (|NonNegativeInteger|))
2569          (#6=#:G846 NIL) (#7=#:G845 NIL) (|i| NIL)
2570          (|perm_lists| (|Vector| (|List| (|Integer|)))) (#8=#:G844 NIL)
2571          (|net| (|OneDimensionalArray| (|NonNegativeInteger|))) (|et| #2#)
2572          (|n_inds| #4#) (|n_gens| #3#) (|ct| #1#))
2573         (SEQ (LETT |ct| (QVELT |state| 0))
2574              (COND
2575               (|trace|
2576                (SPADCALL
2577                 (SPADCALL "generators2Permutation generators=" (QREFELT $ 43))
2578                 (QREFELT $ 54))))
2579              (LETT |n_gens| (QVELT |state| 4))
2580              (LETT |n_inds| (QVELT |state| 5)) (LETT |et| (QVELT |state| 1))
2581              (LETT |net| (SPADCALL |n_inds| 0 (QREFELT $ 95))) (LETT |j| 0)
2582              (SEQ (LETT |i| 1) (LETT #8# |n_inds|) G190
2583                   (COND ((|greater_SI| |i| #8#) (GO G191)))
2584                   (SEQ
2585                    (EXIT
2586                     (COND ((NULL (EQL (QAREF1O |et| |i| 1) |i|)) "skip")
2587                           ('T
2588                            (SEQ (LETT |j| (|add_SI| |j| 1))
2589                                 (EXIT (QSETAREF1O |net| |i| |j| 1)))))))
2590                   (LETT |i| (|inc_SI| |i|)) (GO G190) G191 (EXIT NIL))
2591              (LETT |perm_lists| (MAKEARR1 |n_gens| NIL))
2592              (SEQ (LETT |i| 1) (LETT #7# |n_inds|) G190
2593                   (COND ((|greater_SI| |i| #7#) (GO G191)))
2594                   (SEQ
2595                    (EXIT
2596                     (COND ((NULL (EQL (QAREF1O |et| |i| 1) |i|)) "skip")
2597                           ('T
2598                            (SEQ (LETT |j| 1) (LETT #6# |n_gens|) G190
2599                                 (COND ((|greater_SI| |j| #6#) (GO G191)))
2600                                 (SEQ (LETT |kk| (QAREF2O |ct| |i| |j| 1 1))
2601                                      (EXIT
2602                                       (COND
2603                                        ((EQL |kk| 0)
2604                                         (SEQ
2605                                          (SPADCALL
2606                                           (SPADCALL
2607                                            (SPADCALL
2608                                             (SPADCALL
2609                                              (SPADCALL
2610                                               (SPADCALL
2611                                                (SPADCALL "i = "
2612                                                          (QREFELT $ 43))
2613                                                (SPADCALL |i| (QREFELT $ 66))
2614                                                (QREFELT $ 42))
2615                                               (SPADCALL " j = "
2616                                                         (QREFELT $ 43))
2617                                               (QREFELT $ 42))
2618                                              (SPADCALL |j| (QREFELT $ 66))
2619                                              (QREFELT $ 42))
2620                                             (SPADCALL " ct(i) = "
2621                                                       (QREFELT $ 43))
2622                                             (QREFELT $ 42))
2623                                            (SPADCALL
2624                                             (SPADCALL |ct| |i|
2625                                                       (QREFELT $ 105))
2626                                             (QREFELT $ 106))
2627                                            (QREFELT $ 42))
2628                                           (QREFELT $ 54))
2629                                          (EXIT
2630                                           (|error|
2631                                            "incomplete coset table"))))
2632                                        ('T
2633                                         (SEQ
2634                                          (LETT |kk|
2635                                                (QAREF1O |net|
2636                                                         (|GROUPP;find| |et|
2637                                                          |kk| $)
2638                                                         1))
2639                                          (EXIT
2640                                           (QSETAREF1O |perm_lists| |j|
2641                                                       (CONS |kk|
2642                                                             (QAREF1O
2643                                                              |perm_lists| |j|
2644                                                              1))
2645                                                       1)))))))
2646                                 (LETT |j| (|inc_SI| |j|)) (GO G190) G191
2647                                 (EXIT NIL))))))
2648                   (LETT |i| (|inc_SI| |i|)) (GO G190) G191 (EXIT NIL))
2649              (LETT |pl| NIL)
2650              (COND
2651               (|trace|
2652                (SPADCALL (SPADCALL |perm_lists| (QREFELT $ 108))
2653                          (QREFELT $ 54))))
2654              (SEQ (LETT |j| 1) (LETT #5# |n_gens|) G190
2655                   (COND ((|greater_SI| |j| #5#) (GO G191)))
2656                   (SEQ
2657                    (LETT |gl|
2658                          (NREVERSE
2659                           (SPADCALL |perm_lists| |j| (QREFELT $ 109))))
2660                    (LETT |p| (SPADCALL |gl| (QREFELT $ 111)))
2661                    (EXIT (LETT |pl| (CONS |p| |pl|))))
2662                   (LETT |j| (|inc_SI| |j|)) (GO G190) G191 (EXIT NIL))
2663              (LETT |pl| (NREVERSE |pl|))
2664              (EXIT (SPADCALL |pl| (QREFELT $ 114))))))
2665
2666(SDEFUN |GROUPP;toPermutationIfCan;$U;46|
2667        ((|a| $) ($ |Union| (|PermutationGroup| (|Integer|)) "failed"))
2668        (SPADCALL |a| NIL (QREFELT $ 116)))
2669
2670(SDEFUN |GROUPP;toPermutationIfCan;$BU;47|
2671        ((|a| $) (|trace| |Boolean|)
2672         ($ |Union| (|PermutationGroup| (|Integer|)) "failed"))
2673        (SPADCALL |a| NIL |trace| (QREFELT $ 118)))
2674
2675(SDEFUN |GROUPP;convert_words|
2676        ((|words| |List| (|List| #1=(|Integer|)))
2677         (|inv_tab| |OneDimensionalArray| (|NonNegativeInteger|))
2678         ($ |List| (|List| (|List| (|NonNegativeInteger|)))))
2679        (SPROG
2680         ((|nrwords| (|List| (|List| (|NonNegativeInteger|))))
2681          (|nwords| (|List| (|List| (|NonNegativeInteger|)))) (#2=#:G866 NIL)
2682          (|i| NIL) (#3=#:G865 NIL) (|nword| (|List| (|NonNegativeInteger|)))
2683          (|gen| #1#) (#4=#:G864 NIL) (#5=#:G863 NIL) (|word| NIL))
2684         (SEQ (LETT |nwords| NIL) (LETT |nrwords| NIL)
2685              (SEQ (LETT |word| NIL) (LETT #5# |words|) G190
2686                   (COND
2687                    ((OR (ATOM #5#) (PROGN (LETT |word| (CAR #5#)) NIL))
2688                     (GO G191)))
2689                   (SEQ (LETT |nword| NIL)
2690                        (SEQ (LETT |i| NIL) (LETT #4# |word|) G190
2691                             (COND
2692                              ((OR (ATOM #4#) (PROGN (LETT |i| (CAR #4#)) NIL))
2693                               (GO G191)))
2694                             (SEQ
2695                              (LETT |gen|
2696                                    (COND ((> |i| 0) |i|)
2697                                          ('T
2698                                           (SPADCALL |inv_tab| (- |i|)
2699                                                     (QREFELT $ 97)))))
2700                              (EXIT (LETT |nword| (CONS |gen| |nword|))))
2701                             (LETT #4# (CDR #4#)) (GO G190) G191 (EXIT NIL))
2702                        (LETT |nwords| (CONS |nword| |nwords|))
2703                        (EXIT
2704                         (LETT |nrwords|
2705                               (CONS
2706                                (NREVERSE
2707                                 (PROGN
2708                                  (LETT #3# NIL)
2709                                  (SEQ (LETT |i| NIL) (LETT #2# |nword|) G190
2710                                       (COND
2711                                        ((OR (ATOM #2#)
2712                                             (PROGN (LETT |i| (CAR #2#)) NIL))
2713                                         (GO G191)))
2714                                       (SEQ
2715                                        (EXIT
2716                                         (LETT #3#
2717                                               (CONS
2718                                                (SPADCALL |inv_tab| |i|
2719                                                          (QREFELT $ 97))
2720                                                #3#))))
2721                                       (LETT #2# (CDR #2#)) (GO G190) G191
2722                                       (EXIT (NREVERSE #3#)))))
2723                                |nrwords|))))
2724                   (LETT #5# (CDR #5#)) (GO G190) G191 (EXIT NIL))
2725              (LETT |nwords| (NREVERSE |nwords|))
2726              (LETT |nrwords| (NREVERSE |nrwords|))
2727              (EXIT (LIST |nwords| |nrwords|)))))
2728
2729(SDEFUN |GROUPP;toPermutationIfCan;$LBU;49|
2730        ((|a| $) (|sg| |List| (|List| (|Integer|))) (|trace| |Boolean|)
2731         ($ |Union| (|PermutationGroup| (|Integer|)) "failed"))
2732        (SPROG
2733         ((#1=#:G886 NIL) (#2=#:G887 NIL) (#3=#:G888 NIL)
2734          (|changedByDeduction| #4=(|Boolean|)) (|dummy| #4#)
2735          (|sgens_lens| (|List| #5=(|NonNegativeInteger|))) (#6=#:G893 NIL)
2736          (|word| NIL) (#7=#:G892 NIL) (|nrsgens| NIL)
2737          (|#G191| #8=(|List| (|List| (|List| (|NonNegativeInteger|)))))
2738          (|nsgens| NIL) (|#G190| #8#)
2739          (|state|
2740           (|Record|
2741            (|:| |coset_table| (|TwoDimensionalArray| (|NonNegativeInteger|)))
2742            (|:| |equiv_table| (|OneDimensionalArray| (|NonNegativeInteger|)))
2743            (|:| |inverse_table|
2744                 (|OneDimensionalArray| (|NonNegativeInteger|)))
2745            (|:| |closed_point| (|NonNegativeInteger|))
2746            (|:| |number_of_generators| (|NonNegativeInteger|))
2747            (|:| |number_of_indices| (|NonNegativeInteger|))
2748            (|:| |number_of_points| (|NonNegativeInteger|))
2749            (|:| |max_number_of_indices| (|NonNegativeInteger|))))
2750          (|loopLimit| (|NonNegativeInteger|))
2751          (|rel_lens| (|List| (|NonNegativeInteger|))) (#9=#:G891 NIL)
2752          (|rel| NIL) (#10=#:G890 NIL) (|nrrels| NIL) (|#G186| #8#)
2753          (|nrels| NIL) (|#G185| #8#) (#11=#:G889 NIL) (|i| NIL)
2754          (|inv_tab| #12=(|OneDimensionalArray| (|NonNegativeInteger|)))
2755          (|et| #12#) (|ct| (|TwoDimensionalArray| (|NonNegativeInteger|)))
2756          (|numGens| #5#) (|unit| (|Permutation| (|Integer|)))
2757          (|rs| (|List| (|List| (|Integer|))))
2758          (|gs| (|List| (|NonNegativeInteger|)))
2759          (|numberPoints| (|NonNegativeInteger|)))
2760         (SEQ
2761          (EXIT
2762           (SEQ (LETT |numberPoints| 1)
2763                (LETT |gs| (SPADCALL (QCAR |a|) (QREFELT $ 17)))
2764                (LETT |rs| (QCDR |a|))
2765                (COND
2766                 ((EQL (SPADCALL |gs| (QREFELT $ 62)) 0)
2767                  (COND
2768                   ((EQL (LENGTH |rs|) 0)
2769                    (SEQ (LETT |unit| (|spadConstant| $ 119))
2770                         (EXIT
2771                          (PROGN
2772                           (LETT #3#
2773                                 (CONS 0
2774                                       (SPADCALL (LIST |unit|)
2775                                                 (QREFELT $ 114))))
2776                           (GO #13=#:G885))))))))
2777                (COND
2778                 ((> (SPADCALL |gs| (QREFELT $ 62)) (LENGTH |rs|))
2779                  (PROGN (LETT #3# (CONS 1 "failed")) (GO #13#))))
2780                (LETT |numGens| (SPADCALL |gs| (QREFELT $ 62)))
2781                (LETT |ct| (SPADCALL 10 (* 2 |numGens|) 0 (QREFELT $ 93)))
2782                (LETT |et| (SPADCALL 10 0 (QREFELT $ 95)))
2783                (SEQ (LETT |i| 1) G190 (COND ((|greater_SI| |i| 10) (GO G191)))
2784                     (SEQ (EXIT (QSETAREF1O |et| |i| |i| 1)))
2785                     (LETT |i| (|inc_SI| |i|)) (GO G190) G191 (EXIT NIL))
2786                (LETT |inv_tab| (SPADCALL (* 2 |numGens|) 0 (QREFELT $ 95)))
2787                (SEQ (LETT |i| 1) (LETT #11# |numGens|) G190
2788                     (COND ((|greater_SI| |i| #11#) (GO G191)))
2789                     (SEQ (QSETAREF1O |inv_tab| |i| (+ |i| |numGens|) 1)
2790                          (EXIT
2791                           (QSETAREF1O |inv_tab| (+ |i| |numGens|) |i| 1)))
2792                     (LETT |i| (|inc_SI| |i|)) (GO G190) G191 (EXIT NIL))
2793                (PROGN
2794                 (LETT |#G185| (|GROUPP;convert_words| |rs| |inv_tab| $))
2795                 (LETT |#G186| |#G185|)
2796                 (LETT |nrels| (|SPADfirst| |#G186|))
2797                 (LETT |#G186| (CDR |#G186|))
2798                 (LETT |nrrels| (|SPADfirst| |#G186|))
2799                 |#G185|)
2800                (LETT |rel_lens|
2801                      (PROGN
2802                       (LETT #10# NIL)
2803                       (SEQ (LETT |rel| NIL) (LETT #9# |nrels|) G190
2804                            (COND
2805                             ((OR (ATOM #9#)
2806                                  (PROGN (LETT |rel| (CAR #9#)) NIL))
2807                              (GO G191)))
2808                            (SEQ
2809                             (EXIT
2810                              (LETT #10#
2811                                    (CONS (SPADCALL |rel| (QREFELT $ 62))
2812                                          #10#))))
2813                            (LETT #9# (CDR #9#)) (GO G190) G191
2814                            (EXIT (NREVERSE #10#)))))
2815                (LETT |loopLimit| (QUOTIENT2 5000000 |numGens|))
2816                (LETT |state|
2817                      (VECTOR |ct| |et| |inv_tab| 0 |numGens| 1 1 |loopLimit|))
2818                (PROGN
2819                 (LETT |#G190| (|GROUPP;convert_words| |sg| |inv_tab| $))
2820                 (LETT |#G191| |#G190|)
2821                 (LETT |nsgens| (|SPADfirst| |#G191|))
2822                 (LETT |#G191| (CDR |#G191|))
2823                 (LETT |nrsgens| (|SPADfirst| |#G191|))
2824                 |#G190|)
2825                (LETT |sgens_lens|
2826                      (PROGN
2827                       (LETT #7# NIL)
2828                       (SEQ (LETT |word| NIL) (LETT #6# |nsgens|) G190
2829                            (COND
2830                             ((OR (ATOM #6#)
2831                                  (PROGN (LETT |word| (CAR #6#)) NIL))
2832                              (GO G191)))
2833                            (SEQ
2834                             (EXIT
2835                              (LETT #7#
2836                                    (CONS (SPADCALL |word| (QREFELT $ 62))
2837                                          #7#))))
2838                            (LETT #6# (CDR #6#)) (GO G190) G191
2839                            (EXIT (NREVERSE #7#)))))
2840                (LETT |dummy|
2841                      (|GROUPP;inferFromRelations| |state|
2842                       (SPADCALL |nsgens| |nrels| (QREFELT $ 120))
2843                       (SPADCALL |nrsgens| |nrrels| (QREFELT $ 120))
2844                       (SPADCALL |sgens_lens| |rel_lens| (QREFELT $ 74))
2845                       |trace| $))
2846                (SEQ
2847                 (EXIT
2848                  (SEQ G190 (COND ((NULL 'T) (GO G191)))
2849                       (SEQ
2850                        (EXIT
2851                         (SEQ
2852                          (LETT |changedByDeduction|
2853                                (|GROUPP;inferFromRelations| |state| |nrels|
2854                                 |nrrels| |rel_lens| |trace| $))
2855                          (COND
2856                           ((NULL |changedByDeduction|)
2857                            (SEQ
2858                             (COND
2859                              (|trace|
2860                               (SPADCALL
2861                                (SPADCALL
2862                                 (SPADCALL "finished using " (QREFELT $ 43))
2863                                 (SPADCALL (QVELT |state| 5) (QREFELT $ 66))
2864                                 (QREFELT $ 42))
2865                                (QREFELT $ 54))))
2866                             (EXIT
2867                              (PROGN
2868                               (LETT #3#
2869                                     (CONS 0
2870                                           (|GROUPP;generators2Permutation|
2871                                            |state| |trace| $)))
2872                               (GO #13#))))))
2873                          (COND
2874                           (|trace|
2875                            (SPADCALL
2876                             (SPADCALL
2877                              (SPADCALL "relatorTables=" (QREFELT $ 43))
2878                              (SPADCALL (|GROUPP;relatorTables| |state| |rs| $)
2879                                        (QREFELT $ 121))
2880                              (QREFELT $ 42))
2881                             (QREFELT $ 54))))
2882                          (EXIT
2883                           (COND
2884                            ((>= (QVELT |state| 5) |loopLimit|)
2885                             (PROGN
2886                              (LETT #1#
2887                                    (PROGN
2888                                     (LETT #2# |$NoValue|)
2889                                     (GO #14=#:G883)))
2890                              (GO #15=#:G882)))))))
2891                        #15# (EXIT #1#))
2892                       NIL (GO G190) G191 (EXIT NIL)))
2893                 #14# (EXIT #2#))
2894                (EXIT (CONS 1 "failed"))))
2895          #13# (EXIT #3#))))
2896
2897(SDEFUN |GROUPP;coerce;$Of;50| ((|s| $) ($ |OutputForm|))
2898        (SPROG
2899         ((|r| (|OutputForm|)) (|rs| (|List| (|List| (|Integer|))))
2900          (|g| (|OutputForm|)) (|ps| (|List| (|NonNegativeInteger|))))
2901         (SEQ (LETT |ps| (SPADCALL (QCAR |s|) (QREFELT $ 122)))
2902              (LETT |g| (|GROUPP;outputGenList| |ps| $)) (LETT |rs| (QCDR |s|))
2903              (LETT |r| (|GROUPP;outputRelList| |rs| $))
2904              (EXIT
2905               (SPADCALL
2906                (LIST (SPADCALL "<" (QREFELT $ 43)) |g|
2907                      (SPADCALL " | " (QREFELT $ 43)) |r|
2908                      (SPADCALL ">" (QREFELT $ 43)))
2909                (QREFELT $ 44))))))
2910
2911(DECLAIM (NOTINLINE |GroupPresentation;|))
2912
2913(DEFUN |GroupPresentation| ()
2914  (SPROG NIL
2915         (PROG (#1=#:G897)
2916           (RETURN
2917            (COND
2918             ((LETT #1# (HGET |$ConstructorCache| '|GroupPresentation|))
2919              (|CDRwithIncrement| (CDAR #1#)))
2920             ('T
2921              (UNWIND-PROTECT
2922                  (PROG1
2923                      (CDDAR
2924                       (HPUT |$ConstructorCache| '|GroupPresentation|
2925                             (LIST
2926                              (CONS NIL (CONS 1 (|GroupPresentation;|))))))
2927                    (LETT #1# T))
2928                (COND
2929                 ((NOT #1#)
2930                  (HREM |$ConstructorCache| '|GroupPresentation|))))))))))
2931
2932(DEFUN |GroupPresentation;| ()
2933  (SPROG ((|dv$| NIL) ($ NIL) (|pv$| NIL))
2934         (PROGN
2935          (LETT |dv$| '(|GroupPresentation|))
2936          (LETT $ (GETREFV 125))
2937          (QSETREFV $ 0 |dv$|)
2938          (QSETREFV $ 3 (LETT |pv$| (|buildPredVector| 0 0 NIL)))
2939          (|haddProp| |$ConstructorCache| '|GroupPresentation| NIL (CONS 1 $))
2940          (|stuffDomainSlots| $)
2941          (SETF |pv$| (QREFELT $ 3))
2942          (QSETREFV $ 6
2943                    (|Record|
2944                     (|:| |gens| (|PrimitiveArray| (|NonNegativeInteger|)))
2945                     (|:| |rels| (|List| (|List| (|Integer|))))))
2946          $)))
2947
2948(MAKEPROP '|GroupPresentation| '|infovec|
2949          (LIST
2950           '#(NIL NIL NIL NIL NIL NIL '|Rep| (|List| 18) (|PrimitiveArray| 18)
2951              (0 . |construct|) (|List| 24) |GROUPP;groupPresentation;LL$;1|
2952              |GROUPP;groupPresentation;L$;2| |GROUPP;groupPresentation;$;3|
2953              (|List| $) (|String|) (5 . |concat|) (10 . |entries|)
2954              (|NonNegativeInteger|) (15 . |#|)
2955              (|Record| (|:| |OldGen| 18) (|:| |NewGen| 18)) (|List| 20)
2956              (20 . |concat|) (|Integer|) (|List| 23) (26 . |concat|)
2957              (32 . |concat|) |GROUPP;refactor;2$;5| (|Set| 18) (38 . |set|)
2958              (|Boolean|) (43 . ~=) (49 . |entries|) (|Set| 24) (54 . |set|)
2959              (59 . =) |GROUPP;=;2$B;6| (|Character|) (65 . |elt|)
2960              (|OutputForm|) (71 . |coerce|) (76 . |outputForm|)
2961              (81 . |hconcat|) (87 . |message|) (92 . |hconcat|) (|List| 39)
2962              (97 . |concat|) (103 . |commaSeparate|) (108 . |blankSeparate|)
2963              (113 . |member?|) (119 . |concat|) (125 . |remove|)
2964              (131 . |remove|) (|Void|) (137 . |print|) (142 . |second|)
2965              (147 . |sign|) (152 . ~=) (158 . ~=) (164 . =) (170 . |copy|)
2966              (175 . |coerce|) (180 . |#|) (185 . |elt|) (191 . |elt|)
2967              |GROUPP;coerce;$Of;50| (197 . |coerce|) (202 . |concat|)
2968              |GROUPP;simplify;$B$;30| |GROUPP;simplify;2$;29|
2969              |GROUPP;quotient;$L$;32| (208 . |entries|) (213 . |concat|)
2970              |GROUPP;quotient;$L$;33| (219 . |concat|) (225 . |concat|)
2971              |GROUPP;directProduct;3$;34| (|PositiveInteger|)
2972              |GROUPP;cyclicGroup;Pi$;35| |GROUPP;dihedralGroup;Pi$;36|
2973              |GROUPP;symmetricGroup;Pi$;37| (|TwoDimensionalArray| 18)
2974              (230 . |coerce|) (235 . |nrows|) (|Union| $ '"failed")
2975              (240 . |subtractIfCan|) (246 . |vertSplit|) (|List| 81)
2976              (252 . |elt|) (258 . |maxColIndex|) (|List| 7) (263 . |coerce|)
2977              (268 . |maxRowIndex|) (273 . |new|) (|OneDimensionalArray| 18)
2978              (280 . |new|) (286 . |coerce|) (291 . |elt|) (297 . |coerce|)
2979              (302 . |ncols|) (307 . |elt|) (314 . |setelt!|)
2980              (322 . |horizSplit|) (328 . |horizConcat|) (334 . |concat|)
2981              (340 . |row|) (346 . |coerce|) (|Vector| 24) (351 . |coerce|)
2982              (356 . |elt|) (|Permutation| 23) (362 . |coerceImages|)
2983              (|List| 110) (|PermutationGroup| 23) (367 . |permutationGroup|)
2984              (|Union| 113 '"failed") |GROUPP;toPermutationIfCan;$BU;47|
2985              |GROUPP;toPermutationIfCan;$U;46|
2986              |GROUPP;toPermutationIfCan;$LBU;49| (372 . |One|)
2987              (376 . |concat|) (382 . |coerce|) (387 . |parts|)
2988              (|SingleInteger|) (|HashState|))
2989           '#(~= 392 |toPermutationIfCan| 398 |symmetricGroup| 416 |simplify|
2990              421 |refactor| 432 |quotient| 437 |latex| 449 |hashUpdate!| 454
2991              |hash| 460 |groupPresentation| 465 |directProduct| 480
2992              |dihedralGroup| 486 |cyclicGroup| 491 |coerce| 496 = 501)
2993           'NIL
2994           (CONS (|makeByteWordVec2| 1 '(0 0 0))
2995                 (CONS '#(|SetCategory&| |BasicType&| NIL)
2996                       (CONS
2997                        '#((|SetCategory|) (|BasicType|) (|CoercibleTo| 39))
2998                        (|makeByteWordVec2| 124
2999                                            '(1 8 0 7 9 1 15 0 14 16 1 8 7 0 17
3000                                              1 8 18 0 19 2 21 0 0 20 22 2 24 0
3001                                              0 23 25 2 10 0 0 24 26 1 28 0 7
3002                                              29 2 28 30 0 0 31 1 10 10 0 32 1
3003                                              33 0 10 34 2 33 30 0 0 35 2 15 37
3004                                              0 23 38 1 37 39 0 40 1 39 0 23 41
3005                                              2 39 0 0 0 42 1 39 0 15 43 1 39 0
3006                                              14 44 2 45 0 0 39 46 1 39 0 14 47
3007                                              1 39 0 14 48 2 24 30 23 0 49 2 7
3008                                              0 0 18 50 2 8 0 18 0 51 2 24 0 23
3009                                              0 52 1 39 53 0 54 1 24 23 0 55 1
3010                                              23 23 0 56 2 23 30 0 0 57 2 18 30
3011                                              0 0 58 2 24 30 0 0 59 1 24 0 0 60
3012                                              1 24 39 0 61 1 7 18 0 62 2 7 18 0
3013                                              23 63 2 10 24 0 23 64 1 18 39 0
3014                                              66 2 24 0 0 0 67 1 7 7 0 71 2 10
3015                                              0 0 0 72 2 7 0 0 0 74 1 10 0 14
3016                                              75 1 81 39 0 82 1 81 18 0 83 2 18
3017                                              84 0 0 85 2 81 14 0 7 86 2 87 81
3018                                              0 23 88 1 81 23 0 89 1 90 39 0 91
3019                                              1 81 23 0 92 3 81 0 18 18 18 93 2
3020                                              94 0 18 18 95 1 23 39 0 96 2 94
3021                                              18 0 23 97 1 7 39 0 98 1 81 18 0
3022                                              99 3 81 18 0 23 23 100 4 81 18 0
3023                                              23 23 18 101 2 81 14 0 77 102 2
3024                                              81 0 0 0 103 2 87 0 0 81 104 2 81
3025                                              94 0 23 105 1 94 39 0 106 1 107
3026                                              39 0 108 2 107 24 0 23 109 1 110
3027                                              0 24 111 1 113 0 112 114 0 110 0
3028                                              119 2 90 0 0 0 120 1 87 39 0 121
3029                                              1 8 7 0 122 2 0 30 0 0 1 2 0 115
3030                                              0 30 116 3 0 115 0 10 30 118 1 0
3031                                              115 0 117 1 0 0 77 80 1 0 0 0 69
3032                                              2 0 0 0 30 68 1 0 0 0 27 2 0 0 0
3033                                              10 73 2 0 0 0 7 70 1 0 15 0 1 2 0
3034                                              124 124 0 1 1 0 123 0 1 0 0 0 13
3035                                              2 0 0 7 10 11 1 0 0 7 12 2 0 0 0
3036                                              0 76 1 0 0 77 79 1 0 0 77 78 1 0
3037                                              39 0 65 2 0 30 0 0 36)))))
3038           '|lookupComplete|))
3039
3040(MAKEPROP '|GroupPresentation| 'NILADIC T)
3041