occam-verify-cli 0.0.470 → 0.0.472
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/constants.js +4 -8
- package/lib/context/file.js +9 -9
- package/lib/context/metaproof.js +38 -32
- package/lib/context/proof.js +35 -29
- package/lib/equality.js +22 -0
- package/lib/metaSubstitution.js +12 -52
- package/lib/rule.js +15 -19
- package/lib/step/metaproof.js +114 -0
- package/lib/step/proof.js +68 -0
- package/lib/substitution.js +16 -56
- package/lib/utilities/array.js +2 -5
- package/lib/utilities/node.js +105 -0
- package/lib/verify/antecedent.js +4 -4
- package/lib/verify/derivation.js +16 -18
- package/lib/verify/equality.js +18 -5
- package/lib/verify/metaDerivation.js +16 -18
- package/lib/verify/metaproof.js +10 -51
- package/lib/verify/metastatement/qualified.js +1 -7
- package/lib/verify/metastatement/unqualified.js +2 -9
- package/lib/verify/premiseOrPremises.js +4 -4
- package/lib/verify/proof.js +11 -52
- package/lib/verify/statement/qualified.js +1 -7
- package/lib/verify/statement/unqualified.js +2 -9
- package/package.json +1 -1
- package/src/constants.js +1 -2
- package/src/context/file.js +6 -6
- package/src/context/metaproof.js +32 -31
- package/src/context/proof.js +30 -29
- package/src/equality.js +8 -0
- package/src/metaSubstitution.js +16 -87
- package/src/rule.js +19 -26
- package/src/step/metaproof.js +99 -0
- package/src/step/proof.js +30 -0
- package/src/substitution.js +19 -90
- package/src/utilities/array.js +1 -1
- package/src/utilities/node.js +149 -0
- package/src/verify/antecedent.js +3 -3
- package/src/verify/derivation.js +17 -18
- package/src/verify/equality.js +29 -11
- package/src/verify/metaDerivation.js +17 -18
- package/src/verify/metaproof.js +20 -91
- package/src/verify/metastatement/qualified.js +0 -9
- package/src/verify/metastatement/unqualified.js +1 -12
- package/src/verify/premiseOrPremises.js +3 -3
- package/src/verify/proof.js +21 -92
- package/src/verify/statement/qualified.js +0 -9
- package/src/verify/statement/unqualified.js +1 -13
- package/lib/assertion.js +0 -147
- package/lib/metaAssertion.js +0 -200
- package/lib/utilities/metastatement.js +0 -45
- package/lib/utilities/statement.js +0 -45
- package/src/assertion.js +0 -150
- package/src/metaAssertion.js +0 -245
- package/src/utilities/metastatement.js +0 -50
- package/src/utilities/statement.js +0 -50
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/array.js
CHANGED
|
@@ -6,7 +6,7 @@ import permutationsMatrix from "../permutationsMatrix";
|
|
|
6
6
|
|
|
7
7
|
import { MAXIMUM_INDEXES_LENGTH, MAXIMUM_PERMUTATION_LENGTH } from "../constants";
|
|
8
8
|
|
|
9
|
-
export const {
|
|
9
|
+
export const { first, second, third, last, push, prune, filter } = arrayUtilities;
|
|
10
10
|
|
|
11
11
|
export function someSubArray(array, subArrayLength, callback) {
|
|
12
12
|
let found = false;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
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
|
+
|
|
7
|
+
export function matchNode(nodeA, nodeB) {
|
|
8
|
+
let nodeMatches = false;
|
|
9
|
+
|
|
10
|
+
const nodeATerminalNode = nodeA.isTerminalNode(),
|
|
11
|
+
nodeBTerminalNode = nodeB.isTerminalNode();
|
|
12
|
+
|
|
13
|
+
if (nodeATerminalNode === nodeBTerminalNode) {
|
|
14
|
+
if (nodeATerminalNode) {
|
|
15
|
+
const terminalNodeA = nodeA, ///
|
|
16
|
+
terminalNodeB = nodeB, ///
|
|
17
|
+
terminalNodeMatches = matchTerminalNode(terminalNodeA, terminalNodeB);
|
|
18
|
+
|
|
19
|
+
nodeMatches = terminalNodeMatches; ///
|
|
20
|
+
} else {
|
|
21
|
+
const nonTerminalNodeA = nodeA, ///
|
|
22
|
+
nonTerminalNodeB = nodeB, ///
|
|
23
|
+
nonTerminalNodeMatches = matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
|
|
24
|
+
|
|
25
|
+
nodeMatches = nonTerminalNodeMatches; ///
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return nodeMatches;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function matchNodes(nodesA, nodesB) {
|
|
33
|
+
let nodesMatch = false;
|
|
34
|
+
|
|
35
|
+
const nodesALength = nodesA.length,
|
|
36
|
+
nodesBLength = nodesB.length;
|
|
37
|
+
|
|
38
|
+
if (nodesALength === nodesBLength) {
|
|
39
|
+
nodesMatch = nodesA.every((nodeA, index) => {
|
|
40
|
+
const nodeB = nodesB[index],
|
|
41
|
+
nodeMatches = matchNode(nodeA, nodeB);
|
|
42
|
+
|
|
43
|
+
if (nodeMatches) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return nodesMatch;
|
|
50
|
+
}
|
|
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
|
+
|
|
125
|
+
function matchTerminalNode(terminalNodeA, terminalNodeB) {
|
|
126
|
+
const matches = terminalNodeA.match(terminalNodeB),
|
|
127
|
+
terminalNodeMatches = matches; ///
|
|
128
|
+
|
|
129
|
+
return terminalNodeMatches;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB) {
|
|
133
|
+
let nonTerminalNodeMatches = false;
|
|
134
|
+
|
|
135
|
+
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
|
|
136
|
+
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(); ///
|
|
137
|
+
|
|
138
|
+
if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
|
|
139
|
+
const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
140
|
+
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
141
|
+
nodesA = nonTerminalNodeAChildNodes, ///
|
|
142
|
+
nodesB = nonTerminalNodeBChildNodes, ///
|
|
143
|
+
nodesMatch = matchNodes(nodesA, nodesB);
|
|
144
|
+
|
|
145
|
+
nonTerminalNodeMatches = nodesMatch; ///
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return nonTerminalNodeMatches;
|
|
149
|
+
}
|
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,19 +8,17 @@ 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
|
|
|
15
16
|
export default function verifyDerivation(derivationNode, proofContext) {
|
|
16
|
-
let derivationVerified
|
|
17
|
-
derived;
|
|
17
|
+
let derivationVerified;
|
|
18
18
|
|
|
19
19
|
proofContext.begin(derivationNode);
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
proofContext.setDerived(derived);
|
|
21
|
+
proofContext.setDerived();
|
|
24
22
|
|
|
25
23
|
const derivationChildNodes = derivationChildNodesQuery(derivationNode);
|
|
26
24
|
|
|
@@ -32,9 +30,7 @@ export default function verifyDerivation(derivationNode, proofContext) {
|
|
|
32
30
|
}
|
|
33
31
|
});
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
proofContext.setDerived(derived);
|
|
33
|
+
proofContext.setDerived();
|
|
38
34
|
|
|
39
35
|
derivationVerified ?
|
|
40
36
|
proofContext.complete(derivationNode) :
|
|
@@ -54,9 +50,9 @@ function verifyDerivationChild(derivationChildNode, proofContext) {
|
|
|
54
50
|
subproofVerified = verifySubproof(subproofNode, proofContext);
|
|
55
51
|
|
|
56
52
|
if (subproofVerified) {
|
|
57
|
-
const
|
|
53
|
+
const proofStep = ProofStep.fromSubproofNode(subproofNode);
|
|
58
54
|
|
|
59
|
-
proofContext.
|
|
55
|
+
proofContext.addProofStep(proofStep);
|
|
60
56
|
|
|
61
57
|
derivationChildVerified = true;
|
|
62
58
|
}
|
|
@@ -69,9 +65,10 @@ function verifyDerivationChild(derivationChildNode, proofContext) {
|
|
|
69
65
|
qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, proofContext);
|
|
70
66
|
|
|
71
67
|
if (qualifiedStatementVerified) {
|
|
72
|
-
const
|
|
68
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
69
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
73
70
|
|
|
74
|
-
proofContext.
|
|
71
|
+
proofContext.addProofStep(proofStep);
|
|
75
72
|
|
|
76
73
|
derivationChildVerified = qualifiedStatementVerified; ///
|
|
77
74
|
}
|
|
@@ -84,9 +81,10 @@ function verifyDerivationChild(derivationChildNode, proofContext) {
|
|
|
84
81
|
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, proofContext);
|
|
85
82
|
|
|
86
83
|
if (unqualifiedStatementVerified) {
|
|
87
|
-
const
|
|
84
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
85
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
88
86
|
|
|
89
|
-
proofContext.
|
|
87
|
+
proofContext.addProofStep(proofStep);
|
|
90
88
|
|
|
91
89
|
derivationChildVerified = true;
|
|
92
90
|
}
|
|
@@ -114,9 +112,10 @@ function verifySubproof(subproofNode, proofContext) {
|
|
|
114
112
|
|
|
115
113
|
if (unqualifiedStatementsVerified) {
|
|
116
114
|
unqualifiedStatementNodes.forEach((unqualifiedStatementNode) => {
|
|
117
|
-
const
|
|
115
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
116
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
118
117
|
|
|
119
|
-
proofContext.
|
|
118
|
+
proofContext.addProofStep(proofStep);
|
|
120
119
|
});
|
|
121
120
|
|
|
122
121
|
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,19 +8,17 @@ 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
|
|
|
15
16
|
export default function verifyMetaDerivation(metaDerivationNode, metaproofContext) {
|
|
16
|
-
let metaDerivationVerified
|
|
17
|
-
derived;
|
|
17
|
+
let metaDerivationVerified;
|
|
18
18
|
|
|
19
19
|
metaproofContext.begin(metaDerivationNode);
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
metaproofContext.setDerived(derived);
|
|
21
|
+
metaproofContext.setDerived();
|
|
24
22
|
|
|
25
23
|
const metaDerivationChildNodes = metaDerivationChildNodesQuery(metaDerivationNode);
|
|
26
24
|
|
|
@@ -32,9 +30,7 @@ export default function verifyMetaDerivation(metaDerivationNode, metaproofContex
|
|
|
32
30
|
}
|
|
33
31
|
});
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
metaproofContext.setDerived(derived);
|
|
33
|
+
metaproofContext.resetDerived();
|
|
38
34
|
|
|
39
35
|
metaDerivationVerified ?
|
|
40
36
|
metaproofContext.complete(metaDerivationNode) :
|
|
@@ -54,9 +50,9 @@ function verifyMetaDerivationChild(metaDerivationChildNode, metaproofContext) {
|
|
|
54
50
|
metaSubproofVerified = verifyMetaSubproof(metaSubproofNode, metaproofContext);
|
|
55
51
|
|
|
56
52
|
if (metaSubproofVerified) {
|
|
57
|
-
const
|
|
53
|
+
const metaproofStep = MetaproofStep.fromMetaSubproofNode(metaSubproofNode);
|
|
58
54
|
|
|
59
|
-
metaproofContext.
|
|
55
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
60
56
|
|
|
61
57
|
metaDerivationChildVerified = true;
|
|
62
58
|
}
|
|
@@ -69,9 +65,10 @@ function verifyMetaDerivationChild(metaDerivationChildNode, metaproofContext) {
|
|
|
69
65
|
qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, metaproofContext);
|
|
70
66
|
|
|
71
67
|
if (qualifiedMetastatementVerified) {
|
|
72
|
-
const
|
|
68
|
+
const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
69
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
73
70
|
|
|
74
|
-
metaproofContext.
|
|
71
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
75
72
|
|
|
76
73
|
metaDerivationChildVerified = qualifiedMetastatementVerified; ///
|
|
77
74
|
}
|
|
@@ -84,9 +81,10 @@ function verifyMetaDerivationChild(metaDerivationChildNode, metaproofContext) {
|
|
|
84
81
|
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, metaproofContext);
|
|
85
82
|
|
|
86
83
|
if (unqualifiedMetastatementVerified) {
|
|
87
|
-
const
|
|
84
|
+
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
85
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
88
86
|
|
|
89
|
-
metaproofContext.
|
|
87
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
90
88
|
|
|
91
89
|
metaDerivationChildVerified = true;
|
|
92
90
|
}
|
|
@@ -114,9 +112,10 @@ function verifyMetaSubproof(metaSubproofNode, metaproofContext) {
|
|
|
114
112
|
|
|
115
113
|
if (unqualifiedMetastatementsVerified) {
|
|
116
114
|
unqualifiedMetastatementNodes.forEach((unqualifiedMetastatementNode) => {
|
|
117
|
-
const
|
|
115
|
+
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
116
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
118
117
|
|
|
119
|
-
metaproofContext.
|
|
118
|
+
metaproofContext.addMetaproofStep(metaproofStep);
|
|
120
119
|
});
|
|
121
120
|
|
|
122
121
|
const metaDerivationNode = metaDerivationNodeQuery(metaSubproofNode),
|