occam-verify-cli 1.0.612 → 1.0.631

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 (141) hide show
  1. package/lib/context/ephemeral.js +210 -77
  2. package/lib/context/file/nominal.js +157 -135
  3. package/lib/context/liminal.js +34 -59
  4. package/lib/context/scoped.js +37 -58
  5. package/lib/context.js +103 -53
  6. package/lib/element/assertion/contained.js +3 -1
  7. package/lib/element/assertion/defined.js +3 -1
  8. package/lib/element/assertion/property.js +10 -58
  9. package/lib/element/assertion/satisfies.js +3 -1
  10. package/lib/element/assertion/subproof.js +3 -1
  11. package/lib/element/assertion/type.js +63 -109
  12. package/lib/element/assertion.js +5 -9
  13. package/lib/element/assumption.js +50 -19
  14. package/lib/element/combinator.js +8 -1
  15. package/lib/element/conclusion.js +8 -1
  16. package/lib/element/constructor.js +8 -1
  17. package/lib/element/declaration.js +3 -7
  18. package/lib/element/deduction.js +8 -1
  19. package/lib/element/derivation.js +15 -10
  20. package/lib/element/equality.js +109 -62
  21. package/lib/element/equivalence.js +13 -6
  22. package/lib/element/equivalences.js +11 -4
  23. package/lib/element/error.js +10 -7
  24. package/lib/element/frame.js +21 -21
  25. package/lib/element/hypothesis.js +12 -7
  26. package/lib/element/judgement.js +55 -26
  27. package/lib/element/label.js +8 -1
  28. package/lib/element/metaType.js +9 -2
  29. package/lib/element/metavariable.js +16 -10
  30. package/lib/element/parameter.js +8 -1
  31. package/lib/element/procedureCall.js +21 -29
  32. package/lib/element/procedureReference.js +15 -1
  33. package/lib/element/proof.js +8 -1
  34. package/lib/element/proofAssertion.js +8 -1
  35. package/lib/element/property.js +8 -1
  36. package/lib/element/propertyRelation.js +8 -1
  37. package/lib/element/reference.js +16 -28
  38. package/lib/element/rule.js +22 -21
  39. package/lib/element/section.js +8 -1
  40. package/lib/element/signature.js +8 -1
  41. package/lib/element/statement.js +34 -40
  42. package/lib/element/subDerivation.js +11 -6
  43. package/lib/element/subproof.js +8 -1
  44. package/lib/element/substitution/frame.js +6 -6
  45. package/lib/element/substitution/reference.js +6 -6
  46. package/lib/element/substitution/statement.js +6 -6
  47. package/lib/element/substitution/term.js +9 -3
  48. package/lib/element/substitution.js +73 -49
  49. package/lib/element/term.js +15 -1
  50. package/lib/element/topLevelAssertion/axiom.js +8 -1
  51. package/lib/element/topLevelAssertion/conjecture.js +8 -1
  52. package/lib/element/topLevelAssertion/lemma.js +8 -1
  53. package/lib/element/topLevelAssertion/theorem.js +8 -1
  54. package/lib/element/topLevelAssertion.js +11 -17
  55. package/lib/element/topLevelMetaAssertion/metaLemma.js +8 -1
  56. package/lib/element/topLevelMetaAssertion/metatheorem.js +8 -1
  57. package/lib/element/topLevelMetaAssertion.js +9 -11
  58. package/lib/element/type.js +8 -1
  59. package/lib/element/typePrefix.js +8 -1
  60. package/lib/element/variable.js +51 -5
  61. package/lib/preamble.js +1 -2
  62. package/lib/process/assign.js +96 -27
  63. package/lib/process/unify.js +3 -4
  64. package/lib/process/validate.js +2 -2
  65. package/lib/process/verify.js +2 -2
  66. package/lib/utilities/element.js +74 -12
  67. package/lib/utilities/json.js +2 -2
  68. package/lib/utilities/string.js +9 -24
  69. package/lib/utilities/substitutions.js +15 -23
  70. package/package.json +2 -2
  71. package/src/context/ephemeral.js +234 -82
  72. package/src/context/file/nominal.js +195 -135
  73. package/src/context/liminal.js +43 -80
  74. package/src/context/scoped.js +56 -81
  75. package/src/context.js +97 -46
  76. package/src/element/assertion/contained.js +4 -0
  77. package/src/element/assertion/defined.js +4 -0
  78. package/src/element/assertion/property.js +15 -26
  79. package/src/element/assertion/satisfies.js +4 -0
  80. package/src/element/assertion/subproof.js +4 -0
  81. package/src/element/assertion/type.js +67 -77
  82. package/src/element/assertion.js +4 -8
  83. package/src/element/assumption.js +57 -18
  84. package/src/element/combinator.js +7 -0
  85. package/src/element/conclusion.js +7 -0
  86. package/src/element/constructor.js +7 -0
  87. package/src/element/declaration.js +1 -3
  88. package/src/element/deduction.js +7 -0
  89. package/src/element/derivation.js +10 -5
  90. package/src/element/equality.js +116 -74
  91. package/src/element/equivalence.js +15 -7
  92. package/src/element/equivalences.js +14 -5
  93. package/src/element/error.js +5 -2
  94. package/src/element/frame.js +25 -25
  95. package/src/element/hypothesis.js +11 -6
  96. package/src/element/judgement.js +62 -26
  97. package/src/element/label.js +7 -0
  98. package/src/element/metaType.js +8 -1
  99. package/src/element/metavariable.js +20 -14
  100. package/src/element/parameter.js +7 -0
  101. package/src/element/procedureCall.js +21 -14
  102. package/src/element/procedureReference.js +13 -0
  103. package/src/element/proof.js +7 -0
  104. package/src/element/proofAssertion.js +7 -0
  105. package/src/element/property.js +7 -0
  106. package/src/element/propertyRelation.js +7 -0
  107. package/src/element/reference.js +20 -33
  108. package/src/element/rule.js +16 -19
  109. package/src/element/section.js +7 -0
  110. package/src/element/signature.js +7 -0
  111. package/src/element/statement.js +36 -44
  112. package/src/element/subDerivation.js +10 -5
  113. package/src/element/subproof.js +7 -0
  114. package/src/element/substitution/frame.js +3 -3
  115. package/src/element/substitution/reference.js +3 -3
  116. package/src/element/substitution/statement.js +3 -3
  117. package/src/element/substitution/term.js +4 -2
  118. package/src/element/substitution.js +60 -40
  119. package/src/element/term.js +20 -2
  120. package/src/element/topLevelAssertion/axiom.js +7 -0
  121. package/src/element/topLevelAssertion/conjecture.js +7 -0
  122. package/src/element/topLevelAssertion/lemma.js +7 -0
  123. package/src/element/topLevelAssertion/theorem.js +7 -0
  124. package/src/element/topLevelAssertion.js +5 -15
  125. package/src/element/topLevelMetaAssertion/metaLemma.js +7 -0
  126. package/src/element/topLevelMetaAssertion/metatheorem.js +7 -0
  127. package/src/element/topLevelMetaAssertion.js +4 -6
  128. package/src/element/type.js +7 -0
  129. package/src/element/typePrefix.js +7 -0
  130. package/src/element/variable.js +9 -4
  131. package/src/preamble.js +0 -1
  132. package/src/process/assign.js +113 -38
  133. package/src/process/unify.js +2 -3
  134. package/src/process/validate.js +1 -1
  135. package/src/process/verify.js +1 -1
  136. package/src/utilities/element.js +83 -26
  137. package/src/utilities/json.js +1 -1
  138. package/src/utilities/string.js +7 -29
  139. package/src/utilities/substitutions.js +19 -30
  140. package/lib/element/substitutions.js +0 -225
  141. package/src/element/substitutions.js +0 -84
