occam-verify-cli 0.0.523 → 0.0.525

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.
package/src/equality.js CHANGED
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  import { nodeQuery } from "./utilities/query";
4
+ import { TERM_RULE_NAME } from "./ruleNames";
4
5
 
5
- const leftTermNodeQuery = nodeQuery("/statement/term[0]"),
6
- rightTermNodeQuery = nodeQuery("/statement/term[1]");
6
+ const leftTermNodeQuery = nodeQuery("/statement/argument[0]/term!"),
7
+ rightTermNodeQuery = nodeQuery("/statement/argument[1]/term!");
7
8
 
8
9
  export default class Equality {
9
10
  constructor(leftTermNode, rightTermNode) {
@@ -11,7 +12,7 @@ export default class Equality {
11
12
  this.rightTermNode = rightTermNode;
12
13
  }
13
14
 
14
- getLdftTermNode() {
15
+ getLeftTermNode() {
15
16
  return this.leftTermNode;
16
17
  }
17
18
 
@@ -19,8 +20,79 @@ export default class Equality {
19
20
  return this.rightTermNode;
20
21
  }
21
22
 
22
- assert(proofContext) {
23
- debugger
23
+ match(equality, equalities) {
24
+ let matches = false;
25
+
26
+ const leftTermNode = equality.getLeftTermNode(),
27
+ rightTermNode = equality.getRightTermNode();
28
+
29
+ if (!matches) {
30
+ const reversed = false,
31
+ leftTermNodeAndRightTermNodeMatch = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities);
32
+
33
+ matches = leftTermNodeAndRightTermNodeMatch; ///
34
+ }
35
+
36
+ if (!matches) {
37
+ const reversed = true,
38
+ leftTermNodeAndRightTermNodeMatch = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities);
39
+
40
+ matches = leftTermNodeAndRightTermNodeMatch; ///
41
+ }
42
+
43
+ return matches;
44
+ }
45
+
46
+ matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities) {
47
+ let leftTermNodeAndRightTermNodeMatch = true;
48
+
49
+ if (leftTermNodeAndRightTermNodeMatch) {
50
+ const leftNonTerminalNode = reversed ?
51
+ this.rightTermNode :
52
+ this.leftTermNode, ///
53
+ rightNonTerminalNode = leftTermNode, ///
54
+ nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities);
55
+
56
+ leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
57
+ }
58
+
59
+ if (leftTermNodeAndRightTermNodeMatch) {
60
+ const leftNonTerminalNode = reversed ?
61
+ this.leftTermNode :
62
+ this.rightTermNode, ///
63
+ rightNonTerminalNode = rightTermNode, ///
64
+ nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities);
65
+
66
+ leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
67
+ }
68
+
69
+ return leftTermNodeAndRightTermNodeMatch;
70
+ }
71
+
72
+ equate(equalities) {
73
+ const leftNonTerminalNode = this.leftTermNode, ///
74
+ rightNonTerminalNode = this.rightTermNode, ///
75
+ nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities),
76
+ equates = nonTerminalNodeEquates; ///
77
+
78
+ return equates;
79
+ }
80
+
81
+ static fromProofStep(proofStep) {
82
+ let equality = null;
83
+
84
+ const statementNode = proofStep.getStatementNode();
85
+
86
+ if (statementNode !== null) {
87
+ const leftTermNode = leftTermNodeQuery(statementNode),
88
+ rightTermNode = rightTermNodeQuery(statementNode);
89
+
90
+ if ((leftTermNode !== null) && (rightTermNode !== null)) {
91
+ equality = new Equality(leftTermNode, rightTermNode);
92
+ }
93
+ }
94
+
95
+ return equality;
24
96
  }
25
97
 
