occam-verify-cli 0.0.268 → 0.0.270
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/context/file.js +6 -10
- package/bin/context/metaproof.js +16 -24
- package/bin/metaAssertion.js +145 -0
- package/bin/rule.js +18 -15
- package/bin/verify/conditinalInference.js +5 -0
- package/bin/verify/metaAntecedent.js +10 -1
- package/bin/verify/metaDerivation.js +32 -13
- package/bin/verify/metaproof.js +1 -3
- package/bin/verify/metastatement/qualified.js +6 -6
- package/bin/verify/metastatement/unqualified.js +9 -8
- package/bin/verify/premiseOrPremises.js +4 -0
- package/bin/verify/rule.js +0 -5
- package/bin/verify/unconditionalInference.js +23 -7
- package/package.json +3 -3
package/bin/context/file.js
CHANGED
|
@@ -186,6 +186,12 @@ class FileContext {
|
|
|
186
186
|
return labelPresent;
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
+
isMetaAssertionPresent(metaAssertion) {
|
|
190
|
+
const metaAssertionPresent = false;
|
|
191
|
+
|
|
192
|
+
return metaAssertionPresent;
|
|
193
|
+
}
|
|
194
|
+
|
|
189
195
|
isTypePresentByTypeName(typeName) {
|
|
190
196
|
const type = this.findTypeByTypeName(typeName),
|
|
191
197
|
typePresent = (type !== null);
|
|
@@ -193,12 +199,6 @@ class FileContext {
|
|
|
193
199
|
return typePresent;
|
|
194
200
|
}
|
|
195
201
|
|
|
196
|
-
isMetastatementNodePresent(metaStatementNode) {
|
|
197
|
-
const metastatementNodePresent = false;
|
|
198
|
-
|
|
199
|
-
return metastatementNodePresent;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
202
|
isVariablePresentByVariableName(variableName) {
|
|
203
203
|
const variable = this.findVariableByVariableName(variableName),
|
|
204
204
|
variablePresent = (variable !== null);
|
|
@@ -230,10 +230,6 @@ class FileContext {
|
|
|
230
230
|
this.constructors.push(constructor);
|
|
231
231
|
}
|
|
232
232
|
|
|
233
|
-
setInAntecedent(inAntecedent) {
|
|
234
|
-
///
|
|
235
|
-
}
|
|
236
|
-
|
|
237
233
|
static fromPackageContextAndFilePath(packageContext, filePath) {
|
|
238
234
|
const fileContent = packageContext.getFileContent(filePath),
|
|
239
235
|
content = fileContent, ///
|
package/bin/context/metaproof.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
const { nodeAsString } = require("../utilities/string");
|
|
4
|
-
|
|
5
3
|
class MetaproofContext {
|
|
6
|
-
constructor(context, derived,
|
|
4
|
+
constructor(context, derived, metaAssertions) {
|
|
7
5
|
this.context = context;
|
|
8
6
|
this.derived = derived;
|
|
9
|
-
this.
|
|
7
|
+
this.metaAssertions = metaAssertions;
|
|
10
8
|
}
|
|
11
9
|
|
|
12
10
|
getContext() {
|
|
@@ -17,8 +15,8 @@ class MetaproofContext {
|
|
|
17
15
|
return this.derived;
|
|
18
16
|
}
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
return this.
|
|
18
|
+
getMetaAssertions() {
|
|
19
|
+
return this.metaAssertions;
|
|
22
20
|
}
|
|
23
21
|
|
|
24
22
|
getRules() { return this.context.getRules(); }
|
|
@@ -41,47 +39,41 @@ class MetaproofContext {
|
|
|
41
39
|
|
|
42
40
|
isTypePresentByTypeName(typeName) { return this.context.isTypePresentByTypeName(typeName); }
|
|
43
41
|
|
|
44
|
-
|
|
45
|
-
const
|
|
42
|
+
isMetaAssertionPresent(metaAssertion) {
|
|
43
|
+
const metaAssertionA = metaAssertion; ///
|
|
46
44
|
|
|
47
|
-
let
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
metastatementNodeBString = nodeAsString(metastatementNodeB),
|
|
51
|
-
matches = (metastatementNodeAString === metastatementNodeBString);
|
|
45
|
+
let metaAssertionPresent = this.metaAssertions.some((metaAssertion) => {
|
|
46
|
+
const metaAssertionB = metaAssertion, ///
|
|
47
|
+
matches = metaAssertionA.match(metaAssertionB);
|
|
52
48
|
|
|
53
49
|
if (matches) {
|
|
54
50
|
return true;
|
|
55
51
|
}
|
|
56
52
|
});
|
|
57
53
|
|
|
58
|
-
if (!
|
|
59
|
-
|
|
54
|
+
if (!metaAssertionPresent) {
|
|
55
|
+
metaAssertionPresent = this.context.isMetaAssertionPresent(metaAssertion);
|
|
60
56
|
}
|
|
61
57
|
|
|
62
|
-
return
|
|
58
|
+
return metaAssertionPresent;
|
|
63
59
|
}
|
|
64
60
|
|
|
65
61
|
isVariablePresentByVariableName(variableName) { return this.context.isVariablePresentByVariableName(variableName); }
|
|
66
62
|
|
|
67
63
|
setDerived(derived) {
|
|
68
|
-
if (derived) {
|
|
69
|
-
this.metastatementNodes.pop();
|
|
70
|
-
}
|
|
71
|
-
|
|
72
64
|
this.derived = derived;
|
|
73
65
|
}
|
|
74
66
|
|
|
75
67
|
addRule(rule) { this.context.addRule(rule); }
|
|
76
68
|
|
|
77
|
-
|
|
78
|
-
this.
|
|
69
|
+
addMetaAssertion(metaAssertion) {
|
|
70
|
+
this.metaAssertions.push(metaAssertion);
|
|
79
71
|
}
|
|
80
72
|
|
|
81
73
|
static fromContext(context) {
|
|
82
74
|
const derived = false,
|
|
83
|
-
|
|
84
|
-
metaproofContext = new MetaproofContext(context, derived,
|
|
75
|
+
metaAssertions = [],
|
|
76
|
+
metaproofContext = new MetaproofContext(context, derived, metaAssertions);
|
|
85
77
|
|
|
86
78
|
return metaproofContext;
|
|
87
79
|
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const { nodeQuery } = require("./utilities/query");
|
|
4
|
+
|
|
5
|
+
const metastatementNodeQuery = nodeQuery("/*/metastatement!");
|
|
6
|
+
|
|
7
|
+
class MetaAssertion {
|
|
8
|
+
constructor(metaSubproofNode, metastatementNode) {
|
|
9
|
+
this.metaSubproofNode = metaSubproofNode;
|
|
10
|
+
this.metastatementNode = metastatementNode;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
getNonTerminalNode() {
|
|
14
|
+
const nonTerminalNode = (this.metastatementNode !== null) ?
|
|
15
|
+
this.metastatementNode :
|
|
16
|
+
null;
|
|
17
|
+
|
|
18
|
+
return nonTerminalNode;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
getMetaSubproofNode() {
|
|
22
|
+
return this.metaSubproofNode;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
getMetastatementNode() {
|
|
26
|
+
return this.metastatementNode;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
match(metaAssertion) {
|
|
30
|
+
let matches = false;
|
|
31
|
+
|
|
32
|
+
const metastatementNode = metaAssertion.getMetastatementNode();
|
|
33
|
+
|
|
34
|
+
if ((metastatementNode !== null) && (this.metastatementNode !== null)) {
|
|
35
|
+
const nonTerminalNode = this.metastatementNode, ///
|
|
36
|
+
metaAssertionNonTerminalNode = metastatementNode, ///
|
|
37
|
+
metaAssertionNonTerminalNodeMatches = matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode);
|
|
38
|
+
|
|
39
|
+
matches = metaAssertionNonTerminalNodeMatches; ///
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return matches;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static fromMetaSubproofNode(metaSubproofNode) {
|
|
46
|
+
const metastatementNode = null,
|
|
47
|
+
metaAssertion = new MetaAssertion(metaSubproofNode, metastatementNode);
|
|
48
|
+
|
|
49
|
+
return metaAssertion;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static fromQualifiedMetastatementNode(qualifiedMetastatementNode) {
|
|
53
|
+
const metaSubproofNode = null,
|
|
54
|
+
metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
55
|
+
metaAssertion = new MetaAssertion(metaSubproofNode, metastatementNode);
|
|
56
|
+
|
|
57
|
+
return metaAssertion;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
static fromUnqualifiedMetastatementNode(unqualifiedMetastatementNode) {
|
|
61
|
+
const metaSubproofNode = null,
|
|
62
|
+
metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
63
|
+
metaAssertion = new MetaAssertion(metaSubproofNode, metastatementNode);
|
|
64
|
+
|
|
65
|
+
return metaAssertion;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
module.exports = MetaAssertion;
|
|
70
|
+
|
|
71
|
+
function matchMetaAssertionNode(metaAssertionNode, node) {
|
|
72
|
+
let metaAssertionNodeMatches = false;
|
|
73
|
+
|
|
74
|
+
const nodeTerminalNode = node.isTerminalNode(),
|
|
75
|
+
ruleNodeTerminalNode = metaAssertionNode.isTerminalNode();
|
|
76
|
+
|
|
77
|
+
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
78
|
+
if (nodeTerminalNode) {
|
|
79
|
+
const terminalNode = node, ///
|
|
80
|
+
metaAssertionTerminalNode = metaAssertionNode, ///
|
|
81
|
+
metaAssertionTerminalNodeMatches = matchMetaAssertionTerminalNode(metaAssertionTerminalNode, terminalNode);
|
|
82
|
+
|
|
83
|
+
metaAssertionNodeMatches = metaAssertionTerminalNodeMatches; ///
|
|
84
|
+
} else {
|
|
85
|
+
const nonTerminalNode = node, ///
|
|
86
|
+
metaAssertionNonTerminalNode = metaAssertionNode, ///
|
|
87
|
+
metaAssertionNonTerminalNodeMatches = matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode);
|
|
88
|
+
|
|
89
|
+
metaAssertionNodeMatches = metaAssertionNonTerminalNodeMatches; ///
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return metaAssertionNodeMatches;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function matchMetaAssertionChildNodes(metaAssertionChildNodes, childNodes) {
|
|
97
|
+
let metaAssertionChildNodesMatches = false;
|
|
98
|
+
|
|
99
|
+
const childNodesLength = childNodes.length,
|
|
100
|
+
metaAssertionChildNodesLength = metaAssertionChildNodes.length;
|
|
101
|
+
|
|
102
|
+
if (childNodesLength === metaAssertionChildNodesLength) {
|
|
103
|
+
metaAssertionChildNodesMatches = childNodes.every((childNode, index) => {
|
|
104
|
+
const metaAssertionChildNode = metaAssertionChildNodes[index],
|
|
105
|
+
metaAssertionNode = metaAssertionChildNode, ///
|
|
106
|
+
node = childNode, ///
|
|
107
|
+
metaAssertionNodeMatches = matchMetaAssertionNode(metaAssertionNode, node);
|
|
108
|
+
|
|
109
|
+
if (metaAssertionNodeMatches) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return metaAssertionChildNodesMatches;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function matchMetaAssertionTerminalNode(metaAssertionTerminalNode, terminalNode) {
|
|
119
|
+
let metaAssertionTerminalNodeMatches = false;
|
|
120
|
+
|
|
121
|
+
const matches = metaAssertionTerminalNode.match(terminalNode);
|
|
122
|
+
|
|
123
|
+
if (matches) {
|
|
124
|
+
metaAssertionTerminalNodeMatches = true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return metaAssertionTerminalNodeMatches;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function matchMetaAssertionNonTerminalNode(metaAssertionNonTerminalNode, nonTerminalNode) {
|
|
131
|
+
let metaAssertionNonTerminalNodeMatches = false;
|
|
132
|
+
|
|
133
|
+
const ruleName = nonTerminalNode.getRuleName(),
|
|
134
|
+
metaAssertionRuleName = metaAssertionNonTerminalNode.getRuleName(); ///
|
|
135
|
+
|
|
136
|
+
if (ruleName === metaAssertionRuleName) {
|
|
137
|
+
const childNodes = nonTerminalNode.getChildNodes(),
|
|
138
|
+
metaAssertionChildNodes = metaAssertionNonTerminalNode.getChildNodes(),
|
|
139
|
+
metaAssertionChildNodesMatches = matchMetaAssertionChildNodes(metaAssertionChildNodes, childNodes);
|
|
140
|
+
|
|
141
|
+
metaAssertionNonTerminalNodeMatches = metaAssertionChildNodesMatches; ///
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return metaAssertionNonTerminalNodeMatches;
|
|
145
|
+
}
|
package/bin/rule.js
CHANGED
|
@@ -23,15 +23,15 @@ class Rule {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
matchMetastatement(metastatementNode, context) {
|
|
26
|
-
let
|
|
26
|
+
let metaAssertions = context.getMetaAssertions();
|
|
27
27
|
|
|
28
28
|
const premisesLength = this.premises.length,
|
|
29
29
|
start = -premisesLength;
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
metaAssertions = metaAssertions.slice(start); ///
|
|
32
32
|
|
|
33
|
-
const matchesMetastatement = someCombination(
|
|
34
|
-
const premisesMatchConclusion = matchPremisesAndConclusion(this.premises, this.conclusion,
|
|
33
|
+
const matchesMetastatement = someCombination(metaAssertions, (metaAssertions) => {
|
|
34
|
+
const premisesMatchConclusion = matchPremisesAndConclusion(this.premises, this.conclusion, metaAssertions, metastatementNode);
|
|
35
35
|
|
|
36
36
|
if (premisesMatchConclusion) {
|
|
37
37
|
return true;
|
|
@@ -56,24 +56,27 @@ class Rule {
|
|
|
56
56
|
|
|
57
57
|
module.exports = Rule;
|
|
58
58
|
|
|
59
|
-
function matchPremise(premise,
|
|
60
|
-
const
|
|
61
|
-
const nonTerminalNode =
|
|
62
|
-
nonTerminalNodeMatches = premise.matchNonTerminalNode(nonTerminalNode, metaSubstitutions);
|
|
59
|
+
function matchPremise(premise, metaAssertions, metaSubstitutions) {
|
|
60
|
+
const metaAssertion = prune(metaAssertions, (metaAssertion) => {
|
|
61
|
+
const nonTerminalNode = metaAssertion.getNonTerminalNode();
|
|
63
62
|
|
|
64
|
-
if (
|
|
65
|
-
|
|
63
|
+
if (nonTerminalNode !== null) {
|
|
64
|
+
const nonTerminalNodeMatches = premise.matchNonTerminalNode(nonTerminalNode, metaSubstitutions);
|
|
65
|
+
|
|
66
|
+
if (!nonTerminalNodeMatches) { ///
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
66
69
|
}
|
|
67
70
|
}) || null;
|
|
68
71
|
|
|
69
|
-
const premiseMatches = (
|
|
72
|
+
const premiseMatches = (metaAssertion !== null);
|
|
70
73
|
|
|
71
74
|
return premiseMatches;
|
|
72
75
|
}
|
|
73
76
|
|
|
74
|
-
function matchPremises(premise,
|
|
77
|
+
function matchPremises(premise, metaAssertions, metaSubstitutions) {
|
|
75
78
|
const premisesMatches = premise.every((premise) => {
|
|
76
|
-
const premiseMatches = matchPremise(premise,
|
|
79
|
+
const premiseMatches = matchPremise(premise, metaAssertions, metaSubstitutions);
|
|
77
80
|
|
|
78
81
|
if (premiseMatches) {
|
|
79
82
|
return true;
|
|
@@ -91,11 +94,11 @@ function matchConclusion(conclusion, metastatementNode, metaSubstitutions) {
|
|
|
91
94
|
return conclusionMatches;
|
|
92
95
|
}
|
|
93
96
|
|
|
94
|
-
function matchPremisesAndConclusion(premises, conclusion,
|
|
97
|
+
function matchPremisesAndConclusion(premises, conclusion, metaAssertions, metastatementNode) {
|
|
95
98
|
let premisesMatchConclusion = false;
|
|
96
99
|
|
|
97
100
|
const metaSubstitutions = [],
|
|
98
|
-
premisesMatches = matchPremises(premises,
|
|
101
|
+
premisesMatches = matchPremises(premises, metaAssertions, metaSubstitutions);
|
|
99
102
|
|
|
100
103
|
if (premisesMatches) {
|
|
101
104
|
const conclusionMatches = matchConclusion(conclusion, metastatementNode, metaSubstitutions);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
const verifyMetaproof = require("../verify/metaproof"),
|
|
4
|
+
MetaproofContext = require("../context/metaproof"),
|
|
4
5
|
verifyConclusion = require("../verify/conclusion"),
|
|
5
6
|
verifyPremiseOrPremises = require("../verify/premiseOrPremises");
|
|
6
7
|
|
|
@@ -13,6 +14,10 @@ const metaproofNodeQuery = nodeQuery("/conditionalInference/metaproof!"),
|
|
|
13
14
|
function verifyConditionalInference(conditionalInferenceNode, premises, conclusions, context) {
|
|
14
15
|
let conditionalInferenceVerified = false;
|
|
15
16
|
|
|
17
|
+
const metaproofContext = MetaproofContext.fromContext(context);
|
|
18
|
+
|
|
19
|
+
context = metaproofContext; ///
|
|
20
|
+
|
|
16
21
|
const premiseOrPremisesNode = premiseOrPremisesNodeQuery(conditionalInferenceNode),
|
|
17
22
|
premiseOrPremisesVerified = verifyPremiseOrPremises(premiseOrPremisesNode, premises, context);
|
|
18
23
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const MetaAssertion = require("../metaAssertion"),
|
|
4
|
+
verifyUnqualifiedMetastatement = require("../verify/metastatement/unqualified");
|
|
4
5
|
|
|
5
6
|
const { nodesQuery } = require("../utilities/query");
|
|
6
7
|
|
|
@@ -16,6 +17,14 @@ function verifyMetaAntecedent(metaAntecedentNode, context) {
|
|
|
16
17
|
}
|
|
17
18
|
});
|
|
18
19
|
|
|
20
|
+
if (metaAntecedentVerified) {
|
|
21
|
+
unqualifiedMetastatementNodes.forEach((unqualifiedMetastatementNode) => {
|
|
22
|
+
const metaAssertion = MetaAssertion.fromUnqualifiedMetastatementNode(unqualifiedMetastatementNode);
|
|
23
|
+
|
|
24
|
+
context.addMetaAssertion(metaAssertion);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
19
28
|
return metaAntecedentVerified;
|
|
20
29
|
}
|
|
21
30
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const MetaAssertion = require("../metaAssertion"),
|
|
4
|
+
MetaproofContext = require("../context/metaproof"),
|
|
4
5
|
verifyMetaAntecedent = require("../verify/metaAntecedent"),
|
|
5
6
|
verifyQualifiedMetastatement = require("../verify/metastatement/qualified"),
|
|
6
7
|
verifyUnqualifiedMetastatement = require("../verify/metastatement/unqualified");
|
|
@@ -19,44 +20,62 @@ function verifyMetaDerivation(metaDerivationNode, context) {
|
|
|
19
20
|
|
|
20
21
|
context.setDerived(derived);
|
|
21
22
|
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
let
|
|
23
|
+
const metaDerivationChildNodes = metaDerivationChildNodesQuery(metaDerivationNode),
|
|
24
|
+
metaDerivationChildNodesVerified = metaDerivationChildNodes.every((metaDerivationChildNode) => {
|
|
25
|
+
let metaDerivationChildNodeVerified;
|
|
25
26
|
|
|
26
|
-
const ruleName =
|
|
27
|
+
const ruleName = metaDerivationChildNode.getRuleName();
|
|
27
28
|
|
|
28
29
|
switch (ruleName) {
|
|
29
30
|
case META_SUBPROOF_RULE_NAME: {
|
|
30
|
-
const metaSubproofNode =
|
|
31
|
+
const metaSubproofNode = metaDerivationChildNode, ///
|
|
31
32
|
metaSubproofVerified = verifyMetaSubproof(metaSubproofNode, context);
|
|
32
33
|
|
|
33
|
-
|
|
34
|
+
if (metaSubproofVerified) {
|
|
35
|
+
const metaAssertion = MetaAssertion.fromMetaSubproofNode(metaSubproofNode);
|
|
36
|
+
|
|
37
|
+
context.addMetaAssertion(metaAssertion);
|
|
38
|
+
|
|
39
|
+
metaDerivationChildNodeVerified = true;
|
|
40
|
+
}
|
|
34
41
|
|
|
35
42
|
break;
|
|
36
43
|
}
|
|
37
44
|
|
|
38
45
|
case QUALIFIED_METASTATEMENT_RULE_NAME: {
|
|
39
|
-
const qualifiedMetastatementNode =
|
|
46
|
+
const qualifiedMetastatementNode = metaDerivationChildNode, ///
|
|
40
47
|
qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, context);
|
|
41
48
|
|
|
42
|
-
|
|
49
|
+
if (qualifiedMetastatementVerified) {
|
|
50
|
+
const metaAssertion = MetaAssertion.fromQualifiedMetastatementNode(qualifiedMetastatementNode);
|
|
51
|
+
|
|
52
|
+
context.addMetaAssertion(metaAssertion);
|
|
53
|
+
|
|
54
|
+
metaDerivationChildNodeVerified = qualifiedMetastatementVerified; ///
|
|
55
|
+
}
|
|
43
56
|
|
|
44
57
|
break;
|
|
45
58
|
}
|
|
46
59
|
|
|
47
60
|
case UNQUALIFIED_METASTATEMENT_RULE_NAME: {
|
|
48
|
-
const unqualifiedMetastatementNode =
|
|
61
|
+
const unqualifiedMetastatementNode = metaDerivationChildNode, ///
|
|
49
62
|
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context);
|
|
50
63
|
|
|
51
|
-
|
|
64
|
+
if (unqualifiedMetastatementVerified) {
|
|
65
|
+
const metaAssertion = MetaAssertion.fromUnqualifiedMetastatementNode(unqualifiedMetastatementNode);
|
|
66
|
+
|
|
67
|
+
context.addMetaAssertion(metaAssertion);
|
|
68
|
+
|
|
69
|
+
metaDerivationChildNodeVerified = true;
|
|
70
|
+
}
|
|
52
71
|
|
|
53
72
|
break;
|
|
54
73
|
}
|
|
55
74
|
}
|
|
56
75
|
|
|
57
|
-
return
|
|
76
|
+
return metaDerivationChildNodeVerified;
|
|
58
77
|
}),
|
|
59
|
-
metaDerivationVerified =
|
|
78
|
+
metaDerivationVerified = metaDerivationChildNodesVerified; ///
|
|
60
79
|
|
|
61
80
|
return metaDerivationVerified;
|
|
62
81
|
}
|
package/bin/verify/metaproof.js
CHANGED
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
const verifyMetaDerivation = require("../verify/metaDerivation"),
|
|
4
4
|
verifyQualifiedMetastatement = require("../verify/metastatement/qualified");
|
|
5
5
|
|
|
6
|
-
const {
|
|
7
|
-
{ nodeQuery } = require("../utilities/query"),
|
|
8
|
-
{ nodeAsString } = require("../utilities/string");
|
|
6
|
+
const { nodeQuery } = require("../utilities/query");
|
|
9
7
|
|
|
10
8
|
const metastatementNodeQuery = nodeQuery("/qualifiedMetastatement!/metastatement!"),
|
|
11
9
|
metaDerivationNodeQuery = nodeQuery("/metaproof/metaDerivation!"),
|
|
@@ -24,17 +24,17 @@ function verifyQualifiedMetastatement(qualifiedMetastatementNode, context) {
|
|
|
24
24
|
const ruleMatchesMetastatement = rule.matchMetastatement(metastatementNode, context);
|
|
25
25
|
|
|
26
26
|
if (ruleMatchesMetastatement) {
|
|
27
|
-
context.addMetastatementNode(metastatementNode);
|
|
28
|
-
|
|
29
|
-
const metastatementString = nodeAsString(metastatementNode);
|
|
30
|
-
|
|
31
|
-
log.info(`Verified the '${metastatementString}' qualified metastatement.`);
|
|
32
|
-
|
|
33
27
|
qualifiedMetastatementVerified = true;
|
|
34
28
|
}
|
|
35
29
|
}
|
|
36
30
|
}
|
|
37
31
|
|
|
32
|
+
if (qualifiedMetastatementVerified) {
|
|
33
|
+
const metastatementString = nodeAsString(metastatementNode);
|
|
34
|
+
|
|
35
|
+
log.info(`Verified the '${metastatementString}' qualified metastatement.`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
38
|
return qualifiedMetastatementVerified;
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
const { loggingUtilities } = require("necessary");
|
|
4
4
|
|
|
5
|
+
const MetaAssertion = require("../../metaAssertion");
|
|
6
|
+
|
|
5
7
|
const { nodeQuery } = require("../../utilities/query"),
|
|
6
8
|
{ nodeAsString } = require("../../utilities/string");
|
|
7
9
|
|
|
@@ -17,21 +19,20 @@ function verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context) {
|
|
|
17
19
|
if (metastatementNode !== null) {
|
|
18
20
|
const derived = context.isDerived();
|
|
19
21
|
|
|
20
|
-
let metastatementPresent = true; ///
|
|
21
|
-
|
|
22
22
|
if (derived) {
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
const metaAssertion = MetaAssertion.fromUnqualifiedMetastatementNode(unqualifiedMetastatementNode),
|
|
24
|
+
metaAssertionPresent = context.isMetaAssertionPresent(metaAssertion);
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
unqualifiedMetastatementVerified = metaAssertionPresent; ///
|
|
27
|
+
} else {
|
|
28
|
+
unqualifiedMetastatementVerified = true;
|
|
28
29
|
}
|
|
30
|
+
}
|
|
29
31
|
|
|
32
|
+
if (unqualifiedMetastatementVerified) {
|
|
30
33
|
const metastatementString = nodeAsString(metastatementNode);
|
|
31
34
|
|
|
32
35
|
log.info(`Verified the '${metastatementString}' unqualified metastatement.`);
|
|
33
|
-
|
|
34
|
-
unqualifiedMetastatementVerified = true;
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
return unqualifiedMetastatementVerified;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
const Premise = require("../premise"),
|
|
4
|
+
MetaAssertion = require("../metaAssertion"),
|
|
4
5
|
verifyUnqualifiedMetastatement = require("../verify/metastatement/unqualified");
|
|
5
6
|
|
|
6
7
|
const { nodeQuery, nodesQuery } = require("../utilities/query");
|
|
@@ -21,8 +22,11 @@ function verifyPremiseOrPremises(premiseOrPremisesNode, premises, context) {
|
|
|
21
22
|
if (premiseOrPremisesVerified) {
|
|
22
23
|
unqualifiedMetastatementNodes.forEach((unqualifiedMetastatementNode) => {
|
|
23
24
|
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
25
|
+
metaAssertion = MetaAssertion.fromUnqualifiedMetastatementNode(unqualifiedMetastatementNode),
|
|
24
26
|
premise = Premise.fromMetastatementNode(metastatementNode);
|
|
25
27
|
|
|
28
|
+
context.addMetaAssertion(metaAssertion);
|
|
29
|
+
|
|
26
30
|
premises.push(premise);
|
|
27
31
|
});
|
|
28
32
|
}
|
package/bin/verify/rule.js
CHANGED
|
@@ -4,7 +4,6 @@ const { loggingUtilities } = require("necessary");
|
|
|
4
4
|
|
|
5
5
|
const Rule = require("../rule"),
|
|
6
6
|
verifyLabels = require("../verify/labels"),
|
|
7
|
-
MetaproofContext = require("../context/metaproof"),
|
|
8
7
|
verifyConditionalInference = require("../verify/conditinalInference"),
|
|
9
8
|
verifyUnconditionalInference = require("../verify/unconditionalInference");
|
|
10
9
|
|
|
@@ -30,10 +29,6 @@ function verifyRule(ruleNode, context) {
|
|
|
30
29
|
labelsVerified = verifyLabels(labelNodes, labels, context);
|
|
31
30
|
|
|
32
31
|
if (labelsVerified) {
|
|
33
|
-
const metaproofContext = MetaproofContext.fromContext(context);
|
|
34
|
-
|
|
35
|
-
context = metaproofContext; ///
|
|
36
|
-
|
|
37
32
|
const premises = [],
|
|
38
33
|
conclusions = [],
|
|
39
34
|
conditionalInferenceNode = conditionalInferenceNodeQuery(ruleNode),
|
|
@@ -1,27 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
const Conclusion = require("../conclusion"),
|
|
4
|
+
verifyMetaproof = require("../verify/metaproof"),
|
|
5
|
+
MetaproofContext = require("../context/metaproof"),
|
|
4
6
|
verifyUnqualifiedMetastatement = require("../verify/metastatement/unqualified");
|
|
5
7
|
|
|
6
8
|
const { nodeQuery } = require("../utilities/query");
|
|
7
9
|
|
|
8
|
-
const
|
|
10
|
+
const metaproofNodeQuery = nodeQuery("/unconditionalInference/metaproof!"),
|
|
11
|
+
metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!"),
|
|
9
12
|
unqualifiedMetastatementNodeQuery = nodeQuery("/unconditionalInference/unqualifiedMetastatement!");
|
|
10
13
|
|
|
11
14
|
function verifyUnconditionalInference(unconditionalInferenceNode, premises, conclusions, context) {
|
|
12
15
|
let unconditionalInferenceVerified = false;
|
|
13
16
|
|
|
14
|
-
const
|
|
17
|
+
const metaproofContext = MetaproofContext.fromContext(context);
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
context = metaproofContext; ///
|
|
20
|
+
|
|
21
|
+
const unqualifiedMetastatementNode = unqualifiedMetastatementNodeQuery(unconditionalInferenceNode),
|
|
22
|
+
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context);
|
|
17
23
|
|
|
18
24
|
if (unqualifiedMetastatementVerified) {
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
let metaproofVerified = true;
|
|
26
|
+
|
|
27
|
+
const metaproofNode = metaproofNodeQuery(unconditionalInferenceNode);
|
|
28
|
+
|
|
29
|
+
if (metaproofNode !== null) {
|
|
30
|
+
metaproofVerified = verifyMetaproof(metaproofNode, context);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (metaproofVerified) {
|
|
34
|
+
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
35
|
+
conclusion = Conclusion.fromMetastatementNode(metastatementNode);
|
|
21
36
|
|
|
22
|
-
|
|
37
|
+
conclusions.push(conclusion);
|
|
23
38
|
|
|
24
|
-
|
|
39
|
+
unconditionalInferenceVerified = true;
|
|
40
|
+
}
|
|
25
41
|
}
|
|
26
42
|
|
|
27
43
|
return unconditionalInferenceVerified;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-verify-cli",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.270",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-verify-cli",
|
|
7
7
|
"description": "Occam's Verifier",
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"argumentative": "^2.0.15",
|
|
14
14
|
"necessary": "^11.0.40",
|
|
15
|
-
"occam-custom-grammars": "^5.0.
|
|
15
|
+
"occam-custom-grammars": "^5.0.351",
|
|
16
16
|
"occam-dom": "^3.0.171",
|
|
17
17
|
"occam-grammar-utilities": "^7.0.66",
|
|
18
|
-
"occam-grammars": "^1.0.
|
|
18
|
+
"occam-grammars": "^1.0.318",
|
|
19
19
|
"occam-open-cli": "^5.0.37",
|
|
20
20
|
"occam-parsers": "^16.0.122"
|
|
21
21
|
},
|