occam-verify-cli 0.0.270 → 0.0.272
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/assertion.js +145 -0
- package/bin/axiom.js +8 -8
- package/bin/conclusion.js +67 -41
- package/bin/constants.js +11 -1
- package/bin/context/file.js +9 -3
- package/bin/context/metaproof.js +17 -8
- package/bin/metaAssertion.js +130 -28
- package/bin/metaSubstitution.js +45 -30
- package/bin/permutations.js +3 -0
- package/bin/permutationsMatrix.js +6 -0
- package/bin/premise.js +110 -48
- package/bin/rule.js +26 -21
- package/bin/ruleNames.js +4 -0
- package/bin/utilities/array.js +54 -71
- package/bin/utilities/metastatement.js +44 -0
- package/bin/utilities/permutations.js +148 -0
- package/bin/verify/{typeAssertion.js → assertion/type.js} +4 -4
- package/bin/verify/axiom/IndicativeConditional.js +5 -5
- package/bin/verify/conditinalInference.js +10 -12
- package/bin/verify/metaDerivation.js +5 -5
- package/bin/verify/metaSupposition.js +24 -0
- package/bin/verify/metaproof.js +89 -17
- package/bin/verify/metastatement/qualified.js +2 -4
- package/bin/verify/metastatement/unqualified.js +4 -4
- package/bin/verify/rule.js +28 -11
- package/bin/verify/statement.js +1 -1
- package/bin/verify/supposition.js +24 -0
- package/bin/verify/unconditionalInference.js +6 -18
- package/package.json +3 -3
- package/bin/antecedent.js +0 -19
- package/bin/verify/antecedent.js +0 -35
- package/bin/verify/metaAntecedent.js +0 -31
package/bin/assertion.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const { nodeQuery } = require("./utilities/query");
|
|
4
|
+
|
|
5
|
+
const statementNodeQuery = nodeQuery("/*/statement!");
|
|
6
|
+
|
|
7
|
+
class Assertion {
|
|
8
|
+
constructor(subproofNode, statementNode) {
|
|
9
|
+
this.subproofNode = subproofNode;
|
|
10
|
+
this.statementNode = statementNode;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
getNonTerminalNode() {
|
|
14
|
+
const nonTerminalNode = (this.statementNode !== null) ?
|
|
15
|
+
this.statementNode :
|
|
16
|
+
null;
|
|
17
|
+
|
|
18
|
+
return nonTerminalNode;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getSubproofNode() {
|
|
22
|
+
return this.subproofNode;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
getStatementNode() {
|
|
26
|
+
return this.statementNode;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
match(assertion) {
|
|
30
|
+
let matches = false;
|
|
31
|
+
|
|
32
|
+
const statementNode = assertion.getstatementNode();
|
|
33
|
+
|
|
34
|
+
if ((statementNode !== null) && (this.statementNode !== null)) {
|
|
35
|
+
const nonTerminalNode = this.statementNode, ///
|
|
36
|
+
assertionNonTerminalNode = statementNode, ///
|
|
37
|
+
assertionNonTerminalNodeMatches = matchAssertionNonTerminalNode(assertionNonTerminalNode, nonTerminalNode);
|
|
38
|
+
|
|
39
|
+
matches = assertionNonTerminalNodeMatches; ///
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return matches;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static fromSubproofNode(subproofNode) {
|
|
46
|
+
const statementNode = null,
|
|
47
|
+
assertion = new Assertion(subproofNode, statementNode);
|
|
48
|
+
|
|
49
|
+
return assertion;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static fromQualifiedStatementNode(qualifiedStatementNode) {
|
|
53
|
+
const subproofNode = null,
|
|
54
|
+
statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
55
|
+
assertion = new Assertion(subproofNode, statementNode);
|
|
56
|
+
|
|
57
|
+
return assertion;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
static fromUnqualifiedStatementNode(unqualifiedStatementNode) {
|
|
61
|
+
const subproofNode = null,
|
|
62
|
+
statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
63
|
+
assertion = new Assertion(subproofNode, statementNode);
|
|
64
|
+
|
|
65
|
+
return assertion;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
module.exports = Assertion;
|
|
70
|
+
|
|
71
|
+
function matchAssertionNode(assertionNode, node) {
|
|
72
|
+
let assertionNodeMatches = false;
|
|
73
|
+
|
|
74
|
+
const nodeTerminalNode = node.isTerminalNode(),
|
|
75
|
+
ruleNodeTerminalNode = assertionNode.isTerminalNode();
|
|
76
|
+
|
|
77
|
+
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
78
|
+
if (nodeTerminalNode) {
|
|
79
|
+
const terminalNode = node, ///
|
|
80
|
+
assertionTerminalNode = assertionNode, ///
|
|
81
|
+
assertionTerminalNodeMatches = matchAssertionTerminalNode(assertionTerminalNode, terminalNode);
|
|
82
|
+
|
|
83
|
+
assertionNodeMatches = assertionTerminalNodeMatches; ///
|
|
84
|
+
} else {
|
|
85
|
+
const nonTerminalNode = node, ///
|
|
86
|
+
assertionNonTerminalNode = assertionNode, ///
|
|
87
|
+
assertionNonTerminalNodeMatches = matchAssertionNonTerminalNode(assertionNonTerminalNode, nonTerminalNode);
|
|
88
|
+
|
|
89
|
+
assertionNodeMatches = assertionNonTerminalNodeMatches; ///
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return assertionNodeMatches;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function matchAssertionChildNodes(assertionChildNodes, childNodes) {
|
|
97
|
+
let assertionChildNodesMatches = false;
|
|
98
|
+
|
|
99
|
+
const childNodesLength = childNodes.length,
|
|
100
|
+
assertionChildNodesLength = assertionChildNodes.length;
|
|
101
|
+
|
|
102
|
+
if (childNodesLength === assertionChildNodesLength) {
|
|
103
|
+
assertionChildNodesMatches = childNodes.every((childNode, index) => {
|
|
104
|
+
const assertionChildNode = assertionChildNodes[index],
|
|
105
|
+
assertionNode = assertionChildNode, ///
|
|
106
|
+
node = childNode, ///
|
|
107
|
+
assertionNodeMatches = matchAssertionNode(assertionNode, node);
|
|
108
|
+
|
|
109
|
+
if (assertionNodeMatches) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return assertionChildNodesMatches;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function matchAssertionTerminalNode(assertionTerminalNode, terminalNode) {
|
|
119
|
+
let assertionTerminalNodeMatches = false;
|
|
120
|
+
|
|
121
|
+
const matches = assertionTerminalNode.match(terminalNode);
|
|
122
|
+
|
|
123
|
+
if (matches) {
|
|
124
|
+
assertionTerminalNodeMatches = true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return assertionTerminalNodeMatches;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function matchAssertionNonTerminalNode(assertionNonTerminalNode, nonTerminalNode) {
|
|
131
|
+
let assertionNonTerminalNodeMatches = false;
|
|
132
|
+
|
|
133
|
+
const ruleName = nonTerminalNode.getRuleName(),
|
|
134
|
+
assertionRuleName = assertionNonTerminalNode.getRuleName(); ///
|
|
135
|
+
|
|
136
|
+
if (ruleName === assertionRuleName) {
|
|
137
|
+
const childNodes = nonTerminalNode.getChildNodes(),
|
|
138
|
+
assertionChildNodes = assertionNonTerminalNode.getChildNodes(),
|
|
139
|
+
assertionChildNodesMatches = matchAssertionChildNodes(assertionChildNodes, childNodes);
|
|
140
|
+
|
|
141
|
+
assertionNonTerminalNodeMatches = assertionChildNodesMatches; ///
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return assertionNonTerminalNodeMatches;
|
|
145
|
+
}
|
package/bin/axiom.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
const { labelsAsString } = require("./utilities/string");
|
|
4
4
|
|
|
5
5
|
class Axiom {
|
|
6
|
-
constructor(labels,
|
|
6
|
+
constructor(labels, supposition, consequent, statementNode) {
|
|
7
7
|
this.labels = labels;
|
|
8
|
-
this.
|
|
8
|
+
this.supposition = supposition;
|
|
9
9
|
this.consequent = consequent;
|
|
10
10
|
this.statementNode = statementNode;
|
|
11
11
|
}
|
|
@@ -14,8 +14,8 @@ class Axiom {
|
|
|
14
14
|
return this.labels;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
return this.
|
|
17
|
+
getSupposition() {
|
|
18
|
+
return this.supposition;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
getConsequent() {
|
|
@@ -33,16 +33,16 @@ class Axiom {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
static fromStatementNodeAndLabels(statementNode, labels) {
|
|
36
|
-
const
|
|
36
|
+
const supposition = null,
|
|
37
37
|
consequent = null,
|
|
38
|
-
axiom = new Axiom(labels,
|
|
38
|
+
axiom = new Axiom(labels, supposition, consequent, statementNode);
|
|
39
39
|
|
|
40
40
|
return axiom;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
static
|
|
43
|
+
static fromSuppositionConsequentAndLabels(supposition, consequent, labels) {
|
|
44
44
|
const statementNode = null,
|
|
45
|
-
axiom = new Axiom(labels,
|
|
45
|
+
axiom = new Axiom(labels, supposition, consequent, statementNode);
|
|
46
46
|
|
|
47
47
|
return axiom;
|
|
48
48
|
}
|
package/bin/conclusion.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
const {
|
|
4
|
-
{ metavariableNameFromMetavariableNode } = require("./utilities/query")
|
|
3
|
+
const { first } = require("./utilities/array"),
|
|
4
|
+
{ metavariableNameFromMetavariableNode } = require("./utilities/query"),
|
|
5
|
+
{ METAVARIABLE_RULE_NAME, METASTATEMENT_RULE_NAME } = require("./ruleNames");
|
|
5
6
|
|
|
6
7
|
class Conclusion {
|
|
7
8
|
constructor(metastatementNode) {
|
|
@@ -12,13 +13,13 @@ class Conclusion {
|
|
|
12
13
|
return this.metastatementNode;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
matchMetastatementNode(metastatementNode, metaSubstitutions) {
|
|
16
17
|
const nonTerminalNode = metastatementNode, ///
|
|
17
18
|
conclusionNonTerminalNode = this.metastatementNode, ///
|
|
18
19
|
conclusionNonTerminalNodeMatches = matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions),
|
|
19
|
-
|
|
20
|
+
metastatementNodeMatches = conclusionNonTerminalNodeMatches; ///
|
|
20
21
|
|
|
21
|
-
return
|
|
22
|
+
return metastatementNodeMatches;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
static fromMetastatementNode(metastatementNode) {
|
|
@@ -55,29 +56,27 @@ function matchConclusionNode(conclusionNode, node, metaSubstitutions) {
|
|
|
55
56
|
return conclusionNodeMatches;
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
function
|
|
59
|
-
let
|
|
59
|
+
function matchConclusionNodes(conclusionNodes, nodes, metaSubstitutions) {
|
|
60
|
+
let conclusionNodesMatches = false;
|
|
60
61
|
|
|
61
|
-
const
|
|
62
|
-
|
|
62
|
+
const nodesLength = nodes.length,
|
|
63
|
+
conclusionNodesLength = conclusionNodes.length;
|
|
63
64
|
|
|
64
|
-
if (
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
conclusionNode = conclusionChildNode, ///
|
|
68
|
-
node = childNode, ///
|
|
65
|
+
if (nodesLength === conclusionNodesLength) {
|
|
66
|
+
conclusionNodesMatches = nodes.every((node, index) => {
|
|
67
|
+
const conclusionNode = conclusionNodes[index],
|
|
69
68
|
conclusionNodeMatches = matchConclusionNode(conclusionNode, node, metaSubstitutions);
|
|
70
69
|
|
|
71
70
|
if (conclusionNodeMatches) {
|
|
72
71
|
return true;
|
|
73
72
|
}
|
|
74
|
-
})
|
|
73
|
+
});
|
|
75
74
|
}
|
|
76
75
|
|
|
77
|
-
return
|
|
76
|
+
return conclusionNodesMatches;
|
|
78
77
|
}
|
|
79
78
|
|
|
80
|
-
function matchConclusionMetavariable(conclusionMetavariableNode,
|
|
79
|
+
function matchConclusionMetavariable(conclusionMetavariableNode, nodes, metaSubstitutions) {
|
|
81
80
|
let conclusionMetavariableMatches = true;
|
|
82
81
|
|
|
83
82
|
const conclusionMetavariableName = metavariableNameFromMetavariableNode(conclusionMetavariableNode),
|
|
@@ -90,22 +89,17 @@ function matchConclusionMetavariable(conclusionMetavariableNode, nonTerminalNode
|
|
|
90
89
|
}) || null;
|
|
91
90
|
|
|
92
91
|
if (metaSubstitution !== null) {
|
|
93
|
-
const
|
|
92
|
+
const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
|
|
94
93
|
|
|
95
|
-
conclusionMetavariableMatches =
|
|
94
|
+
conclusionMetavariableMatches = metaSubstitutionNodesMatch; ///
|
|
96
95
|
}
|
|
97
96
|
|
|
98
97
|
return conclusionMetavariableMatches;
|
|
99
98
|
}
|
|
100
99
|
|
|
101
100
|
function matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaSubstitutions) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const matches = conclusionTerminalNode.match(terminalNode);
|
|
105
|
-
|
|
106
|
-
if (matches) {
|
|
107
|
-
conclusionTerminalNodeMatches = true;
|
|
108
|
-
}
|
|
101
|
+
const matches = conclusionTerminalNode.match(terminalNode),
|
|
102
|
+
conclusionTerminalNodeMatches = matches; ///
|
|
109
103
|
|
|
110
104
|
return conclusionTerminalNodeMatches;
|
|
111
105
|
}
|
|
@@ -113,30 +107,62 @@ function matchConclusionTerminalNode(conclusionTerminalNode, terminalNode, metaS
|
|
|
113
107
|
function matchConclusionNonTerminalNode(conclusionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
|
|
114
108
|
let conclusionNonTerminalNodeMatches = false;
|
|
115
109
|
|
|
116
|
-
const
|
|
110
|
+
const ruleName = nonTerminalNode.getRuleName(),
|
|
111
|
+
conclusionRuleName = conclusionNonTerminalNode.getRuleName(); ///
|
|
117
112
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
113
|
+
if (ruleName === conclusionRuleName) {
|
|
114
|
+
const childNodes = nonTerminalNode.getChildNodes(),
|
|
115
|
+
conclusionChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
116
|
+
nodes = childNodes, ///
|
|
117
|
+
conclusionNodes = conclusionChildNodes, ///
|
|
118
|
+
conclusionChildNodesMatches = matchConclusionNodes(conclusionNodes, nodes, metaSubstitutions);
|
|
122
119
|
|
|
123
|
-
|
|
120
|
+
conclusionNonTerminalNodeMatches = conclusionChildNodesMatches; ///
|
|
124
121
|
|
|
125
|
-
|
|
122
|
+
if (!conclusionNonTerminalNodeMatches) {
|
|
123
|
+
const ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME);
|
|
124
|
+
|
|
125
|
+
if (ruleNameMetastatementRuleName) {
|
|
126
|
+
const metastatementNode = nonTerminalNode, ///
|
|
127
|
+
conclusionMetastatementNode = conclusionNonTerminalNode, ///
|
|
128
|
+
conclusionMetastatementNodeMatches = matchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions);
|
|
129
|
+
|
|
130
|
+
conclusionNonTerminalNodeMatches = conclusionMetastatementNodeMatches; ///
|
|
131
|
+
}
|
|
126
132
|
}
|
|
133
|
+
}
|
|
127
134
|
|
|
128
|
-
|
|
129
|
-
|
|
135
|
+
return conclusionNonTerminalNodeMatches;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function matchConclusionMetastatementNode(conclusionMetastatementNode, metastatementNode, metaSubstitutions) {
|
|
139
|
+
let conclusionMetastatementNodeMatches = false;
|
|
140
|
+
|
|
141
|
+
const conclusionNonTerminalNode = conclusionMetastatementNode, ///
|
|
142
|
+
conclusionChildNodes = conclusionNonTerminalNode.getChildNodes(),
|
|
143
|
+
conclusionChildNodesLength = conclusionChildNodes.length;
|
|
144
|
+
|
|
145
|
+
if (conclusionChildNodesLength === 1) {
|
|
146
|
+
const firstConclusionChildNode = first(conclusionChildNodes),
|
|
147
|
+
conclusionChildNode = firstConclusionChildNode, ///
|
|
148
|
+
conclusionChildNodeNonTerminalNode = conclusionChildNode.isNonTerminalNode();
|
|
130
149
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
150
|
+
if (conclusionChildNodeNonTerminalNode) {
|
|
151
|
+
const conclusionNonTerminalChildNode = conclusionChildNode, ///
|
|
152
|
+
conclusionNonTerminalChildNodeRuleName = conclusionNonTerminalChildNode.getRuleName(),
|
|
153
|
+
conclusionNonTerminalChildNodeRuleNameMetavariableRuleName = (conclusionNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
|
|
135
154
|
|
|
136
|
-
|
|
155
|
+
if (conclusionNonTerminalChildNodeRuleNameMetavariableRuleName) {
|
|
156
|
+
const conclusionMetavariableNode = conclusionNonTerminalChildNode, ///
|
|
157
|
+
nonTerminalNode = metastatementNode, ///
|
|
158
|
+
childNodes = nonTerminalNode.getChildNodes(),
|
|
159
|
+
nodes = childNodes, ///
|
|
160
|
+
conclusionMetaVariableMatches = matchConclusionMetavariable(conclusionMetavariableNode, nodes, metaSubstitutions);
|
|
161
|
+
|
|
162
|
+
conclusionMetastatementNodeMatches = conclusionMetaVariableMatches; ///
|
|
137
163
|
}
|
|
138
164
|
}
|
|
139
165
|
}
|
|
140
166
|
|
|
141
|
-
return
|
|
167
|
+
return conclusionMetastatementNodeMatches;
|
|
142
168
|
}
|
package/bin/constants.js
CHANGED
|
@@ -2,8 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
const COMMA = ',';
|
|
4
4
|
const EMPTY_STRING = "";
|
|
5
|
+
const LEFT_BRACKET = "(";
|
|
6
|
+
const RIGHT_BRACKET = ")";
|
|
7
|
+
const MAXIMUM_INDEXES_LENGTH = 10;
|
|
8
|
+
const MAXIMUM_PERMUTATION_LENGTH = 5;
|
|
9
|
+
const BRACKETED_METASTATEMENT_CHILD_NODES_LENGTH = 3;
|
|
5
10
|
|
|
6
11
|
module.exports = {
|
|
7
12
|
COMMA,
|
|
8
|
-
EMPTY_STRING
|
|
13
|
+
EMPTY_STRING,
|
|
14
|
+
LEFT_BRACKET,
|
|
15
|
+
RIGHT_BRACKET,
|
|
16
|
+
MAXIMUM_INDEXES_LENGTH,
|
|
17
|
+
MAXIMUM_PERMUTATION_LENGTH,
|
|
18
|
+
BRACKETED_METASTATEMENT_CHILD_NODES_LENGTH
|
|
9
19
|
};
|
package/bin/context/file.js
CHANGED
|
@@ -116,6 +116,12 @@ class FileContext {
|
|
|
116
116
|
return this.packageContext;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
+
getMetaAssertions() {
|
|
120
|
+
const metaAssertions = [];
|
|
121
|
+
|
|
122
|
+
return metaAssertions;
|
|
123
|
+
}
|
|
124
|
+
|
|
119
125
|
findTypeByTypeName(typeName) {
|
|
120
126
|
const types = this.getTypes(),
|
|
121
127
|
type = types.find((type) => {
|
|
@@ -186,10 +192,10 @@ class FileContext {
|
|
|
186
192
|
return labelPresent;
|
|
187
193
|
}
|
|
188
194
|
|
|
189
|
-
|
|
190
|
-
const
|
|
195
|
+
matchMetaAssertion(metaAssertion) {
|
|
196
|
+
const metaAssertionMatches = false;
|
|
191
197
|
|
|
192
|
-
return
|
|
198
|
+
return metaAssertionMatches;
|
|
193
199
|
}
|
|
194
200
|
|
|
195
201
|
isTypePresentByTypeName(typeName) {
|
package/bin/context/metaproof.js
CHANGED
|
@@ -16,7 +16,14 @@ class MetaproofContext {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
getMetaAssertions() {
|
|
19
|
-
|
|
19
|
+
let metaAssertions = this.context.getMetaAssertions();
|
|
20
|
+
|
|
21
|
+
metaAssertions = [
|
|
22
|
+
...metaAssertions,
|
|
23
|
+
...this.metaAssertions
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
return metaAssertions;
|
|
20
27
|
}
|
|
21
28
|
|
|
22
29
|
getRules() { return this.context.getRules(); }
|
|
@@ -39,11 +46,13 @@ class MetaproofContext {
|
|
|
39
46
|
|
|
40
47
|
isTypePresentByTypeName(typeName) { return this.context.isTypePresentByTypeName(typeName); }
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
matchMetaAssertion(metaAssertion) {
|
|
50
|
+
let metaAssertionMatches;
|
|
51
|
+
|
|
52
|
+
const metaAssertionB = metaAssertion; ///
|
|
44
53
|
|
|
45
|
-
|
|
46
|
-
const
|
|
54
|
+
metaAssertionMatches = this.metaAssertions.some((metaAssertion) => {
|
|
55
|
+
const metaAssertionA = metaAssertion, ///
|
|
47
56
|
matches = metaAssertionA.match(metaAssertionB);
|
|
48
57
|
|
|
49
58
|
if (matches) {
|
|
@@ -51,11 +60,11 @@ class MetaproofContext {
|
|
|
51
60
|
}
|
|
52
61
|
});
|
|
53
62
|
|
|
54
|
-
if (!
|
|
55
|
-
|
|
63
|
+
if (!metaAssertionMatches) {
|
|
64
|
+
metaAssertionMatches = this.context.matchMetaAssertion(metaAssertion);
|
|
56
65
|
}
|
|
57
66
|
|
|
58
|
-
return
|
|
67
|
+
return metaAssertionMatches;
|
|
59
68
|
}
|
|
60
69
|
|
|
61
70
|
isVariablePresentByVariableName(variableName) { return this.context.isVariablePresentByVariableName(variableName); }
|
package/bin/metaAssertion.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
const {
|
|
3
|
+
const { first, second } = require("./utilities/array"),
|
|
4
|
+
{ nodeQuery, nodesQuery } = require("./utilities/query"),
|
|
5
|
+
{ matchBracketedMetastatementChildNode } = require("./utilities/metastatement");
|
|
4
6
|
|
|
5
|
-
const metastatementNodeQuery = nodeQuery("/*/metastatement!")
|
|
7
|
+
const metastatementNodeQuery = nodeQuery("/*/metastatement!"),
|
|
8
|
+
metastatementNodesQuery = nodesQuery("/metaSubproofAssertion/metastatement"),
|
|
9
|
+
metaSubproofAssertionNodeQuery = nodeQuery("/metastatement/metaSubproofAssertion"),
|
|
10
|
+
qualifiedOrUnqualifiedMetastatementMetastatementNodesQuery = nodesQuery("/metaSubproof/qualifiedMetastatement|unqualifiedMetastatement/metastatement!");
|
|
6
11
|
|
|
7
12
|
class MetaAssertion {
|
|
8
13
|
constructor(metaSubproofNode, metastatementNode) {
|
|
@@ -10,14 +15,6 @@ class MetaAssertion {
|
|
|
10
15
|
this.metastatementNode = metastatementNode;
|
|
11
16
|
}
|
|
12
17
|
|
|
13
|
-
getNonTerminalNode() {
|
|
14
|
-
const nonTerminalNode = (this.metastatementNode !== null) ?
|
|
15
|
-
this.metastatementNode :
|
|
16
|
-
null;
|
|
17
|
-
|
|
18
|
-
return nonTerminalNode;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
18
|
getMetaSubproofNode() {
|
|
22
19
|
return this.metaSubproofNode;
|
|
23
20
|
}
|
|
@@ -31,17 +28,65 @@ class MetaAssertion {
|
|
|
31
28
|
|
|
32
29
|
const metastatementNode = metaAssertion.getMetastatementNode();
|
|
33
30
|
|
|
34
|
-
if (
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
31
|
+
if (metastatementNode !== null) {
|
|
32
|
+
const metaSubproofAssertionNode = metaSubproofAssertionNodeQuery(metastatementNode);
|
|
33
|
+
|
|
34
|
+
if (metaSubproofAssertionNode === null) {
|
|
35
|
+
const metastatementNodeMatches = this.matchMetastatementNode(metastatementNode);
|
|
36
|
+
|
|
37
|
+
matches = metastatementNodeMatches; ///
|
|
38
|
+
} else {
|
|
39
|
+
const metaSubproofAssertionNodeMatches = this.matchMetaSubproofAssertionNode(metaSubproofAssertionNode);
|
|
38
40
|
|
|
39
|
-
|
|
41
|
+
matches = metaSubproofAssertionNodeMatches; ///
|
|
42
|
+
}
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
return matches;
|
|
43
46
|
}
|
|
44
47
|
|
|
48
|
+
matchMetastatementNode(metastatementNode) {
|
|
49
|
+
let metastatementNodeMatches = false;
|
|
50
|
+
|
|
51
|
+
if (this.metastatementNode !== null) {
|
|
52
|
+
const topmostMetastatementNode = metastatementNode, ///
|
|
53
|
+
topmostMetaAssertionMetastatementNode = this.metastatementNode, ///
|
|
54
|
+
topmostMetaAssertionMetastatementNodeMatches = matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode);
|
|
55
|
+
|
|
56
|
+
metastatementNodeMatches = topmostMetaAssertionMetastatementNodeMatches; ///
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return metastatementNodeMatches;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
matchMetaSubproofAssertionNode(metaSubproofAssertionNode) {
|
|
63
|
+
let metaSubproofAssertionNodeMatches = false;
|
|
64
|
+
|
|
65
|
+
if (this.metaSubproofNode !== null) {
|
|
66
|
+
const metaSubproofAssertionMetastatementNodes = metastatementNodesQuery(metaSubproofAssertionNode),
|
|
67
|
+
firstMetaSubproofAssertionMetastatementNode = first(metaSubproofAssertionMetastatementNodes),
|
|
68
|
+
qualifiedOrUnqualifiedMetastatementMetastatementNodes = qualifiedOrUnqualifiedMetastatementMetastatementNodesQuery(this.metaSubproofNode),
|
|
69
|
+
firstQualifiedOrUnqualifiedMetastatementMetastatementNode = first(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
|
|
70
|
+
|
|
71
|
+
const topmostMetastatementNode = firstMetaSubproofAssertionMetastatementNode, ///
|
|
72
|
+
topmostMetaAssertionMetastatementNode = firstQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
|
|
73
|
+
topmostMetaAssertionMetastatementNodeMatches = matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode);
|
|
74
|
+
|
|
75
|
+
if (topmostMetaAssertionMetastatementNodeMatches) {
|
|
76
|
+
const secondMetaSubproofAssertionMetastatementNode = second(metaSubproofAssertionMetastatementNodes),
|
|
77
|
+
secondQualifiedOrUnqualifiedMetastatementMetastatementNode = second(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
|
|
78
|
+
|
|
79
|
+
const topmostMetastatementNode = secondMetaSubproofAssertionMetastatementNode, ///
|
|
80
|
+
topmostMetaAssertionMetastatementNode = secondQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
|
|
81
|
+
topmostMetaAssertionMetastatementNodeMatches = matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode);
|
|
82
|
+
|
|
83
|
+
metaSubproofAssertionNodeMatches = topmostMetaAssertionMetastatementNodeMatches; ///
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return metaSubproofAssertionNodeMatches;
|
|
88
|
+
}
|
|
89
|
+
|
|
45
90
|
static fromMetaSubproofNode(metaSubproofNode) {
|
|
46
91
|
const metastatementNode = null,
|
|
47
92
|
metaAssertion = new MetaAssertion(metaSubproofNode, metastatementNode);
|
|
@@ -49,6 +94,13 @@ class MetaAssertion {
|
|
|
49
94
|
return metaAssertion;
|
|
50
95
|
}
|
|
51
96
|
|
|
97
|
+
static fromMetastatementNode(metastatementNode) {
|
|
98
|
+
const metaSubproofNode = null,
|
|
99
|
+
metaAssertion = new MetaAssertion(metaSubproofNode, metastatementNode);
|
|
100
|
+
|
|
101
|
+
return metaAssertion;
|
|
102
|
+
}
|
|
103
|
+
|
|
52
104
|
static fromQualifiedMetastatementNode(qualifiedMetastatementNode) {
|
|
53
105
|
const metaSubproofNode = null,
|
|
54
106
|
metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
@@ -93,26 +145,24 @@ function matchMetaAssertionNode(metaAssertionNode, node) {
|
|
|
93
145
|
return metaAssertionNodeMatches;
|
|
94
146
|
}
|
|
95
147
|
|
|
96
|
-
function
|
|
97
|
-
let
|
|
148
|
+
function matchMetaAssertionNodes(metaAssertionNodes, nodes) {
|
|
149
|
+
let metaAssertionNodesMatches = false;
|
|
98
150
|
|
|
99
|
-
const
|
|
100
|
-
|
|
151
|
+
const nodesLength = nodes.length,
|
|
152
|
+
metaAssertionNodesLength = metaAssertionNodes.length;
|
|
101
153
|
|
|
102
|
-
if (
|
|
103
|
-
|
|
104
|
-
const
|
|
105
|
-
metaAssertionNode = metaAssertionChildNode, ///
|
|
106
|
-
node = childNode, ///
|
|
154
|
+
if (nodesLength === metaAssertionNodesLength) {
|
|
155
|
+
metaAssertionNodesMatches = nodes.every((node, index) => {
|
|
156
|
+
const metaAssertionNode = metaAssertionNodes[index],
|
|
107
157
|
metaAssertionNodeMatches = matchMetaAssertionNode(metaAssertionNode, node);
|
|
108
158
|
|
|
109
159
|
if (metaAssertionNodeMatches) {
|
|
110
160
|
return true;
|
|
111
161
|
}
|
|
112
|
-
})
|
|
162
|
+
});
|
|
113
163
|
}
|
|
114
164
|
|
|
115
|
-
return
|
|
165
|
+
return metaAssertionNodesMatches;
|
|
116
166
|
}
|
|
117
167
|
|
|
118
168
|
function matchMetaAssertionTerminalNode(metaAssertionTerminalNode, terminalNode) {
|
|
@@ -135,11 +185,63 @@ function matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerm
|
|
|
135
185
|
|
|
136
186
|
if (ruleName === metaAssertionRuleName) {
|
|
137
187
|
const childNodes = nonTerminalNode.getChildNodes(),
|
|
188
|
+
nodes = childNodes, ///
|
|
138
189
|
metaAssertionChildNodes = metaAssertionNonTerminalNode.getChildNodes(),
|
|
139
|
-
|
|
190
|
+
metaAssertionNodes = metaAssertionChildNodes, ///
|
|
191
|
+
metaAssertionNodesMatches = matchMetaAssertionNodes(metaAssertionNodes, nodes);
|
|
140
192
|
|
|
141
|
-
metaAssertionNonTerminalNodeMatches =
|
|
193
|
+
metaAssertionNonTerminalNodeMatches = metaAssertionNodesMatches; ///
|
|
142
194
|
}
|
|
143
195
|
|
|
144
196
|
return metaAssertionNonTerminalNodeMatches;
|
|
145
197
|
}
|
|
198
|
+
|
|
199
|
+
function matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode) {
|
|
200
|
+
const nonTerminalNode = metastatementNode, ///
|
|
201
|
+
metaAssertionNonTerminalNode = metaAssertionMetastatementNode, ///
|
|
202
|
+
metaAssertionNonTerminalNodeMatches = matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode),
|
|
203
|
+
metaAssertionMetastatementNodeNatches = metaAssertionNonTerminalNodeMatches; ///
|
|
204
|
+
|
|
205
|
+
return metaAssertionMetastatementNodeNatches;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode) {
|
|
209
|
+
let metaAssertionMetastatementNodeMatches;
|
|
210
|
+
|
|
211
|
+
const metastatementNode = topmostMetastatementNode, ///
|
|
212
|
+
metaAssertionMetastatementNode = topmostMetaAssertionMetastatementNode; ///
|
|
213
|
+
|
|
214
|
+
metaAssertionMetastatementNodeMatches = matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode);
|
|
215
|
+
|
|
216
|
+
if (!metaAssertionMetastatementNodeMatches) {
|
|
217
|
+
const nonTerminalNode = metastatementNode, ///
|
|
218
|
+
childNodes = nonTerminalNode, ///
|
|
219
|
+
bracketedMetastatementChildNodeMatches = matchBracketedMetastatementChildNode(childNodes, (bracketedMetastatementChildNode) => {
|
|
220
|
+
const metastatementNode = bracketedMetastatementChildNode, ///
|
|
221
|
+
metaAssertionMetastatementNodeMatches = matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode),
|
|
222
|
+
bracketedMetastatementChildNodeMatches = metaAssertionMetastatementNodeMatches;
|
|
223
|
+
|
|
224
|
+
return bracketedMetastatementChildNodeMatches;
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
metaAssertionMetastatementNodeMatches = bracketedMetastatementChildNodeMatches; ///
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (!metaAssertionMetastatementNodeMatches) {
|
|
231
|
+
const metaAssertionNonTerminalNode = metaAssertionMetastatementNode, ///
|
|
232
|
+
metaAssertionChildNodes = metaAssertionNonTerminalNode.getChildNodes(),
|
|
233
|
+
bracketedMetaAssertionMetastatementChildNodeMatches = matchBracketedMetastatementChildNode(metaAssertionChildNodes, (bracketedMetaAssertionMetastatementChildNode) => {
|
|
234
|
+
const metaAssertionMetastatementNode = bracketedMetaAssertionMetastatementChildNode, ///
|
|
235
|
+
metaAssertionMetastatementNodeMatches = matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode),
|
|
236
|
+
bracketedMetaAssertionMetastatementChildNodeMatches = metaAssertionMetastatementNodeMatches;
|
|
237
|
+
|
|
238
|
+
return bracketedMetaAssertionMetastatementChildNodeMatches;
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
metaAssertionMetastatementNodeMatches = bracketedMetaAssertionMetastatementChildNodeMatches; ///
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const topmostMetaAssertionMetastatementNodeMatches = metaAssertionMetastatementNodeMatches; ///
|
|
245
|
+
|
|
246
|
+
return topmostMetaAssertionMetastatementNodeMatches;
|
|
247
|
+
}
|