26
98
  static fromStatementNode(statementNode) {
@@ -30,4 +102,129 @@ export default class Equality {
30
102
 
31
103
  return equality;
32
104
  }
105
+
106
+ static fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode) {
107
+ const equality = new Equality(leftTermNode, rightTermNode);
108
+
109
+ return equality;
110
+ }
111
+ }
112
+
113
+ function equateNode(nodeA, nodeB, equalities) {
114
+ let nodeEquates = false;
115
+
116
+ const nodeATerminalNode = nodeA.isTerminalNode(),
117
+ nodeBTerminalNode = nodeB.isTerminalNode();
118
+
119
+ if (nodeATerminalNode === nodeBTerminalNode) {
120
+ if (nodeATerminalNode) {
121
+ const terminalNodeA = nodeA, ///
122
+ terminalNodeB = nodeB, ///
123
+ terminalNodeEquates = equateTerminalNode(terminalNodeA, terminalNodeB, equalities);
124
+
125
+ nodeEquates = terminalNodeEquates; ///
126
+ } else {
127
+ const nonTerminalNodeA = nodeA, ///
128
+ nonTerminalNodeB = nodeB, ///
129
+ nonTerminalNodeEquates = equateNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equalities);
130
+
131
+ nodeEquates = nonTerminalNodeEquates; ///
132
+ }
133
+ }
134
+
135
+ return nodeEquates;
136
+ }
137
+
138
+ function equateNodes(leftNodes, rightNodes, equalities) {
139
+ let nodesEquate = false;
140
+
141
+ const leftNodesLength = leftNodes.length,
142
+ rightNodesLength = rightNodes.length;
143
+
144
+ if (leftNodesLength === rightNodesLength) {
145
+ nodesEquate = leftNodes.every((LeftNode, index) => {
146
+ const rightNode = rightNodes[index],
147
+ nodeEquates = equateNode(LeftNode, rightNode, equalities);
148
+
149
+ if (nodeEquates) {
150
+ return true;
151
+ }
152
+ });
153
+ }
154
+
155
+ return nodesEquate;
156
+ }
157
+
158
+ function equateTerminalNode(terminalNodeA, terminalNodeB, equalities) {
159
+ const matches = terminalNodeA.match(terminalNodeB),
160
+ terminalNodeEquates = matches; ///
161
+
162
+ return terminalNodeEquates;
163
+ }
164
+
165
+ function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities) {
166
+ let nonTerminalNodeEquates = false;
167
+
168
+ const leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(),
169
+ rightNonTerminalNodeRuleName = rightNonTerminalNode.getRuleName();
170
+
171
+ if (leftNonTerminalNodeRuleName === rightNonTerminalNodeRuleName) {
172
+ const ruleName = leftNonTerminalNodeRuleName, ///
173
+ ruleNameTermRuleName = (ruleName === TERM_RULE_NAME);
174
+
175
+ if (ruleNameTermRuleName) {
176
+ const leftTermNode = leftNonTerminalNode, ///
177
+ rightTermNode = rightNonTerminalNode, ///
178
+ termNodeEquates = equateTermNode(leftTermNode, rightTermNode, equalities);
179
+
180
+ nonTerminalNodeEquates = termNodeEquates; ///
181
+ }
182
+
183
+ if (!nonTerminalNodeEquates) {
184
+ const leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(),
185
+ rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
186
+ leftNodes = leftNonTerminalNodeChildNodes, ///
187
+ rightNodes = rightNonTerminalNodeChildNodes, ///
188
+ nodesEquate = equateNodes(leftNodes, rightNodes, equalities);
189
+
190
+ nonTerminalNodeEquates = nodesEquate; ///
191
+ }
192
+ }
193
+
194
+ return nonTerminalNodeEquates;
195
+ }
196
+
197
+ function equateTermNode(leftTermNode, rightTermNode, equalities) {
198
+ const equality = Equality.fromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode),
199
+ equalityA = equality, ///
200
+ equalityMatches = equalities.some((equality) => { ///
201
+ let equalitiesB = equalities; ///
202
+
203
+ const equalityB = equality; ///
204
+
205
+ equalitiesB = filterEqualities(equalitiesB, equalityB); ///
206
+
207
+ const equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB);
208
+
209
+ if (equalityAMatchesEqualityB) {
210
+ return true;
211
+ }
212
+ }),
213
+ termNodeEquates = equalityMatches; ///
214
+
215
+ return termNodeEquates;
216
+ }
217
+
218
+ function filterEqualities(equalities, equality) {
219
+ const equalityA = equality; ///
220
+
221
+ equalities = equalities.filter((equality) => {
222
+ const equalityB = equality; ///
223
+
224
+ if (equalityA !== equalityB) {
225
+ return true;
226
+ }
227
+ });
228
+
229
+ return equalities;
33
230
  }
package/src/ruleNames.js CHANGED
@@ -13,6 +13,6 @@ export const RULE_SUBPROOF_RULE_NAME = "ruleSubproof";
13
13
  export const META_ARGUMENT_RULE_NAME = "metaArgument";
14
14
  export const QUALIFIED_STATEMENT_RULE_NAME = "qualifiedStatement";
15
15
  export const UNQUALIFIED_STATEMENT_RULE_NAME = "unqualifiedStatement";
