occam-verify-cli 1.0.448 → 1.0.472

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 (222) hide show
  1. package/lib/constants.js +13 -5
  2. package/lib/context/ephemeral.js +270 -0
  3. package/lib/context/file.js +136 -128
  4. package/lib/context/liminal.js +120 -0
  5. package/lib/context/literal.js +92 -0
  6. package/lib/context/nominal.js +15 -1
  7. package/lib/context/release.js +68 -9
  8. package/lib/context/scoped.js +322 -0
  9. package/lib/context/synthetic.js +133 -0
  10. package/lib/element/assertion/contained.js +66 -66
  11. package/lib/element/assertion/defined.js +32 -32
  12. package/lib/element/assertion/property.js +39 -39
  13. package/lib/element/assertion/satisfies.js +22 -22
  14. package/lib/element/assumption.js +71 -87
  15. package/lib/element/combinator/bracketed.js +1 -10
  16. package/lib/element/conclusion.js +19 -15
  17. package/lib/element/constructor/bracketed.js +1 -10
  18. package/lib/element/constructor.js +2 -2
  19. package/lib/element/declaration/combinator.js +1 -2
  20. package/lib/element/declaration/metavariable.js +3 -3
  21. package/lib/element/declaration/variable.js +3 -3
  22. package/lib/element/deduction.js +26 -20
  23. package/lib/element/derivation.js +3 -3
  24. package/lib/element/equality.js +5 -5
  25. package/lib/element/equivalence.js +112 -107
  26. package/lib/element/equivalences.js +24 -10
  27. package/lib/element/error.js +3 -3
  28. package/lib/element/frame.js +73 -62
  29. package/lib/element/hypothesis.js +2 -2
  30. package/lib/element/judgement.js +40 -60
  31. package/lib/element/metaType.js +4 -4
  32. package/lib/element/metavariable.js +49 -38
  33. package/lib/element/parameter.js +13 -5
  34. package/lib/element/procedureCall.js +16 -16
  35. package/lib/element/proof.js +14 -13
  36. package/lib/element/proofAssertion/premise.js +319 -0
  37. package/lib/element/proofAssertion/step.js +309 -0
  38. package/lib/element/proofAssertion/supposition.js +333 -0
  39. package/lib/element/proofAssertion.js +20 -10
  40. package/lib/element/propertyRelation.js +2 -2
  41. package/lib/element/reference.js +72 -30
  42. package/lib/element/rule.js +26 -28
  43. package/lib/element/section.js +5 -5
  44. package/lib/element/signature.js +9 -6
  45. package/lib/element/statement.js +44 -36
  46. package/lib/element/subproof.js +18 -17
  47. package/lib/element/substitution/frame.js +86 -49
  48. package/lib/element/substitution/reference.js +101 -19
  49. package/lib/element/substitution/statement.js +128 -105
  50. package/lib/element/substitution/term.js +93 -57
  51. package/lib/element/substitution.js +20 -69
  52. package/lib/element/substitutions.js +49 -34
  53. package/lib/element/term.js +41 -30
  54. package/lib/element/topLevelAssertion/axiom.js +331 -0
  55. package/lib/element/{conjecture.js → topLevelAssertion/conjecture.js} +10 -10
  56. package/lib/element/{lemma.js → topLevelAssertion/lemma.js} +9 -9
  57. package/lib/element/{theorem.js → topLevelAssertion/theorem.js} +8 -8
  58. package/lib/element/topLevelAssertion.js +434 -0
  59. package/lib/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +8 -8
  60. package/lib/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +8 -8
  61. package/lib/element/topLevelMetaAssertion.js +293 -0
  62. package/lib/element/type.js +4 -4
  63. package/lib/element/variable.js +48 -40
  64. package/lib/index.js +3 -3
  65. package/lib/main.js +3 -3
  66. package/lib/metaTypes.js +18 -15
  67. package/lib/node/frame.js +2 -2
  68. package/lib/node/metavariable.js +4 -4
  69. package/lib/node/parameter.js +28 -7
  70. package/lib/node/proofAssertion/premise.js +116 -0
  71. package/lib/node/proofAssertion/step.js +152 -0
  72. package/lib/node/proofAssertion/supposition.js +116 -0
  73. package/lib/node/{premise.js → proofAssertion.js} +11 -18
  74. package/lib/node/statement.js +2 -2
  75. package/lib/node/substitution/frame.js +9 -31
  76. package/lib/node/substitution/reference.js +137 -0
  77. package/lib/node/substitution/statement.js +9 -31
  78. package/lib/node/substitution/term.js +9 -23
  79. package/lib/node/{axiom.js → topLevelAssertion/axiom.js} +7 -7
  80. package/lib/node/{conjecture.js → topLevelAssertion/conjecture.js} +7 -7
  81. package/lib/node/{lemma.js → topLevelAssertion/lemma.js} +7 -7
  82. package/lib/node/{theorem.js → topLevelAssertion/theorem.js} +7 -7
  83. package/lib/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +9 -9
  84. package/lib/node/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +7 -7
  85. package/lib/node/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +7 -7
  86. package/lib/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +9 -9
  87. package/lib/nonTerminalNodeMap.js +15 -14
  88. package/lib/preamble.js +10 -10
  89. package/lib/process/instantiate.js +6 -21
  90. package/lib/process/unify.js +11 -10
  91. package/lib/tokenTypes.js +22 -0
  92. package/lib/types.js +3 -3
  93. package/lib/utilities/bnf.js +5 -5
  94. package/lib/utilities/context.js +63 -0
  95. package/lib/utilities/element.js +235 -408
  96. package/lib/utilities/instance.js +12 -34
  97. package/lib/utilities/json.js +3 -2
  98. package/lib/utilities/string.js +56 -21
  99. package/lib/utilities/unification.js +38 -32
  100. package/lib/utilities/validation.js +47 -50
  101. package/package.json +2 -2
  102. package/src/constants.js +12 -1
  103. package/src/context/ephemeral.js +257 -0
  104. package/src/context/file.js +108 -116
  105. package/src/context/liminal.js +67 -0
  106. package/src/context/literal.js +51 -0
  107. package/src/context/nominal.js +12 -0
  108. package/src/context/release.js +48 -8
  109. package/src/context/{local.js → scoped.js} +43 -125
  110. package/src/context/synthetic.js +60 -0
  111. package/src/element/assertion/contained.js +49 -47
  112. package/src/element/assertion/defined.js +29 -27
  113. package/src/element/assertion/property.js +35 -35
  114. package/src/element/assertion/satisfies.js +19 -18
  115. package/src/element/assumption.js +71 -93
  116. package/src/element/combinator/bracketed.js +0 -7
  117. package/src/element/conclusion.js +25 -24
  118. package/src/element/constructor/bracketed.js +0 -7
  119. package/src/element/constructor.js +1 -1
  120. package/src/element/declaration/combinator.js +0 -1
  121. package/src/element/declaration/metavariable.js +2 -2
  122. package/src/element/declaration/variable.js +5 -5
  123. package/src/element/deduction.js +33 -31
  124. package/src/element/derivation.js +2 -2
  125. package/src/element/equality.js +4 -4
  126. package/src/element/equivalence.js +115 -135
  127. package/src/element/equivalences.js +9 -7
  128. package/src/element/error.js +4 -2
  129. package/src/element/frame.js +80 -65
  130. package/src/element/hypothesis.js +1 -1
  131. package/src/element/judgement.js +42 -62
  132. package/src/element/metaType.js +3 -4
  133. package/src/element/metavariable.js +59 -56
  134. package/src/element/parameter.js +10 -5
  135. package/src/element/procedureCall.js +20 -18
  136. package/src/element/proof.js +14 -16
  137. package/src/element/{premise.js → proofAssertion/premise.js} +57 -53
  138. package/src/element/{step.js → proofAssertion/step.js} +59 -62
  139. package/src/element/{supposition.js → proofAssertion/supposition.js} +67 -56
  140. package/src/element/proofAssertion.js +24 -13
  141. package/src/element/propertyRelation.js +1 -1
  142. package/src/element/reference.js +87 -37
  143. package/src/element/rule.js +31 -37
  144. package/src/element/section.js +5 -5
  145. package/src/element/signature.js +8 -8
  146. package/src/element/statement.js +52 -48
  147. package/src/element/subproof.js +16 -18
  148. package/src/element/substitution/frame.js +104 -50
  149. package/src/element/substitution/reference.js +120 -20
  150. package/src/element/substitution/statement.js +169 -130
  151. package/src/element/substitution/term.js +104 -63
  152. package/src/element/substitution.js +16 -58
  153. package/src/element/substitutions.js +43 -41
  154. package/src/element/term.js +47 -41
  155. package/src/element/{axiom.js → topLevelAssertion/axiom.js} +22 -20
  156. package/src/element/{conjecture.js → topLevelAssertion/conjecture.js} +5 -6
  157. package/src/element/{lemma.js → topLevelAssertion/lemma.js} +5 -6
  158. package/src/element/{theorem.js → topLevelAssertion/theorem.js} +5 -5
  159. package/src/element/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +37 -33
  160. package/src/element/{metaLemma.js → topLevelMetaAssertion/metaLemma.js} +5 -6
  161. package/src/element/{metatheorem.js → topLevelMetaAssertion/metatheorem.js} +5 -6
  162. package/src/element/{metaLemmaMetatheorem.js → topLevelMetaAssertion.js} +19 -17
  163. package/src/element/type.js +2 -4
  164. package/src/element/variable.js +47 -48
  165. package/src/index.js +2 -1
  166. package/src/main.js +2 -1
  167. package/src/metaTypes.js +25 -9
  168. package/src/node/frame.js +1 -1
  169. package/src/node/metavariable.js +3 -3
  170. package/src/node/parameter.js +32 -5
  171. package/src/node/proofAssertion/premise.js +16 -0
  172. package/src/node/{step.js → proofAssertion/step.js} +4 -18
  173. package/src/node/proofAssertion/supposition.js +16 -0
  174. package/src/node/proofAssertion.js +23 -0
  175. package/src/node/statement.js +1 -1
  176. package/src/node/substitution/frame.js +6 -32
  177. package/src/node/substitution/reference.js +38 -0
  178. package/src/node/substitution/statement.js +6 -32
  179. package/src/node/substitution/term.js +6 -22
  180. package/src/node/topLevelAssertion/axiom.js +13 -0
  181. package/src/node/topLevelAssertion/conjecture.js +13 -0
  182. package/src/node/topLevelAssertion/lemma.js +13 -0
  183. package/src/node/topLevelAssertion/theorem.js +13 -0
  184. package/src/node/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +1 -1
  185. package/src/node/topLevelMetaAssertion/metaLemma.js +13 -0
  186. package/src/node/topLevelMetaAssertion/metatheorem.js +13 -0
  187. package/src/node/{metaLemmaMetaTheorem.js → topLevelMetaAssertion.js} +1 -1
  188. package/src/nonTerminalNodeMap.js +15 -12
  189. package/src/preamble.js +9 -9
  190. package/src/process/instantiate.js +27 -36
  191. package/src/process/unify.js +10 -9
  192. package/src/tokenTypes.js +4 -0
  193. package/src/types.js +4 -2
  194. package/src/utilities/bnf.js +3 -2
  195. package/src/utilities/context.js +46 -0
  196. package/src/utilities/element.js +302 -509
  197. package/src/utilities/instance.js +19 -42
  198. package/src/utilities/json.js +3 -1
  199. package/src/utilities/string.js +69 -28
  200. package/src/utilities/unification.js +41 -38
  201. package/src/utilities/validation.js +66 -75
  202. package/lib/context/local.js +0 -605
  203. package/lib/context/temporary.js +0 -752
  204. package/lib/element/axiom.js +0 -329
  205. package/lib/element/axiomLemmaTheoremConjecture.js +0 -427
  206. package/lib/element/metaLemmaMetatheorem.js +0 -289
  207. package/lib/element/premise.js +0 -307
  208. package/lib/element/step.js +0 -311
  209. package/lib/element/supposition.js +0 -320
  210. package/lib/log.js +0 -150
  211. package/lib/node/step.js +0 -166
  212. package/lib/node/supposition.js +0 -130
  213. package/src/context/temporary.js +0 -476
  214. package/src/log.js +0 -118
  215. package/src/node/axiom.js +0 -13
  216. package/src/node/conjecture.js +0 -13
  217. package/src/node/lemma.js +0 -13
  218. package/src/node/metaLemma.js +0 -13
  219. package/src/node/metatheorem.js +0 -13
  220. package/src/node/premise.js +0 -30
  221. package/src/node/supposition.js +0 -30
  222. package/src/node/theorem.js +0 -13
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+ import { contextUtilities } from "occam-furtle";
5
+
6
+ const { extract } = arrayUtilities,
7
+ { chainContext } = contextUtilities;
8
+
9
+ export default class EphemeralContext {
10
+ constructor(context, terms, frames, statements, assertions, references, substitutions) {
11
+ this.context = context;
12
+ this.terms = terms;
13
+ this.frames = frames;
14
+ this.statements = statements;
15
+ this.assertions = assertions;
16
+ this.references = references;
17
+ this.substitutions = substitutions;
18
+
19
+ return chainContext(this);
20
+ }
21
+
22
+ getContext() {
23
+ return this.context;
24
+ }
25
+
26
+ getTerms() {
27
+ return this.terms;
28
+ }
29
+
30
+ getFrames() {
31
+ return this.frames;
32
+ }
33
+
34
+ getStatements() {
35
+ return this.statements;
36
+ }
37
+
38
+ getAssertions() {
39
+ return this.assertions;
40
+ }
41
+
42
+ getReferences() {
43
+ return this.references;
44
+ }
45
+
46
+ getSubstitutions() {
47
+ return this.substitutions;
48
+ }
49
+
50
+ addTerm(term) {
51
+ const termA = term, ///
52
+ context = this, ///
53
+ termString = term.getString();
54
+
55
+ extract(this.terms, (term) => {
56
+ const termB = term, ///
57
+ termAEqualToTermB = termA.isEqualTo(termB);
58
+
59
+ if (termAEqualToTermB) {
60
+ return true;
61
+ }
62
+ });
63
+
64
+ context.trace(`Added the '${termString}' term to the context.`);
65
+
66
+ this.terms.push(term);
67
+ }
68
+
69
+ addFrame(frame) {
70
+ const frameA = frame, ///
71
+ context = this, ///
72
+ frameString = frame.getString();
73
+
74
+ extract(this.frames, (frame) => {
75
+ const frameB = frame, ///
76
+ frameAEqualToFrameB = frameA.isEqualTo(frameB);
77
+
78
+ if (frameAEqualToFrameB) {
79
+ return true;
80
+ }
81
+ });
82
+
83
+ context.trace(`Added the '${frameString}' frame to the context.`);
84
+
85
+ this.frames.push(frame);
86
+ }
87
+
88
+ addStatement(statement) {
89
+ const context = this, ///
90
+ statementA = statement, ///
91
+ statementString = statement.getString();
92
+
93
+ extract(this.statements, (statement) => {
94
+ const statementB = statement, ///
95
+ statementAEqualToFrameB = statementA.isEqualTo(statementB);
96
+
97
+ if (statementAEqualToFrameB) {
98
+ return true;
99
+ }
100
+ });
101
+
102
+ context.trace(`Added the '${statementString}' statement to the context.`);
103
+
104
+ this.statements.push(statement);
105
+ }
106
+
107
+ addAssertion(assertion) {
108
+ const context = this, ///
109
+ assertionA = assertion, ///
110
+ assertionString = assertion.getString();
111
+
112
+ extract(this.assertions, (assertion) => {
113
+ const assertionB = assertion, ///
114
+ assertionAEqualToAssertionB = assertionA.isEqualTo(assertionB);
115
+
116
+ if (assertionAEqualToAssertionB) {
117
+ return true;
118
+ }
119
+ });
120
+
121
+ context.trace(`Added the '${assertionString}' assertion to the context.`);
122
+
123
+ this.assertions.push(assertion);
124
+ }
125
+
126
+ addReference(reference) {
127
+ const context = this, ///
128
+ referenceA = reference, ///
129
+ referenceString = reference.getString();
130
+
131
+ extract(this.references, (reference) => {
132
+ const referenceB = reference, ///
133
+ referenceAEqualToReferenceB = referenceA.isEqualTo(referenceB);
134
+
135
+ if (referenceAEqualToReferenceB) {
136
+ return true;
137
+ }
138
+ });
139
+
140
+ context.trace(`Added the '${referenceString}' reference to the context.`);
141
+
142
+ this.references.push(reference);
143
+ }
144
+
145
+ addSubstitution(substitution) {
146
+ const context = this, ///
147
+ substitutionA = substitution, ///
148
+ substitutionString = substitution.getString();
149
+
150
+ extract(this.substitutions, (substitution) => {
151
+ const substitutionB = substitution, ///
152
+ substitutionAEqualToAssertionB = substitutionA.isEqualTo(substitutionB);
153
+
154
+ if (substitutionAEqualToAssertionB) {
155
+ return true;
156
+ }
157
+ });
158
+
159
+ context.trace(`Added the '${substitutionString}' substitution to the context.`);
160
+
161
+ this.substitutions.push(substitution);
162
+ }
163
+
164
+ findTermByTermNode(termNode) {
165
+ const term = this.terms.find((term) => {
166
+ const termNodeMatches = term.matchNode(termNode);
167
+
168
+ if (termNodeMatches) {
169
+ return true;
170
+ }
171
+ }) || null;
172
+
173
+ return term;
174
+ }
175
+
176
+ findFrameByFrameNode(frameNode) {
177
+ const frame = this.frames.find((frame) => {
178
+ const frameNodeMatches = frame.matchNode(frameNode);
179
+
180
+ if (frameNodeMatches) {
181
+ return true;
182
+ }
183
+ }) || null;
184
+
185
+ return frame;
186
+ }
187
+
188
+ findStatementByStatementNode(statementNode) {
189
+ const statement = this.statements.find((statement) => {
190
+ const statementNodeMatches = statement.matchNode(statementNode);
191
+
192
+ if (statementNodeMatches) {
193
+ return true;
194
+ }
195
+ }) || null;
196
+
197
+ return statement;
198
+ }
199
+
200
+ findAssertionByAssertionNode(assertionNode) {
201
+ const assertion = this.assertions.find((assertion) => {
202
+ const assertionNodeMatches = assertion.matchNode(assertionNode);
203
+
204
+ if (assertionNodeMatches) {
205
+ return true;
206
+ }
207
+ }) || null;
208
+
209
+ return assertion;
210
+ }
211
+
212
+ findReferenceByMetavariableNode(metavariableNode) {
213
+ const reference = this.references.find((reference) => {
214
+ const referenceMatcheMetavariableNode = reference.matchMetavariableNode(metavariableNode);
215
+
216
+ if (referenceMatcheMetavariableNode) {
217
+ return true;
218
+ }
219
+ }) || null;
220
+
221
+ return reference;
222
+ }
223
+
224
+ findSubstitutionBySubstitutionNode(substitutionNode) {
225
+ const substitution = this.substitutions.find((substitution) => {
226
+ const substitutionNodeMatches = substitution.matchNode(substitutionNode);
227
+
228
+ if (substitutionNodeMatches) {
229
+ return true;
230
+ }
231
+ }) || null;
232
+
233
+ return substitution;
234
+ }
235
+
236
+ getFileContext() { return this.context.getFileContext(); }
237
+
238
+ getDepth() {
239
+ let depth = this.context.getDepth();
240
+
241
+ depth++;
242
+
243
+ return depth;
244
+ }
245
+
246
+ static fromNothing(context) {
247
+ const terms = [],
248
+ frames = [],
249
+ statements = [],
250
+ assertions = [],
251
+ references = [],
252
+ substitutions = [],
253
+ emphemeralContext = new EphemeralContext(context, terms, frames, statements, assertions, references, substitutions);
254
+
255
+ return emphemeralContext;
256
+ }
257
+ }