occam-verify-cli 1.0.617 → 1.0.632

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 (99) hide show
  1. package/lib/context/ephemeral.js +152 -47
  2. package/lib/context/file/nominal.js +136 -140
  3. package/lib/context/liminal.js +16 -26
  4. package/lib/context/scoped.js +26 -55
  5. package/lib/context.js +103 -53
  6. package/lib/element/assertion/contained.js +3 -1
  7. package/lib/element/assertion/defined.js +5 -3
  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 +65 -109
  12. package/lib/element/assumption.js +40 -16
  13. package/lib/element/constructor/bracketed.js +13 -53
  14. package/lib/element/constructor.js +5 -5
  15. package/lib/element/declaration/constructor.js +5 -2
  16. package/lib/element/derivation.js +8 -10
  17. package/lib/element/equality.js +102 -62
  18. package/lib/element/equivalence.js +6 -6
  19. package/lib/element/equivalences.js +4 -4
  20. package/lib/element/frame.js +21 -21
  21. package/lib/element/hypothesis.js +5 -7
  22. package/lib/element/judgement.js +47 -25
  23. package/lib/element/metaType.js +2 -2
  24. package/lib/element/metavariable.js +12 -3
  25. package/lib/element/propertyRelation.js +3 -3
  26. package/lib/element/reference.js +9 -21
  27. package/lib/element/rule.js +13 -15
  28. package/lib/element/signature.js +5 -5
  29. package/lib/element/statement.js +23 -25
  30. package/lib/element/subDerivation.js +4 -6
  31. package/lib/element/substitution/frame.js +4 -4
  32. package/lib/element/substitution/reference.js +4 -4
  33. package/lib/element/substitution/statement.js +4 -4
  34. package/lib/element/substitution/term.js +9 -3
  35. package/lib/element/substitution.js +71 -43
  36. package/lib/element/term.js +20 -6
  37. package/lib/element/topLevelAssertion.js +9 -11
  38. package/lib/element/topLevelMetaAssertion.js +9 -11
  39. package/lib/element/variable.js +44 -3
  40. package/lib/process/assign.js +96 -26
  41. package/lib/process/unify.js +3 -4
  42. package/lib/process/validate.js +7 -7
  43. package/lib/process/verify.js +2 -2
  44. package/lib/ruleNames.js +5 -1
  45. package/lib/utilities/element.js +74 -12
  46. package/lib/utilities/json.js +2 -2
  47. package/lib/utilities/string.js +9 -24
  48. package/lib/utilities/substitutions.js +14 -22
  49. package/lib/utilities/validation.js +3 -3
  50. package/package.json +4 -4
  51. package/src/context/ephemeral.js +170 -50
  52. package/src/context/file/nominal.js +136 -141
  53. package/src/context/liminal.js +22 -34
  54. package/src/context/scoped.js +33 -74
  55. package/src/context.js +97 -46
  56. package/src/element/assertion/contained.js +4 -0
  57. package/src/element/assertion/defined.js +6 -2
  58. package/src/element/assertion/property.js +15 -26
  59. package/src/element/assertion/satisfies.js +4 -0
  60. package/src/element/assertion/subproof.js +4 -0
  61. package/src/element/assertion/type.js +69 -77
  62. package/src/element/assumption.js +48 -16
  63. package/src/element/constructor/bracketed.js +11 -12
  64. package/src/element/constructor.js +4 -4
  65. package/src/element/declaration/constructor.js +5 -1
  66. package/src/element/derivation.js +3 -5
  67. package/src/element/equality.js +109 -74
  68. package/src/element/equivalence.js +7 -7
  69. package/src/element/equivalences.js +7 -5
  70. package/src/element/frame.js +25 -25
  71. package/src/element/hypothesis.js +4 -6
  72. package/src/element/judgement.js +54 -24
  73. package/src/element/metaType.js +1 -1
  74. package/src/element/metavariable.js +16 -3
  75. package/src/element/propertyRelation.js +2 -2
  76. package/src/element/reference.js +12 -26
  77. package/src/element/rule.js +8 -10
  78. package/src/element/signature.js +4 -4
  79. package/src/element/statement.js +27 -30
  80. package/src/element/subDerivation.js +3 -5
  81. package/src/element/substitution/frame.js +1 -1
  82. package/src/element/substitution/reference.js +1 -1
  83. package/src/element/substitution/statement.js +1 -1
  84. package/src/element/substitution/term.js +4 -2
  85. package/src/element/substitution.js +60 -36
  86. package/src/element/term.js +24 -5
  87. package/src/element/topLevelAssertion.js +4 -6
  88. package/src/element/topLevelMetaAssertion.js +4 -6
  89. package/src/element/variable.js +2 -0
  90. package/src/process/assign.js +114 -37
  91. package/src/process/unify.js +2 -3
  92. package/src/process/validate.js +5 -5
  93. package/src/process/verify.js +1 -1
  94. package/src/ruleNames.js +1 -0
  95. package/src/utilities/element.js +83 -26
  96. package/src/utilities/json.js +1 -1
  97. package/src/utilities/string.js +7 -29
  98. package/src/utilities/substitutions.js +18 -29
  99. package/src/utilities/validation.js +2 -2