16
- export const CONDITIONAL_INDICATIVE_RULE_NAME = "conditionalIndicative";
16
+ export const CONSTRUCTOR_DECLARATIONRULE_NAME = "constructorDeclaration";
17
17
  export const QUALIFIED_METASTATEMENT_RULE_NAME = "qualifiedMetastatement";
18
18
  export const UNQUALIFIED_METASTATEMENT_RULE_NAME = "unqualifiedMetastatement";
@@ -2,14 +2,14 @@
2
2
 
3
3
  import { COMMA } from "../constants";
4
4
  import { nodeQuery } from "../utilities/query";
5
- import { TERM_RULE_NAME,
6
- LABEL_RULE_NAME,
5
+ import { LABEL_RULE_NAME,
7
6
  UNQUALIFIED_STATEMENT_RULE_NAME,
8
- CONDITIONAL_INDICATIVE_RULE_NAME,
9
- UNQUALIFIED_METASTATEMENT_RULE_NAME} from "../ruleNames";
7
+ CONSTRUCTOR_DECLARATIONRULE_NAME,
8
+ UNQUALIFIED_METASTATEMENT_RULE_NAME } from "../ruleNames";
10
9
 
11
- const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement"),
12
- metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement");
10
+ const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
11
+ statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
12
+ metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
13
13
 
14
14
  export function nodeAsString(node) {
15
15
  let string = null;
@@ -56,10 +56,12 @@ export function nodesAsString(nodes) {
56
56
  }
57
57
 
58
58
  export function termNodeFromTermString(termString, releaseContext) {
59
- const ruleName = TERM_RULE_NAME,
60
- content = termString, ///
59
+ const ruleName = CONSTRUCTOR_DECLARATIONRULE_NAME,
60
+ content = `Constructor ${termString}
61
+ `,
61
62
  node = releaseContext.nodeFromContentAndRuleName(content, ruleName),
62
- termNode = node; ///
63
+ constructorDeclarationNode = node, ///
64
+ termNode = termNodeQuery(constructorDeclarationNode);
63
65
 
64
66
  return termNode;
65
67
  }
@@ -94,21 +96,3 @@ export function metastatementNodeFromMetastatementString(metastatementString, re
94
96
 
95
97
  return metastatementNode;
96
98
  }
97
-
98
- export function unqualifiedStatementNodeFromUnqualifiedStatementString(unqualifiedStatementString, releaseContext) {
99
- const ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
100
- content = unqualifiedStatementString, ///
101
- node = releaseContext.nodeFromContentAndRuleName(content, ruleName),
102
- unqualifiedStatementNode = node; ///
103
-
104
- return unqualifiedStatementNode;
105
- }
106
-
107
- export function conditionalIndicativeNodeFromConditionalIndicativeString(conditionalIndicativeString, releaseContext) {
108
- const ruleName = CONDITIONAL_INDICATIVE_RULE_NAME,
109
- content = conditionalIndicativeString, ///
110
- node = releaseContext.nodeFromContentAndRuleName(content, ruleName),
111
- conditionalIndicativeNode = node; ///
112
-
113
- return conditionalIndicativeNode;
114
- }
@@ -107,8 +107,10 @@ function verifyChild(childNode, proofContext) {
107
107
  }
108
108
 
109
109
  case QUALIFIED_STATEMENT_RULE_NAME: {
110
- const qualifiedStatementNode = childNode, ///
111
- qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, proofContext);
110
+ const derived = true,
111
+ assertions = [],
112
+ qualifiedStatementNode = childNode, ///
113
+ qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, assertions, derived, proofContext);
112
114
 
