eyeprolog 1.6.12 → 1.6.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/examples/proof/abstract-interpretation.pl +146 -0
  2. package/examples/proof/ackermann.pl +296 -0
  3. package/examples/proof/alignment-demo.pl +196 -0
  4. package/examples/proof/allen-interval-calculus.pl +1271 -0
  5. package/examples/proof/auroracare.pl +954 -0
  6. package/examples/proof/basic-monadic.pl +37176 -0
  7. package/examples/proof/bayes-therapy.pl +1349 -0
  8. package/examples/proof/bench.pl +2802 -0
  9. package/examples/proof/binomial-vandermonde.pl +983 -0
  10. package/examples/proof/blocks-world-planning.pl +471 -0
  11. package/examples/proof/bmi.pl +386 -0
  12. package/examples/proof/braking-safety-worlds.pl +508 -0
  13. package/examples/proof/buck-converter-design.pl +179 -0
  14. package/examples/proof/bulk-stream-write.pl +3 -0
  15. package/examples/proof/collatz-1000.pl +43784 -0
  16. package/examples/proof/competitive-enzyme-kinetics.pl +167 -0
  17. package/examples/proof/complex.pl +514 -0
  18. package/examples/proof/context-schema-audit.pl +374 -0
  19. package/examples/proof/continued-fraction-sqrt2.pl +476 -0
  20. package/examples/proof/control-system.pl +137 -0
  21. package/examples/proof/critical-path-schedule.pl +491 -0
  22. package/examples/proof/cross-organization-data-sharing.pl +732 -0
  23. package/examples/proof/cyclic-path.pl +44 -0
  24. package/examples/proof/dairy-energy-balance.pl +290 -0
  25. package/examples/proof/dcg-expression-language.pl +157 -0
  26. package/examples/proof/deep-taxonomy-10.pl +185 -0
  27. package/examples/proof/deep-taxonomy-100.pl +365 -0
  28. package/examples/proof/deep-taxonomy-1000.pl +163 -0
  29. package/examples/proof/deep-taxonomy-10000.pl +163 -0
  30. package/examples/proof/deep-taxonomy-100000.pl +163 -0
  31. package/examples/proof/delfour.pl +1615 -0
  32. package/examples/proof/dijkstra-findall-sort.pl +354 -0
  33. package/examples/proof/dijkstra-risk-path.pl +820 -0
  34. package/examples/proof/dijkstra.pl +753 -0
  35. package/examples/proof/dining-philosophers.pl +2663 -0
  36. package/examples/proof/donald-gerald-robert.pl +311 -0
  37. package/examples/proof/dpv-odrl-purpose-mapping.pl +1189 -0
  38. package/examples/proof/drone-corridor-planner.pl +2365 -0
  39. package/examples/proof/easter-computus.pl +1406 -0
  40. package/examples/proof/eulerian-path.pl +457 -0
  41. package/examples/proof/ev-range-worlds.pl +508 -0
  42. package/examples/proof/exoplanet-validation-worlds.pl +397 -0
  43. package/examples/proof/explainable-ev-depot-configuration.pl +313 -0
  44. package/examples/proof/family-cousins.pl +920 -0
  45. package/examples/proof/fast-fourier-transform.pl +5045 -0
  46. package/examples/proof/fastpow.pl +769 -0
  47. package/examples/proof/fft8-numeric.pl +685 -0
  48. package/examples/proof/fibonacci.pl +1425 -0
  49. package/examples/proof/field-nitrogen-balance.pl +320 -0
  50. package/examples/proof/flandor.pl +533 -0
  51. package/examples/proof/fundamental-theorem-arithmetic.pl +245 -0
  52. package/examples/proof/gd-step-certified.pl +1717 -0
  53. package/examples/proof/goldbach.pl +1135 -0
  54. package/examples/proof/gps.pl +627 -0
  55. package/examples/proof/graph.pl +105 -0
  56. package/examples/proof/gray-code-counter.pl +355 -0
  57. package/examples/proof/hamiltonian-path.pl +3373 -0
  58. package/examples/proof/hamming-code.pl +232 -0
  59. package/examples/proof/heron-theorem.pl +79 -0
  60. package/examples/proof/http-client.pl +0 -0
  61. package/examples/proof/illegitimate-reasoning.pl +220 -0
  62. package/examples/proof/integer-partitions.pl +1642 -0
  63. package/examples/proof/iso-atomic-conversion.pl +73 -0
  64. package/examples/proof/knowledge-engineering-alignment-flow.pl +200 -0
  65. package/examples/proof/knuth-bendix-completion.pl +290 -0
  66. package/examples/proof/law-of-cosines.pl +71 -0
  67. package/examples/proof/least-squares-regression.pl +342 -0
  68. package/examples/proof/lee.pl +637 -0
  69. package/examples/proof/lldm.pl +581 -0
  70. package/examples/proof/manufacturing-quality-control.pl +181 -0
  71. package/examples/proof/map-four-color-search.pl +796 -0
  72. package/examples/proof/markov-logic-network.pl +405 -0
  73. package/examples/proof/matrix-chain-order.pl +164 -0
  74. package/examples/proof/matrix-noncommutativity.pl +183 -0
  75. package/examples/proof/microgrid-dispatch.pl +164 -0
  76. package/examples/proof/missionaries-cannibals.pl +428 -0
  77. package/examples/proof/modular-exponentiation.pl +838 -0
  78. package/examples/proof/monkey-bananas.pl +278 -0
  79. package/examples/proof/network-sla.pl +100 -0
  80. package/examples/proof/newton-raphson.pl +520 -0
  81. package/examples/proof/observability-log-correlation.pl +1061 -0
  82. package/examples/proof/odrl-dpv-fpv-trust-flow.pl +1366 -0
  83. package/examples/proof/odrl-dpv-healthcare-risk-ranked.pl +488 -0
  84. package/examples/proof/odrl-dpv-risk-ranked.pl +637 -0
  85. package/examples/proof/odrl-policy-advanced.pl +705 -0
  86. package/examples/proof/odrl-policy-reasoning.pl +1423 -0
  87. package/examples/proof/odrl-policy.pl +103 -0
  88. package/examples/proof/operational-incident-response.pl +435 -0
  89. package/examples/proof/orbital-transfer-design.pl +288 -0
  90. package/examples/proof/path-discovery.pl +502 -0
  91. package/examples/proof/peano-arithmetic.pl +910 -0
  92. package/examples/proof/peano-calculus.pl +294 -0
  93. package/examples/proof/pell-equation.pl +295 -0
  94. package/examples/proof/pendulum-period.pl +97 -0
  95. package/examples/proof/pi.pl +3 -0
  96. package/examples/proof/pointer-analysis.pl +94 -0
  97. package/examples/proof/polynomial.pl +2487 -0
  98. package/examples/proof/portable-library-overlap.pl +6 -0
  99. package/examples/proof/quadratic-formula.pl +159 -0
  100. package/examples/proof/quine-mccluskey.pl +914 -0
  101. package/examples/proof/radioactive-decay.pl +104 -0
  102. package/examples/proof/rdf12-annotated-claims.pl +263 -0
  103. package/examples/proof/register-allocation.pl +120 -0
  104. package/examples/proof/relational-cube-lookup.pl +15867 -0
  105. package/examples/proof/riemann-hypothesis.pl +148 -0
  106. package/examples/proof/sat-solver-dpll.pl +226 -0
  107. package/examples/proof/scientific-evidence-graph.pl +681 -0
  108. package/examples/proof/send-more-money.pl +252 -0
  109. package/examples/proof/service-impact.pl +151 -0
  110. package/examples/proof/shoelace-polygon-area.pl +161 -0
  111. package/examples/proof/skolem-functions.pl +128 -0
  112. package/examples/proof/statistics-summary.pl +250 -0
  113. package/examples/proof/stirling-bell-numbers.pl +125 -0
  114. package/examples/proof/superdense-coding.pl +118 -0
  115. package/examples/proof/symbiotic-knowledge-graph.pl +1569 -0
  116. package/examples/proof/truth-maintenance-system.pl +466 -0
  117. package/examples/proof/turing.pl +1183 -0
  118. package/examples/proof/type-inference.pl +267 -0
  119. package/examples/proof/vector-similarity.pl +163 -0
  120. package/examples/proof/vulnerability-impact.pl +180 -0
  121. package/examples/proof/wolf-goat-cabbage.pl +339 -0
  122. package/examples/proof/zebra.pl +176 -0
  123. package/package.json +1 -1
  124. package/src/check-proof.js +159 -11
  125. package/test/conformance/NEUMERKEL-LATEST.md +3 -3
  126. package/test/regression/cases-white-box.mjs +38 -0
  127. package/test/run-examples.mjs +7 -111
  128. package/test/run-proof-checking.mjs +28 -5
  129. package/the-art-of-eyeprolog.md +4 -2
