occam-verify-cli 0.0.469 → 0.0.471
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/lib/context/file.js +9 -9
- package/lib/context/metaproof.js +30 -31
- package/lib/context/proof.js +30 -24
- package/lib/metaSubstitution.js +4 -4
- package/lib/rule.js +15 -19
- package/lib/step/metaproof.js +114 -0
- package/lib/step/proof.js +68 -0
- package/lib/utilities/array.js +2 -5
- package/lib/utilities/metaAssertion.js +117 -0
- package/lib/utilities/node.js +52 -0
- package/lib/verify/antecedent.js +4 -4
- package/lib/verify/derivation.js +13 -13
- package/lib/verify/equality.js +18 -5
- package/lib/verify/metaDerivation.js +13 -13
- package/lib/verify/metaproof.js +13 -51
- package/lib/verify/metastatement/unqualified.js +2 -3
- package/lib/verify/premiseOrPremises.js +4 -4
- package/lib/verify/proof.js +14 -62
- package/lib/verify/statement/unqualified.js +2 -3
- package/package.json +1 -1
- package/src/context/file.js +6 -6
- package/src/context/metaproof.js +28 -31
- package/src/context/proof.js +29 -26
- package/src/metaSubstitution.js +1 -1
- package/src/rule.js +19 -26
- package/src/step/metaproof.js +100 -0
- package/src/step/proof.js +30 -0
- package/src/utilities/array.js +1 -1
- package/src/utilities/metaAssertion.js +176 -0
- package/src/utilities/node.js +72 -0
- package/src/verify/antecedent.js +3 -3
- package/src/verify/derivation.js +14 -10
- package/src/verify/equality.js +29 -11
- package/src/verify/metaDerivation.js +14 -10
- package/src/verify/metaproof.js +26 -91
- package/src/verify/metastatement/unqualified.js +1 -3
- package/src/verify/premiseOrPremises.js +3 -3
- package/src/verify/proof.js +23 -97
- package/src/verify/statement/unqualified.js +1 -4
- package/lib/assertion.js +0 -147
- package/lib/metaAssertion.js +0 -200
- package/lib/utilities/metastatement.js +0 -45
- package/src/assertion.js +0 -150
- package/src/metaAssertion.js +0 -245
- package/src/utilities/metastatement.js +0 -50
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { first, second, third } from "../utilities/array";
|
|
4
|
+
import { METASTATEMENT_RULE_NAME } from "../ruleNames";
|
|
5
|
+
import { LEFT_BRACKET, RIGHT_BRACKET, BRACKETED_METASTATEMENT_CHILD_NODES_LENGTH } from "../constants";
|
|
6
|
+
|
|
7
|
+
export function matchBracketedMetastatementChildNode(childNodes, callback) {
|
|
8
|
+
let bracketedMetastatementChildNodeMatches = false;
|
|
9
|
+
|
|
10
|
+
const bracketedMetastatementChildNode = bracketedMetastatementChildNodeFromChildNodes(childNodes);
|
|
11
|
+
|
|
12
|
+
if (bracketedMetastatementChildNode !== null) {
|
|
13
|
+
bracketedMetastatementChildNodeMatches = callback(bracketedMetastatementChildNode);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return bracketedMetastatementChildNodeMatches;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function matchTopmostMetaAssertionMetastatementNode(topmostMetaAssertionMetastatementNode, topmostMetastatementNode) {
|
|
20
|
+
let metaAssertionMetastatementNodeMatches;
|
|
21
|
+
|
|
22
|
+
const metastatementNode = topmostMetastatementNode, ///
|
|
23
|
+
metaAssertionMetastatementNode = topmostMetaAssertionMetastatementNode; ///
|
|
24
|
+
|
|
25
|
+
metaAssertionMetastatementNodeMatches = matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode);
|
|
26
|
+
|
|
27
|
+
if (!metaAssertionMetastatementNodeMatches) {
|
|
28
|
+
const nonTerminalNode = metastatementNode, ///
|
|
29
|
+
childNodes = nonTerminalNode, ///
|
|
30
|
+
bracketedMetastatementChildNodeMatches = matchBracketedMetastatementChildNode(childNodes, (bracketedMetastatementChildNode) => {
|
|
31
|
+
const metastatementNode = bracketedMetastatementChildNode, ///
|
|
32
|
+
metaAssertionMetastatementNodeMatches = matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode),
|
|
33
|
+
bracketedMetastatementChildNodeMatches = metaAssertionMetastatementNodeMatches;
|
|
34
|
+
|
|
35
|
+
return bracketedMetastatementChildNodeMatches;
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
metaAssertionMetastatementNodeMatches = bracketedMetastatementChildNodeMatches; ///
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!metaAssertionMetastatementNodeMatches) {
|
|
42
|
+
const metaAssertionNonTerminalNode = metaAssertionMetastatementNode, ///
|
|
43
|
+
metaAssertionChildNodes = metaAssertionNonTerminalNode.getChildNodes(),
|
|
44
|
+
bracketedMetaAssertionMetastatementChildNodeMatches = matchBracketedMetastatementChildNode(metaAssertionChildNodes, (bracketedMetaAssertionMetastatementChildNode) => {
|
|
45
|
+
const metaAssertionMetastatementNode = bracketedMetaAssertionMetastatementChildNode, ///
|
|
46
|
+
metaAssertionMetastatementNodeMatches = matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode),
|
|
47
|
+
bracketedMetaAssertionMetastatementChildNodeMatches = metaAssertionMetastatementNodeMatches;
|
|
48
|
+
|
|
49
|
+
return bracketedMetaAssertionMetastatementChildNodeMatches;
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
metaAssertionMetastatementNodeMatches = bracketedMetaAssertionMetastatementChildNodeMatches; ///
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const topmostMetaAssertionMetastatementNodeMatches = metaAssertionMetastatementNodeMatches; ///
|
|
56
|
+
|
|
57
|
+
return topmostMetaAssertionMetastatementNodeMatches;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function bracketedMetastatementChildNodeFromChildNodes(childNodes) {
|
|
61
|
+
let bracketedMetastatementChildNode = null;
|
|
62
|
+
|
|
63
|
+
const childNodesLength = childNodes.length;
|
|
64
|
+
|
|
65
|
+
if (childNodesLength === BRACKETED_METASTATEMENT_CHILD_NODES_LENGTH) {
|
|
66
|
+
const firstChildNode = first(childNodes),
|
|
67
|
+
thirdChildNode = third(childNodes),
|
|
68
|
+
secondChildNode = second(childNodes),
|
|
69
|
+
firstChildNodeTerminalNode = firstChildNode.isTerminalNode(),
|
|
70
|
+
thirdChildNodeTerminalNode = thirdChildNode.isTerminalNode(),
|
|
71
|
+
secondChildNodeNonTerminalNode = secondChildNode.isNonTerminalNode();
|
|
72
|
+
|
|
73
|
+
if (firstChildNodeTerminalNode && secondChildNodeNonTerminalNode && thirdChildNodeTerminalNode) {
|
|
74
|
+
const nonTerminalNode = secondChildNode, ///
|
|
75
|
+
firstTerminalNode = firstChildNode, ///
|
|
76
|
+
secondTerminalNode = thirdChildNode, ///
|
|
77
|
+
nonTerminalNodeRuleName = nonTerminalNode.getRuleName(),
|
|
78
|
+
firstTerminalNodeContent = firstTerminalNode.getContent(),
|
|
79
|
+
secondTerminalNodeContent = secondTerminalNode.getContent(),
|
|
80
|
+
firstTerminalNodeContentLeftBracket = (firstTerminalNodeContent === LEFT_BRACKET),
|
|
81
|
+
secondTerminalNodeContentRightBracket = (secondTerminalNodeContent === RIGHT_BRACKET),
|
|
82
|
+
nonTerminalNodeRuleNameMetastatementRuleName = (nonTerminalNodeRuleName === METASTATEMENT_RULE_NAME);
|
|
83
|
+
|
|
84
|
+
if (firstTerminalNodeContentLeftBracket && nonTerminalNodeRuleNameMetastatementRuleName && secondTerminalNodeContentRightBracket) {
|
|
85
|
+
bracketedMetastatementChildNode = nonTerminalNode; ///
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return bracketedMetastatementChildNode;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function matchMetaAssertionNode(metaAssertionNode, node) {
|
|
94
|
+
let metaAssertionNodeMatches = false;
|
|
95
|
+
|
|
96
|
+
const nodeTerminalNode = node.isTerminalNode(),
|
|
97
|
+
ruleNodeTerminalNode = metaAssertionNode.isTerminalNode();
|
|
98
|
+
|
|
99
|
+
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
100
|
+
if (nodeTerminalNode) {
|
|
101
|
+
const terminalNode = node, ///
|
|
102
|
+
metaAssertionTerminalNode = metaAssertionNode, ///
|
|
103
|
+
metaAssertionTerminalNodeMatches = matchMetaAssertionTerminalNode(metaAssertionTerminalNode, terminalNode);
|
|
104
|
+
|
|
105
|
+
metaAssertionNodeMatches = metaAssertionTerminalNodeMatches; ///
|
|
106
|
+
} else {
|
|
107
|
+
const nonTerminalNode = node, ///
|
|
108
|
+
metaAssertionNonTerminalNode = metaAssertionNode, ///
|
|
109
|
+
metaAssertionNonTerminalNodeMatches = matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode);
|
|
110
|
+
|
|
111
|
+
metaAssertionNodeMatches = metaAssertionNonTerminalNodeMatches; ///
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return metaAssertionNodeMatches;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function matchMetaAssertionNodes(metaAssertionNodes, nodes) {
|
|
119
|
+
let metaAssertionNodesMatches = false;
|
|
120
|
+
|
|
121
|
+
const nodesLength = nodes.length,
|
|
122
|
+
metaAssertionNodesLength = metaAssertionNodes.length;
|
|
123
|
+
|
|
124
|
+
if (nodesLength === metaAssertionNodesLength) {
|
|
125
|
+
metaAssertionNodesMatches = nodes.every((node, index) => {
|
|
126
|
+
const metaAssertionNode = metaAssertionNodes[index],
|
|
127
|
+
metaAssertionNodeMatches = matchMetaAssertionNode(metaAssertionNode, node);
|
|
128
|
+
|
|
129
|
+
if (metaAssertionNodeMatches) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return metaAssertionNodesMatches;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function matchMetaAssertionTerminalNode(metaAssertionTerminalNode, terminalNode) {
|
|
139
|
+
let metaAssertionTerminalNodeMatches = false;
|
|
140
|
+
|
|
141
|
+
const matches = metaAssertionTerminalNode.match(terminalNode);
|
|
142
|
+
|
|
143
|
+
if (matches) {
|
|
144
|
+
metaAssertionTerminalNodeMatches = true;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return metaAssertionTerminalNodeMatches;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode) {
|
|
151
|
+
let metaAssertionNonTerminalNodeMatches = false;
|
|
152
|
+
|
|
153
|
+
const ruleName = nonTerminalNode.getRuleName(),
|
|
154
|
+
metaAssertionRuleName = metaAssertionNonTerminalNode.getRuleName(); ///
|
|
155
|
+
|
|
156
|
+
if (ruleName === metaAssertionRuleName) {
|
|
157
|
+
const childNodes = nonTerminalNode.getChildNodes(),
|
|
158
|
+
nodes = childNodes, ///
|
|
159
|
+
metaAssertionChildNodes = metaAssertionNonTerminalNode.getChildNodes(),
|
|
160
|
+
metaAssertionNodes = metaAssertionChildNodes, ///
|
|
161
|
+
metaAssertionNodesMatches = matchMetaAssertionNodes(metaAssertionNodes, nodes);
|
|
162
|
+
|
|
163
|
+
metaAssertionNonTerminalNodeMatches = metaAssertionNodesMatches; ///
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return metaAssertionNonTerminalNodeMatches;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function matchMetaAssertionMetastatementNode(metaAssertionMetastatementNode, metastatementNode) {
|
|
170
|
+
const nonTerminalNode = metastatementNode, ///
|
|
171
|
+
metaAssertionNonTerminalNode = metaAssertionMetastatementNode, ///
|
|
172
|
+
metaAssertionNonTerminalNodeMatches = matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode),
|
|
173
|
+
metaAssertionMetastatementNodeNatches = metaAssertionNonTerminalNodeMatches; ///
|
|
174
|
+
|
|
175
|
+
return metaAssertionMetastatementNodeNatches;
|
|
176
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export function matchNode(nodeA, nodeB) {
|
|
4
|
+
let nodeMatches = false;
|
|
5
|
+
|
|
6
|
+
const nodeATerminalNode = nodeA.isTerminalNode(),
|
|
7
|
+
nodeBTerminalNode = nodeB.isTerminalNode();
|
|
8
|
+
|
|
9
|
+
if (nodeATerminalNode === nodeBTerminalNode) {
|
|
10
|
+
if (nodeATerminalNode) {
|
|
11
|
+
const terminalNodeA = nodeA, ///
|
|
12
|
+
terminalNodeB = nodeB, ///
|
|
13
|
+
terminalNodeMatches = matchTerminalNode(terminalNodeA, terminalNodeB);
|
|
14
|
+
|
|
15
|
+
nodeMatches = terminalNodeMatches; ///
|
|
16
|
+
} else {
|
|
17
|
+
const nonTerminalNodeA = nodeA, ///
|
|
18
|
+
nonTerminalNodeB = nodeB, ///
|
|
19
|
+
nonTerminalNodeMatches = matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
|
|
20
|
+
|
|
21
|
+
nodeMatches = nonTerminalNodeMatches; ///
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return nodeMatches;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function matchNodes(nodesA, nodesB) {
|
|
29
|
+
let nodesMatch = false;
|
|
30
|
+
|
|
31
|
+
const nodesALength = nodesA.length,
|
|
32
|
+
nodesBLength = nodesB.length;
|
|
33
|
+
|
|
34
|
+
if (nodesALength === nodesBLength) {
|
|
35
|
+
nodesMatch = nodesA.every((nodeA, index) => {
|
|
36
|
+
const nodeB = nodesB[index],
|
|
37
|
+
nodeMatches = matchNode(nodeA, nodeB);
|
|
38
|
+
|
|
39
|
+
if (nodeMatches) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return nodesMatch;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function matchTerminalNode(terminalNodeA, terminalNodeB) {
|
|
49
|
+
const matches = terminalNodeA.match(terminalNodeB),
|
|
50
|
+
terminalNodeMatches = matches; ///
|
|
51
|
+
|
|
52
|
+
return terminalNodeMatches;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB) {
|
|
56
|
+
let nonTerminalNodeMatches = false;
|
|
57
|
+
|
|
58
|
+
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
|
|
59
|
+
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(); ///
|
|
60
|
+
|
|
61
|
+
if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
|
|
62
|
+
const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
63
|
+
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
64
|
+
nodesA = nonTerminalNodeAChildNodes, ///
|
|
65
|
+
nodesB = nonTerminalNodeBChildNodes, ///
|
|
66
|
+
nodesMatch = matchNodes(nodesA, nodesB);
|
|
67
|
+
|
|
68
|
+
nonTerminalNodeMatches = nodesMatch; ///
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return nonTerminalNodeMatches;
|
|
72
|
+
}
|
package/src/verify/antecedent.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import ProofStep from "../step/proof";
|
|
4
4
|
import Antecedent from "../antecedent";
|
|
5
5
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
6
6
|
|
|
@@ -19,12 +19,12 @@ export default function verifyAntecedent(antecedentNode, antecedents, proofConte
|
|
|
19
19
|
|
|
20
20
|
if (unqualifiedStatementVerified) {
|
|
21
21
|
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
22
|
-
|
|
22
|
+
proofStep = ProofStep.fromStatementNode(statementNode),
|
|
23
23
|
antecedent = Antecedent.fromStatementNode(statementNode);
|
|
24
24
|
|
|
25
25
|
antecedents.push(antecedent);
|
|
26
26
|
|
|
27
|
-
proofContext.
|
|
27
|
+
proofContext.addProofStep(proofStep);
|
|
28
28
|
|
|
29
29
|
antecedentOrAntecedentsVerified = true;
|
|
30
30
|
}
|
package/src/verify/derivation.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import ProofStep from "../step/proof";
|
|
4
4
|
import ProofContext from "../context/proof";
|
|
5
5
|
import verifyQualifiedStatement from "../verify/statement/qualified";
|
|
6
6
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
@@ -8,7 +8,8 @@ import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
|
8
8
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
9
9
|
import { SUBPROOF_RULE_NAME, QUALIFIED_STATEMENT_RULE_NAME, UNQUALIFIED_STATEMENT_RULE_NAME } from "../ruleNames";
|
|
10
10
|
|
|
11
|
-
const
|
|
11
|
+
const statementNodeQuery = nodeQuery("/qualifiedStatement|unqualifiedStatement/statement!"),
|
|
12
|
+
derivationNodeQuery = nodeQuery("/subproof/derivation|abridgedDerivation!"), ///
|
|
12
13
|
derivationChildNodesQuery = nodesQuery("/derivation|abridgedDerivation/*"),
|
|
13
14
|
unqualifiedStatementNodesQuery = nodesQuery("/subproof/unqualifiedStatement")
|
|
14
15
|
|
|
@@ -54,9 +55,9 @@ function verifyDerivationChild(derivationChildNode, proofContext) {
|
|
|
54
55
|
subproofVerified = verifySubproof(subproofNode, proofContext);
|
|
55
56
|
|
|
56
57
|
if (subproofVerified) {
|
|
57
|
-
const
|
|
58
|
+
const proofStep = ProofStep.fromSubproofNode(subproofNode);
|
|
58
59
|
|
|
59
|
-
proofContext.
|
|
60
|
+
proofContext.addProofStep(proofStep);
|
|
60
61
|
|
|
61
62
|
derivationChildVerified = true;
|
|
62
63
|
}
|
|
@@ -69,9 +70,10 @@ function verifyDerivationChild(derivationChildNode, proofContext) {
|
|
|
69
70
|
qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, proofContext);
|
|
70
71
|
|
|
71
72
|
if (qualifiedStatementVerified) {
|
|
72
|
-
const
|
|
73
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
74
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
73
75
|
|
|
74
|
-
proofContext.
|
|
76
|
+
proofContext.addProofStep(proofStep);
|
|
75
77
|
|
|
76
78
|
derivationChildVerified = qualifiedStatementVerified; ///
|
|
77
79
|
}
|
|
@@ -84,9 +86,10 @@ function verifyDerivationChild(derivationChildNode, proofContext) {
|
|
|
84
86
|
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, proofContext);
|
|
85
87
|
|
|
86
88
|
if (unqualifiedStatementVerified) {
|
|
87
|
-
const
|
|
89
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
90
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
88
91
|
|
|
89
|
-
proofContext.
|
|
92
|
+
proofContext.addProofStep(proofStep);
|
|
90
93
|
|
|
91
94
|
derivationChildVerified = true;
|
|
92
95
|
}
|
|
@@ -114,9 +117,10 @@ function verifySubproof(subproofNode, proofContext) {
|
|
|
114
117
|
|
|
115
118
|
if (unqualifiedStatementsVerified) {
|
|
116
119
|
unqualifiedStatementNodes.forEach((unqualifiedStatementNode) => {
|
|
117
|
-
const
|
|
120
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
121
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
118
122
|
|
|
119
|
-
proofContext.
|
|
123
|
+
proofContext.addProofStep(proofStep);
|
|
120
124
|
});
|
|
121
125
|
|
|
122
126
|
const derivationNode = derivationNodeQuery(subproofNode),
|
package/src/verify/equality.js
CHANGED
|
@@ -18,19 +18,14 @@ export default function verifyEquality(equalityNode, proofContext) {
|
|
|
18
18
|
|
|
19
19
|
proofContext.debug(`Verifying the '${equalityString}' equality...`);
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
context = proofContext,
|
|
23
|
-
firstTermNode = firstTermNodeQuery(equalityNode),
|
|
24
|
-
secondTermNode = secondTermNodeQuery(equalityNode),
|
|
25
|
-
firstTermVerified = verifyTerm(firstTermNode, types, context),
|
|
26
|
-
secondTermVerified = verifyTerm(secondTermNode, types, context);
|
|
21
|
+
const equalityTypesVerified = verifyEqualityTypes(equalityNode, proofContext);
|
|
27
22
|
|
|
28
|
-
if (
|
|
29
|
-
const
|
|
30
|
-
secondType = second(types),
|
|
31
|
-
firstTypeEqualToSubTypeOfOrSuperTypeOfSecondType = firstType.isEqualToSubTypeOfOrSuperTypeOf(secondType);
|
|
23
|
+
if (equalityTypesVerified) {
|
|
24
|
+
const derived = proofContext.isDerived();
|
|
32
25
|
|
|
33
|
-
if (
|
|
26
|
+
if (derived) {
|
|
27
|
+
debugger
|
|
28
|
+
} else {
|
|
34
29
|
equalityVerified = true;
|
|
35
30
|
}
|
|
36
31
|
}
|
|
@@ -45,3 +40,26 @@ export default function verifyEquality(equalityNode, proofContext) {
|
|
|
45
40
|
|
|
46
41
|
return equalityVerified;
|
|
47
42
|
}
|
|
43
|
+
|
|
44
|
+
function verifyEqualityTypes(equalityNode, proofContext) {
|
|
45
|
+
let equalityTypesVerified = false;
|
|
46
|
+
|
|
47
|
+
const types = [],
|
|
48
|
+
context = proofContext, ///
|
|
49
|
+
firstTermNode = firstTermNodeQuery(equalityNode),
|
|
50
|
+
secondTermNode = secondTermNodeQuery(equalityNode),
|
|
51
|
+
firstTermVerified = verifyTerm(firstTermNode, types, context),
|
|
52
|
+
secondTermVerified = verifyTerm(secondTermNode, types, context);
|
|
53
|
+
|
|
54
|
+
if (firstTermVerified && secondTermVerified) {
|
|
55
|
+
const firstType = first(types),
|
|
56
|
+
secondType = second(types),
|
|
57
|
+
firstTypeEqualToSubTypeOfOrSuperTypeOfSecondType = firstType.isEqualToSubTypeOfOrSuperTypeOf(secondType);
|
|
58
|
+
|
|
59
|
+
if (firstTypeEqualToSubTypeOfOrSuperTypeOfSecondType) {
|
|
60
|
+
equalityTypesVerified = true;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return equalityTypesVerified;
|
|
65
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import MetaproofStep from "../step/metaproof";
|
|
4
4
|
import MetaproofContext from "../context/metaproof";
|
|
5
5
|
import verifyQualifiedMetastatement from "../verify/metastatement/qualified";
|
|
6
6
|
import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
|
|
@@ -8,7 +8,8 @@ import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified"
|
|
|
8
8
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
9
9
|
import { META_SUBPROOF_RULE_NAME, QUALIFIED_METASTATEMENT_RULE_NAME, UNQUALIFIED_METASTATEMENT_RULE_NAME } from "../ruleNames";
|
|
10
10
|
|
|
11
|
-
const
|
|
11
|
+
const metastatementNodeQuery = nodeQuery("/qualifiedMetastatement|unqualifiedMetastatement/metastatement!"),
|
|
12
|
+
metaDerivationNodeQuery = nodeQuery("/metaSubproof/metaDerivation|abridgedMetaDerivation!"), ///
|
|
12
13
|
metaDerivationChildNodesQuery = nodesQuery("/metaDerivation|abridgedMetaDerivation/*"),
|
|
13
14
|
unqualifiedMetastatementNodesQuery = nodesQuery("/metaSubproof/unqualifiedMetastatement")
|
|
14
15
|
|
|
@@ -54,9 +55,9 @@ function verifyMetaDerivationChild(metaDerivationChildNode, metaproofContext) {
|
|
|
54
55
|
metaSubproofVerified = verifyMetaSubproof(metaSubproofNode, metaproofContext);
|
|
55
56
|
|
|
56
57
|
if (metaSubproofVerified) {
|
|
57
|
-
const
|
|
58
|
+
const metaproofStep = MetaproofStep.fromMetaSubproofNode(metaSubproofNode);
|
|
58
59
|
|
|
59
|
-
metaproofContext.
|
|
60
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
60
61
|
|
|
61
62
|
metaDerivationChildVerified = true;
|
|
62
63
|
}
|
|
@@ -69,9 +70,10 @@ function verifyMetaDerivationChild(metaDerivationChildNode, metaproofContext) {
|
|
|
69
70
|
qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, metaproofContext);
|
|
70
71
|
|
|
71
72
|
if (qualifiedMetastatementVerified) {
|
|
72
|
-
const
|
|
73
|
+
const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
74
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
73
75
|
|
|
74
|
-
metaproofContext.
|
|
76
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
75
77
|
|
|
76
78
|
metaDerivationChildVerified = qualifiedMetastatementVerified; ///
|
|
77
79
|
}
|
|
@@ -84,9 +86,10 @@ function verifyMetaDerivationChild(metaDerivationChildNode, metaproofContext) {
|
|
|
84
86
|
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, metaproofContext);
|
|
85
87
|
|
|
86
88
|
if (unqualifiedMetastatementVerified) {
|
|
87
|
-
const
|
|
89
|
+
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
90
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
88
91
|
|
|
89
|
-
metaproofContext.
|
|
92
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
90
93
|
|
|
91
94
|
metaDerivationChildVerified = true;
|
|
92
95
|
}
|
|
@@ -114,9 +117,10 @@ function verifyMetaSubproof(metaSubproofNode, metaproofContext) {
|
|
|
114
117
|
|
|
115
118
|
if (unqualifiedMetastatementsVerified) {
|
|
116
119
|
unqualifiedMetastatementNodes.forEach((unqualifiedMetastatementNode) => {
|
|
117
|
-
const
|
|
120
|
+
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
121
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
118
122
|
|
|
119
|
-
metaproofContext.
|
|
123
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
120
124
|
});
|
|
121
125
|
|
|
122
126
|
const metaDerivationNode = metaDerivationNodeQuery(metaSubproofNode),
|
package/src/verify/metaproof.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import MetaproofStep from "../step/metaproof";
|
|
4
4
|
import verifyMetaDerivation from "../verify/metaDerivation";
|
|
5
5
|
import verifyQualifiedMetastatement from "./metastatement/qualified";
|
|
6
6
|
|
|
7
|
+
import { matchNode } from "../utilities/node";
|
|
7
8
|
import { nodeQuery } from "../utilities/query";
|
|
8
9
|
|
|
9
|
-
const
|
|
10
|
+
const metastatementNodeQuery = nodeQuery("/qualifiedMetastatement/metastatement!"),
|
|
11
|
+
metaDerivationNodeQuery = nodeQuery("/metaproof/metaDerivation!"),
|
|
10
12
|
qualifiedMetastatementNodeQuery = nodeQuery("/metaproof/qualifiedMetastatement!");
|
|
11
13
|
|
|
12
14
|
export default function verifyMetaproof(metaproofNode, conclusion, metaproofContext) {
|
|
@@ -25,23 +27,36 @@ export default function verifyMetaproof(metaproofNode, conclusion, metaproofCont
|
|
|
25
27
|
}
|
|
26
28
|
|
|
27
29
|
if (qualifiedMetastatementNode !== null) {
|
|
30
|
+
let derived;
|
|
31
|
+
|
|
32
|
+
derived = true;
|
|
33
|
+
|
|
34
|
+
metaproofContext.setDerived(derived);
|
|
35
|
+
|
|
28
36
|
qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, metaproofContext);
|
|
29
37
|
|
|
38
|
+
derived = false;
|
|
39
|
+
|
|
40
|
+
metaproofContext.setDerived(derived);
|
|
41
|
+
|
|
30
42
|
if (qualifiedMetastatementVerified) {
|
|
31
|
-
const
|
|
43
|
+
const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
44
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
32
45
|
|
|
33
|
-
metaproofContext.
|
|
46
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
34
47
|
}
|
|
35
48
|
}
|
|
36
49
|
|
|
37
50
|
if (metaDerivationVerified || qualifiedMetastatementVerified) {
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
metastatementNode =
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
const lastMetaproofStep = metaproofContext.getLastMetaproofStep(),
|
|
52
|
+
metaproofStep = lastMetaproofStep, ///
|
|
53
|
+
metastatementNode = metaproofStep.getMetastatementNode(),
|
|
54
|
+
conclusionMetastatementNode = conclusion.getMetastatementNode(),
|
|
55
|
+
nodeA = metastatementNode, ///
|
|
56
|
+
nodeB = conclusionMetastatementNode, ///
|
|
57
|
+
nodeMatches = matchNode(nodeA, nodeB);
|
|
58
|
+
|
|
59
|
+
metaproofVerified = nodeMatches; ///
|
|
45
60
|
}
|
|
46
61
|
|
|
47
62
|
metaproofVerified ?
|
|
@@ -50,83 +65,3 @@ export default function verifyMetaproof(metaproofNode, conclusion, metaproofCont
|
|
|
50
65
|
|
|
51
66
|
return metaproofVerified;
|
|
52
67
|
}
|
|
53
|
-
|
|
54
|
-
function matchMetaProofMetastatementNode(metaAssertionMetastatementNode, metastatementNode) {
|
|
55
|
-
const metaAssertionNonTerminalNode = metaAssertionMetastatementNode, ///
|
|
56
|
-
nonTerminalNode = metastatementNode, ///
|
|
57
|
-
metaAssertionNonTerminalNodeMatches = matchMetaProofNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode),
|
|
58
|
-
metaAssertionMetastatementNodeMatches = metaAssertionNonTerminalNodeMatches; ///
|
|
59
|
-
|
|
60
|
-
return metaAssertionMetastatementNodeMatches;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function matchMetaProofNode(metaAssertionNode, node) {
|
|
64
|
-
let metaAssertionNodeMatches = false;
|
|
65
|
-
|
|
66
|
-
const nodeTerminalNode = node.isTerminalNode(),
|
|
67
|
-
ruleNodeTerminalNode = metaAssertionNode.isTerminalNode();
|
|
68
|
-
|
|
69
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
70
|
-
if (nodeTerminalNode) {
|
|
71
|
-
const terminalNode = node, ///
|
|
72
|
-
metaAssertionTerminalNode = metaAssertionNode, ///
|
|
73
|
-
metaAssertionTerminalNodeMatches = matchMetaProofTerminalNode(metaAssertionTerminalNode, terminalNode);
|
|
74
|
-
|
|
75
|
-
metaAssertionNodeMatches = metaAssertionTerminalNodeMatches; ///
|
|
76
|
-
} else {
|
|
77
|
-
const nonTerminalNode = node, ///
|
|
78
|
-
metaAssertionNonTerminalNode = metaAssertionNode, ///
|
|
79
|
-
metaAssertionNonTerminalNodeMatches = matchMetaProofNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode);
|
|
80
|
-
|
|
81
|
-
metaAssertionNodeMatches = metaAssertionNonTerminalNodeMatches; ///
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return metaAssertionNodeMatches;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function matchMetaProofNodes(metaAssertionNodes, nodes) {
|
|
89
|
-
let metaAssertionNodesMatches = false;
|
|
90
|
-
|
|
91
|
-
const nodesLength = nodes.length,
|
|
92
|
-
metaAssertionNodesLength = metaAssertionNodes.length;
|
|
93
|
-
|
|
94
|
-
if (nodesLength === metaAssertionNodesLength) {
|
|
95
|
-
metaAssertionNodesMatches = nodes.every((node, index) => {
|
|
96
|
-
const metaAssertionNode = metaAssertionNodes[index],
|
|
97
|
-
metaAssertionNodeMatches = matchMetaProofNode(metaAssertionNode, node);
|
|
98
|
-
|
|
99
|
-
if (metaAssertionNodeMatches) {
|
|
100
|
-
return true;
|
|
101
|
-
}
|
|
102
|
-
})
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return metaAssertionNodesMatches;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function matchMetaProofTerminalNode(metaAssertionTerminalNode, terminalNode) {
|
|
109
|
-
const matches = metaAssertionTerminalNode.match(terminalNode),
|
|
110
|
-
metaAssertionTerminalNodeMatches = matches; ///
|
|
111
|
-
|
|
112
|
-
return metaAssertionTerminalNodeMatches;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
function matchMetaProofNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode) {
|
|
116
|
-
let metaAssertionNonTerminalNodeMatches = false;
|
|
117
|
-
|
|
118
|
-
const ruleName = nonTerminalNode.getRuleName(),
|
|
119
|
-
metaAssertionRuleName = metaAssertionNonTerminalNode.getRuleName(); ///
|
|
120
|
-
|
|
121
|
-
if (ruleName === metaAssertionRuleName) {
|
|
122
|
-
const childNodes = nonTerminalNode.getChildNodes(),
|
|
123
|
-
metaAssertionChildNodes = metaAssertionNonTerminalNode.getChildNodes(),
|
|
124
|
-
nodes = childNodes, ///
|
|
125
|
-
metaAssertionNodes = metaAssertionChildNodes, ///
|
|
126
|
-
metaAssertionNodesMatches = matchMetaProofNodes(metaAssertionNodes, nodes);
|
|
127
|
-
|
|
128
|
-
metaAssertionNonTerminalNodeMatches = metaAssertionNodesMatches; ///
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return metaAssertionNonTerminalNodeMatches;
|
|
132
|
-
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import MetaAssertion from "../../metaAssertion";
|
|
4
3
|
import verifyMetastatement from "../../verify/metastatement";
|
|
5
4
|
|
|
6
5
|
import { nodeQuery } from "../../utilities/query";
|
|
@@ -26,8 +25,7 @@ export default function verifyUnqualifiedMetastatement(unqualifiedMetastatementN
|
|
|
26
25
|
const derived = metaproofContext.isDerived();
|
|
27
26
|
|
|
28
27
|
if (derived) {
|
|
29
|
-
const
|
|
30
|
-
metaAssertionMatches = metaproofContext.matchMetaAssertion(metaAssertion);
|
|
28
|
+
const metaAssertionMatches = metaproofContext.matchMetastatement(metastatementNode);
|
|
31
29
|
|
|
32
30
|
unqualifiedMetastatementVerified = metaAssertionMatches; ///
|
|
33
31
|
} else {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Premise from "../premise";
|
|
4
|
-
import
|
|
4
|
+
import MetaproofStep from "../step/metaproof";
|
|
5
5
|
import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
@@ -21,12 +21,12 @@ export default function verifyPremiseOrPremises(premiseOrPremisesNode, premises,
|
|
|
21
21
|
|
|
22
22
|
if (unqualifiedMetastatementVerified) {
|
|
23
23
|
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
24
|
-
|
|
24
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode),
|
|
25
25
|
premise = Premise.fromMetastatementNode(metastatementNode);
|
|
26
26
|
|
|
27
27
|
premises.push(premise);
|
|
28
28
|
|
|
29
|
-
metaproofContext.
|
|
29
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
30
30
|
|
|
31
31
|
return true;
|
|
32
32
|
}
|