@@ -4,7 +4,7 @@ import { Element } from "occam-languages";
4
4
 
5
5
  import { define } from "../elements";
6
6
  import { equateTerms } from "../process/equate";
7
- import { equalityAssignmentFromEquality, variableAssignmentFromVariable } from "../process/assign";
7
+ import { equalityAssignmentFromEquality, leftVariableAssignmentFromEquality, rightVariableAssignmentFromEquality } from "../process/assign";
8
8
 
9
9
  export default define(class Equality extends Element {
10
10
  constructor(context, string, node, leftTerm, rightTerm) {
@@ -22,6 +22,25 @@ export default define(class Equality extends Element {
22
22
  return this.rightTerm;
23
23
  }
24
24
 
25
+ getEqualityNode() {
26
+ const node = this.getNode(),
27
+ equalityNde = node; ///
28
+
29
+ return equalityNde;
30
+ }
31
+
32
+ getLeftTermNode() {
33
+ const leftTermNode = this.leftTerm.getNode();
34
+
35
+ return leftTermNode;
36
+ }
37
+
38
+ getRightTermNode() {
39
+ const rightTermNode = this.rightTerm.getNode();
40
+
41
+ return rightTermNode;
42
+ }
43
+
25
44
  getType() {
26
45
  let type;
27
46
 
@@ -50,6 +69,18 @@ export default define(class Equality extends Element {
50
69
  return terms;
51
70
  }
52
71
 
72
+ matchEqualityNode(equalityNode) {
73
+ const equalityNodeA = equalityNode; ///
74
+
75
+ equalityNode = this.getEqualityNode();
76
+
77
+ const equalityNodeB = equalityNode, ///
78
+ equalityNodeAAMatchesEqualityBNodeB = equalityNodeA.match(equalityNodeB),
79
+ equalityNodeMatches = equalityNodeAAMatchesEqualityBNodeB; ///
80
+
81
+ return equalityNodeMatches;
82
+ }
83
+
53
84
  isReflexive() {
54
85
  const leftTermString = this.leftTerm.getString(),
55
86
  rightTermString = this.rightTerm.getString(),
@@ -58,6 +89,14 @@ export default define(class Equality extends Element {
58
89
  return reflexive;
59
90
  }
60
91
 
92
+ isEqualTo(equality) {
93
+ const equalityNode = equality.getNode(),
94
+ equalityNodeMatches = this.matchEqualityNode(equalityNode),
95
+ equalTo = equalityNodeMatches; ///
96
+
97
+ return equalTo;
98
+ }
99
+
61
100
  isEqual(context) {
62
101
  let equal = false;
63
102
 
@@ -72,151 +111,154 @@ export default define(class Equality extends Element {
72
111
  return equal;
73
112
  }
74
113
 
75
- verify(assignments, stated, context) {
76
- let verifies = false;
114
+ isValid(context) {
115
+ const equalityNode = this.getEqualityNode(),
116
+ equalityPresent = context.isEqualityPresentByEqualityNode(equalityNode),
117
+ valid = equalityPresent; ///
118
+
119
+ return valid;
120
+ }
121
+
122
+ validate(assignments, stated, context) {
123
+ let validates = false;
77
124
 
78
125
  const equalityString = this.getString(); ///
79
126
 
80
- context.trace(`Verifying the '${equalityString}' equality...`);
127
+ context.trace(`Validating the '${equalityString}' equality...`);
81
128
 
82
- const termsVerify = this.verifyTerms(context);
129
+ const valid = this.isValid(context);
83
130
 
84
- if (termsVerify) {
85
- let verifiesWhenStated = false,
86
- verifiesWhenDerived = false;
131
+ if (valid) {
132
+ validates = true;
87
133
 
88
- if (stated) {
89
- verifiesWhenStated = this.verifyWhenStated(assignments, context);
90
- } else {
91
- verifiesWhenDerived = this.verifyWhenDerived(context);
92
- }
134
+ context.debug(`...the '${equalityString}' equality is already valid.`);
135
+ } else {
136
+ const termsValidate = this.validateTerms(context);
137
+
138
+ if (termsValidate) {
139
+ let validatesWhenStated = false,
140
+ validatesWhenDerived = false;
141
+
142
+ if (stated) {
143
+ validatesWhenStated = this.validateWhenStated(assignments, context);
144
+ } else {
145
+ validatesWhenDerived = this.validateWhenDerived(context);
146
+ }
93
147
 
94
- if (verifiesWhenStated || verifiesWhenDerived) {
95
- verifies = true;
148
+ if (validatesWhenStated || validatesWhenDerived) {
149
+ validates = true;
150
+ }
96
151
  }
97
- }
98
152
 
99
- if (verifies) {
153
+ if (validates) {
154
+ const equality = this; ///
100
155
 
101
- this.assign(assignments, context);
156
+ context.addEquality(equality);
102
157
 
103
- }
158
+ this.assign(assignments, stated, context);
104
159
 
105
- if (verifies) {
106
- context.debug(`...verified the '${equalityString}' equality.`);
160
+ context.debug(`...validated the '${equalityString}' equality.`);
161
+ }
107
162
  }
108
163
 
109
- return verifies;
164
+ return validates;
110
165
  }
111
166
 
112
- verifyTerms(context) {
113
- let termsVerify;
167
+ validateTerms(context) {
168
+ let termsValidate;
114
169
 
115
170
  const equalityString = this.getString(); ///
116
171
 
117
- context.trace(`Verifying the '${equalityString}' equality's terms...`);
172
+ context.trace(`Validating the '${equalityString}' equality's terms...`);
118
173
 
119
- const leftTermVerifies = this.leftTerm.verify(context, () => {
120
- let verifiesForwards;
174
+ const leftTermValidates = this.leftTerm.validate(context, () => {
175
+ let validatesForwards;
121
176
 
122
- const rightTermVerifies = this.rightTerm.verify(context, () => {
123
- let verifiesForwards;
177
+ const rightTermValidates = this.rightTerm.validate(context, () => {
178
+ let validatesForwards;
124
179
 
125
180
  const leftTermType = this.leftTerm.getType(),
126
181
  rightTermType = this.rightTerm.getType(),
127
182
  leftTermTypeComparableToRightTermType = leftTermType.isComparableTo(rightTermType);
128
183
 
129
- verifiesForwards = leftTermTypeComparableToRightTermType; ///
184
+ validatesForwards = leftTermTypeComparableToRightTermType; ///
130
185
 
131
- return verifiesForwards;
186
+ return validatesForwards;
132
187
  });
133
188
 
134
- verifiesForwards = rightTermVerifies; ///
189
+ validatesForwards = rightTermValidates; ///
135
190
 
136
- return verifiesForwards;
191
+ return validatesForwards;
137
192
  });
138
193
 
139
- termsVerify = leftTermVerifies; ///
194
+ termsValidate = leftTermValidates; ///
140
195
 
141
- if (termsVerify) {
142
- context.debug(`...verified the '${equalityString}' equality's terms.`);
196
+ if (termsValidate) {
197
+ context.debug(`...validated the '${equalityString}' equality's terms.`);
143
198
  }
144
199
 
145
- return termsVerify;
200
+ return termsValidate;
146
201
  }
147
202
 
148
- verifyWhenStated(assignments, context) {
149
- let verifiesWhenStated;
203
+ validateWhenStated(assignments, context) {
204
+ let validatesWhenStated;
150
205
 
151
206
  const equalityString = this.getString(); ///
152
207
 
153
- context.trace(`Verifying the '${equalityString}' stated equality...`);
208
+ context.trace(`Validating the '${equalityString}' stated equality...`);
154
209
 
155
- verifiesWhenStated = true;
210
+ validatesWhenStated = true;
156
211
 
157
- if (verifiesWhenStated) {
158
- context.debug(`...verified the '${equalityString}' stated equality.`);
212
+ if (validatesWhenStated) {
213
+ context.debug(`...validated the '${equalityString}' stated equality.`);
159
214
  }
160
215
 
161
- return verifiesWhenStated;
216
+ return validatesWhenStated;
162
217
  }
163
218
 
164
- verifyWhenDerived(context) {
165
- let verifiesWhenDerived;
219
+ validateWhenDerived(context) {
220
+ let validatesWhenDerived;
166
221
 
167
222
  const equalityString = this.getString(); ///
168
223
 
169
- context.trace(`Verifying the '${equalityString}' derived equality...`);
224
+ context.trace(`Validating the '${equalityString}' derived equality...`);
170
225
 
171
- verifiesWhenDerived = true; ///
226
+ validatesWhenDerived = true; ///
172
227
 
173
- if (verifiesWhenDerived) {
174
- context.debug(`...verified the '${equalityString}' derived equality.`);
228
+ if (validatesWhenDerived) {
229
+ context.debug(`...validated the '${equalityString}' derived equality.`);
175
230
  }
176
231
 
177
- return verifiesWhenDerived;
232
+ return validatesWhenDerived;
178
233
  }
179
234
 
180
- assign(assignments, context) {
235
+ assign(assignments, stated, context) {
181
236
  if (assignments === null) {
182
237
  return;
183
238
  }
184
239
 
185
- const { Variable } = elements,
186
- type = this.getType(),
187
- leftTermNode = this.leftTerm.getNode(),
188
- rightTermNode = this.rightTerm.getNode(),
189
- leftTermNodeSingularVariableNode = leftTermNode.getSingularVariableNode(),
190
- rightTermNodeSingularVariableNode = rightTermNode.getSingularVariableNode(),
191
- leftVariableNode = leftTermNodeSingularVariableNode, ///
192
- rightVariableNode = rightTermNodeSingularVariableNode; ///
240
+ const equality = this, ///
241
+ equalityAssignment = equalityAssignmentFromEquality(equality, context),
242
+ leftVariableAssignment = leftVariableAssignmentFromEquality(equality, context),
243
+ rightVariableAssignment = rightVariableAssignmentFromEquality(equality, context);
193
244
 
194
245
  let assignment;
195
246
 
196
- if (leftVariableNode !== null) {
197
- const leftVariable = Variable.fromVariableNodeAndType(leftVariableNode, type, context),
198
- leftVariableAssignment = variableAssignmentFromVariable(leftVariable);
247
+ assignment = equalityAssignment; ///
248
+
249
+ assignments.push(assignment);
199
250
 
251
+ if (leftVariableAssignment !== null) {
200
252
  assignment = leftVariableAssignment; ///
201
253
 
202
254
  assignments.push(assignment);
203
255
  }
204
256
 
205
- if (rightVariableNode !== null) {
206
- const rightVariable = Variable.fromVariableNodeAndType(rightVariableNode, type, context),
207
- rightVariableAssignment = variableAssignmentFromVariable(rightVariable);
208
-
257
+ if (rightVariableAssignment !== null) {
209
258
  assignment = rightVariableAssignment; ///
210
259
 
211
260
  assignments.push(assignment);
212
261
  }
213
-
214
- const equality = this, //
215
- equalityAssignment = equalityAssignmentFromEquality(equality);
216
-
217
- assignment = equalityAssignment; ///
218
-
219
- assignments.push(assignment);
220
262
  }
221
263
 
222
264
  static name = "Equality";
@@ -5,9 +5,9 @@ import { arrayUtilities } from "necessary";
5
5
 
6
6
  import { define } from "../elements";
7
7
  import { literally } from "../utilities/context";
8
- import { termsStringFromTerms } from "../utilities/string";
9
8
  import { instantiateEquivalence } from "../process/instantiate";
10
9
  import { stripBracketsFromTermNode } from "../utilities/brackets";
10
+ import { equivalenceStringFromTerms } from "../utilities/string";
11
11
  import { equivalenceFromEquivalenceNode } from "../utilities/element";
12
12
 
13
13
  const { compress } = arrayUtilities;
@@ -15,6 +15,7 @@ const { compress } = arrayUtilities;
15
15
  export default define(class Equivalence extends Element {
16
16
  constructor(context, string, node, terms) {
17
17
  super(context, string, node);
18
+
18
19
  this.terms = terms;
19
20
  }
20
21
 
@@ -22,6 +23,13 @@ export default define(class Equivalence extends Element {
22
23
  return this.terms;
23
24
  }
24
25
 
26
+ getEquivalenceNode() {
27
+ const node = this.getNode(),
28
+ equivalenceNode = node; ///
29
+
30
+ return equivalenceNode;
31
+ }
32
+
25
33
  getType() {
26
34
  const type = this.terms.reduce((type, term) => {
27
35
  const termType = term.getType();
@@ -49,7 +57,7 @@ export default define(class Equivalence extends Element {
49
57
  if (termGrounded) {
50
58
  const termMatchesGroundedTerm = groundedTerms.some((groundedTerm) => {
51
59
  const groundedTermNode = groundedTerm.getNode(),
52
- groundedTermNodeMatches = term.matchNode(groundedTermNode);
60
+ groundedTermNodeMatches = term.matchTermNode(groundedTermNode);
53
61
 
54
62
  if (groundedTermNodeMatches) {
55
63
  return true;
@@ -143,7 +151,7 @@ export default define(class Equivalence extends Element {
143
151
  termNode = stripBracketsFromTermNode(termNode); ///
144
152
 
145
153
  const termNodeMatches = this.someTerm((term) => {
146
- const termNodeMatches = term.matchNode(termNode);
154
+ const termNodeMatches = term.matchTermNode(termNode);
147
155
 
148
156
  if (termNodeMatches) {
149
157
  return true;
@@ -226,8 +234,8 @@ export default define(class Equivalence extends Element {
226
234
 
227
235
  return literally((context) => {
228
236
  const terms = combinedTerms, ///
229
- termsString = termsStringFromTerms(terms),
230
- string = termsString, ///
237
+ equivalenceString = equivalenceStringFromTerms(terms),
238
+ string = equivalenceString, ///
231
239
  equivalenceNode = instantiateEquivalence(string, context),
232
240
  equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
233
241
 
@@ -240,8 +248,8 @@ export default define(class Equivalence extends Element {
240
248
  static fromEquality(equality, context) {
241
249
  return literally((context) => {
242
250
  const terms = equality.getTerms(),
243
- termsString = termsStringFromTerms(terms),
244
- string = termsString, ///
251
+ equivalenceString = equivalenceStringFromTerms(terms),
252
+ string = equivalenceString, ///
245
253
  equivalenceNode = instantiateEquivalence(string, context),
246
254
  equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
247
255
 
@@ -20,6 +20,13 @@ export default define(class Equivalences extends Element {
20
20
  return this.array;
21
21
  }
22
22
 
23
+ getEquivalencesNode() {
24
+ const node = this.getNode(),
25
+ equivalencesNode = node; ///
26
+
27
+ return equivalencesNode;
28
+ }
29
+
23
30
  getLength() { return this.array.length; }
24
31
 
25
32
  getTypes() {
@@ -73,7 +80,7 @@ export default define(class Equivalences extends Element {
73
80
  }
74
81
 
75
82
  mergedWith(equivalences, context) {
76
- let mergedEquivalences = this.clone(); ///
83
+ let mergedEquivalences = this.clone(context); ///
77
84
 
78
85
  equivalences.forEachEquivalence((equivalence) => {
79
86
  mergedEquivalences = mergedEquivalences.mergedWithEquivalence(equivalence, context);
@@ -132,7 +139,7 @@ export default define(class Equivalences extends Element {
132
139
  }
133
140
 
134
141
  separateGroundedTermsAndDefinedVariables(groundedTerms, definedVariables, context) {
135
- let equivalences = this,
142
+ let equivalences = this, ///
136
143
  groundedEquivalences,
137
144
  remainingEquivalences,
138
145
  initiallyGroundedEquivalences,
@@ -180,11 +187,13 @@ export default define(class Equivalences extends Element {
180
187
  }
181
188
  }
182
189
 
183
- clone() {
184
- const array = [
190
+ clone(context) {
191
+ const string = EMPTY_STRING,
192
+ node = null,
193
+ array = [
185
194
  ...this.array
186
195
  ],
187
- equivalences = new Equivalences(array);
196
+ equivalences = new Equivalences(context, string, node, array);
188
197
 
189
198
  return equivalences;
190
199
  }
@@ -5,8 +5,11 @@ import { Element } from "occam-languages";
5
5
  import { define } from "../elements";
6
6
 
7
7
  export default define(class Error extends Element {
8
- constructor(context, string, node) {
9
- super(context, string, node);
8
+ getErrorNode() {
9
+ const node = this.getNode(),
10
+ errorNode = node; ///
11
+
12
+ return errorNode;
10
13
  }
11
14
 
12
15
  async verify() {
@@ -51,9 +51,9 @@ export default define(class Frame extends Element {
51
51
 
52
52
  const frameNodeB = frameNode, ///
53
53
  frameNodeAAMatchesFrameBNodeB = frameNodeA.match(frameNodeB),
54
- equalTo = frameNodeAAMatchesFrameBNodeB; ///
54
+ frameNodeMatches = frameNodeAAMatchesFrameBNodeB; ///
55
55
 
56
- return equalTo;
56
+ return frameNodeMatches;
57
57
  }
58
58
 
59
59
  isValid(context) {
@@ -79,24 +79,6 @@ export default define(class Frame extends Element {
79
79
  return singular;
80
80
  }
81
81
 
82
- matchMetavariableName(metavariableName) {
83
- let metavariableNameMatches = false;
84
-
85
- const singular = this.isSingular();
86
-
87
- if (singular) {
88
- const metavariableNameA = metavariableName ///
89
-
90
- metavariableName = this.getMetavariableName();
91
-
92
- const metavariableNameB = metavariableName; ///
93
-
94
- metavariableNameMatches = (metavariableNameA === metavariableNameB);
95
- }
96
-
97
- return metavariableNameMatches;
98
- }
99
-
100
82
  compareParameter(parameter) {
101
83
  let comparesToParamter = false;
102
84
 
@@ -165,6 +147,24 @@ export default define(class Frame extends Element {
165
147
  return comparesToSubstitutions;
166
148
  }
167
149
 
150
+ compareMetavariableName(metavariableName) {
151
+ let comparesToMetavariableName = false;
152
+
153
+ const singular = this.isSingular();
154
+
155
+ if (singular) {
156
+ const metavariableNameA = metavariableName ///
157
+
158
+ metavariableName = this.getMetavariableName();
159
+
160
+ const metavariableNameB = metavariableName; ///
161
+
162
+ comparesToMetavariableName = (metavariableNameA === metavariableNameB);
163
+ }
164
+
165
+ return comparesToMetavariableName;
166
+ }
167
+
168
168
  validate(assignments, stated, context) {
169
169
  let validates = false;
170
170
 
@@ -184,7 +184,7 @@ export default define(class Frame extends Element {
184
184
 
185
185
  if (assumptionsValidate && metavariablevalidates) {
186
186
  let validatesWhenStated = false,
187
- validatesWhenDerived = false;
187
+ validatesWhenDerived = false;
188
188
 
189
189
  if (stated) {
190
190
  validatesWhenStated = this.validateWhenStated(assignments, context);
@@ -289,12 +289,12 @@ export default define(class Frame extends Element {
289
289
 
290
290
  context.trace(`Validating the '${frameString}' frame's '${metavraibleString}' metavariable...`);
291
291
 
292
- const metavariable = context.findMetavariable(this.metavariable);
292
+ const metavariablePresent = context.isMetavariablePresent(this.metavariable);
293
293
 
294
- if (metavariable !== null) {
294
+ if (metavariablePresent) {
295
295
  const metaTypeName = FRAME_META_TYPE_NAME,
296
- frameMetaType = findMetaTypeByMetaTypeName(metaTypeName),
297
- metavariableValidateGivenMetaType = metavariable.validateGivenMetaType(frameMetaType, context);
296
+ frameMetaType = context.findMetaTypeByMetaTypeName(metaTypeName),
297
+ metavariableValidateGivenMetaType = this.metavariable.validateGivenMetaType(frameMetaType, context);
298
298
 
299
299
  if (metavariableValidateGivenMetaType) {
300
300
  metavariableValidates = true;
@@ -18,6 +18,13 @@ export default define(class Hypothesis extends Element {
18
18
  return this.statement;
19
19
  }
20
20
 
21
+ getHypothesisNode() {
22
+ const node = this.getNode(),
23
+ hypothesisNode = node; ///
24
+
25
+ return hypothesisNode;
26
+ }
27
+
21
28
  verify(context) {
22
29
  let verifies = false;
23
30
 
@@ -33,15 +40,13 @@ export default define(class Hypothesis extends Element {
33
40
  statementValidates = this.statement.validate(assignments, stated, context);
34
41
 
35
42
  if (statementValidates) {
36
- const assignmentsAssigned = assignAssignments(assignments, context);
43
+ assignAssignments(assignments, context);
37
44
 
38
- if (assignmentsAssigned) {
39
- const subproofOrProofAssertion = this; ///
45
+ const subproofOrProofAssertion = this; ///
40
46
 
41
- context.addSubproofOrProofAssertion(subproofOrProofAssertion);
47
+ context.addSubproofOrProofAssertion(subproofOrProofAssertion);
42
48
 
43
- verifies = true;
44
- }
49
+ verifies = true;
45
50
  }
46
51
  } else {
47
52
  context.debug(`Unable to verify the '${hypothesisString}' hypothesis because it is nonsense.`);
@@ -21,9 +21,15 @@ export default define(class Judgement extends Element {
21
21
  return this.assumption;
22
22
  }
23
23
 
24
- isSingular() {
24
+ getJudgementNode() {
25
25
  const node = this.getNode(),
26
- judgementNode = node, ///
26
+ judgementNode = node; ///
27
+
28
+ return judgementNode;
29
+ }
30
+
31
+ isSingular() {
32
+ const judgementNode = this.getJudgementNode(),
27
33
  singular = judgementNode.isSingular();
28
34
 
29
35
  return singular;
@@ -31,7 +37,27 @@ export default define(class Judgement extends Element {
31
37
 
32
38
  getMetavariable() { return this.frame.getMetavariable(); }
33
39
 
34
- matchMetavariableName(metavariableName) { return this.frame.matchMetavariableName(metavariableName); }
40
+ compareMetavariableName(metavariableName) { return this.frame.compareMetavariableName(metavariableName); }
41
+
42
+ matchJudgementNode(judgementNode) {
43
+ const judgementNodeA = judgementNode; ///
44
+
45
+ judgementNode = this.getJudgementNode();
46
+
47
+ const judgementNodeB = judgementNode, ///
48
+ judgementNodeAAMatchesJudgementBNodeB = judgementNodeA.match(judgementNodeB),
49
+ judgementNodeMatches = judgementNodeAAMatchesJudgementBNodeB; ///
50
+
51
+ return judgementNodeMatches;
52
+ }
53
+
54
+ isValid(context) {
55
+ const judgementNode = this.getJudgementNode(),
56
+ judgementPresent = context.isJudgementPresentByJudgementNode(judgementNode),
57
+ valid = judgementPresent; ///
58
+
59
+ return valid;
60
+ }
35
61
 
36
62
  validate(assignments, stated, context) {
37
63
  let validates = false;
@@ -40,35 +66,41 @@ export default define(class Judgement extends Element {
40
66
 
41
67
  context.trace(`Validating the '${judgementString}' judgement...`);
42
68
 
43
- const frameValidates = this.frame.validate(assignments, stated, context);
69
+ const valid = this.isValid(context);
44
70
 
45
- if (frameValidates) {
46
- const assumptionValidates = this.assumption.validate(assignments, stated, context);
71
+ if (valid) {
72
+ validates = true;
47
73
 
48
- if (assumptionValidates) {
49
- let validatesWhenStated = false,
50
- validatesWhenDerived = false;
74
+ context.debug(`...the '${judgementString}' judgement is already valid.`);
75
+ } else {
76
+ const frameValidates = this.frame.validate(assignments, stated, context);
51
77
 
52
- if (stated) {
53
- validatesWhenStated = this.validateWhenStated(assignments, context);
54
- } else {
55
- validatesWhenDerived = this.validateWhenDerived(context);
56
- }
78
+ if (frameValidates) {
79
+ const assumptionValidates = this.assumption.validate(assignments, stated, context);
80
+
81
+ if (assumptionValidates) {
82
+ let validatesWhenStated = false,
83
+ validatesWhenDerived = false;
57
84
 
58
- if (validatesWhenStated || validatesWhenDerived) {
59
- validates = true;
85
+ if (stated) {
86
+ validatesWhenStated = this.validateWhenStated(assignments, context);
87
+ } else {
88
+ validatesWhenDerived = this.validateWhenDerived(context);
89
+ }
90
+
91
+ if (validatesWhenStated || validatesWhenDerived) {
92
+ validates = true;
93
+ }
60
94
  }
61
95
  }
62
- }
63
96
 
64
- if (validates) {
65
- if (stated) {
66
- this.assign(assignments, context);
67
- }
68
- }
97
+ if (validates) {
98
+ const judgement = this; ///
99
+
100
+ context.addJudgement(judgement)
69
101
 
70
- if (validates) {
71
- context.debug(`...validated the '${judgementString}' judgement.`);
102
+ context.debug(`...validated the '${judgementString}' judgement.`);
103
+ }
72
104
  }
73
105
 
74
106
  return validates;
@@ -114,13 +146,17 @@ export default define(class Judgement extends Element {
114
146
  return validatesWhenDerived;
115
147
  }
116
148
 
117
- assign(assignments, context) {
149
+ assign(assignments, stated, context) {
118
150
  if (assignments === null) {
119
151
  return;
120
152
  }
121
153
 
154
+ if (!stated) {
155
+ return;
156
+ }
157
+
122
158
  const judgement = this, ///
123
- judgementAssignment = judgementAssignmentFromJudgement(judgement),
159
+ judgementAssignment = judgementAssignmentFromJudgement(judgement, context),
124
160
  assignment = judgementAssignment; ///
125
161
 
126
162
  assignments.push(assignment);