@@ -0,0 +1,294 @@
1
+ peano_answer(two_plus_three, s(s(s(s(s(z)))))).
2
+ peano_answer(two_times_three, s(s(s(s(s(s(z))))))).
3
+ peano_answer(factorial_four, s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))).
4
+
5
+ clause(1, padd(var('A'), z, var('A')), true).
6
+ clause(2, padd(var('A'), s(var('B')), s(var('C'))), padd(var('A'), var('B'), var('C'))).
7
+ clause(3, pmul(anonymous(1), z, z), true).
8
+ clause(4,
9
+ pmul(var('A'), s(var('B')), var('C')),
10
+ (pmul(var('A'), var('B'), var('D')), padd(var('A'), var('D'), var('C')))).
11
+ clause(5, pfact(var('N'), var('Value')), pfac(var('N'), s(z), var('Value'))).
12
+ clause(6, pfac(z, var('Acc'), var('Acc')), true).
13
+ clause(7,
14
+ pfac(s(var('N')), var('Acc'), var('Value')),
15
+ (pmul(var('Acc'), s(var('N')), var('Next')), pfac(var('N'), var('Next'), var('Value')))).
16
+ clause(8, peano_answer(two_plus_three, var('N')), padd(s(s(z)), s(s(s(z))), var('N'))).
17
+ clause(9, peano_answer(two_times_three, var('N')), pmul(s(s(z)), s(s(s(z))), var('N'))).
18
+ clause(10, peano_answer(factorial_four, var('N')), pfact(s(s(s(s(z)))), var('N'))).
19
+
20
+ step(peano_answer(two_plus_three, s(s(s(s(s(z)))))),
21
+ rule(8),
22
+ ['N' = s(s(s(s(s(z)))))],
23
+ [padd(s(s(z)), s(s(s(z))), s(s(s(s(s(z))))))]).
24
+ step(padd(s(s(z)), s(s(s(z))), s(s(s(s(s(z)))))),
25
+ rule(2),
26
+ ['A' = s(s(z)), 'B' = s(s(z)), 'C' = s(s(s(s(z))))],
27
+ [padd(s(s(z)), s(s(z)), s(s(s(s(z)))))]).
28
+ step(padd(s(s(z)), s(s(z)), s(s(s(s(z))))),
29
+ rule(2),
30
+ ['A' = s(s(z)), 'B' = s(z), 'C' = s(s(s(z)))],
31
+ [padd(s(s(z)), s(z), s(s(s(z))))]).
32
+ step(padd(s(s(z)), s(z), s(s(s(z)))),
33
+ rule(2),
34
+ ['A' = s(s(z)), 'B' = z, 'C' = s(s(z))],
35
+ [padd(s(s(z)), z, s(s(z)))]).
36
+ step(padd(s(s(z)), z, s(s(z))), fact(1), ['A' = s(s(z))], []).
37
+ step(peano_answer(two_times_three, s(s(s(s(s(s(z))))))),
38
+ rule(9),
39
+ ['N' = s(s(s(s(s(s(z))))))],
40
+ [pmul(s(s(z)), s(s(s(z))), s(s(s(s(s(s(z)))))))]).
41
+ step(pmul(s(s(z)), s(s(s(z))), s(s(s(s(s(s(z))))))),
42
+ rule(4),
43
+ ['A' = s(s(z)), 'B' = s(s(z)), 'C' = s(s(s(s(s(s(z)))))), 'D' = s(s(s(s(z))))],
44
+ [pmul(s(s(z)), s(s(z)), s(s(s(s(z))))), padd(s(s(z)), s(s(s(s(z)))), s(s(s(s(s(s(z)))))))]).
45
+ step(pmul(s(s(z)), s(s(z)), s(s(s(s(z))))),
46
+ rule(4),
47
+ ['A' = s(s(z)), 'B' = s(z), 'C' = s(s(s(s(z)))), 'D' = s(s(z))],
48
+ [pmul(s(s(z)), s(z), s(s(z))), padd(s(s(z)), s(s(z)), s(s(s(s(z)))))]).
49
+ step(pmul(s(s(z)), s(z), s(s(z))),
50
+ rule(4),
51
+ ['A' = s(s(z)), 'B' = z, 'C' = s(s(z)), 'D' = z],
52
+ [pmul(s(s(z)), z, z), padd(s(s(z)), z, s(s(z)))]).
53
+ step(pmul(s(s(z)), z, z), fact(3), [], []).
54
+ step(padd(s(s(z)), s(s(s(s(z)))), s(s(s(s(s(s(z))))))),
55
+ rule(2),
56
+ ['A' = s(s(z)), 'B' = s(s(s(z))), 'C' = s(s(s(s(s(z)))))],
57
+ [padd(s(s(z)), s(s(s(z))), s(s(s(s(s(z))))))]).
58
+ step(peano_answer(factorial_four, s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
59
+ rule(10),
60
+ ['N' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))],
61
+ [pfact(s(s(s(s(z)))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))))]).
62
+ step(pfact(s(s(s(s(z)))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
63
+ rule(5),
64
+ ['N' = s(s(s(s(z)))),
65
+ 'Value' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))],
66
+ [pfac(s(s(s(s(z)))), s(z), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))))]).
67
+ step(pfac(s(s(s(s(z)))), s(z), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
68
+ rule(7),
69
+ ['N' = s(s(s(z))),
70
+ 'Acc' = s(z),
71
+ 'Value' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))),
72
+ 'Next' = s(s(s(s(z))))],
73
+ [pmul(s(z), s(s(s(s(z)))), s(s(s(s(z))))),
74
+ pfac(s(s(s(z))), s(s(s(s(z)))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))))]).
75
+ step(pmul(s(z), s(s(s(s(z)))), s(s(s(s(z))))),
76
+ rule(4),
77
+ ['A' = s(z), 'B' = s(s(s(z))), 'C' = s(s(s(s(z)))), 'D' = s(s(s(z)))],
78
+ [pmul(s(z), s(s(s(z))), s(s(s(z)))), padd(s(z), s(s(s(z))), s(s(s(s(z)))))]).
79
+ step(pmul(s(z), s(s(s(z))), s(s(s(z)))),
80
+ rule(4),
81
+ ['A' = s(z), 'B' = s(s(z)), 'C' = s(s(s(z))), 'D' = s(s(z))],
82
+ [pmul(s(z), s(s(z)), s(s(z))), padd(s(z), s(s(z)), s(s(s(z))))]).
83
+ step(pmul(s(z), s(s(z)), s(s(z))),
84
+ rule(4),
85
+ ['A' = s(z), 'B' = s(z), 'C' = s(s(z)), 'D' = s(z)],
86
+ [pmul(s(z), s(z), s(z)), padd(s(z), s(z), s(s(z)))]).
87
+ step(pmul(s(z), s(z), s(z)),
88
+ rule(4),
89
+ ['A' = s(z), 'B' = z, 'C' = s(z), 'D' = z],
90
+ [pmul(s(z), z, z), padd(s(z), z, s(z))]).
91
+ step(pmul(s(z), z, z), fact(3), [], []).
92
+ step(padd(s(z), z, s(z)), fact(1), ['A' = s(z)], []).
93
+ step(padd(s(z), s(z), s(s(z))),
94
+ rule(2),
95
+ ['A' = s(z), 'B' = z, 'C' = s(z)],
96
+ [padd(s(z), z, s(z))]).
97
+ step(padd(s(z), s(s(z)), s(s(s(z)))),
98
+ rule(2),
99
+ ['A' = s(z), 'B' = s(z), 'C' = s(s(z))],
100
+ [padd(s(z), s(z), s(s(z)))]).
101
+ step(padd(s(z), s(s(s(z))), s(s(s(s(z))))),
102
+ rule(2),
103
+ ['A' = s(z), 'B' = s(s(z)), 'C' = s(s(s(z)))],
104
+ [padd(s(z), s(s(z)), s(s(s(z))))]).
105
+ step(pfac(s(s(s(z))), s(s(s(s(z)))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
106
+ rule(7),
107
+ ['N' = s(s(z)),
108
+ 'Acc' = s(s(s(s(z)))),
109
+ 'Value' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))),
110
+ 'Next' = s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))],
111
+ [pmul(s(s(s(s(z)))), s(s(s(z))), s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))),
112
+ pfac(s(s(z)), s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))))]).
113
+ step(pmul(s(s(s(s(z)))), s(s(s(z))), s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))),
114
+ rule(4),
115
+ ['A' = s(s(s(s(z)))),
116
+ 'B' = s(s(z)),
117
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
118
+ 'D' = s(s(s(s(s(s(s(s(z))))))))],
119
+ [pmul(s(s(s(s(z)))), s(s(z)), s(s(s(s(s(s(s(s(z))))))))),
120
+ padd(s(s(s(s(z)))), s(s(s(s(s(s(s(s(z)))))))), s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))]).
121
+ step(pmul(s(s(s(s(z)))), s(s(z)), s(s(s(s(s(s(s(s(z))))))))),
122
+ rule(4),
123
+ ['A' = s(s(s(s(z)))), 'B' = s(z), 'C' = s(s(s(s(s(s(s(s(z)))))))), 'D' = s(s(s(s(z))))],
124
+ [pmul(s(s(s(s(z)))), s(z), s(s(s(s(z))))),
125
+ padd(s(s(s(s(z)))), s(s(s(s(z)))), s(s(s(s(s(s(s(s(z)))))))))]).
126
+ step(pmul(s(s(s(s(z)))), s(z), s(s(s(s(z))))),
127
+ rule(4),
128
+ ['A' = s(s(s(s(z)))), 'B' = z, 'C' = s(s(s(s(z)))), 'D' = z],
129
+ [pmul(s(s(s(s(z)))), z, z), padd(s(s(s(s(z)))), z, s(s(s(s(z)))))]).
130
+ step(pmul(s(s(s(s(z)))), z, z), fact(3), [], []).
131
+ step(padd(s(s(s(s(z)))), z, s(s(s(s(z))))), fact(1), ['A' = s(s(s(s(z))))], []).
132
+ step(padd(s(s(s(s(z)))), s(s(s(s(z)))), s(s(s(s(s(s(s(s(z))))))))),
133
+ rule(2),
134
+ ['A' = s(s(s(s(z)))), 'B' = s(s(s(z))), 'C' = s(s(s(s(s(s(s(z)))))))],
135
+ [padd(s(s(s(s(z)))), s(s(s(z))), s(s(s(s(s(s(s(z))))))))]).
136
+ step(padd(s(s(s(s(z)))), s(s(s(z))), s(s(s(s(s(s(s(z)))))))),
137
+ rule(2),
138
+ ['A' = s(s(s(s(z)))), 'B' = s(s(z)), 'C' = s(s(s(s(s(s(z))))))],
139
+ [padd(s(s(s(s(z)))), s(s(z)), s(s(s(s(s(s(z)))))))]).
140
+ step(padd(s(s(s(s(z)))), s(s(z)), s(s(s(s(s(s(z))))))),
141
+ rule(2),
142
+ ['A' = s(s(s(s(z)))), 'B' = s(z), 'C' = s(s(s(s(s(z)))))],
143
+ [padd(s(s(s(s(z)))), s(z), s(s(s(s(s(z))))))]).
144
+ step(padd(s(s(s(s(z)))), s(z), s(s(s(s(s(z)))))),
145
+ rule(2),
146
+ ['A' = s(s(s(s(z)))), 'B' = z, 'C' = s(s(s(s(z))))],
147
+ [padd(s(s(s(s(z)))), z, s(s(s(s(z)))))]).
148
+ step(padd(s(s(s(s(z)))), s(s(s(s(s(s(s(s(z)))))))), s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))),
149
+ rule(2),
150
+ ['A' = s(s(s(s(z)))),
151
+ 'B' = s(s(s(s(s(s(s(z))))))),
152
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(z)))))))))))],
153
+ [padd(s(s(s(s(z)))), s(s(s(s(s(s(s(z))))))), s(s(s(s(s(s(s(s(s(s(s(z))))))))))))]).
154
+ step(padd(s(s(s(s(z)))), s(s(s(s(s(s(s(z))))))), s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
155
+ rule(2),
156
+ ['A' = s(s(s(s(z)))), 'B' = s(s(s(s(s(s(z)))))), 'C' = s(s(s(s(s(s(s(s(s(s(z))))))))))],
157
+ [padd(s(s(s(s(z)))), s(s(s(s(s(s(z)))))), s(s(s(s(s(s(s(s(s(s(z)))))))))))]).
158
+ step(padd(s(s(s(s(z)))), s(s(s(s(s(s(z)))))), s(s(s(s(s(s(s(s(s(s(z))))))))))),
159
+ rule(2),
160
+ ['A' = s(s(s(s(z)))), 'B' = s(s(s(s(s(z))))), 'C' = s(s(s(s(s(s(s(s(s(z)))))))))],
161
+ [padd(s(s(s(s(z)))), s(s(s(s(s(z))))), s(s(s(s(s(s(s(s(s(z))))))))))]).
162
+ step(padd(s(s(s(s(z)))), s(s(s(s(s(z))))), s(s(s(s(s(s(s(s(s(z)))))))))),
163
+ rule(2),
164
+ ['A' = s(s(s(s(z)))), 'B' = s(s(s(s(z)))), 'C' = s(s(s(s(s(s(s(s(z))))))))],
165
+ [padd(s(s(s(s(z)))), s(s(s(s(z)))), s(s(s(s(s(s(s(s(z)))))))))]).
166
+ step(pfac(s(s(z)), s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
167
+ rule(7),
168
+ ['N' = s(z),
169
+ 'Acc' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
170
+ 'Value' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))),
171
+ 'Next' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))],
172
+ [pmul(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(z)), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
173
+ pfac(s(z), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))))]).
174
+ step(pmul(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(z)), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
175
+ rule(4),
176
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
177
+ 'B' = s(z),
178
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))),
179
+ 'D' = s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))],
180
+ [pmul(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(z), s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))),
181
+ padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))))]).
182
+ step(pmul(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(z), s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))),
183
+ rule(4),
184
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
185
+ 'B' = z,
186
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
187
+ 'D' = z],
188
+ [pmul(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), z, z),
189
+ padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), z, s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))]).
190
+ step(pmul(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), z, z), fact(3), [], []).
191
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), z, s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))),
192
+ fact(1),
193
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))],
194
+ []).
195
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
196
+ rule(2),
197
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
198
+ 'B' = s(s(s(s(s(s(s(s(s(s(s(z))))))))))),
199
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))],
200
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(s(z))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))]).
201
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(s(z))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))),
202
+ rule(2),
203
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
204
+ 'B' = s(s(s(s(s(s(s(s(s(s(z)))))))))),
205
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))],
206
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(z)))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))]).
207
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(s(z)))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))),
208
+ rule(2),
209
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
210
+ 'B' = s(s(s(s(s(s(s(s(s(z))))))))),
211
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))],
212
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(z))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))]).
213
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(s(z))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))),
214
+ rule(2),
215
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
216
+ 'B' = s(s(s(s(s(s(s(s(z)))))))),
217
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))],
218
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(z)))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))]).
219
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(s(z)))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))),
220
+ rule(2),
221
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
222
+ 'B' = s(s(s(s(s(s(s(z))))))),
223
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))],
224
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(z))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))]).
225
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(s(z))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))),
226
+ rule(2),
227
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
228
+ 'B' = s(s(s(s(s(s(z)))))),
229
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))],
230
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(z)))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))]).
231
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(s(z)))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))),
232
+ rule(2),
233
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
234
+ 'B' = s(s(s(s(s(z))))),
235
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))],
236
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(z))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))]).
237
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(s(z))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))),
238
+ rule(2),
239
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
240
+ 'B' = s(s(s(s(z)))),
241
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))],
242
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(z)))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))]).
243
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(s(z)))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))),
244
+ rule(2),
245
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
246
+ 'B' = s(s(s(z))),
247
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))],
248
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(z))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))]).
249
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(s(z))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))),
250
+ rule(2),
251
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
252
+ 'B' = s(s(z)),
253
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))],
254
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(z)), s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))]).
255
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(s(z)), s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))),
256
+ rule(2),
257
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
258
+ 'B' = s(z),
259
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))],
260
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(z), s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))]).
261
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), s(z), s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))),
262
+ rule(2),
263
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))),
264
+ 'B' = z,
265
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))],
266
+ [padd(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))), z, s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))]).
267
+ step(pfac(s(z), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
268
+ rule(7),
269
+ ['N' = z,
270
+ 'Acc' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))),
271
+ 'Value' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))),
272
+ 'Next' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))],
273
+ [pmul(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), s(z), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
274
+ pfac(z, s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))))]).
275
+ step(pmul(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), s(z), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
276
+ rule(4),
277
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))),
278
+ 'B' = z,
279
+ 'C' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))),
280
+ 'D' = z],
281
+ [pmul(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), z, z),
282
+ padd(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), z, s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))))]).
283
+ step(pmul(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), z, z),
284
+ fact(3),
285
+ [],
286
+ []).
287
+ step(padd(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), z, s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
288
+ fact(1),
289
+ ['A' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))],
290
+ []).
291
+ step(pfac(z, s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z)))))))))))))))))))))))), s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))),
292
+ fact(6),
293
+ ['Acc' = s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(s(z))))))))))))))))))))))))],
294
+ []).
@@ -0,0 +1,295 @@
1
+ pell_answer(solution_5, solution(3363, 2378)).
2
+ pell_answer(solution_8, solution(665857, 470832)).
3
+ pell_answer(check_8, true).
4
+ pell_answer(y_sum_1_to_8, 568344).
5
+
6
+ clause(2, pell(0, 1, 0), true).
7
+ clause(3,
8
+ pell(var('N'), var('X'), var('Y')),
9
+ (var('N') > 0,
10
+ var('N1') is var('N') - 1,
11
+ pell(var('N1'), var('X0'), var('Y0')),
12
+ var('Ax') is 3 * var('X0'),
13
+ var('By') is 4 * var('Y0'),
14
+ var('X') is var('Ax') + var('By'),
15
+ var('Cx') is 2 * var('X0'),
16
+ var('Dy') is 3 * var('Y0'),
17
+ var('Y') is var('Cx') + var('Dy'))).
18
+ clause(4,
19
+ pell_holds(var('N'), true),
20
+ (pell(var('N'), var('X'), var('Y')),
21
+ var('X2') is var('X') * var('X'),
22
+ var('Y2') is var('Y') * var('Y'),
23
+ var('Twicey2') is 2 * var('Y2'),
24
+ 1 is var('X2') - var('Twicey2'))).
25
+ clause(5, pell_answer(solution_5, solution(var('X'), var('Y'))), pell(5, var('X'), var('Y'))).
26
+ clause(6, pell_answer(solution_8, solution(var('X'), var('Y'))), pell(8, var('X'), var('Y'))).
27
+ clause(7, pell_answer(check_8, true), pell_holds(8, true)).
28
+ clause(8,
29
+ pell_answer(y_sum_1_to_8, var('Sum')),
30
+ sumall(var('Y'), (between(1, 8, var('N')), pell(var('N'), anonymous(1), var('Y'))), var('Sum'))).
31
+
32
+ step(pell_answer(solution_5, solution(3363, 2378)),
33
+ rule(5),
34
+ ['X' = 3363, 'Y' = 2378],
35
+ [pell(5, 3363, 2378)]).
36
+ step(pell(5, 3363, 2378),
37
+ rule(3),
38
+ ['N' = 5,
39
+ 'X' = 3363,
40
+ 'Y' = 2378,
41
+ 'N1' = 4,
42
+ 'X0' = 577,
43
+ 'Y0' = 408,
44
+ 'Ax' = 1731,
45
+ 'By' = 1632,
46
+ 'Cx' = 1154,
47
+ 'Dy' = 1224],
48
+ [5 > 0,
49
+ 4 is 5 - 1,
50
+ pell(4, 577, 408),
51
+ 1731 is 3 * 577,
52
+ 1632 is 4 * 408,
53
+ 3363 is 1731 + 1632,
54
+ 1154 is 2 * 577,
55
+ 1224 is 3 * 408,
56
+ 2378 is 1154 + 1224]).
57
+ step(5 > 0, builtin, [], []).
58
+ step(4 is 5 - 1, builtin, [], []).
59
+ step(pell(4, 577, 408),
60
+ rule(3),
61
+ ['N' = 4,
62
+ 'X' = 577,
63
+ 'Y' = 408,
64
+ 'N1' = 3,
65
+ 'X0' = 99,
66
+ 'Y0' = 70,
67
+ 'Ax' = 297,
68
+ 'By' = 280,
69
+ 'Cx' = 198,
70
+ 'Dy' = 210],
71
+ [4 > 0,
72
+ 3 is 4 - 1,
73
+ pell(3, 99, 70),
74
+ 297 is 3 * 99,
75
+ 280 is 4 * 70,
76
+ 577 is 297 + 280,
77
+ 198 is 2 * 99,
78
+ 210 is 3 * 70,
79
+ 408 is 198 + 210]).
80
+ step(4 > 0, builtin, [], []).
81
+ step(3 is 4 - 1, builtin, [], []).
82
+ step(pell(3, 99, 70),
83
+ rule(3),
84
+ ['N' = 3,
85
+ 'X' = 99,
86
+ 'Y' = 70,
87
+ 'N1' = 2,
88
+ 'X0' = 17,
89
+ 'Y0' = 12,
90
+ 'Ax' = 51,
91
+ 'By' = 48,
92
+ 'Cx' = 34,
93
+ 'Dy' = 36],
94
+ [3 > 0,
95
+ 2 is 3 - 1,
96
+ pell(2, 17, 12),
97
+ 51 is 3 * 17,
98
+ 48 is 4 * 12,
99
+ 99 is 51 + 48,
100
+ 34 is 2 * 17,
101
+ 36 is 3 * 12,
102
+ 70 is 34 + 36]).
103
+ step(3 > 0, builtin, [], []).
104
+ step(2 is 3 - 1, builtin, [], []).
105
+ step(pell(2, 17, 12),
106
+ rule(3),
107
+ ['N' = 2,
108
+ 'X' = 17,
109
+ 'Y' = 12,
110
+ 'N1' = 1,
111
+ 'X0' = 3,
112
+ 'Y0' = 2,
113
+ 'Ax' = 9,
114
+ 'By' = 8,
115
+ 'Cx' = 6,
116
+ 'Dy' = 6],
117
+ [2 > 0,
118
+ 1 is 2 - 1,
119
+ pell(1, 3, 2),
120
+ 9 is 3 * 3,
121
+ 8 is 4 * 2,
122
+ 17 is 9 + 8,
123
+ 6 is 2 * 3,
124
+ 6 is 3 * 2,
125
+ 12 is 6 + 6]).
126
+ step(2 > 0, builtin, [], []).
127
+ step(1 is 2 - 1, builtin, [], []).
128
+ step(pell(1, 3, 2),
129
+ rule(3),
130
+ ['N' = 1,
131
+ 'X' = 3,
132
+ 'Y' = 2,
133
+ 'N1' = 0,
134
+ 'X0' = 1,
135
+ 'Y0' = 0,
136
+ 'Ax' = 3,
137
+ 'By' = 0,
138
+ 'Cx' = 2,
139
+ 'Dy' = 0],
140
+ [1 > 0,
141
+ 0 is 1 - 1,
142
+ pell(0, 1, 0),
143
+ 3 is 3 * 1,
144
+ 0 is 4 * 0,
145
+ 3 is 3 + 0,
146
+ 2 is 2 * 1,
147
+ 0 is 3 * 0,
148
+ 2 is 2 + 0]).
149
+ step(1 > 0, builtin, [], []).
150
+ step(0 is 1 - 1, builtin, [], []).
151
+ step(pell(0, 1, 0), fact(2), [], []).
152
+ step(3 is 3 * 1, builtin, [], []).
153
+ step(0 is 4 * 0, builtin, [], []).
154
+ step(3 is 3 + 0, builtin, [], []).
155
+ step(2 is 2 * 1, builtin, [], []).
156
+ step(0 is 3 * 0, builtin, [], []).
157
+ step(2 is 2 + 0, builtin, [], []).
158
+ step(9 is 3 * 3, builtin, [], []).
159
+ step(8 is 4 * 2, builtin, [], []).
160
+ step(17 is 9 + 8, builtin, [], []).
161
+ step(6 is 2 * 3, builtin, [], []).
162
+ step(6 is 3 * 2, builtin, [], []).
163
+ step(12 is 6 + 6, builtin, [], []).
164
+ step(51 is 3 * 17, builtin, [], []).
165
+ step(48 is 4 * 12, builtin, [], []).
166
+ step(99 is 51 + 48, builtin, [], []).
167
+ step(34 is 2 * 17, builtin, [], []).
168
+ step(36 is 3 * 12, builtin, [], []).
169
+ step(70 is 34 + 36, builtin, [], []).
170
+ step(297 is 3 * 99, builtin, [], []).
171
+ step(280 is 4 * 70, builtin, [], []).
172
+ step(577 is 297 + 280, builtin, [], []).
173
+ step(198 is 2 * 99, builtin, [], []).
174
+ step(210 is 3 * 70, builtin, [], []).
175
+ step(408 is 198 + 210, builtin, [], []).
176
+ step(1731 is 3 * 577, builtin, [], []).
177
+ step(1632 is 4 * 408, builtin, [], []).
178
+ step(3363 is 1731 + 1632, builtin, [], []).
179
+ step(1154 is 2 * 577, builtin, [], []).
180
+ step(1224 is 3 * 408, builtin, [], []).
181
+ step(2378 is 1154 + 1224, builtin, [], []).
182
+ step(pell_answer(solution_8, solution(665857, 470832)),
183
+ rule(6),
184
+ ['X' = 665857, 'Y' = 470832],
185
+ [pell(8, 665857, 470832)]).
186
+ step(pell(8, 665857, 470832),
187
+ rule(3),
188
+ ['N' = 8,
189
+ 'X' = 665857,
190
+ 'Y' = 470832,
191
+ 'N1' = 7,
192
+ 'X0' = 114243,
193
+ 'Y0' = 80782,
194
+ 'Ax' = 342729,
195
+ 'By' = 323128,
196
+ 'Cx' = 228486,
197
+ 'Dy' = 242346],
198
+ [8 > 0,
199
+ 7 is 8 - 1,
200
+ pell(7, 114243, 80782),
201
+ 342729 is 3 * 114243,
202
+ 323128 is 4 * 80782,
203
+ 665857 is 342729 + 323128,
204
+ 228486 is 2 * 114243,
205
+ 242346 is 3 * 80782,
206
+ 470832 is 228486 + 242346]).
207
+ step(8 > 0, builtin, [], []).
208
+ step(7 is 8 - 1, builtin, [], []).
209
+ step(pell(7, 114243, 80782),
210
+ rule(3),
211
+ ['N' = 7,
212
+ 'X' = 114243,
213
+ 'Y' = 80782,
214
+ 'N1' = 6,
215
+ 'X0' = 19601,
216
+ 'Y0' = 13860,
217
+ 'Ax' = 58803,
218
+ 'By' = 55440,
219
+ 'Cx' = 39202,
220
+ 'Dy' = 41580],
221
+ [7 > 0,
222
+ 6 is 7 - 1,
223
+ pell(6, 19601, 13860),
224
+ 58803 is 3 * 19601,
225
+ 55440 is 4 * 13860,
226
+ 114243 is 58803 + 55440,
227
+ 39202 is 2 * 19601,
228
+ 41580 is 3 * 13860,
229
+ 80782 is 39202 + 41580]).
230
+ step(7 > 0, builtin, [], []).
231
+ step(6 is 7 - 1, builtin, [], []).
232
+ step(pell(6, 19601, 13860),
233
+ rule(3),
234
+ ['N' = 6,
235
+ 'X' = 19601,
236
+ 'Y' = 13860,
237
+ 'N1' = 5,
238
+ 'X0' = 3363,
239
+ 'Y0' = 2378,
240
+ 'Ax' = 10089,
241
+ 'By' = 9512,
242
+ 'Cx' = 6726,
243
+ 'Dy' = 7134],
244
+ [6 > 0,
245
+ 5 is 6 - 1,
246
+ pell(5, 3363, 2378),
247
+ 10089 is 3 * 3363,
248
+ 9512 is 4 * 2378,
249
+ 19601 is 10089 + 9512,
250
+ 6726 is 2 * 3363,
251
+ 7134 is 3 * 2378,
252
+ 13860 is 6726 + 7134]).
253
+ step(6 > 0, builtin, [], []).
254
+ step(5 is 6 - 1, builtin, [], []).
255
+ step(10089 is 3 * 3363, builtin, [], []).
256
+ step(9512 is 4 * 2378, builtin, [], []).
257
+ step(19601 is 10089 + 9512, builtin, [], []).
258
+ step(6726 is 2 * 3363, builtin, [], []).
259
+ step(7134 is 3 * 2378, builtin, [], []).
260
+ step(13860 is 6726 + 7134, builtin, [], []).
261
+ step(58803 is 3 * 19601, builtin, [], []).
262
+ step(55440 is 4 * 13860, builtin, [], []).
263
+ step(114243 is 58803 + 55440, builtin, [], []).
264
+ step(39202 is 2 * 19601, builtin, [], []).
265
+ step(41580 is 3 * 13860, builtin, [], []).
266
+ step(80782 is 39202 + 41580, builtin, [], []).
267
+ step(342729 is 3 * 114243, builtin, [], []).
268
+ step(323128 is 4 * 80782, builtin, [], []).
269
+ step(665857 is 342729 + 323128, builtin, [], []).
270
+ step(228486 is 2 * 114243, builtin, [], []).
271
+ step(242346 is 3 * 80782, builtin, [], []).
272
+ step(470832 is 228486 + 242346, builtin, [], []).
273
+ step(pell_answer(check_8, true), rule(7), [], [pell_holds(8, true)]).
274
+ step(pell_holds(8, true),
275
+ rule(4),
276
+ ['N' = 8,
277
+ 'X' = 665857,
278
+ 'Y' = 470832,
279
+ 'X2' = 443365544449,
280
+ 'Y2' = 221682772224,
281
+ 'Twicey2' = 443365544448],
282
+ [pell(8, 665857, 470832),
283
+ 443365544449 is 665857 * 665857,
284
+ 221682772224 is 470832 * 470832,
285
+ 443365544448 is 2 * 221682772224,
286
+ 1 is 443365544449 - 443365544448]).
287
+ step(443365544449 is 665857 * 665857, builtin, [], []).
288
+ step(221682772224 is 470832 * 470832, builtin, [], []).
289
+ step(443365544448 is 2 * 221682772224, builtin, [], []).
290
+ step(1 is 443365544449 - 443365544448, builtin, [], []).
291
+ step(pell_answer(y_sum_1_to_8, 568344),
292
+ rule(8),
293
+ ['Sum' = 568344],
294
+ [sumall(Expression, (between(1, 8, N), pell(N, _x, Expression)), 568344)]).
295
+ step(sumall(Expression, (between(1, 8, N), pell(N, _x, Expression)), 568344), builtin, [], []).
@@ -0,0 +1,97 @@
1
+ period_s(pendulum1, 2.0).
2
+ periodError_s(pendulum1, 0.0).
3
+ status(pendulum1, within_period_tolerance).
4
+ reason(pendulum1, "small-angle period matches the two-second target").
5
+
6
+ clause(1, constant(pi, 3.141592653589793), true).
7
+ clause(2, experiment(pendulum1, length_m, 1.0), true).
8
+ clause(3, experiment(pendulum1, gravity_m_s2, 9.869604401089358), true).
9
+ clause(4, limit(pendulum1, target_period_s, 2.0), true).
10
+ clause(5, limit(pendulum1, tolerance_s, 0.01), true).
11
+ clause(6,
12
+ period(var('Experiment'), var('Period')),
13
+ (experiment(var('Experiment'), length_m, var('Length')),
14
+ experiment(var('Experiment'), gravity_m_s2, var('Gravity')),
15
+ var('Ratio') is var('Length') / var('Gravity'),
16
+ var('Root') is var('Ratio') ** 0.5,
17
+ constant(pi, var('Pi')),
18
+ var('Twopi') is 2.0 * var('Pi'),
19
+ var('Period') is var('Twopi') * var('Root'))).
20
+ clause(7,
21
+ period_error(var('Experiment'), var('Error')),
22
+ (period(var('Experiment'), var('Period')),
23
+ limit(var('Experiment'), target_period_s, var('Target')),
24
+ var('Rawerror') is var('Period') - var('Target'),
25
+ var('Error') is abs(var('Rawerror')))).
26
+ clause(8,
27
+ within_period_tolerance(var('Experiment')),
28
+ (period_error(var('Experiment'), var('Error')),
29
+ limit(var('Experiment'), tolerance_s, var('Tolerance')),
30
+ var('Error') < var('Tolerance'))).
31
+ clause(9, period_s(var('Experiment'), var('Period')), period(var('Experiment'), var('Period'))).
32
+ clause(10,
33
+ periodError_s(var('Experiment'), var('Error')),
34
+ period_error(var('Experiment'), var('Error'))).
35
+ clause(11,
36
+ status(var('Experiment'), within_period_tolerance),
37
+ within_period_tolerance(var('Experiment'))).
38
+ clause(12,
39
+ reason(var('Experiment'), "small-angle period matches the two-second target"),
40
+ within_period_tolerance(var('Experiment'))).
41
+
42
+ step(period_s(pendulum1, 2.0),
43
+ rule(9),
44
+ ['Experiment' = pendulum1, 'Period' = 2.0],
45
+ [period(pendulum1, 2.0)]).
46
+ step(period(pendulum1, 2.0),
47
+ rule(6),
48
+ ['Experiment' = pendulum1,
49
+ 'Period' = 2.0,
50
+ 'Length' = 1.0,
51
+ 'Gravity' = 9.869604401089358,
52
+ 'Ratio' = 0.10132118364233778,
53
+ 'Root' = 0.3183098861837907,
54
+ 'Pi' = 3.141592653589793,
55
+ 'Twopi' = 6.283185307179586],
56
+ [experiment(pendulum1, length_m, 1.0),
57
+ experiment(pendulum1, gravity_m_s2, 9.869604401089358),
58
+ 0.10132118364233778 is 1.0 / 9.869604401089358,
59
+ 0.3183098861837907 is 0.10132118364233778 ** 0.5,
60
+ constant(pi, 3.141592653589793),
61
+ 6.283185307179586 is 2.0 * 3.141592653589793,
62
+ 2.0 is 6.283185307179586 * 0.3183098861837907]).
63
+ step(experiment(pendulum1, length_m, 1.0), fact(2), [], []).
64
+ step(experiment(pendulum1, gravity_m_s2, 9.869604401089358), fact(3), [], []).
65
+ step(0.10132118364233778 is 1.0 / 9.869604401089358, builtin, [], []).
66
+ step(0.3183098861837907 is 0.10132118364233778 ** 0.5, builtin, [], []).
67
+ step(constant(pi, 3.141592653589793), fact(1), [], []).
68
+ step(6.283185307179586 is 2.0 * 3.141592653589793, builtin, [], []).
69
+ step(2.0 is 6.283185307179586 * 0.3183098861837907, builtin, [], []).
70
+ step(periodError_s(pendulum1, 0.0),
71
+ rule(10),
72
+ ['Experiment' = pendulum1, 'Error' = 0.0],
73
+ [period_error(pendulum1, 0.0)]).
74
+ step(period_error(pendulum1, 0.0),
75
+ rule(7),
76
+ ['Experiment' = pendulum1, 'Error' = 0.0, 'Period' = 2.0, 'Target' = 2.0, 'Rawerror' = 0.0],
77
+ [period(pendulum1, 2.0),
78
+ limit(pendulum1, target_period_s, 2.0),
79
+ 0.0 is 2.0 - 2.0,
80
+ 0.0 is abs(0.0)]).
81
+ step(limit(pendulum1, target_period_s, 2.0), fact(4), [], []).
82
+ step(0.0 is 2.0 - 2.0, builtin, [], []).
83
+ step(0.0 is abs(0.0), builtin, [], []).
84
+ step(status(pendulum1, within_period_tolerance),
85
+ rule(11),
86
+ ['Experiment' = pendulum1],
87
+ [within_period_tolerance(pendulum1)]).
88
+ step(within_period_tolerance(pendulum1),
89
+ rule(8),
90
+ ['Experiment' = pendulum1, 'Error' = 0.0, 'Tolerance' = 0.01],
91
+ [period_error(pendulum1, 0.0), limit(pendulum1, tolerance_s, 0.01), 0.0 < 0.01]).
92
+ step(limit(pendulum1, tolerance_s, 0.01), fact(5), [], []).
93
+ step(0.0 < 0.01, builtin, [], []).
94
+ step(reason(pendulum1, "small-angle period matches the two-second target"),
95
+ rule(12),
96
+ ['Experiment' = pendulum1],
97
+ [within_period_tolerance(pendulum1)]).