113
115
  if (qualifiedStatementVerified) {
114
116
  const statementNode = statementNodeQuery(qualifiedStatementNode),
@@ -8,7 +8,7 @@ import { nodeQuery, referenceNameFromReferenceNode } from "../../utilities/query
8
8
  const referenceNodeQuery = nodeQuery("/qualifiedMetastatement/qualification!/reference!"),
9
9
  metastatementNodeQuery = nodeQuery("/qualifiedMetastatement/metastatement!");
10
10
 
11
- export default function verifyQualifiedMetastatement(qualifiedMetastatementNode, metaproofContext) {
11
+ export default function verifyQualifiedMetastatement(qualifiedMetastatementNode, assertions, derived, metaproofContext) {
12
12
  let qualifiedMetastatementVerified = false;
13
13
 
14
14
  metaproofContext.begin(qualifiedMetastatementNode);
@@ -20,7 +20,7 @@ export default function verifyQualifiedMetastatement(qualifiedMetastatementNode,
20
20
 
21
21
  metaproofContext.debug(`Verifying the ${metastatementString} qualified metastatement...`);
22
22
 
23
- let ruleMatchesStatement = true;
23
+ let ruleMatchesMetastatement = true;
24
24
 
25
25
  const referenceNode = referenceNodeQuery(qualifiedMetastatementNode);
26
26
 
@@ -29,15 +29,12 @@ export default function verifyQualifiedMetastatement(qualifiedMetastatementNode,
29
29
  rule = metaproofContext.findRuleByReferenceName(referenceName);
30
30
 
31
31
  if (rule !== null) {
32
- const ruleMatchesStatement = rule.matchMetastatement(metastatementNode, metaproofContext);
33
-
34
- qualifiedMetastatementVerified = ruleMatchesStatement; ///
32
+ ruleMatchesMetastatement = rule.matchMetastatement(metastatementNode, metaproofContext);
35
33
  }
36
34
  }
37
35
 
38
- if (ruleMatchesStatement) {
39
- const assertions = [],
40
- metastatementVerified = verifyMetastatement(metastatementNode, assertions, metaproofContext);
36
+ if (ruleMatchesMetastatement) {
37
+ const metastatementVerified = verifyMetastatement(metastatementNode, assertions, derived, metaproofContext);
41
38
 
42
39
  qualifiedMetastatementVerified = metastatementVerified; ///
43
40
  }
@@ -26,7 +26,7 @@ export default function verifyUnqualifiedMetastatement(unqualifiedMetastatementN
26
26
  }
27
27
 
28
28
  if (metastatementMatches) {
29
- const metastatementVerified = verifyMetastatement(metastatementNode, assertions, metaproofContext);
29
+ const metastatementVerified = verifyMetastatement(metastatementNode, assertions, derived, metaproofContext);
30
30
 
31
31
  unqualifiedMetastatementVerified = metastatementVerified; ///
32
32
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- export default function verifyMetastatement(metastatementNode, assertions, metaproofContext) {
3
+ export default function verifyMetastatement(metastatementNode, assertions, derived, metaproofContext) {
4
4
  let metastatementVerified = true; ///
5
5
 
6
6
  metaproofContext.begin(metastatementNode);
@@ -107,8 +107,10 @@ function verifyChild(childNode, metaproofContext) {
107
107
  }
108
108
 
109
109
  case QUALIFIED_METASTATEMENT_RULE_NAME: {
110
- const qualifiedMetastatementNode = childNode, ///
111
- qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, metaproofContext);
110
+ const derived = true,
111
+ assertions = [],
112
+ qualifiedMetastatementNode = childNode, ///
113
+ qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, assertions, derived, metaproofContext);
112
114
 
113
115
  if (qualifiedMetastatementVerified) {
114
116
  const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
@@ -8,7 +8,7 @@ import { nodeQuery, referenceNameFromReferenceNode } from "../../utilities/query
8
8
  const referenceNodeQuery = nodeQuery("/qualifiedStatement/qualification!/reference!"),
9
9
  statementNodeQuery = nodeQuery("/qualifiedStatement/statement!");
10
10
 
11
- export default function verifyQualifiedStatement(qualifiedStatementNode, proofContext) {
11
+ export default function verifyQualifiedStatement(qualifiedStatementNode, assertions, derived, proofContext) {
12
12
  let qualifiedStatementVerified = false;
13
13
 
14
14
  proofContext.begin(qualifiedStatementNode);
@@ -34,8 +34,8 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, proofCo
34
34
  }
35
35
 
36
36
  if (ruleMatchesStatement) {
37
- const assertions = [],
38
- statementVerified = verifyStatement(statementNode, assertions, proofContext);
37
+ const context = proofContext,
38
+ statementVerified = verifyStatement(statementNode, assertions, derived, context);
39
39
 
40
40
  qualifiedStatementVerified = statementVerified; ///
41
41
  }
@@ -26,7 +26,8 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
26
26
  }
27
27
 
28
28
  if (statementMatches) {
29
- const statementVerified = verifyStatement(statementNode, assertions, proofContext);
29
+ const context = proofContext, ///
30
+ statementVerified = verifyStatement(statementNode, assertions, derived, context);
30
31
 
31
32
  unqualifiedStatementVerified = statementVerified; ///
32
33
  }