@@ -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) {
@@ -29,6 +29,18 @@ export default define(class Equality extends Element {
29
29
  return equalityNde;
30
30
  }
31
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
+
32
44
  getType() {
33
45
  let type;
34
46
 
@@ -57,6 +69,18 @@ export default define(class Equality extends Element {
57
69
  return terms;
58
70
  }
59
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
+
60
84
  isReflexive() {
61
85
  const leftTermString = this.leftTerm.getString(),
62
86
  rightTermString = this.rightTerm.getString(),
@@ -65,6 +89,14 @@ export default define(class Equality extends Element {
65
89
  return reflexive;
66
90
  }
67
91
 
92
+ isEqualTo(equality) {
93
+ const equalityNode = equality.getNode(),
94
+ equalityNodeMatches = this.matchEqualityNode(equalityNode),
95
+ equalTo = equalityNodeMatches; ///
96
+
97
+ return equalTo;
98
+ }
99
+
68
100
  isEqual(context) {
69
101
  let equal = false;
70
102
 
@@ -79,151 +111,154 @@ export default define(class Equality extends Element {
79
111
  return equal;
80
112
  }
81
113
 
82
- verify(assignments, stated, context) {
83
- 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;
84
124
 
85
125
  const equalityString = this.getString(); ///
86
126
 
87
- context.trace(`Verifying the '${equalityString}' equality...`);
127
+ context.trace(`Validating the '${equalityString}' equality...`);
88
128
 
89
- const termsVerify = this.verifyTerms(context);
129
+ const valid = this.isValid(context);
90
130
 
91
- if (termsVerify) {
92
- let verifiesWhenStated = false,
93
- verifiesWhenDerived = false;
131
+ if (valid) {
132
+ validates = true;
94
133
 
95
- if (stated) {
96
- verifiesWhenStated = this.verifyWhenStated(assignments, context);
97
- } else {
98
- verifiesWhenDerived = this.verifyWhenDerived(context);
99
- }
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;
100
141
 
101
- if (verifiesWhenStated || verifiesWhenDerived) {
102
- verifies = true;
142
+ if (stated) {
143
+ validatesWhenStated = this.validateWhenStated(assignments, context);
144
+ } else {
145
+ validatesWhenDerived = this.validateWhenDerived(context);
146
+ }
147
+
148
+ if (validatesWhenStated || validatesWhenDerived) {
149
+ validates = true;
150
+ }
103
151
  }
104
- }
105
152
 
106
- if (verifies) {
153
+ if (validates) {
154
+ const equality = this; ///
107
155
 
108
- this.assign(assignments, context);
156
+ context.addEquality(equality);
109
157
 
110
- }
158
+ this.assign(assignments, stated, context);
111
159
 
112
- if (verifies) {
113
- context.debug(`...verified the '${equalityString}' equality.`);
160
+ context.debug(`...validated the '${equalityString}' equality.`);
161
+ }
114
162
  }
115
163
 
116
- return verifies;
164
+ return validates;
117
165
  }
118
166
 
119
- verifyTerms(context) {
120
- let termsVerify;
167
+ validateTerms(context) {
168
+ let termsValidate;
121
169
 
122
170
  const equalityString = this.getString(); ///
123
171
 
124
- context.trace(`Verifying the '${equalityString}' equality's terms...`);
172
+ context.trace(`Validating the '${equalityString}' equality's terms...`);
125
173
 
126
- const leftTermVerifies = this.leftTerm.verify(context, () => {
127
- let verifiesForwards;
174
+ const leftTermValidates = this.leftTerm.validate(context, () => {
175
+ let validatesForwards;
128
176
 
129
- const rightTermVerifies = this.rightTerm.verify(context, () => {
130
- let verifiesForwards;
177
+ const rightTermValidates = this.rightTerm.validate(context, () => {
178
+ let validatesForwards;
131
179
 
132
180
  const leftTermType = this.leftTerm.getType(),
133
181
  rightTermType = this.rightTerm.getType(),
134
182
  leftTermTypeComparableToRightTermType = leftTermType.isComparableTo(rightTermType);
135
183
 
136
- verifiesForwards = leftTermTypeComparableToRightTermType; ///
184
+ validatesForwards = leftTermTypeComparableToRightTermType; ///
137
185
 
138
- return verifiesForwards;
186
+ return validatesForwards;
139
187
  });
140
188
 
141
- verifiesForwards = rightTermVerifies; ///
189
+ validatesForwards = rightTermValidates; ///
142
190
 
143
- return verifiesForwards;
191
+ return validatesForwards;
144
192
  });
145
193
 
146
- termsVerify = leftTermVerifies; ///
194
+ termsValidate = leftTermValidates; ///
147
195
 
148
- if (termsVerify) {
149
- context.debug(`...verified the '${equalityString}' equality's terms.`);
196
+ if (termsValidate) {
197
+ context.debug(`...validated the '${equalityString}' equality's terms.`);
150
198
  }
151
199
 
152
- return termsVerify;
200
+ return termsValidate;
153
201
  }
154
202
 
155
- verifyWhenStated(assignments, context) {
156
- let verifiesWhenStated;
203
+ validateWhenStated(assignments, context) {
204
+ let validatesWhenStated;
157
205
 
158
206
  const equalityString = this.getString(); ///
159
207
 
160
- context.trace(`Verifying the '${equalityString}' stated equality...`);
208
+ context.trace(`Validating the '${equalityString}' stated equality...`);
161
209
 
162
- verifiesWhenStated = true;
210
+ validatesWhenStated = true;
163
211
 
164
- if (verifiesWhenStated) {
165
- context.debug(`...verified the '${equalityString}' stated equality.`);
212
+ if (validatesWhenStated) {
213
+ context.debug(`...validated the '${equalityString}' stated equality.`);
166
214
  }
167
215
 
168
- return verifiesWhenStated;
216
+ return validatesWhenStated;
169
217
  }
170
218
 
171
- verifyWhenDerived(context) {
172
- let verifiesWhenDerived;
219
+ validateWhenDerived(context) {
220
+ let validatesWhenDerived;
173
221
 
174
222
  const equalityString = this.getString(); ///
175
223
 
176
- context.trace(`Verifying the '${equalityString}' derived equality...`);
224
+ context.trace(`Validating the '${equalityString}' derived equality...`);
177
225
 
178
- verifiesWhenDerived = true; ///
226
+ validatesWhenDerived = true; ///
179
227
 
180
- if (verifiesWhenDerived) {
181
- context.debug(`...verified the '${equalityString}' derived equality.`);
228
+ if (validatesWhenDerived) {
229
+ context.debug(`...validated the '${equalityString}' derived equality.`);
182
230
  }
183
231
 
184
- return verifiesWhenDerived;
232
+ return validatesWhenDerived;
185
233
  }
186
234
 
187
- assign(assignments, context) {
235
+ assign(assignments, stated, context) {
188
236
  if (assignments === null) {
189
237
  return;
190
238
  }
191
239
 
192
- const { Variable } = elements,
193
- type = this.getType(),
194
- leftTermNode = this.leftTerm.getNode(),
195
- rightTermNode = this.rightTerm.getNode(),
196
- leftTermNodeSingularVariableNode = leftTermNode.getSingularVariableNode(),
197
- rightTermNodeSingularVariableNode = rightTermNode.getSingularVariableNode(),
198
- leftVariableNode = leftTermNodeSingularVariableNode, ///
199
- rightVariableNode = rightTermNodeSingularVariableNode; ///
240
+ const equality = this, ///
241
+ equalityAssignment = equalityAssignmentFromEquality(equality, context),
242
+ leftVariableAssignment = leftVariableAssignmentFromEquality(equality, context),
243
+ rightVariableAssignment = rightVariableAssignmentFromEquality(equality, context);
200
244
 
201
245
  let assignment;
202
246
 
203
- if (leftVariableNode !== null) {
204
- const leftVariable = Variable.fromVariableNodeAndType(leftVariableNode, type, context),
205
- leftVariableAssignment = variableAssignmentFromVariable(leftVariable);
247
+ assignment = equalityAssignment; ///
248
+
249
+ assignments.push(assignment);
206
250
 
251
+ if (leftVariableAssignment !== null) {
207
252
  assignment = leftVariableAssignment; ///
208
253
 
209
254
  assignments.push(assignment);
210
255
  }
211
256
 
212
- if (rightVariableNode !== null) {
213
- const rightVariable = Variable.fromVariableNodeAndType(rightVariableNode, type, context),
214
- rightVariableAssignment = variableAssignmentFromVariable(rightVariable);
215
-
257
+ if (rightVariableAssignment !== null) {
216
258
  assignment = rightVariableAssignment; ///
217
259
 
218
260
  assignments.push(assignment);
219
261
  }
220
-
221
- const equality = this, //
222
- equalityAssignment = equalityAssignmentFromEquality(equality);
223
-
224
- assignment = equalityAssignment; ///
225
-
226
- assignments.push(assignment);
227
262
  }
228
263
 
229
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;
@@ -57,7 +57,7 @@ export default define(class Equivalence extends Element {
57
57
  if (termGrounded) {
58
58
  const termMatchesGroundedTerm = groundedTerms.some((groundedTerm) => {
59
59
  const groundedTermNode = groundedTerm.getNode(),
60
- groundedTermNodeMatches = term.matchNode(groundedTermNode);
60
+ groundedTermNodeMatches = term.matchTermNode(groundedTermNode);
61
61
 
62
62
  if (groundedTermNodeMatches) {
63
63
  return true;
@@ -151,7 +151,7 @@ export default define(class Equivalence extends Element {
151
151
  termNode = stripBracketsFromTermNode(termNode); ///
152
152
 
153
153
  const termNodeMatches = this.someTerm((term) => {
154
- const termNodeMatches = term.matchNode(termNode);
154
+ const termNodeMatches = term.matchTermNode(termNode);
155
155
 
156
156
  if (termNodeMatches) {
157
157
  return true;
@@ -234,8 +234,8 @@ export default define(class Equivalence extends Element {
234
234
 
235
235
  return literally((context) => {
236
236
  const terms = combinedTerms, ///
237
- termsString = termsStringFromTerms(terms),
238
- string = termsString, ///
237
+ equivalenceString = equivalenceStringFromTerms(terms),
238
+ string = equivalenceString, ///
239
239
  equivalenceNode = instantiateEquivalence(string, context),
240
240
  equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
241
241
 
@@ -248,8 +248,8 @@ export default define(class Equivalence extends Element {
248
248
  static fromEquality(equality, context) {
249
249
  return literally((context) => {
250
250
  const terms = equality.getTerms(),
251
- termsString = termsStringFromTerms(terms),
252
- string = termsString, ///
251
+ equivalenceString = equivalenceStringFromTerms(terms),
252
+ string = equivalenceString, ///
253
253
  equivalenceNode = instantiateEquivalence(string, context),
254
254
  equivalence = equivalenceFromEquivalenceNode(equivalenceNode, context);
255
255
 
@@ -80,7 +80,7 @@ export default define(class Equivalences extends Element {
80
80
  }
81
81
 
82
82
  mergedWith(equivalences, context) {
83
- let mergedEquivalences = this.clone(); ///
83
+ let mergedEquivalences = this.clone(context); ///
84
84
 
85
85
  equivalences.forEachEquivalence((equivalence) => {
86
86
  mergedEquivalences = mergedEquivalences.mergedWithEquivalence(equivalence, context);
@@ -139,7 +139,7 @@ export default define(class Equivalences extends Element {
139
139
  }
140
140
 
141
141
  separateGroundedTermsAndDefinedVariables(groundedTerms, definedVariables, context) {
142
- let equivalences = this,
142
+ let equivalences = this, ///
143
143
  groundedEquivalences,
144
144
  remainingEquivalences,
145
145
  initiallyGroundedEquivalences,
@@ -187,11 +187,13 @@ export default define(class Equivalences extends Element {
187
187
  }
188
188
  }
189
189
 
190
- clone() {
191
- const array = [
190
+ clone(context) {
191
+ const string = EMPTY_STRING,
192
+ node = null,
193
+ array = [
192
194
  ...this.array
193
195
  ],
194
- equivalences = new Equivalences(array);
196
+ equivalences = new Equivalences(context, string, node, array);
195
197
 
196
198
  return equivalences;
197
199
  }
@@ -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;
@@ -40,15 +40,13 @@ export default define(class Hypothesis extends Element {
40
40
  statementValidates = this.statement.validate(assignments, stated, context);
41
41
 
42
42
  if (statementValidates) {
43
- const assignmentsAssigned = assignAssignments(assignments, context);
43
+ assignAssignments(assignments, context);
44
44
 
45
- if (assignmentsAssigned) {
46
- const subproofOrProofAssertion = this; ///
45
+ const subproofOrProofAssertion = this; ///
47
46
 
48
- context.addSubproofOrProofAssertion(subproofOrProofAssertion);
47
+ context.addSubproofOrProofAssertion(subproofOrProofAssertion);
49
48
 
50
- verifies = true;
51
- }
49
+ verifies = true;
52
50
  }
53
51
  } else {
54
52
  context.debug(`Unable to verify the '${hypothesisString}' hypothesis because it is nonsense.`);
@@ -37,7 +37,27 @@ export default define(class Judgement extends Element {
37
37
 
38
38
  getMetavariable() { return this.frame.getMetavariable(); }
39
39
 
40
- 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
+ }
41
61
 
42
62
  validate(assignments, stated, context) {
43
63
  let validates = false;
@@ -46,35 +66,41 @@ export default define(class Judgement extends Element {
46
66
 
47
67
  context.trace(`Validating the '${judgementString}' judgement...`);
48
68
 
49
- const frameValidates = this.frame.validate(assignments, stated, context);
69
+ const valid = this.isValid(context);
50
70
 
51
- if (frameValidates) {
52
- const assumptionValidates = this.assumption.validate(assignments, stated, context);
71
+ if (valid) {
72
+ validates = true;
53
73
 
54
- if (assumptionValidates) {
55
- let validatesWhenStated = false,
56
- validatesWhenDerived = false;
74
+ context.debug(`...the '${judgementString}' judgement is already valid.`);
75
+ } else {
76
+ const frameValidates = this.frame.validate(assignments, stated, context);
57
77
 
58
- if (stated) {
59
- validatesWhenStated = this.validateWhenStated(assignments, context);
60
- } else {
61
- validatesWhenDerived = this.validateWhenDerived(context);
62
- }
78
+ if (frameValidates) {
79
+ const assumptionValidates = this.assumption.validate(assignments, stated, context);
63
80
 
64
- if (validatesWhenStated || validatesWhenDerived) {
65
- validates = true;
81
+ if (assumptionValidates) {
82
+ let validatesWhenStated = false,
83
+ validatesWhenDerived = false;
84
+
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
+ }
66
94
  }
67
95
  }
68
- }
69
96
 
70
- if (validates) {
71
- if (stated) {
72
- this.assign(assignments, context);
73
- }
74
- }
97
+ if (validates) {
98
+ const judgement = this; ///
75
99
 
76
- if (validates) {
77
- context.debug(`...validated the '${judgementString}' judgement.`);
100
+ context.addJudgement(judgement)
101
+
102
+ context.debug(`...validated the '${judgementString}' judgement.`);
103
+ }
78
104
  }
79
105
 
80
106
  return validates;
@@ -120,13 +146,17 @@ export default define(class Judgement extends Element {
120
146
  return validatesWhenDerived;
121
147
  }
122
148
 
123
- assign(assignments, context) {
149
+ assign(assignments, stated, context) {
124
150
  if (assignments === null) {
125
151
  return;
126
152
  }
127
153
 
154
+ if (!stated) {
155
+ return;
156
+ }
157
+
128
158
  const judgement = this, ///
129
- judgementAssignment = judgementAssignmentFromJudgement(judgement),
159
+ judgementAssignment = judgementAssignmentFromJudgement(judgement, context),
130
160
  assignment = judgementAssignment; ///
131
161
 
132
162
  assignments.push(assignment);
@@ -48,7 +48,7 @@ export default define(class MetaType extends Element {
48
48
  static fromJSON(json, context) {
49
49
  const { name } = json,
50
50
  metaTypeName = name, ///
51
- metaType = findMetaTypeByMetaTypeName(metaTypeName);
51
+ metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
52
52
 
53
53
  return metaType;
54
54
  }
@@ -54,8 +54,9 @@ export default define(class Metavariable extends Element {
54
54
  }
55
55
 
56
56
  compare(metavariable) {
57
- const name = metavariable.getName(),
58
- comparesToMetavariable = (this.name === name);
57
+ const metavariableName = metavariable.getName(),
58
+ comparesToMetavariableName = this.compareMetavariableName(metavariableName),
59
+ comparesToMetavariable = comparesToMetavariableName; ///
59
60
 
60
61
  return comparesToMetavariable;
61
62
  }
@@ -69,6 +70,18 @@ export default define(class Metavariable extends Element {
69
70
  return comparesToMetavariableName;
70
71
  }
71
72
 
73
+ matchMetavariableNode(metavariableNode) {
74
+ const metavariableNodeA = metavariableNode; ///
75
+
76
+ metavariableNode = this.getMetavariableNode(); ///
77
+
78
+ const metavariableNodeB = metavariableNode, ///
79
+ metavariableNodeAMatchesMetavariableNodeB = metavariableNodeA.match(metavariableNodeB),
80
+ metavariableNodeMatches = metavariableNodeAMatchesMetavariableNodeB; ///
81
+
82
+ return metavariableNodeMatches;
83
+ }
84
+
72
85
  validate(context) {
73
86
  let validates = false;
74
87
 
@@ -306,7 +319,7 @@ export default define(class Metavariable extends Element {
306
319
 
307
320
  if (generalContextFilePath === specificContextFilePath) {
308
321
  const metavariableName = this.getMetavariableName(), ///
309
- frameMetavariableComparesToMetvariable = frame.matchMetavariableName(metavariableName);
322
+ frameMetavariableComparesToMetvariable = frame.compareMetavariableName(metavariableName);
310
323
 
311
324
  if (frameMetavariableComparesToMetvariable) {
312
325
  frameMetavariableUnifies = true;
@@ -57,9 +57,9 @@ export default define(class PropertyRelation extends Element {
57
57
  context.trace(`Validating the '${termString}' term...`);
58
58
 
59
59
  termValidates = this.term.validate(context, () => {
60
- const verifiesForwards = true;
60
+ const validatesForwards = true;
61
61
 
62
- return verifiesForwards;
62
+ return validatesForwards;
63
63
  });
64
64
 
65
65
  if (termValidates) {