occam-verify-cli 0.0.471 → 0.0.473
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/bin/utilities/fileSystem.js +1 -35
- package/lib/constants.js +4 -8
- package/lib/context/metaproof.js +9 -2
- package/lib/context/proof.js +9 -2
- package/lib/equality.js +22 -0
- package/lib/metaSubstitution.js +12 -52
- package/lib/step/metaproof.js +7 -7
- package/lib/substitution.js +16 -56
- package/lib/utilities/node.js +57 -4
- package/lib/utilities/releaseContext.js +22 -2
- package/lib/verify/derivation.js +4 -6
- package/lib/verify/metaDerivation.js +4 -6
- package/lib/verify/metaproof.js +3 -6
- package/lib/verify/metastatement/qualified.js +1 -7
- package/lib/verify/metastatement/unqualified.js +1 -7
- package/lib/verify/proof.js +3 -6
- package/lib/verify/statement/qualified.js +1 -7
- package/lib/verify/statement/unqualified.js +1 -7
- package/package.json +1 -1
- package/src/constants.js +1 -2
- package/src/context/metaproof.js +5 -1
- package/src/context/proof.js +5 -1
- package/src/equality.js +8 -0
- package/src/metaSubstitution.js +16 -87
- package/src/step/metaproof.js +13 -14
- package/src/substitution.js +19 -90
- package/src/utilities/node.js +78 -1
- package/src/utilities/releaseContext.js +41 -2
- package/src/verify/derivation.js +3 -8
- package/src/verify/metaDerivation.js +3 -8
- package/src/verify/metaproof.js +2 -8
- package/src/verify/metastatement/qualified.js +0 -9
- package/src/verify/metastatement/unqualified.js +0 -9
- package/src/verify/proof.js +2 -8
- package/src/verify/statement/qualified.js +0 -9
- package/src/verify/statement/unqualified.js +0 -9
- package/lib/utilities/metaAssertion.js +0 -117
- package/lib/utilities/statement.js +0 -45
- package/src/utilities/metaAssertion.js +0 -176
- package/src/utilities/statement.js +0 -50
|
@@ -10,7 +10,6 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
var _statement = /*#__PURE__*/ _interopRequireDefault(require("../../verify/statement"));
|
|
12
12
|
var _query = require("../../utilities/query");
|
|
13
|
-
var _string = require("../../utilities/string");
|
|
14
13
|
function _interopRequireDefault(obj) {
|
|
15
14
|
return obj && obj.__esModule ? obj : {
|
|
16
15
|
default: obj
|
|
@@ -20,8 +19,6 @@ var statementNodeQuery = (0, _query.nodeQuery)("/unqualifiedStatement/statement!
|
|
|
20
19
|
function verifyUnqualifiedStatement(unqualifiedStatementNode, proofContext) {
|
|
21
20
|
var unqualifiedStatementVerified = false;
|
|
22
21
|
proofContext.begin(unqualifiedStatementNode);
|
|
23
|
-
var unqualifiedStatementString = (0, _string.nodeAsString)(unqualifiedStatementNode);
|
|
24
|
-
proofContext.debug("Verifying the '".concat(unqualifiedStatementString, "' unqualified statement..."));
|
|
25
22
|
var statementNode = statementNodeQuery(unqualifiedStatementNode);
|
|
26
23
|
if (statementNode !== null) {
|
|
27
24
|
var statementVerified = (0, _statement.default)(statementNode, proofContext);
|
|
@@ -35,11 +32,8 @@ function verifyUnqualifiedStatement(unqualifiedStatementNode, proofContext) {
|
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
34
|
}
|
|
38
|
-
if (unqualifiedStatementVerified) {
|
|
39
|
-
proofContext.info("Verified the '".concat(unqualifiedStatementString, "' unqualified statement."));
|
|
40
|
-
}
|
|
41
35
|
unqualifiedStatementVerified ? proofContext.complete(unqualifiedStatementNode) : proofContext.halt(unqualifiedStatementNode);
|
|
42
36
|
return unqualifiedStatementVerified;
|
|
43
37
|
}
|
|
44
38
|
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvc3RhdGVtZW50L3VucXVhbGlmaWVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgdmVyaWZ5U3RhdGVtZW50IGZyb20gXCIuLi8uLi92ZXJpZnkvc3RhdGVtZW50XCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3Qgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3VucXVhbGlmaWVkU3RhdGVtZW50L3N0YXRlbWVudCFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcmlmeVVucXVhbGlmaWVkU3RhdGVtZW50KHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSwgcHJvb2ZDb250ZXh0KSB7XG4gIGxldCB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gZmFsc2U7XG5cbiAgcHJvb2ZDb250ZXh0LmJlZ2luKHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVRdWVyeSh1bnF1YWxpZmllZFN0YXRlbWVudE5vZGUpO1xuXG4gIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWQgPSB2ZXJpZnlTdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSwgcHJvb2ZDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRWZXJpZmllZCkge1xuICAgICAgY29uc3QgZGVyaXZlZCA9IHByb29mQ29udGV4dC5pc0Rlcml2ZWQoKTtcblxuICAgICAgaWYgKGRlcml2ZWQpIHtcbiAgICAgICAgY29uc3QgYXNzZXJ0aW9uTWF0Y2hlcyA9IHByb29mQ29udGV4dC5tYXRjaFN0YXRlbWVudChzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFZlcmlmaWVkID0gYXNzZXJ0aW9uTWF0Y2hlczsgIC8vL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZCA/XG4gICAgcHJvb2ZDb250ZXh0LmNvbXBsZXRlKHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSkgOlxuICAgICAgcHJvb2ZDb250ZXh0LmhhbHQodW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKTtcblxuICByZXR1cm4gdW5xdWFsaWZpZWRTdGF0ZW1lbnRWZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlVbnF1YWxpZmllZFN0YXRlbWVudCIsInN0YXRlbWVudE5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSIsInByb29mQ29udGV4dCIsInVucXVhbGlmaWVkU3RhdGVtZW50VmVyaWZpZWQiLCJiZWdpbiIsInN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRWZXJpZmllZCIsInZlcmlmeVN0YXRlbWVudCIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJhc3NlcnRpb25NYXRjaGVzIiwibWF0Y2hTdGF0ZW1lbnQiLCJjb21wbGV0ZSIsImhhbHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVFBOzs7ZUFBd0JBOzs7OERBTkk7cUJBRUY7Ozs7OztBQUUxQixJQUFNQyxxQkFBcUJDLElBQUFBLGdCQUFTLEVBQUM7QUFFdEIsU0FBU0YsMkJBQTJCRyx3QkFBd0IsRUFBRUMsWUFBWSxFQUFFO0lBQ3pGLElBQUlDLCtCQUErQixLQUFLO0lBRXhDRCxhQUFhRSxLQUFLLENBQUNIO0lBRW5CLElBQU1JLGdCQUFnQk4sbUJBQW1CRTtJQUV6QyxJQUFJSSxrQkFBa0IsSUFBSSxFQUFFO1FBQzFCLElBQU1DLG9CQUFvQkMsSUFBQUEsa0JBQWUsRUFBQ0YsZUFBZUg7UUFFekQsSUFBSUksbUJBQW1CO1lBQ3JCLElBQU1FLFVBQVVOLGFBQWFPLFNBQVM7WUFFdEMsSUFBSUQsU0FBUztnQkFDWCxJQUFNRSxtQkFBbUJSLGFBQWFTLGNBQWMsQ0FBQ047Z0JBRXJERiwrQkFBK0JPLGtCQUFtQixHQUFHO1lBQ3ZELE9BQU87Z0JBQ0xQLCtCQUErQixJQUFJO1lBQ3JDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEQSwrQkFDRUQsYUFBYVUsUUFBUSxDQUFDWCw0QkFDcEJDLGFBQWFXLElBQUksQ0FBQ1oseUJBQXlCO0lBRS9DLE9BQU9FO0FBQ1QifQ==
|
package/package.json
CHANGED
package/src/constants.js
CHANGED
|
@@ -9,5 +9,4 @@ export const LEFT_BRACKET = "(";
|
|
|
9
9
|
export const RIGHT_BRACKET = ")";
|
|
10
10
|
export const MAXIMUM_INDEXES_LENGTH = 10;
|
|
11
11
|
export const MAXIMUM_PERMUTATION_LENGTH = 5;
|
|
12
|
-
export const
|
|
13
|
-
export const BRACKETED_METASTATEMENT_CHILD_NODES_LENGTH = 3;
|
|
12
|
+
export const BRACKETED_CHILD_NODES_LENGTH = 3;
|
package/src/context/metaproof.js
CHANGED
|
@@ -44,10 +44,14 @@ class MetaproofContext {
|
|
|
44
44
|
return lastMetaproofStep;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
setDerived(derived) {
|
|
47
|
+
setDerived(derived = true) {
|
|
48
48
|
this.derived = derived;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
resetDerived() {
|
|
52
|
+
this.derived = false;
|
|
53
|
+
}
|
|
54
|
+
|
|
51
55
|
addMetaproofStep(metaproofStep) {
|
|
52
56
|
this.metaproofSteps.push(metaproofStep);
|
|
53
57
|
}
|
package/src/context/proof.js
CHANGED
|
@@ -63,10 +63,14 @@ class ProofContext {
|
|
|
63
63
|
return lastProofStep;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
setDerived(derived) {
|
|
66
|
+
setDerived(derived = true) {
|
|
67
67
|
this.derived = derived;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
resetDerived() {
|
|
71
|
+
this.derived = false;
|
|
72
|
+
}
|
|
73
|
+
|
|
70
74
|
addVariable(variable) {
|
|
71
75
|
this.variables.push(variable);
|
|
72
76
|
}
|
package/src/equality.js
ADDED
package/src/metaSubstitution.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { matchNodes, bracketedChildNodeFromChildNodes } from "./utilities/node";
|
|
4
4
|
|
|
5
5
|
export default class MetaSubstitution {
|
|
6
6
|
constructor(metavariableName, nodes) {
|
|
@@ -19,34 +19,34 @@ export default class MetaSubstitution {
|
|
|
19
19
|
matchNodes(nodes) {
|
|
20
20
|
let matches;
|
|
21
21
|
|
|
22
|
-
const
|
|
23
|
-
|
|
22
|
+
const nodesA = this.nodes, ///
|
|
23
|
+
nodesB = nodes,
|
|
24
|
+
metaSubstitutionNodesMatch = matchNodes(nodesA, nodesB);
|
|
24
25
|
|
|
25
|
-
matches =
|
|
26
|
+
matches = metaSubstitutionNodesMatch; ///
|
|
26
27
|
|
|
27
28
|
if (!matches) {
|
|
28
29
|
const childNodes = nodes, ///
|
|
29
|
-
|
|
30
|
-
const nonTerminalNode = bracketedMetastatementChildNode, ///
|
|
31
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
32
|
-
nodes = childNodes, ///
|
|
33
|
-
metaAssertionNonTerminalNodeMatches = matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes),
|
|
34
|
-
bracketedMetastatementChildNodeMatches = metaAssertionNonTerminalNodeMatches; ///
|
|
30
|
+
bracketedChildNode = bracketedChildNodeFromChildNodes(childNodes);
|
|
35
31
|
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
if (bracketedChildNode !== null) {
|
|
33
|
+
const nonTerminalNode = bracketedChildNode, ///
|
|
34
|
+
childNodes = nonTerminalNode.getChildNodes(),
|
|
35
|
+
nodesB = childNodes, ///
|
|
36
|
+
nodesMatch = matchNodes(nodesA, nodesB);
|
|
38
37
|
|
|
39
|
-
|
|
38
|
+
matches = nodesMatch; ///
|
|
39
|
+
}
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
return matches;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
static fromMetavariableNameAndNodes(metavariableName, nodes) {
|
|
46
|
-
const
|
|
46
|
+
const bracketedChildNode = bracketedChildNodeFromChildNodes(nodes);
|
|
47
47
|
|
|
48
|
-
if (
|
|
49
|
-
const nonTerminalNode =
|
|
48
|
+
if (bracketedChildNode !== null) {
|
|
49
|
+
const nonTerminalNode = bracketedChildNode, ///
|
|
50
50
|
childNodes = nonTerminalNode.getChildNodes();
|
|
51
51
|
|
|
52
52
|
nodes = childNodes; ///
|
|
@@ -57,74 +57,3 @@ export default class MetaSubstitution {
|
|
|
57
57
|
return metaSubstitution;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
function matchMetaSubstitutionNode(metaSubstitutionNode, node) {
|
|
62
|
-
let metaSubstitutionNodeMatches = false;
|
|
63
|
-
|
|
64
|
-
const nodeTerminalNode = node.isTerminalNode(),
|
|
65
|
-
ruleNodeTerminalNode = metaSubstitutionNode.isTerminalNode();
|
|
66
|
-
|
|
67
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
68
|
-
if (nodeTerminalNode) {
|
|
69
|
-
const terminalNode = node, ///
|
|
70
|
-
metaSubstitutionTerminalNode = metaSubstitutionNode, ///
|
|
71
|
-
metaSubstitutionTerminalNodeMatches = matchMetaSubstitutionTerminalNode(metaSubstitutionTerminalNode, terminalNode);
|
|
72
|
-
|
|
73
|
-
metaSubstitutionNodeMatches = metaSubstitutionTerminalNodeMatches; ///
|
|
74
|
-
} else {
|
|
75
|
-
const nonTerminalNode = node, ///
|
|
76
|
-
metaSubstitutionNonTerminalNode = metaSubstitutionNode, ///
|
|
77
|
-
metaSubstitutionNonTerminalNodeMatches = matchMetaSubstitutionNonTerminalNode(metaSubstitutionNonTerminalNode, nonTerminalNode);
|
|
78
|
-
|
|
79
|
-
metaSubstitutionNodeMatches = metaSubstitutionNonTerminalNodeMatches; ///
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return metaSubstitutionNodeMatches;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes) {
|
|
87
|
-
let metaSubstitutionNodesMatches = false;
|
|
88
|
-
|
|
89
|
-
const nodesLength = nodes.length,
|
|
90
|
-
metaSubstitutionNodesLength = metaSubstitutionNodes.length;
|
|
91
|
-
|
|
92
|
-
if (nodesLength === metaSubstitutionNodesLength) {
|
|
93
|
-
metaSubstitutionNodesMatches = nodes.every((node, index) => {
|
|
94
|
-
const metaSubstitutionNode = metaSubstitutionNodes[index],
|
|
95
|
-
metaSubstitutionNodeMatches = matchMetaSubstitutionNode(metaSubstitutionNode, node);
|
|
96
|
-
|
|
97
|
-
if (metaSubstitutionNodeMatches) {
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
})
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return metaSubstitutionNodesMatches;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function matchMetaSubstitutionTerminalNode(metaSubstitutionTerminalNode, terminalNode) {
|
|
107
|
-
const matches = metaSubstitutionTerminalNode.match(terminalNode),
|
|
108
|
-
metaSubstitutionTerminalNodeMatches = matches; ///
|
|
109
|
-
|
|
110
|
-
return metaSubstitutionTerminalNodeMatches;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function matchMetaSubstitutionNonTerminalNode(metaSubstitutionNonTerminalNode, nonTerminalNode) {
|
|
114
|
-
let metaSubstitutionNonTerminalNodeMatches = false;
|
|
115
|
-
|
|
116
|
-
const ruleName = nonTerminalNode.getRuleName(),
|
|
117
|
-
metaSubstitutionRuleName = metaSubstitutionNonTerminalNode.getRuleName(); ///
|
|
118
|
-
|
|
119
|
-
if (ruleName === metaSubstitutionRuleName) {
|
|
120
|
-
const childNodes = nonTerminalNode.getChildNodes(),
|
|
121
|
-
metaSubstitutionChildNodes = metaSubstitutionNonTerminalNode.getChildNodes(),
|
|
122
|
-
nodes = childNodes, ///
|
|
123
|
-
metaSubstitutionNodes = metaSubstitutionChildNodes, ///
|
|
124
|
-
metaSubstitutionNodesMatches = matchMetaSubstitutionNodes(metaSubstitutionNodes, nodes);
|
|
125
|
-
|
|
126
|
-
metaSubstitutionNonTerminalNodeMatches = metaSubstitutionNodesMatches; ///
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return metaSubstitutionNonTerminalNodeMatches;
|
|
130
|
-
}
|
package/src/step/metaproof.js
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { first, second } from "../utilities/array";
|
|
4
4
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
5
|
-
|
|
6
|
-
import { matchTopmostMetaAssertionMetastatementNode } from "../utilities/metaAssertion";
|
|
5
|
+
import { matchBracketedNonTerminalNode } from "../utilities/node";
|
|
7
6
|
|
|
8
7
|
const metastatementNodesQuery = nodesQuery("/metaSubproofAssertion/metastatement"),
|
|
9
8
|
metaSubproofAssertionNodeQuery = nodeQuery("/metastatement/metaSubproofAssertion"),
|
|
@@ -45,10 +44,10 @@ export default class MetaproofStep {
|
|
|
45
44
|
let metastatementsMatch = false;
|
|
46
45
|
|
|
47
46
|
if (this.metastatementNode !== null) {
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
metastatementNodeMatches =
|
|
47
|
+
const nonTerminalNodeA = metastatementNode, ///
|
|
48
|
+
nonTerminalNodeB = this.metastatementNode, ///
|
|
49
|
+
bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB),
|
|
50
|
+
metastatementNodeMatches = bracketedNodeMatches; ///
|
|
52
51
|
|
|
53
52
|
return metastatementNodeMatches;
|
|
54
53
|
}
|
|
@@ -65,19 +64,19 @@ export default class MetaproofStep {
|
|
|
65
64
|
qualifiedOrUnqualifiedMetastatementMetastatementNodes = qualifiedOrUnqualifiedMetastatementMetastatementNodesQuery(this.metaSubproofNode),
|
|
66
65
|
firstQualifiedOrUnqualifiedMetastatementMetastatementNode = first(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
|
|
67
66
|
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
const nonTerminalNodeA = firstMetaSubproofAssertionMetastatementNode, ///
|
|
68
|
+
nonTerminalNodeB = firstQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
|
|
69
|
+
bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
|
|
71
70
|
|
|
72
|
-
if (
|
|
71
|
+
if (bracketedNodeMatches) {
|
|
73
72
|
const secondMetaSubproofAssertionMetastatementNode = second(metaSubproofAssertionMetastatementNodes),
|
|
74
73
|
secondQualifiedOrUnqualifiedMetastatementMetastatementNode = second(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
|
|
75
74
|
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
const nonTerminalNodeA = secondMetaSubproofAssertionMetastatementNode, ///
|
|
76
|
+
nonTerminalNodeB = secondQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
|
|
77
|
+
bracketedNodeMatches = matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
|
|
79
78
|
|
|
80
|
-
metaSubproofAssertionMatches =
|
|
79
|
+
metaSubproofAssertionMatches = bracketedNodeMatches; ///
|
|
81
80
|
}
|
|
82
81
|
}
|
|
83
82
|
|
package/src/substitution.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { matchNodes, bracketedChildNodeFromChildNodes } from "./utilities/node";
|
|
4
4
|
|
|
5
5
|
export default class Substitution {
|
|
6
6
|
constructor(variableName, nodes) {
|
|
@@ -19,112 +19,41 @@ export default class Substitution {
|
|
|
19
19
|
matchNodes(nodes) {
|
|
20
20
|
let matches;
|
|
21
21
|
|
|
22
|
-
const
|
|
23
|
-
|
|
22
|
+
const nodesA = this.nodes, ///
|
|
23
|
+
nodesB = nodes,
|
|
24
|
+
metaSubstitutionNodesMatch = matchNodes(nodesA, nodesB);
|
|
24
25
|
|
|
25
|
-
matches =
|
|
26
|
+
matches = metaSubstitutionNodesMatch; ///
|
|
26
27
|
|
|
27
28
|
if (!matches) {
|
|
28
29
|
const childNodes = nodes, ///
|
|
29
|
-
|
|
30
|
-
const nonTerminalNode = bracketedStatementChildNode, ///
|
|
31
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
32
|
-
nodes = childNodes, ///
|
|
33
|
-
assertionNonTerminalNodeMatches = matchSubstitutionNodes(substitutionNodes, nodes),
|
|
34
|
-
bracketedStatementChildNodeMatches = assertionNonTerminalNodeMatches; ///
|
|
30
|
+
bracketedChildNode = bracketedChildNodeFromChildNodes(childNodes);
|
|
35
31
|
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
if (bracketedChildNode !== null) {
|
|
33
|
+
const nonTerminalNode = bracketedChildNode, ///
|
|
34
|
+
childNodes = nonTerminalNode.getChildNodes(),
|
|
35
|
+
nodesB = childNodes, ///
|
|
36
|
+
nodesMatch = matchNodes(nodesA, nodesB);
|
|
38
37
|
|
|
39
|
-
|
|
38
|
+
matches = nodesMatch; ///
|
|
39
|
+
}
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
return matches;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
static
|
|
46
|
-
const
|
|
45
|
+
static fromMetavariableNameAndNodes(variableName, nodes) {
|
|
46
|
+
const bracketedChildNode = bracketedChildNodeFromChildNodes(nodes);
|
|
47
47
|
|
|
48
|
-
if (
|
|
49
|
-
const nonTerminalNode =
|
|
48
|
+
if (bracketedChildNode !== null) {
|
|
49
|
+
const nonTerminalNode = bracketedChildNode, ///
|
|
50
50
|
childNodes = nonTerminalNode.getChildNodes();
|
|
51
51
|
|
|
52
52
|
nodes = childNodes; ///
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
return substitution;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function matchSubstitutionNode(substitutionNode, node) {
|
|
62
|
-
let substitutionNodeMatches = false;
|
|
63
|
-
|
|
64
|
-
const nodeTerminalNode = node.isTerminalNode(),
|
|
65
|
-
ruleNodeTerminalNode = substitutionNode.isTerminalNode();
|
|
66
|
-
|
|
67
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
68
|
-
if (nodeTerminalNode) {
|
|
69
|
-
const terminalNode = node, ///
|
|
70
|
-
substitutionTerminalNode = substitutionNode, ///
|
|
71
|
-
substitutionTerminalNodeMatches = matchSubstitutionTerminalNode(substitutionTerminalNode, terminalNode);
|
|
72
|
-
|
|
73
|
-
substitutionNodeMatches = substitutionTerminalNodeMatches; ///
|
|
74
|
-
} else {
|
|
75
|
-
const nonTerminalNode = node, ///
|
|
76
|
-
substitutionNonTerminalNode = substitutionNode, ///
|
|
77
|
-
substitutionNonTerminalNodeMatches = matchSubstitutionNonTerminalNode(substitutionNonTerminalNode, nonTerminalNode);
|
|
78
|
-
|
|
79
|
-
substitutionNodeMatches = substitutionNonTerminalNodeMatches; ///
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return substitutionNodeMatches;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function matchSubstitutionNodes(substitutionNodes, nodes) {
|
|
87
|
-
let substitutionNodesMatches = false;
|
|
55
|
+
const metaSubstitution = new Substitution(variableName, nodes);
|
|
88
56
|
|
|
89
|
-
|
|
90
|
-
substitutionNodesLength = substitutionNodes.length;
|
|
91
|
-
|
|
92
|
-
if (nodesLength === substitutionNodesLength) {
|
|
93
|
-
substitutionNodesMatches = nodes.every((node, index) => {
|
|
94
|
-
const substitutionNode = substitutionNodes[index],
|
|
95
|
-
substitutionNodeMatches = matchSubstitutionNode(substitutionNode, node);
|
|
96
|
-
|
|
97
|
-
if (substitutionNodeMatches) {
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
})
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return substitutionNodesMatches;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function matchSubstitutionTerminalNode(substitutionTerminalNode, terminalNode) {
|
|
107
|
-
const matches = substitutionTerminalNode.match(terminalNode),
|
|
108
|
-
substitutionTerminalNodeMatches = matches; ///
|
|
109
|
-
|
|
110
|
-
return substitutionTerminalNodeMatches;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function matchSubstitutionNonTerminalNode(substitutionNonTerminalNode, nonTerminalNode) {
|
|
114
|
-
let substitutionNonTerminalNodeMatches = false;
|
|
115
|
-
|
|
116
|
-
const ruleName = nonTerminalNode.getRuleName(),
|
|
117
|
-
substitutionRuleName = substitutionNonTerminalNode.getRuleName(); ///
|
|
118
|
-
|
|
119
|
-
if (ruleName === substitutionRuleName) {
|
|
120
|
-
const childNodes = nonTerminalNode.getChildNodes(),
|
|
121
|
-
substitutionChildNodes = substitutionNonTerminalNode.getChildNodes(),
|
|
122
|
-
nodes = childNodes, ///
|
|
123
|
-
substitutionNodes = substitutionChildNodes, ///
|
|
124
|
-
substitutionNodesMatches = matchSubstitutionNodes(substitutionNodes, nodes);
|
|
125
|
-
|
|
126
|
-
substitutionNonTerminalNodeMatches = substitutionNodesMatches; ///
|
|
57
|
+
return metaSubstitution;
|
|
127
58
|
}
|
|
128
|
-
|
|
129
|
-
return substitutionNonTerminalNodeMatches;
|
|
130
59
|
}
|
package/src/utilities/node.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { first, second, third } from "./array";
|
|
4
|
+
import { METASTATEMENT_RULE_NAME } from "../ruleNames";
|
|
5
|
+
import { BRACKETED_CHILD_NODES_LENGTH, LEFT_BRACKET, RIGHT_BRACKET } from "../constants";
|
|
6
|
+
|
|
3
7
|
export function matchNode(nodeA, nodeB) {
|
|
4
8
|
let nodeMatches = false;
|
|
5
9
|
|
|
@@ -25,7 +29,7 @@ export function matchNode(nodeA, nodeB) {
|
|
|
25
29
|
return nodeMatches;
|
|
26
30
|
}
|
|
27
31
|
|
|
28
|
-
function matchNodes(nodesA, nodesB) {
|
|
32
|
+
export function matchNodes(nodesA, nodesB) {
|
|
29
33
|
let nodesMatch = false;
|
|
30
34
|
|
|
31
35
|
const nodesALength = nodesA.length,
|
|
@@ -45,6 +49,79 @@ function matchNodes(nodesA, nodesB) {
|
|
|
45
49
|
return nodesMatch;
|
|
46
50
|
}
|
|
47
51
|
|
|
52
|
+
export function matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB) {
|
|
53
|
+
let bracketedNodeMatches = false;
|
|
54
|
+
|
|
55
|
+
if (!bracketedNodeMatches) {
|
|
56
|
+
const nonTerminalNodeMatches = matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
|
|
57
|
+
|
|
58
|
+
bracketedNodeMatches = nonTerminalNodeMatches; ///
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!bracketedNodeMatches) {
|
|
62
|
+
const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
63
|
+
childNodesA = nonTerminalNodeAChildNodes, ///
|
|
64
|
+
bracketedChildNodeA = bracketedChildNodeFromChildNodes(childNodesA);
|
|
65
|
+
|
|
66
|
+
if (bracketedChildNodeA !== null) {
|
|
67
|
+
const nodeA = bracketedChildNodeA, ///
|
|
68
|
+
nodeB = nonTerminalNodeB, ///
|
|
69
|
+
nodeMatches = matchNode(nodeA, nodeB);
|
|
70
|
+
|
|
71
|
+
bracketedNodeMatches = nodeMatches; ///
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!bracketedNodeMatches) {
|
|
76
|
+
const nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
77
|
+
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
78
|
+
bracketedChildNodeB = bracketedChildNodeFromChildNodes(childNodesB);
|
|
79
|
+
|
|
80
|
+
if (bracketedChildNodeB !== null) {
|
|
81
|
+
const nodeB = bracketedChildNodeB, ///
|
|
82
|
+
nodeA = nonTerminalNodeA, ///
|
|
83
|
+
nodeMatches = matchNode(nodeA, nodeB);
|
|
84
|
+
|
|
85
|
+
bracketedNodeMatches = nodeMatches; ///
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return bracketedNodeMatches;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function bracketedChildNodeFromChildNodes(childNodes) {
|
|
93
|
+
let bracketedChildNode = null;
|
|
94
|
+
|
|
95
|
+
const childNodesLength = childNodes.length;
|
|
96
|
+
|
|
97
|
+
if (childNodesLength === BRACKETED_CHILD_NODES_LENGTH) {
|
|
98
|
+
const firstChildNode = first(childNodes),
|
|
99
|
+
thirdChildNode = third(childNodes),
|
|
100
|
+
secondChildNode = second(childNodes),
|
|
101
|
+
firstChildNodeTerminalNode = firstChildNode.isTerminalNode(),
|
|
102
|
+
thirdChildNodeTerminalNode = thirdChildNode.isTerminalNode(),
|
|
103
|
+
secondChildNodeNonTerminalNode = secondChildNode.isNonTerminalNode();
|
|
104
|
+
|
|
105
|
+
if (firstChildNodeTerminalNode && secondChildNodeNonTerminalNode && thirdChildNodeTerminalNode) {
|
|
106
|
+
const nonTerminalNode = secondChildNode, ///
|
|
107
|
+
firstTerminalNode = firstChildNode, ///
|
|
108
|
+
secondTerminalNode = thirdChildNode, ///
|
|
109
|
+
nonTerminalNodeRuleName = nonTerminalNode.getRuleName(),
|
|
110
|
+
firstTerminalNodeContent = firstTerminalNode.getContent(),
|
|
111
|
+
secondTerminalNodeContent = secondTerminalNode.getContent(),
|
|
112
|
+
firstTerminalNodeContentLeftBracket = (firstTerminalNodeContent === LEFT_BRACKET),
|
|
113
|
+
secondTerminalNodeContentRightBracket = (secondTerminalNodeContent === RIGHT_BRACKET),
|
|
114
|
+
nonTerminalNodeRuleNameMetastatementRuleName = (nonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
|
|
115
|
+
|
|
116
|
+
if (firstTerminalNodeContentLeftBracket && nonTerminalNodeRuleNameMetastatementRuleName && secondTerminalNodeContentRightBracket) {
|
|
117
|
+
bracketedChildNode = nonTerminalNode; ///
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return bracketedChildNode;
|
|
123
|
+
}
|
|
124
|
+
|
|
48
125
|
function matchTerminalNode(terminalNodeA, terminalNodeB) {
|
|
49
126
|
const matches = terminalNodeA.match(terminalNodeB),
|
|
50
127
|
terminalNodeMatches = matches; ///
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { last } from "../utilities/array";
|
|
4
|
+
|
|
3
5
|
export function createReleaseContext(dependency, dependentNames, context, callback) {
|
|
4
6
|
const { releaseContextMap } = context,
|
|
5
7
|
dependencyName = dependency.getName(),
|
|
@@ -25,9 +27,9 @@ export function createReleaseContext(dependency, dependentNames, context, callba
|
|
|
25
27
|
|
|
26
28
|
releaseContextMap[releaseName] = releaseContext;
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
const { log } = context;
|
|
30
|
+
const { log } = context;
|
|
30
31
|
|
|
32
|
+
if (releaseContext === null) {
|
|
31
33
|
log.error(`The '${releaseName}' package could not be created.`);
|
|
32
34
|
|
|
33
35
|
callback(error);
|
|
@@ -35,6 +37,26 @@ export function createReleaseContext(dependency, dependentNames, context, callba
|
|
|
35
37
|
return;
|
|
36
38
|
}
|
|
37
39
|
|
|
40
|
+
const releaseMatchesDependency = checkReleaseMatchesDependency(dependency, dependentNames, releaseContext, context);
|
|
41
|
+
|
|
42
|
+
if (!releaseMatchesDependency) {
|
|
43
|
+
const version = releaseContext.getVersion(),
|
|
44
|
+
versionString = version.toString(),
|
|
45
|
+
lastDependentName = last(dependentNames),
|
|
46
|
+
dependentName = lastDependentName, ///
|
|
47
|
+
dependencyName = dependency.getName(),
|
|
48
|
+
shortenedVersion = dependency.getShortedVersion(),
|
|
49
|
+
shortenedVersionString = shortenedVersion.toString();
|
|
50
|
+
|
|
51
|
+
error = `Version mismatch: '${dependentName}' requires '${dependencyName}' to be version ${shortenedVersionString}.0 or higher but version ${versionString} has been supplied.`;
|
|
52
|
+
|
|
53
|
+
log.error(error);
|
|
54
|
+
|
|
55
|
+
callback(error);
|
|
56
|
+
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
38
60
|
createDependencyReleaseContexts(dependency, dependentNames, context, callback);
|
|
39
61
|
}, context);
|
|
40
62
|
}
|
|
@@ -107,6 +129,23 @@ function checkCyclicDependencyExists(dependency, dependentNames, context) {
|
|
|
107
129
|
return cyclicDependencyExists;
|
|
108
130
|
}
|
|
109
131
|
|
|
132
|
+
function checkReleaseMatchesDependency(dependency, dependentNames, releaseContext, context) {
|
|
133
|
+
let releaseMatchesDependency = true;
|
|
134
|
+
|
|
135
|
+
const entries = releaseContext.getEntries(),
|
|
136
|
+
shortenedVersion = dependency.getShortedVersion();
|
|
137
|
+
|
|
138
|
+
if (shortenedVersion !== null) {
|
|
139
|
+
const entriesMatchShortenedVersion = entries.matchShortenedVersion(shortenedVersion);
|
|
140
|
+
|
|
141
|
+
if (!entriesMatchShortenedVersion) {
|
|
142
|
+
releaseMatchesDependency = false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return releaseMatchesDependency;
|
|
147
|
+
}
|
|
148
|
+
|
|
110
149
|
function createDependencyReleaseContexts(dependency, dependentNames, context, callback) {
|
|
111
150
|
const { releaseContextMap } = context,
|
|
112
151
|
dependencyName = dependency.getName(),
|
package/src/verify/derivation.js
CHANGED
|
@@ -14,14 +14,11 @@ const statementNodeQuery = nodeQuery("/qualifiedStatement|unqualifiedStatement/s
|
|
|
14
14
|
unqualifiedStatementNodesQuery = nodesQuery("/subproof/unqualifiedStatement")
|
|
15
15
|
|
|
16
16
|
export default function verifyDerivation(derivationNode, proofContext) {
|
|
17
|
-
let derivationVerified
|
|
18
|
-
derived;
|
|
17
|
+
let derivationVerified;
|
|
19
18
|
|
|
20
19
|
proofContext.begin(derivationNode);
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
proofContext.setDerived(derived);
|
|
21
|
+
proofContext.setDerived();
|
|
25
22
|
|
|
26
23
|
const derivationChildNodes = derivationChildNodesQuery(derivationNode);
|
|
27
24
|
|
|
@@ -33,9 +30,7 @@ export default function verifyDerivation(derivationNode, proofContext) {
|
|
|
33
30
|
}
|
|
34
31
|
});
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
proofContext.setDerived(derived);
|
|
33
|
+
proofContext.setDerived();
|
|
39
34
|
|
|
40
35
|
derivationVerified ?
|
|
41
36
|
proofContext.complete(derivationNode) :
|
|
@@ -14,14 +14,11 @@ const metastatementNodeQuery = nodeQuery("/qualifiedMetastatement|unqualifiedMet
|
|
|
14
14
|
unqualifiedMetastatementNodesQuery = nodesQuery("/metaSubproof/unqualifiedMetastatement")
|
|
15
15
|
|
|
16
16
|
export default function verifyMetaDerivation(metaDerivationNode, metaproofContext) {
|
|
17
|
-
let metaDerivationVerified
|
|
18
|
-
derived;
|
|
17
|
+
let metaDerivationVerified;
|
|
19
18
|
|
|
20
19
|
metaproofContext.begin(metaDerivationNode);
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
metaproofContext.setDerived(derived);
|
|
21
|
+
metaproofContext.setDerived();
|
|
25
22
|
|
|
26
23
|
const metaDerivationChildNodes = metaDerivationChildNodesQuery(metaDerivationNode);
|
|
27
24
|
|
|
@@ -33,9 +30,7 @@ export default function verifyMetaDerivation(metaDerivationNode, metaproofContex
|
|
|
33
30
|
}
|
|
34
31
|
});
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
metaproofContext.setDerived(derived);
|
|
33
|
+
metaproofContext.resetDerived();
|
|
39
34
|
|
|
40
35
|
metaDerivationVerified ?
|
|
41
36
|
metaproofContext.complete(metaDerivationNode) :
|