occam-verify-cli 1.0.718 → 1.0.721

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.
@@ -38,9 +38,7 @@ export default class ProofAssertion extends Element {
38
38
 
39
39
  const leftStatement = statement, ///
40
40
  rightStatement = this.statement, ///
41
- leftStatementNode = leftStatement.getNode(),
42
- rightStatementNode = rightStatement.getNode(),
43
- statementsEquate = equateStatements(leftStatementNode, rightStatementNode, context);
41
+ statementsEquate = equateStatements(leftStatement, rightStatement, context);
44
42
 
45
43
  if (statementsEquate) {
46
44
  comparesToStatement = true;
@@ -125,20 +125,41 @@ export default define(class Reference extends Element {
125
125
  } else {
126
126
  let validates = false;
127
127
 
128
- if (!validates) {
129
- const metavariableValidates = this.validateMetavariable(context);
130
-
131
- if (metavariableValidates) {
132
- validates = true;
133
- }
134
- }
135
-
136
- if (!validates) {
137
- const reference = this, ///
138
- labelPresent = context.isLabelPresentByReference(reference);
139
-
140
- if (labelPresent) {
141
- validates = true;
128
+ const metavariableValidates = this.validateMetavariable(context);
129
+
130
+ if (metavariableValidates) {
131
+ const referenceMetaTypeName = REFERENCE_META_TYPE_NAME,
132
+ referenceMetaType = context.findMetaTypeByMetaTypeName(referenceMetaTypeName),
133
+ metaType = this.metavariable.getMetaType();
134
+
135
+ if (metaType === null) {
136
+ const reference = this, ///
137
+ labelPresent = context.isLabelPresentByReference(reference);
138
+
139
+ if (labelPresent) {
140
+ validates = true;
141
+ } else {
142
+ context.debug(`There is no label for the '${referenceString}' reference.`);
143
+ }
144
+ } else {
145
+ const metavariableMetaTypeEqualToReferenceMetaType = this.metavariable.isMetaTypeEqualTo(referenceMetaType);
146
+
147
+ if (metavariableMetaTypeEqualToReferenceMetaType) {
148
+ const reference = this, ///
149
+ metavariablePresent = context.isMetavariablePresentByReference(reference);
150
+
151
+ if (metavariablePresent) {
152
+ validates = true;
153
+ } else {
154
+ context.debug(`There is no metavariable for the '${referenceString}' reference.`);
155
+ }
156
+ } else {
157
+ const metaTypeString = metaType.getString(),
158
+ metavariableString = this.metavariable.getString(),
159
+ reerenceMetaTypeString = referenceMetaType.getString();
160
+
161
+ context.debug(`The '${referenceString}' reference's '${metavariableString}' metavariable's '${metaTypeString}' meta-type should be the '${reerenceMetaTypeString}' meta-type.`);
162
+ }
142
163
  }
143
164
  }
144
165
 
@@ -162,44 +183,19 @@ export default define(class Reference extends Element {
162
183
 
163
184
  context.trace(`Validating the '${referenceString}' reference's '${metavariableString}' metavariable...'`);
164
185
 
165
- const metaTypeName = REFERENCE_META_TYPE_NAME,
166
- referenceMetaType = context.findMetaTypeByMetaTypeName(metaTypeName),
167
- metaType = referenceMetaType, ///
168
- metavariable = context.findMetavariable(this.metavariable, context);
186
+ const metavariable = this.metavariable.validate(context);
169
187
 
170
188
  if (metavariable !== null) {
171
- const metavariableValidatesGivenMetaType = metavariable.validateGivenMetaType(metaType, context);
172
-
173
- if (metavariableValidatesGivenMetaType) {
174
- metavariableValidates = true;
175
- }
176
- } else {
177
- context.debug(`The '${metavariableString}' metavariable is not present.`);
178
- }
179
-
180
- return metavariableValidates;
181
- }
182
-
183
- validateAsMetavariable(context) {
184
- let validatesAsMetavariable = false;
185
-
186
- const referenceString = this.getString(); ///
189
+ this.metavariable = metavariable;
187
190
 
188
- context.trace(`Validating the '${referenceString}' reference as a metavaraible...`);
189
-
190
- const metavariable = this.getMetavariable(),
191
- metavariableName = metavariable.getName(),
192
- metavariablePresent = context.isMetavariablePresentByMetavariableName(metavariableName);
193
-
194
- if (metavariablePresent) {
195
- validatesAsMetavariable = true;
191
+ metavariableValidates = true;
196
192
  }
197
193
 
198
- if (validatesAsMetavariable) {
199
- context.debug(`...validated the '${referenceString}' reference as a metavaraible.`);
194
+ if (metavariableValidates) {
195
+ context.debug(`...validated the '${referenceString}' reference's '${metavariableString}' metavariable.'`);
200
196
  }
201
197
 
202
- return validatesAsMetavariable;
198
+ return metavariableValidates;
203
199
  }
204
200
 
205
201
  unifyLabel(label, context) {
@@ -301,8 +297,11 @@ export default define(class Reference extends Element {
301
297
  const { string } = json,
302
298
  referenceNode = instantiateReference(string, context),
303
299
  node = referenceNode, ///
304
- metavariable = metavariableFromReferenceNode(referenceNode, context),
305
- reference = new Reference(context, string, node, metavariable);
300
+ metavariable = metavariableFromReferenceNode(referenceNode, context);
301
+
302
+ context = null;
303
+
304
+ const reference = new Reference(context, string, node, metavariable);
306
305
 
307
306
  return reference;
308
307
  }, context);
@@ -8,7 +8,6 @@ import { literally } from "../utilities/context";
8
8
  import { unifyStatement } from "../process/unify";
9
9
  import { validateStatements } from "../utilities/validation";
10
10
  import { instantiateStatement } from "../process/instantiate";
11
- import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
12
11
 
13
12
  const { match, backwardsSome } = arrayUtilities;
14
13
 
@@ -209,31 +208,6 @@ export default define(class Statement extends Element {
209
208
  return statement;
210
209
  }
211
210
 
212
- validateGivenMetaType(metaType, stated, context) {
213
- let validatesGivenMetaType = false;
214
-
215
- const metaTypeString = metaType.getString(),
216
- statementString = this.getString(); ///
217
-
218
- context.trace(`Validating the '${statementString}' statement given the '${metaTypeString}' meta-type...`);
219
-
220
- const metaTypeName = metaType.getName();
221
-
222
- if (metaTypeName === STATEMENT_META_TYPE_NAME) {
223
- const statement = this.validate(stated, context)
224
-
225
- if (statement !== null) {
226
- validatesGivenMetaType = true;
227
- }
228
- }
229
-
230
- if (validatesGivenMetaType) {
231
- context.debug(`...validated the '${statementString}' statement given the '${metaTypeString}' meta-type.`);
232
- }
233
-
234
- return validatesGivenMetaType;
235
- }
236
-
237
211
  unifySubproof(subproof, generalContext, specificContext) {
238
212
  let subproofUnifies = false;
239
213
 
@@ -95,31 +95,6 @@ export default define(class Variable extends Element {
95
95
  return validates;
96
96
  }
97
97
 
98
- validateType(context) {
99
- let typeValidates = false;
100
-
101
- const typeString = this.type.getString();
102
-
103
- context.trace(`Validating the '${typeString}' type...`);
104
-
105
- const prefixedTypeName = this.type.getPrefixedName(),
106
- type = context.findTypeByPrefixedTypeName(prefixedTypeName);
107
-
108
- if (type === null) {
109
- context.debug(`The '${typeString}' type is not present.`);
110
- } else {
111
- this.type = type; ///
112
-
113
- typeValidates = true;
114
- }
115
-
116
- if (typeValidates) {
117
- context.debug(`...validated the '${typeString}' type.`);
118
- }
119
-
120
- return typeValidates;
121
- }
122
-
123
98
  unifyTerm(term, generalContext, specificContext) {
124
99
  let termUnifies = false;
125
100
 
@@ -63,10 +63,12 @@ class EquationalPass extends EquivalencePass {
63
63
 
64
64
  const equationalPass = new EquationalPass();
65
65
 
66
- export function equateTerms(leftTermNode, rightTermNode, context) {
66
+ export function equateTerms(leftTerm, rightTerm, context) {
67
67
  let termsEquate;
68
68
 
69
- const leftNode = leftTermNode, ///
69
+ const leftTermNode = leftTerm.getNode(),
70
+ rightTermNode = rightTerm.getNode(),
71
+ leftNode = leftTermNode, ///
70
72
  rightNode = rightTermNode, ///
71
73
  success = equationalPass.run(leftNode, rightNode, context);
72
74
 
@@ -75,10 +77,12 @@ export function equateTerms(leftTermNode, rightTermNode, context) {
75
77
  return termsEquate;
76
78
  }
77
79
 
78
- export function equateStatements(leftStatementNode, rightStatementNode, context) {
80
+ export function equateStatements(leftStatement, rightStatement, context) {
79
81
  let statementsEquate;
80
82
 
81
- const leftNode = leftStatementNode, ///
83
+ const leftStatementNode = leftStatement.getNode(),
84
+ rightStatementNode = rightStatement.getNode(),
85
+ leftNode = leftStatementNode, ///
82
86
  rightNode = rightStatementNode, ///
83
87
  success = equationalPass.run(leftNode, rightNode, context);
84
88
 
@@ -4,6 +4,7 @@ import { queryUtilities, ZipPass as ZipPassBase } from "occam-languages";
4
4
 
5
5
  import ZipPass from "../pass/zip";
6
6
 
7
+ import { FRAME_META_TYPE_NAME, STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
7
8
  import { termFromTermNode, frameFromFrameNode, statementFromStatementNode } from "../utilities/element";
8
9
 
9
10
  const { nodeQuery } = queryUtilities;
@@ -155,22 +156,22 @@ class CombinatorPass extends ZipPass {
155
156
  let success = false;
156
157
 
157
158
  const metaTypeNode = generalMetaTypeNode, ///
158
- statementNode = specificStatementNode; ///
159
+ metaTypeName = metaTypeNode.getMetaTypeName(),
160
+ metaTypeNameStatementMetaTypeName = (metaTypeName === STATEMENT_META_TYPE_NAME);
159
161
 
160
- let context;
161
-
162
- context = generalContext; ///
162
+ if (metaTypeNameStatementMetaTypeName) {
163
+ const context = specificContext, ///
164
+ statementNode = specificStatementNode; ///
163
165
 
164
- const metaTypeName = metaTypeNode.getMetaTypeName(),
165
- metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
166
+ let statement;
166
167
 
167
- context = specificContext; ///
168
+ statement = statementFromStatementNode(statementNode, context);
168
169
 
169
- const statement = statementFromStatementNode(statementNode, context),
170
- statementValidatesGivenType = statement.validateGivenMetaType(metaType, stated, context);
170
+ statement = statement.validate(stated, context); ///
171
171
 
172
- if (statementValidatesGivenType) {
173
- success = true;
172
+ if (statement !== null) {
173
+ success = true;
174
+ }
174
175
  }
175
176
 
176
177
  return success;
@@ -183,22 +184,22 @@ class CombinatorPass extends ZipPass {
183
184
  let success = false;
184
185
 
185
186
  const metaTypeNode = generalMetaTypeNode, ///
186
- frameNode = specificFrameNode; ///
187
+ metaTypeName = metaTypeNode.getMetaTypeName(),
188
+ metaTypeNameFrameMetaTypeName = (metaTypeName === FRAME_META_TYPE_NAME);
187
189
 
188
- let context;
189
-
190
- context = generalContext; ///
190
+ if (metaTypeNameFrameMetaTypeName) {
191
+ const context = specificContext, ///
192
+ frameNode = specificFrameNode; ///
191
193
 
192
- const metaTypeName = metaTypeNode.getMetaTypeName(),
193
- metaType = context.findMetaTypeByMetaTypeName(metaTypeName);
194
+ let frame;
194
195
 
195
- context = specificContext; ///
196
+ frame = frameFromFrameNode(frameNode, context);
196
197
 
197
- const frame = frameFromFrameNode(frameNode, context),
198
- frameValidatesGivenMetaType = frame.validateGivenMetaType(metaType, stated, context);
198
+ frame = frame.validate(stated, context); ///
199
199
 
200
- if (frameValidatesGivenMetaType) {
201
- success = true;
200
+ if (frame !== null) {
201
+ success = true;
202
+ }
202
203
  }
203
204
 
204
205
  return success;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ import { SimplePass } from "occam-languages";
3
4
  import { queryUtilities } from "occam-languages";
4
- import { SimplePass, ForwardPass } from "occam-languages";
5
5
 
6
6
  import { termFromTermNode, statementFromStatementNode } from "../utilities/element";
7
7
 
@@ -11,144 +11,6 @@ const termNodeQuery = nodeQuery("/term"),
11
11
  typeNodeQuery = nodeQuery("/type"),
12
12
  statementNodeQuery = nodeQuery("/statement");
13
13
 
14
- class TermPass extends ForwardPass {
15
- run(statementNode, context) {
16
- let success = false;
17
-
18
- const nonTerminalNode = statementNode, ///
19
- childNodes = nonTerminalNode.getChildNodes(), ///
20
- descended = this.descend(childNodes, context);
21
-
22
- if (descended) {
23
- success = true;
24
- }
25
-
26
- return success;
27
- }
28
-
29
- static maps = [
30
- {
31
- nodeQuery: termNodeQuery,
32
- run: (termNode, context, validateForwards) => {
33
- let success = false;
34
-
35
- let term;
36
-
37
- term = termFromTermNode(termNode, context);
38
-
39
- term = term.validate(context, validateForwards); ///
40
-
41
- if (term !== null) {
42
- success = true;
43
- }
44
-
45
- return success;
46
- }
47
- },
48
- {
49
- nodeQuery: typeNodeQuery,
50
- run: (typeNode, context, validateForwards) => {
51
- let success = false;
52
-
53
- const nominalTypeName = typeNode.getNominalTypeName(),
54
- typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
55
-
56
- if (typePresent) {
57
- const validatesForwards = validateForwards();
58
-
59
- if (validatesForwards) {
60
- success = true;
61
- }
62
- } else {
63
- const typeString = nominalTypeName; ///
64
-
65
- context.debug(`The '${typeString}' type is not present.`);
66
-
67
- success = false;
68
- }
69
-
70
- return success;
71
- }
72
- }
73
- ];
74
- }
75
-
76
- class StatementPass extends SimplePass {
77
- run(statementNode, context) {
78
- let success = false;
79
-
80
- const nonTerminalNode = statementNode, ///
81
- childNodes = nonTerminalNode.getChildNodes(), ///
82
- descended = this.descend(childNodes, context);
83
-
84
- if (descended) {
85
- success = true;
86
- }
87
-
88
- return success;
89
- }
90
-
91
- static maps = [
92
- {
93
- nodeQuery: statementNodeQuery,
94
- run: (statementNode, context) => {
95
- let success = false;
96
-
97
- let statement;
98
-
99
- const stated = true;
100
-
101
- statement = statementFromStatementNode(statementNode, context);
102
-
103
- statement = statement.validate(stated, context); ///
104
-
105
- if (statement !== null) {
106
- success = true;
107
- }
108
-
109
- return success;
110
- }
111
- },
112
- {
113
- nodeQuery: termNodeQuery,
114
- run: (termNode, context) => {
115
- let success = false;
116
-
117
- let term;
118
-
119
- term = termFromTermNode(termNode, context);
120
-
121
- term = term.validate(context, () => { ///
122
- const validatesForwards = true;
123
-
124
- return validatesForwards;
125
- });
126
-
127
- if (term !== null) {
128
- success = true;
129
- }
130
-
131
- return success;
132
- }
133
- },
134
- {
135
- nodeQuery: typeNodeQuery,
136
- run: (typeNode, context) => {
137
- let success = false;
138
-
139
- const nominalTypeName = typeNode.getNominalTypeName(),
140
- typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
141
-
142
- if (typePresent) {
143
- success = true;
144
- }
145
-
146
- return success;
147
- }
148
- }
149
- ];
150
- }
151
-
152
14
  class ConbinatorPass extends SimplePass {
153
15
  run(statementNode, context) {
154
16
  let success = false;
@@ -281,37 +143,9 @@ class ConstructorPass extends SimplePass {
281
143
  ];
282
144
  }
283
145
 
284
- const termPass = new TermPass(),
285
- statementPass = new StatementPass(),
286
- combinatorPass = new ConbinatorPass(),
146
+ const combinatorPass = new ConbinatorPass(),
287
147
  constructorPass = new ConstructorPass();
288
148
 
289
- export function validateTerm(termNode, context, validateForwards) {
290
- let termValidates = false;
291
-
292
- const node = termNode, ///
293
- sucess = termPass.run(node, context, validateForwards);
294
-
295
- if (sucess) {
296
- termValidates = true;
297
- }
298
-
299
- return termValidates;
300
- }
301
-
302
- export function validateStatement(statementNode, context) {
303
- let statementValidates = false;
304
-
305
- const node = statementNode, ///
306
- sucess = statementPass.run(node, context);
307
-
308
- if (sucess) {
309
- statementValidates = true;
310
- }
311
-
312
- return statementValidates;
313
- }
314
-
315
149
  export function validateTermAsConstructor(term, context) {
316
150
  let termValidatesAsConstructor = false;
317
151
 
@@ -123,12 +123,12 @@ export function frameFromFrameNode(frameNode, context) {
123
123
  const { Frame } = elements,
124
124
  node = frameNode, ///
125
125
  string = context.nodeAsString(node),
126
- reference = referenceFromFrameNode(frameNode, context),
127
- assumptions = assumptionsFromFrameNode(frameNode, context);
126
+ assumptions = assumptionsFromFrameNode(frameNode, context),
127
+ metavariable = metavariableFromFrameNode(frameNode, context);
128
128
 
129
129
  context = null;
130
130
 
131
- const frame = new Frame(context, string, node, reference, assumptions);
131
+ const frame = new Frame(context, string, node, assumptions, metavariable);
132
132
 
133
133
  return frame;
134
134
  }
@@ -320,8 +320,11 @@ export function referenceFromReferenceNode(referenceNode, context) {
320
320
  const { Reference } = elements,
321
321
  node = referenceNode, ///
322
322
  string = context.nodeAsString(node),
323
- metavariable = metavariableFromReferenceNode(referenceNode, context),
324
- reference = new Reference(context, string, node, metavariable);
323
+ metavariable = metavariableFromReferenceNode(referenceNode, context);
324
+
325
+ context = null;
326
+
327
+ const reference = new Reference(context, string, node, metavariable);
325
328
 
326
329
  return reference;
327
330
  }
@@ -549,11 +552,11 @@ export function metavariableFromMetavariableNode(metavariableNode, context) {
549
552
  const { Metavariable } = elements,
550
553
  node = metavariableNode, ///
551
554
  string = context.nodeAsString(node),
552
- metavariableName = metavariableNode.getMetavariableName(),
553
- name = metavariableName, ///
554
- type = null,
555
+ name = nameFromMetavariableNode(metavariableNode, context),
556
+ term = termFromMetavariableNode(metavariableNode, context),
557
+ type = typeFromMetavariableNode(metavariableNode, context),
555
558
  metaType = null,
556
- metavariable = new Metavariable(context, string, node, name, type, metaType);
559
+ metavariable = new Metavariable(context, string, node, name, term, type, metaType);
557
560
 
558
561
  return metavariable;
559
562
  }
@@ -966,18 +969,6 @@ export function conclusionFromRuleNode(ruleNode, context) {
966
969
  return conclusion;
967
970
  }
968
971
 
969
- export function referenceFromFrameNode(frameNode, context) {
970
- let reference = null;
971
-
972
- const metavariableNode = frameNode.getMetavariableNode();
973
-
974
- if (metavariableNode !== null) {
975
- reference = referencesFromMetavariableNode(metavariableNode, context);
976
- }
977
-
978
- return reference;
979
- }
980
-
981
972
  export function theoremFromSectionNode(sectionNode, context) {
982
973
  let theorem = null;
983
974
 
@@ -1070,6 +1061,30 @@ export function nameFromMetavariableNode(metavariableNode, context) {
1070
1061
  return name;
1071
1062
  }
1072
1063
 
1064
+ export function termFromMetavariableNode(metavariableNode, context) {
1065
+ let term = null;
1066
+
1067
+ const termNode = metavariableNode.getTermNode();
1068
+
1069
+ if (termNode !== null) {
1070
+ term = termFromTermNode(termNode, context);
1071
+ }
1072
+
1073
+ return term;
1074
+ }
1075
+
1076
+ export function typeFromMetavariableNode(metavariableNode, context) {
1077
+ let type = null;
1078
+
1079
+ const typemNode = metavariableNode.getTypeNode();
1080
+
1081
+ if (typemNode !== null) {
1082
+ type = typeFromTypeNode(typemNode, context);
1083
+ }
1084
+
1085
+ return type;
1086
+ }
1087
+
1073
1088
  export function metavariableFromFrameNode(frameNode, context) {
1074
1089
  let metavariable = null;
1075
1090