1 :-use_module(library(clpfd)).
4 % N is the dot product of lists V1 and V2.
5 dot(V1, V2, N) :- maplist(product,V1,V2,P), sumlist(P,N).
6 product(N1,N2,N3) :- N3 is N1*N2.
8 % Matrix multiplication with matrices represented
9 % as lists of lists. M3 is the product of M1 and M2
10 mmult(M1, M2, M3) :- transpose(M2,MT), maplist(mm_helper(MT), M1, M3).
11 mm_helper(M2, I1, M3) :- maplist(dot(I1), M2, M3).
16 suml(L1,L2,[E1 + E2|R2]):-
31 flatten(List, Flattened):-
32 flatten(List, [], Flattened).
34 flatten([], Flattened, Flattened).
35 flatten([Item|Tail], L, Flattened):-
36 flatten(Item, L1, Flattened),
38 flatten(Item, Flattened, [Item|Flattened]):-
86 X=[[M0X0, M0X1, M0X2, M0X3, M0X4, M0X5, M0X6, M0X7, M0X8, M0X9, M0X10, M0X11, M0X12, M0X13, M0X14, M0X15], [M1X0, M1X1, M1X2, M1X3, M1X4, M1X5, M1X6, M1X7, M1X8, M1X9, M1X10, M1X11, M1X12, M1X13, M1X14, M1X15], [M2X0, M2X1, M2X2, M2X3, M2X4, M2X5, M2X6, M2X7, M2X8, M2X9, M2X10, M2X11, M2X12, M2X13, M2X14, M2X15], [M3X0, M3X1, M3X2, M3X3, M3X4, M3X5, M3X6, M3X7, M3X8, M3X9, M3X10, M3X11, M3X12, M3X13, M3X14, M3X15], [M4X0, M4X1, M4X2, M4X3, M4X4, M4X5, M4X6, M4X7, M4X8, M4X9, M4X10, M4X11, M4X12, M4X13, M4X14, M4X15], [M5X0, M5X1, M5X2, M5X3, M5X4, M5X5, M5X6, M5X7, M5X8, M5X9, M5X10, M5X11, M5X12, M5X13, M5X14, M5X15], [M6X0, M6X1, M6X2, M6X3, M6X4, M6X5, M6X6, M6X7, M6X8, M6X9, M6X10, M6X11, M6X12, M6X13, M6X14, M6X15], [M7X0, M7X1, M7X2, M7X3, M7X4, M7X5, M7X6, M7X7, M7X8, M7X9, M7X10, M7X11, M7X12, M7X13, M7X14, M7X15], [M8X0, M8X1, M8X2, M8X3, M8X4, M8X5, M8X6, M8X7, M8X8, M8X9, M8X10, M8X11, M8X12, M8X13, M8X14, M8X15], [M9X0, M9X1, M9X2, M9X3, M9X4, M9X5, M9X6, M9X7, M9X8, M9X9, M9X10, M9X11, M9X12, M9X13, M9X14, M9X15], [M10X0, M10X1, M10X2, M10X3, M10X4, M10X5, M10X6, M10X7, M10X8, M10X9, M10X10, M10X11, M10X12, M10X13, M10X14, M10X15], [M11X0, M11X1, M11X2, M11X3, M11X4, M11X5, M11X6, M11X7, M11X8, M11X9, M11X10, M11X11, M11X12, M11X13, M11X14, M11X15], [M12X0, M12X1, M12X2, M12X3, M12X4, M12X5, M12X6, M12X7, M12X8, M12X9, M12X10, M12X11, M12X12, M12X13, M12X14, M12X15], [M13X0, M13X1, M13X2, M13X3, M13X4, M13X5, M13X6, M13X7, M13X8, M13X9, M13X10, M13X11, M13X12, M13X13, M13X14, M13X15], [M14X0, M14X1, M14X2, M14X3, M14X4, M14X5, M14X6, M14X7, M14X8, M14X9, M14X10, M14X11, M14X12, M14X13, M14X14, M14X15], [M15X0, M15X1, M15X2, M15X3, M15X4, M15X5, M15X6, M15X7, M15X8, M15X9, M15X10, M15X11, M15X12, M15X13, M15X14, M15X15]],
343 M0X0+ M0X1+ M0X2+ M0X3+ M0X4+ M0X5+ M0X6+ M0X7+ M0X8+ M0X9+ M0X10+ M0X11+ M0X12+ M0X13+ M0X14+ M0X15 #=4 ,
344 M1X0+ M1X1+ M1X2+ M1X3+ M1X4+ M1X5+ M1X6+ M1X7+ M1X8+ M1X9+ M1X10+ M1X11+ M1X12+ M1X13+ M1X14+ M1X15 #=4 ,
345 M2X0+ M2X1+ M2X2+ M2X3+ M2X4+ M2X5+ M2X6+ M2X7+ M2X8+ M2X9+ M2X10+ M2X11+ M2X12+ M2X13+ M2X14+ M2X15 #=4 ,
346 M3X0+ M3X1+ M3X2+ M3X3+ M3X4+ M3X5+ M3X6+ M3X7+ M3X8+ M3X9+ M3X10+ M3X11+ M3X12+ M3X13+ M3X14+ M3X15 #=4 ,
347 M4X0+ M4X1+ M4X2+ M4X3+ M4X4+ M4X5+ M4X6+ M4X7+ M4X8+ M4X9+ M4X10+ M4X11+ M4X12+ M4X13+ M4X14+ M4X15 #=4 ,
348 M5X0+ M5X1+ M5X2+ M5X3+ M5X4+ M5X5+ M5X6+ M5X7+ M5X8+ M5X9+ M5X10+ M5X11+ M5X12+ M5X13+ M5X14+ M5X15 #=4 ,
349 M6X0+ M6X1+ M6X2+ M6X3+ M6X4+ M6X5+ M6X6+ M6X7+ M6X8+ M6X9+ M6X10+ M6X11+ M6X12+ M6X13+ M6X14+ M6X15 #=4 ,
350 M7X0+ M7X1+ M7X2+ M7X3+ M7X4+ M7X5+ M7X6+ M7X7+ M7X8+ M7X9+ M7X10+ M7X11+ M7X12+ M7X13+ M7X14+ M7X15 #=4 ,
351 M8X0+ M8X1+ M8X2+ M8X3+ M8X4+ M8X5+ M8X6+ M8X7+ M8X8+ M8X9+ M8X10+ M8X11+ M8X12+ M8X13+ M8X14+ M8X15 #=4 ,
352 M9X0+ M9X1+ M9X2+ M9X3+ M9X4+ M9X5+ M9X6+ M9X7+ M9X8+ M9X9+ M9X10+ M9X11+ M9X12+ M9X13+ M9X14+ M9X15 #=4 ,
353 M10X0+ M10X1+ M10X2+ M10X3+ M10X4+ M10X5+ M10X6+ M10X7+ M10X8+ M10X9+ M10X10+ M10X11+ M10X12+ M10X13+ M10X14+ M10X15 #=4 ,
354 M11X0+ M11X1+ M11X2+ M11X3+ M11X4+ M11X5+ M11X6+ M11X7+ M11X8+ M11X9+ M11X10+ M11X11+ M11X12+ M11X13+ M11X14+ M11X15 #=4 ,
355 M12X0+ M12X1+ M12X2+ M12X3+ M12X4+ M12X5+ M12X6+ M12X7+ M12X8+ M12X9+ M12X10+ M12X11+ M12X12+ M12X13+ M12X14+ M12X15 #=4 ,
356 M13X0+ M13X1+ M13X2+ M13X3+ M13X4+ M13X5+ M13X6+ M13X7+ M13X8+ M13X9+ M13X10+ M13X11+ M13X12+ M13X13+ M13X14+ M13X15 #=4 ,
357 M14X0+ M14X1+ M14X2+ M14X3+ M14X4+ M14X5+ M14X6+ M14X7+ M14X8+ M14X9+ M14X10+ M14X11+ M14X12+ M14X13+ M14X14+ M14X15 #=4 ,
358 M15X0+ M15X1+ M15X2+ M15X3+ M15X4+ M15X5+ M15X6+ M15X7+ M15X8+ M15X9+ M15X10+ M15X11+ M15X12+ M15X13+ M15X14+ M15X15 #=4 ,
359 M0X0+ M0X1+ M0X2+ M0X3+ M0X4+ M0X5+ M0X6+ M0X7+ M0X8+ M0X9+ M0X10+ M0X11+ M0X12+ M0X13+ M0X14+ M0X15 #=4 ,
360 M0X0+ M1X0+ M2X0+ M3X0+ M4X0+ M5X0+ M6X0+ M7X0+ M8X0+ M9X0+ M10X0+ M11X0+ M12X0+ M13X0+ M14X0+ M15X0 #=4 ,
361 M1X0+ M1X1+ M1X2+ M1X3+ M1X4+ M1X5+ M1X6+ M1X7+ M1X8+ M1X9+ M1X10+ M1X11+ M1X12+ M1X13+ M1X14+ M1X15 #=4 ,
362 M0X1+ M1X1+ M2X1+ M3X1+ M4X1+ M5X1+ M6X1+ M7X1+ M8X1+ M9X1+ M10X1+ M11X1+ M12X1+ M13X1+ M14X1+ M15X1 #=4 ,
363 M2X0+ M2X1+ M2X2+ M2X3+ M2X4+ M2X5+ M2X6+ M2X7+ M2X8+ M2X9+ M2X10+ M2X11+ M2X12+ M2X13+ M2X14+ M2X15 #=4 ,
364 M0X2+ M1X2+ M2X2+ M3X2+ M4X2+ M5X2+ M6X2+ M7X2+ M8X2+ M9X2+ M10X2+ M11X2+ M12X2+ M13X2+ M14X2+ M15X2 #=4 ,
365 M3X0+ M3X1+ M3X2+ M3X3+ M3X4+ M3X5+ M3X6+ M3X7+ M3X8+ M3X9+ M3X10+ M3X11+ M3X12+ M3X13+ M3X14+ M3X15 #=4 ,
366 M0X3+ M1X3+ M2X3+ M3X3+ M4X3+ M5X3+ M6X3+ M7X3+ M8X3+ M9X3+ M10X3+ M11X3+ M12X3+ M13X3+ M14X3+ M15X3 #=4 ,
367 M4X0+ M4X1+ M4X2+ M4X3+ M4X4+ M4X5+ M4X6+ M4X7+ M4X8+ M4X9+ M4X10+ M4X11+ M4X12+ M4X13+ M4X14+ M4X15 #=4 ,
368 M0X4+ M1X4+ M2X4+ M3X4+ M4X4+ M5X4+ M6X4+ M7X4+ M8X4+ M9X4+ M10X4+ M11X4+ M12X4+ M13X4+ M14X4+ M15X4 #=4 ,
369 M5X0+ M5X1+ M5X2+ M5X3+ M5X4+ M5X5+ M5X6+ M5X7+ M5X8+ M5X9+ M5X10+ M5X11+ M5X12+ M5X13+ M5X14+ M5X15 #=4 ,
370 M0X5+ M1X5+ M2X5+ M3X5+ M4X5+ M5X5+ M6X5+ M7X5+ M8X5+ M9X5+ M10X5+ M11X5+ M12X5+ M13X5+ M14X5+ M15X5 #=4 ,
371 M6X0+ M6X1+ M6X2+ M6X3+ M6X4+ M6X5+ M6X6+ M6X7+ M6X8+ M6X9+ M6X10+ M6X11+ M6X12+ M6X13+ M6X14+ M6X15 #=4 ,
372 M0X6+ M1X6+ M2X6+ M3X6+ M4X6+ M5X6+ M6X6+ M7X6+ M8X6+ M9X6+ M10X6+ M11X6+ M12X6+ M13X6+ M14X6+ M15X6 #=4 ,
373 M7X0+ M7X1+ M7X2+ M7X3+ M7X4+ M7X5+ M7X6+ M7X7+ M7X8+ M7X9+ M7X10+ M7X11+ M7X12+ M7X13+ M7X14+ M7X15 #=4 ,
374 M0X7+ M1X7+ M2X7+ M3X7+ M4X7+ M5X7+ M6X7+ M7X7+ M8X7+ M9X7+ M10X7+ M11X7+ M12X7+ M13X7+ M14X7+ M15X7 #=4 ,
375 M8X0+ M8X1+ M8X2+ M8X3+ M8X4+ M8X5+ M8X6+ M8X7+ M8X8+ M8X9+ M8X10+ M8X11+ M8X12+ M8X13+ M8X14+ M8X15 #=4 ,
376 M0X8+ M1X8+ M2X8+ M3X8+ M4X8+ M5X8+ M6X8+ M7X8+ M8X8+ M9X8+ M10X8+ M11X8+ M12X8+ M13X8+ M14X8+ M15X8 #=4 ,
377 M9X0+ M9X1+ M9X2+ M9X3+ M9X4+ M9X5+ M9X6+ M9X7+ M9X8+ M9X9+ M9X10+ M9X11+ M9X12+ M9X13+ M9X14+ M9X15 #=4 ,
378 M0X9+ M1X9+ M2X9+ M3X9+ M4X9+ M5X9+ M6X9+ M7X9+ M8X9+ M9X9+ M10X9+ M11X9+ M12X9+ M13X9+ M14X9+ M15X9 #=4 ,
379 M10X0+ M10X1+ M10X2+ M10X3+ M10X4+ M10X5+ M10X6+ M10X7+ M10X8+ M10X9+ M10X10+ M10X11+ M10X12+ M10X13+ M10X14+ M10X15 #=4 ,
380 M0X10+ M1X10+ M2X10+ M3X10+ M4X10+ M5X10+ M6X10+ M7X10+ M8X10+ M9X10+ M10X10+ M11X10+ M12X10+ M13X10+ M14X10+ M15X10 #=4 ,
381 M11X0+ M11X1+ M11X2+ M11X3+ M11X4+ M11X5+ M11X6+ M11X7+ M11X8+ M11X9+ M11X10+ M11X11+ M11X12+ M11X13+ M11X14+ M11X15 #=4 ,
382 M0X11+ M1X11+ M2X11+ M3X11+ M4X11+ M5X11+ M6X11+ M7X11+ M8X11+ M9X11+ M10X11+ M11X11+ M12X11+ M13X11+ M14X11+ M15X11 #=4 ,
383 M12X0+ M12X1+ M12X2+ M12X3+ M12X4+ M12X5+ M12X6+ M12X7+ M12X8+ M12X9+ M12X10+ M12X11+ M12X12+ M12X13+ M12X14+ M12X15 #=4 ,
384 M0X12+ M1X12+ M2X12+ M3X12+ M4X12+ M5X12+ M6X12+ M7X12+ M8X12+ M9X12+ M10X12+ M11X12+ M12X12+ M13X12+ M14X12+ M15X12 #=4 ,
385 M13X0+ M13X1+ M13X2+ M13X3+ M13X4+ M13X5+ M13X6+ M13X7+ M13X8+ M13X9+ M13X10+ M13X11+ M13X12+ M13X13+ M13X14+ M13X15 #=4 ,
386 M0X13+ M1X13+ M2X13+ M3X13+ M4X13+ M5X13+ M6X13+ M7X13+ M8X13+ M9X13+ M10X13+ M11X13+ M12X13+ M13X13+ M14X13+ M15X13 #=4 ,
387 M14X0+ M14X1+ M14X2+ M14X3+ M14X4+ M14X5+ M14X6+ M14X7+ M14X8+ M14X9+ M14X10+ M14X11+ M14X12+ M14X13+ M14X14+ M14X15 #=4 ,
388 M0X14+ M1X14+ M2X14+ M3X14+ M4X14+ M5X14+ M6X14+ M7X14+ M8X14+ M9X14+ M10X14+ M11X14+ M12X14+ M13X14+ M14X14+ M15X14 #=4 ,
389 M15X0+ M15X1+ M15X2+ M15X3+ M15X4+ M15X5+ M15X6+ M15X7+ M15X8+ M15X9+ M15X10+ M15X11+ M15X12+ M15X13+ M15X14+ M15X15 #=4 ,
390 M0X15+ M1X15+ M2X15+ M3X15+ M4X15+ M5X15+ M6X15+ M7X15+ M8X15+ M9X15+ M10X15+ M11X15+ M12X15+ M13X15+ M14X15+ M15X15 #=4 ,
391 label([M0X0, M0X1, M0X2, M0X3, M0X4, M0X5, M0X6, M0X7, M0X8, M0X9, M0X10, M0X11, M0X12, M0X13, M0X14, M0X15, M1X0, M1X1, M1X2, M1X3, M1X4, M1X5, M1X6, M1X7, M1X8, M1X9, M1X10, M1X11, M1X12, M1X13, M1X14, M1X15, M2X0, M2X1, M2X2, M2X3, M2X4, M2X5, M2X6, M2X7, M2X8, M2X9, M2X10, M2X11, M2X12, M2X13, M2X14, M2X15, M3X0, M3X1, M3X2, M3X3, M3X4, M3X5, M3X6, M3X7, M3X8, M3X9, M3X10, M3X11, M3X12, M3X13, M3X14, M3X15, M4X0, M4X1, M4X2, M4X3, M4X4, M4X5, M4X6, M4X7, M4X8, M4X9, M4X10, M4X11, M4X12, M4X13, M4X14, M4X15, M5X0, M5X1, M5X2, M5X3, M5X4, M5X5, M5X6, M5X7, M5X8, M5X9, M5X10, M5X11, M5X12, M5X13, M5X14, M5X15, M6X0, M6X1, M6X2, M6X3, M6X4, M6X5, M6X6, M6X7, M6X8, M6X9, M6X10, M6X11, M6X12, M6X13, M6X14, M6X15, M7X0, M7X1, M7X2, M7X3, M7X4, M7X5, M7X6, M7X7, M7X8, M7X9, M7X10, M7X11, M7X12, M7X13, M7X14, M7X15, M8X0, M8X1, M8X2, M8X3, M8X4, M8X5, M8X6, M8X7, M8X8, M8X9, M8X10, M8X11, M8X12, M8X13, M8X14, M8X15, M9X0, M9X1, M9X2, M9X3, M9X4, M9X5, M9X6, M9X7, M9X8, M9X9, M9X10, M9X11, M9X12, M9X13, M9X14, M9X15, M10X0, M10X1, M10X2, M10X3, M10X4, M10X5, M10X6, M10X7, M10X8, M10X9, M10X10, M10X11, M10X12, M10X13, M10X14, M10X15, M11X0, M11X1, M11X2, M11X3, M11X4, M11X5, M11X6, M11X7, M11X8, M11X9, M11X10, M11X11, M11X12, M11X13, M11X14, M11X15, M12X0, M12X1, M12X2, M12X3, M12X4, M12X5, M12X6, M12X7, M12X8, M12X9, M12X10, M12X11, M12X12, M12X13, M12X14, M12X15, M13X0, M13X1, M13X2, M13X3, M13X4, M13X5, M13X6, M13X7, M13X8, M13X9, M13X10, M13X11, M13X12, M13X13, M13X14, M13X15, M14X0, M14X1, M14X2, M14X3, M14X4, M14X5, M14X6, M14X7, M14X8, M14X9, M14X10, M14X11, M14X12, M14X13, M14X14, M14X15, M15X0, M15X1, M15X2, M15X3, M15X4, M15X5, M15X6, M15X7, M15X8, M15X9, M15X10, M15X11, M15X12, M15X13, M15X14, M15X15]),
393 open('res4.txt',append,Stream),
409 findall(X,bistoc(X),L),
412 write('but : '),writeln(DT),