occam-verify-cli 0.0.892 → 0.0.894
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/axiomLemmaTheoremConjecture.js +5 -5
- package/lib/conclusion.js +4 -3
- package/lib/metaConsequent.js +4 -3
- package/lib/metaLemmaMetatheorem.js +16 -16
- package/lib/metaSupposition.js +19 -20
- package/lib/premise.js +63 -20
- package/lib/rule.js +43 -31
- package/lib/step/metaproof.js +19 -5
- package/lib/utilities/array.js +5 -2
- package/lib/verifier/nodes/metaLevel.js +7 -7
- package/lib/verify/derivation.js +10 -90
- package/lib/verify/metaDerivation.js +7 -87
- package/lib/verify/metaProofStep.js +76 -0
- package/lib/verify/metaSubDerivation.js +25 -0
- package/lib/verify/metaSubproof.js +34 -0
- package/lib/verify/metaproof.js +7 -8
- package/lib/verify/metastatement/qualified.js +71 -35
- package/lib/verify/metastatement/unqualified.js +16 -19
- package/lib/verify/proofStep.js +70 -0
- package/lib/verify/ruleDerivation.js +7 -85
- package/lib/verify/ruleProofStep.js +88 -0
- package/lib/verify/ruleSubDerivation.js +25 -0
- package/lib/verify/ruleSubproof.js +34 -0
- package/lib/verify/statement/qualified.js +74 -100
- package/lib/verify/statement/unqualified.js +16 -19
- package/lib/verify/statement.js +7 -1
- package/lib/verify/subDerivation.js +25 -0
- package/lib/verify/subproof.js +34 -0
- package/package.json +4 -4
- package/src/axiomLemmaTheoremConjecture.js +6 -5
- package/src/conclusion.js +6 -4
- package/src/metaConsequent.js +6 -4
- package/src/metaLemmaMetatheorem.js +16 -16
- package/src/metaSupposition.js +32 -33
- package/src/premise.js +106 -35
- package/src/rule.js +48 -30
- package/src/step/metaproof.js +24 -7
- package/src/utilities/array.js +1 -1
- package/src/verifier/nodes/metaLevel.js +6 -6
- package/src/verify/derivation.js +10 -138
- package/src/verify/metaDerivation.js +7 -135
- package/src/verify/metaProofStep.js +98 -0
- package/src/verify/metaSubDerivation.js +22 -0
- package/src/verify/metaSubproof.js +32 -0
- package/src/verify/metaproof.js +11 -11
- package/src/verify/metastatement/qualified.js +98 -32
- package/src/verify/metastatement/unqualified.js +16 -19
- package/src/verify/proofStep.js +88 -0
- package/src/verify/ruleDerivation.js +7 -133
- package/src/verify/ruleProofStep.js +121 -0
- package/src/verify/ruleSubDerivation.js +22 -0
- package/src/verify/ruleSubproof.js +32 -0
- package/src/verify/statement/qualified.js +83 -125
- package/src/verify/statement/unqualified.js +16 -19
- package/src/verify/statement.js +2 -2
- package/src/verify/subDerivation.js +22 -0
- package/src/verify/subproof.js +32 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MetaproofStep from "../step/metaproof";
|
|
4
|
+
import verifyMetaSubproof from "../verify/metaSubproof";
|
|
5
|
+
import verifyMetaSubDerivation from "../verify/metaSubDerivation";
|
|
6
|
+
import verifyQualifiedStatement from "../verify/statement/qualified";
|
|
7
|
+
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
8
|
+
import verifyQualifiedMetastatement from "../verify/metastatement/qualified";
|
|
9
|
+
import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
|
|
10
|
+
|
|
11
|
+
import { nodeQuery } from "../utilities/query";
|
|
12
|
+
import { assignAssignment } from "../utilities/assignments";
|
|
13
|
+
|
|
14
|
+
const metaSubproofNodeQuery = nodeQuery("/metaProofStep|lastMetaProofStep/metaSubproof!"),
|
|
15
|
+
metastatementNodeQuery = nodeQuery("/qualifiedMetastatement|unqualifiedMetastatement/metastatement!"),
|
|
16
|
+
qualifiedStatementNodeQuery = nodeQuery("/metaProofStep|lastMetaProofStep/qualifiedStatement!"),
|
|
17
|
+
unqualifiedStatementNodeQuery = nodeQuery("/metaProofStep|lastMetaProofStep/unqualifiedStatement!"),
|
|
18
|
+
qualifiedMetastatementNodeQuery = nodeQuery("/metaProofStep|lastMetaProofStep/qualifiedMetastatement!"),
|
|
19
|
+
unqualifiedMetastatementNodeQuery = nodeQuery("/metaProofStep|lastMetaProofStep/unqualifiedMetastatement!");
|
|
20
|
+
|
|
21
|
+
export default function verifyMetaProofStep(metaProofStepNode, substitutions, localMetaContext) {
|
|
22
|
+
let metaProofStepVerified = false;
|
|
23
|
+
|
|
24
|
+
const metaSubproofNode = metaSubproofNodeQuery(metaProofStepNode),
|
|
25
|
+
qualifiedStatementNode = qualifiedStatementNodeQuery(metaProofStepNode),
|
|
26
|
+
unqualifiedStatementNode = unqualifiedStatementNodeQuery(metaProofStepNode),
|
|
27
|
+
qualifiedMetastatementNode = qualifiedMetastatementNodeQuery(metaProofStepNode),
|
|
28
|
+
unqualifiedMetastatementNode = unqualifiedMetastatementNodeQuery(metaProofStepNode);
|
|
29
|
+
|
|
30
|
+
if (false) {
|
|
31
|
+
///
|
|
32
|
+
} else if (metaSubproofNode !== null) {
|
|
33
|
+
let metaSubproofVerified;
|
|
34
|
+
|
|
35
|
+
metaSubproofVerified = verifyMetaSubproof(metaSubproofNode, substitutions, localMetaContext);
|
|
36
|
+
|
|
37
|
+
if (metaSubproofVerified) {
|
|
38
|
+
const metaproofStep = MetaproofStep.fromMetaSubproofNode(metaSubproofNode);
|
|
39
|
+
|
|
40
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
41
|
+
|
|
42
|
+
metaProofStepVerified = true;
|
|
43
|
+
}
|
|
44
|
+
} else if (qualifiedStatementNode !== null) {
|
|
45
|
+
debugger
|
|
46
|
+
} else if (unqualifiedStatementNode !== null) {
|
|
47
|
+
debugger
|
|
48
|
+
} else if (qualifiedMetastatementNode !== null) {
|
|
49
|
+
let qualifiedMetastatementVerified;
|
|
50
|
+
|
|
51
|
+
const assignments = [];
|
|
52
|
+
|
|
53
|
+
qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, substitutions, assignments, localMetaContext);
|
|
54
|
+
|
|
55
|
+
if (qualifiedMetastatementVerified) {
|
|
56
|
+
const assignmentAssigned = assignAssignment(assignments, localMetaContext);
|
|
57
|
+
|
|
58
|
+
qualifiedMetastatementVerified = assignmentAssigned; ///
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (qualifiedMetastatementVerified) {
|
|
62
|
+
const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
63
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
64
|
+
|
|
65
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
66
|
+
|
|
67
|
+
metaProofStepVerified = qualifiedMetastatementVerified; ///
|
|
68
|
+
}
|
|
69
|
+
} else if (unqualifiedMetastatementNode !== null) {
|
|
70
|
+
let unqualifiedMetastatementVerified;
|
|
71
|
+
|
|
72
|
+
const derived = true,
|
|
73
|
+
assignments = [];
|
|
74
|
+
|
|
75
|
+
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localMetaContext);
|
|
76
|
+
|
|
77
|
+
if (unqualifiedMetastatementVerified) {
|
|
78
|
+
const assignmentAssigned = assignAssignment(assignments, localMetaContext);
|
|
79
|
+
|
|
80
|
+
unqualifiedMetastatementVerified = assignmentAssigned; ///
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (unqualifiedMetastatementVerified) {
|
|
84
|
+
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
85
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
86
|
+
|
|
87
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
88
|
+
|
|
89
|
+
metaProofStepVerified = true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return metaProofStepVerified;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
Object.assign(verifyMetaSubDerivation, {
|
|
97
|
+
verifyMetaProofStep
|
|
98
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { nodesQuery } from "../utilities/query";
|
|
4
|
+
|
|
5
|
+
const metaProofStepNodesQuery = nodesQuery("/metaSubDerivation/metaProofStep|lastMetaProofStep");
|
|
6
|
+
|
|
7
|
+
export default function verifyMetaSubDerivation(metaSubDerivationNode, substitutions, localMetaContext) {
|
|
8
|
+
let metaSubDerivationVerified;
|
|
9
|
+
|
|
10
|
+
const metaProofStepNodes = metaProofStepNodesQuery(metaSubDerivationNode);
|
|
11
|
+
|
|
12
|
+
metaSubDerivationVerified = metaProofStepNodes.every((metaProofStepNode) => {
|
|
13
|
+
const { verifyMetaProofStep } = verifyMetaSubDerivation,
|
|
14
|
+
metaProofStepVerified = verifyMetaProofStep(metaProofStepNode, substitutions, localMetaContext);
|
|
15
|
+
|
|
16
|
+
if (metaProofStepVerified) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return metaSubDerivationVerified;
|
|
22
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import LocalMetaContext from "../context/localMeta";
|
|
4
|
+
import verifyMetaSuppositions from "../verify/metaSuppositions";
|
|
5
|
+
import verifyMetaSubDerivation from "../verify/metaSubDerivation";
|
|
6
|
+
|
|
7
|
+
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
8
|
+
|
|
9
|
+
const suppositionNodesQuery = nodesQuery("/metaSubproof/supposition"),
|
|
10
|
+
metaSubDerivationNodeQuery = nodeQuery("/metaSubproof/metaSubDerivation");
|
|
11
|
+
|
|
12
|
+
export default function verifyMetaSubproof(metaSubproofNode, substitutions, localMetaContext) {
|
|
13
|
+
let metaSubproofVerified = false;
|
|
14
|
+
|
|
15
|
+
localMetaContext = LocalMetaContext.fromLocalMetaContext(localMetaContext); ///
|
|
16
|
+
|
|
17
|
+
const metaSuppositions = [],
|
|
18
|
+
suppositionNodes = suppositionNodesQuery(metaSubproofNode),
|
|
19
|
+
metaSuppositionsVerified = verifyMetaSuppositions(suppositionNodes, metaSuppositions, localMetaContext);
|
|
20
|
+
|
|
21
|
+
if (metaSuppositionsVerified) {
|
|
22
|
+
const metaSubDerivationNode = metaSubDerivationNodeQuery(metaSubproofNode),
|
|
23
|
+
metaSubDerivationVerified = verifyMetaSubDerivation(metaSubDerivationNode, substitutions, localMetaContext);
|
|
24
|
+
|
|
25
|
+
if (metaSubDerivationVerified) {
|
|
26
|
+
metaSubproofVerified = true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return metaSubproofVerified;
|
|
31
|
+
}
|
|
32
|
+
|
package/src/verify/metaproof.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import LocalMetaContext from "../context/localMeta";
|
|
3
4
|
import verifyMetaDerivation from "../verify/metaDerivation";
|
|
4
5
|
|
|
5
6
|
import { nodeQuery } from "../utilities/query";
|
|
6
7
|
|
|
7
8
|
const metaDerivationNodeQuery = nodeQuery("/metaproof/metaDerivation!");
|
|
8
9
|
|
|
9
|
-
export default function verifyMetaproof(metaproofNode, conclusion, substitutions,
|
|
10
|
+
export default function verifyMetaproof(metaproofNode, conclusion, substitutions, localMetaContext) {
|
|
10
11
|
let metaproofVerified = false;
|
|
11
12
|
|
|
13
|
+
localMetaContext = LocalMetaContext.fromLocalMetaContext(localMetaContext); ///
|
|
14
|
+
|
|
12
15
|
const metaDerivationNode = metaDerivationNodeQuery(metaproofNode),
|
|
13
|
-
metaDerivationVerified = verifyMetaDerivation(metaDerivationNode, substitutions,
|
|
16
|
+
metaDerivationVerified = verifyMetaDerivation(metaDerivationNode, substitutions, localMetaContext);
|
|
14
17
|
|
|
15
18
|
if (metaDerivationVerified) {
|
|
16
|
-
const lastMetaproofStep =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
conclusionMetastatementNode = conclusion.getMetastatementNode(),
|
|
22
|
-
metastatementNodeMatchesConclusionMetastatementNode = metastatementNode.match(conclusionMetastatementNode);
|
|
19
|
+
const lastMetaproofStep = localMetaContext.getLastMetaproofStep(),
|
|
20
|
+
metaproofStep = lastMetaproofStep, ///
|
|
21
|
+
metastatementNode = metaproofStep.getMetastatementNode(),
|
|
22
|
+
conclusionMetastatementNode = conclusion.getMetastatementNode(),
|
|
23
|
+
metastatementNodeMatchesConclusionMetastatementNode = metastatementNode.match(conclusionMetastatementNode);
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
}
|
|
25
|
+
metaproofVerified = metastatementNodeMatchesConclusionMetastatementNode; ///
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
return metaproofVerified;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import verifyMetastatement from "../metastatement";
|
|
4
3
|
import verifyMetavariableAgainstMetastatement from "../../verify/metavariableAgainstMetastatement";
|
|
5
4
|
|
|
6
5
|
import { nodeQuery } from "../../utilities/query";
|
|
@@ -8,57 +7,124 @@ import { nodeQuery } from "../../utilities/query";
|
|
|
8
7
|
const metavariableNodeQuery = nodeQuery("/qualifiedMetastatement/reference!/metavariable!"),
|
|
9
8
|
metastatementNodeQuery = nodeQuery("/qualifiedMetastatement/metastatement!");
|
|
10
9
|
|
|
11
|
-
export default function verifyQualifiedMetastatement(qualifiedMetastatementNode, substitutions, assignments,
|
|
12
|
-
let qualifiedMetastatementVerified
|
|
10
|
+
export default function verifyQualifiedMetastatement(qualifiedMetastatementNode, substitutions, assignments, localMetaContext) {
|
|
11
|
+
let qualifiedMetastatementVerified;
|
|
13
12
|
|
|
14
|
-
const
|
|
13
|
+
const qualifiedMetastatementString = localMetaContext.nodeAsString(qualifiedMetastatementNode);
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
const metastatementString = localMetaContext.nodeAsString(metastatementNode),
|
|
18
|
-
metastatementLocalMetaContext = localMetaContext; ///
|
|
15
|
+
localMetaContext.trace(`Verifying the '${qualifiedMetastatementString}' qualified metastatement...`, qualifiedMetastatementNode);
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
const metavariableNode = metavariableNodeQuery(qualifiedMetastatementNode),
|
|
18
|
+
verifyQualifiedMetastatementFunctions = [
|
|
19
|
+
verifyQualifiedMetastatementAAgainstRule,
|
|
20
|
+
verifyQualifiedMetastatementAAgainstReference
|
|
21
|
+
];
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
qualifiedMetastatementVerified = verifyQualifiedMetastatementFunctions.some((verifyQualifiedMetastatementFunction) => { ///
|
|
24
|
+
const qualifiedMetastatementVerified = verifyQualifiedMetastatementFunction(qualifiedMetastatementNode, metavariableNode, substitutions, localMetaContext);
|
|
23
25
|
|
|
24
|
-
if (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (rule !== null) {
|
|
28
|
-
const ruleMatchesMetastatement = rule.matchMetastatement(metastatementNode, metastatementLocalMetaContext);
|
|
29
|
-
|
|
30
|
-
qualifiedMetastatementVerified = ruleMatchesMetastatement; ///
|
|
31
|
-
}
|
|
26
|
+
if (qualifiedMetastatementVerified) {
|
|
27
|
+
return true;
|
|
32
28
|
}
|
|
29
|
+
});
|
|
33
30
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (metavariablePresent) {
|
|
39
|
-
const metastatementVerified = verifyMetastatement(metastatementNode, assignments, derived, localMetaContext, () => {
|
|
31
|
+
if (qualifiedMetastatementVerified) {
|
|
32
|
+
const derived = false,
|
|
33
|
+
metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
34
|
+
metastatementVerified = verifyMetastatement(metastatementNode, assignments, derived, localMetaContext, () => {
|
|
40
35
|
const verifiedAhead = true;
|
|
41
36
|
|
|
42
37
|
return verifiedAhead;
|
|
43
38
|
});
|
|
44
39
|
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
qualifiedMetastatementVerified = metastatementVerified; ///
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (qualifiedMetastatementVerified) {
|
|
44
|
+
localMetaContext.debug(`...verified the '${qualifiedMetastatementString}' qualified metastatement.`, qualifiedMetastatementNode);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return qualifiedMetastatementVerified;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function verifyQualifiedMetastatementAAgainstRule(qualifiedMetastatementNode, metavariableNode, substitutions, localMetaContext) {
|
|
51
|
+
let qualifiedMetastatementVerifiedAgainstRule = false;
|
|
52
|
+
|
|
53
|
+
const rule = localMetaContext.findRuleByMetavariableNode(metavariableNode);
|
|
54
|
+
|
|
55
|
+
if (rule !== null) {
|
|
56
|
+
const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
57
|
+
metavariableString = localMetaContext.nodeAsString(metavariableNode),
|
|
58
|
+
qualifiedMetastatementString = localMetaContext.nodeAsString(qualifiedMetastatementNode);
|
|
59
|
+
|
|
60
|
+
localMetaContext.trace(`Verifying the '${qualifiedMetastatementString}' qualified metastatement against the '${metavariableString}' rule...`, qualifiedMetastatementNode);
|
|
61
|
+
|
|
62
|
+
const ruleMatchesMetastatement = rule.matchMetastatement(metastatementNode, localMetaContext);
|
|
63
|
+
|
|
64
|
+
qualifiedMetastatementVerifiedAgainstRule = ruleMatchesMetastatement; ///
|
|
65
|
+
|
|
66
|
+
if (qualifiedMetastatementVerifiedAgainstRule) {
|
|
67
|
+
localMetaContext.debug(`...verified the '${qualifiedMetastatementString}' qualified metastatement against the '${metavariableString}' rule.`, qualifiedMetastatementNode);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return qualifiedMetastatementVerifiedAgainstRule;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function verifyQualifiedMetastatementAAgainstReference(qualifiedMetastatementNode, metavariableNode, substitutions, localMetaContext) {
|
|
75
|
+
let qualifiedMetastatementVerifiedAgainstReference = false;
|
|
76
|
+
|
|
77
|
+
if (substitutions !== null) {
|
|
78
|
+
const metavariableString = localMetaContext.nodeAsString(metavariableNode),
|
|
79
|
+
metavariablePresent = localMetaContext.isMetavariablePresentByMetavariableNode(metavariableNode, localMetaContext),
|
|
80
|
+
qualifiedMetastatementString = localMetaContext.nodeAsString(qualifiedMetastatementNode);
|
|
81
|
+
|
|
82
|
+
localMetaContext.trace(`Verifying the '${qualifiedMetastatementString}' qualified metastatement against the '${metavariableString}' reference...`, qualifiedMetastatementNode);
|
|
83
|
+
|
|
84
|
+
if (metavariablePresent) {
|
|
85
|
+
const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
86
|
+
metavariableVerifiedAgainstMetastatement = verifyMetavariableAgainstMetastatement(metavariableNode, metastatementNode, substitutions, () => {
|
|
47
87
|
const verifiedAhead = true;
|
|
48
88
|
|
|
49
89
|
return verifiedAhead;
|
|
50
90
|
});
|
|
51
91
|
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
92
|
+
qualifiedMetastatementVerifiedAgainstReference = metavariableVerifiedAgainstMetastatement; ///
|
|
56
93
|
}
|
|
57
94
|
|
|
58
|
-
if (
|
|
59
|
-
localMetaContext.debug(`...verified the '${
|
|
95
|
+
if (qualifiedMetastatementVerifiedAgainstReference) {
|
|
96
|
+
localMetaContext.debug(`...verified the '${qualifiedMetastatementString}' qualified metastatement against the '${metavariableString}' reference.`, qualifiedMetastatementNode);
|
|
60
97
|
}
|
|
61
98
|
}
|
|
62
99
|
|
|
63
|
-
return
|
|
100
|
+
return qualifiedMetastatementVerifiedAgainstReference;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function verifyMetastatement(metastatementNode, assignments, derived, localMetaContext) {
|
|
104
|
+
let metastatementVerified;
|
|
105
|
+
|
|
106
|
+
const metastatementString = localMetaContext.nodeAsString(metastatementNode);
|
|
107
|
+
|
|
108
|
+
localMetaContext.trace(`Verifying the '${metastatementString}' metastatement...`, metastatementNode);
|
|
109
|
+
|
|
110
|
+
const verifyMetaStatementFunctions = [
|
|
111
|
+
///
|
|
112
|
+
];
|
|
113
|
+
|
|
114
|
+
verifyMetaStatementFunctions.some((verifyStatementFunction) => {
|
|
115
|
+
const metastatementVerified = verifyStatementFunction(metastatementNode, assignments, derived, localMetaContext);
|
|
116
|
+
|
|
117
|
+
if (metastatementVerified) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
metastatementVerified = true; ///
|
|
123
|
+
|
|
124
|
+
if (metastatementVerified) {
|
|
125
|
+
localMetaContext.debug(`...verified the '${metastatementString}' metastatement.`, metastatementNode);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return metastatementVerified;
|
|
64
129
|
}
|
|
130
|
+
|
|
@@ -9,32 +9,29 @@ const metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatemen
|
|
|
9
9
|
export default function verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localMetaContext) {
|
|
10
10
|
let unqualifiedMetastatementVerified = false;
|
|
11
11
|
|
|
12
|
-
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode)
|
|
12
|
+
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
13
|
+
unqualifiedMetastatementString = localMetaContext.nodeAsString(unqualifiedMetastatementNode);
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
const metastatementString = localMetaContext.nodeAsString(metastatementNode);
|
|
15
|
+
localMetaContext.trace(`Verifying the '${unqualifiedMetastatementString}' unqualified metastatement...`, unqualifiedMetastatementNode);
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
if (derived) {
|
|
18
|
+
const metastatementMatches = localMetaContext.matchMetastatement(metastatementNode);
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
unqualifiedMetastatementVerified = metastatementMatches; ///
|
|
23
|
-
}
|
|
20
|
+
unqualifiedMetastatementVerified = metastatementMatches; ///
|
|
21
|
+
}
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
if (!unqualifiedMetastatementVerified) {
|
|
24
|
+
const metastatementVerified = verifyMetastatement(metastatementNode, assignments, derived, localMetaContext, () => {
|
|
25
|
+
const verifiedAhead = true;
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
return verifiedAhead;
|
|
28
|
+
});
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
unqualifiedMetastatementVerified = metastatementVerified; ///
|
|
31
|
+
}
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
33
|
+
if (unqualifiedMetastatementVerified) {
|
|
34
|
+
localMetaContext.debug(`...verified the '${unqualifiedMetastatementString}' unqualified metastatement.`, unqualifiedMetastatementNode);
|
|
38
35
|
}
|
|
39
36
|
|
|
40
37
|
return unqualifiedMetastatementVerified;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import ProofStep from "../step/proof";
|
|
4
|
+
import verifySubproof from "../verify/subproof";
|
|
5
|
+
import verifySubDerivation from "../verify/subDerivation";
|
|
6
|
+
import verifyQualifiedStatement from "../verify/statement/qualified";
|
|
7
|
+
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
8
|
+
|
|
9
|
+
import { nodeQuery } from "../utilities/query";
|
|
10
|
+
import { assignAssignment } from "../utilities/assignments";
|
|
11
|
+
|
|
12
|
+
const subproofNodeQuery = nodeQuery("/proofStep|lastProofStep/subproof!"),
|
|
13
|
+
statementNodeQuery = nodeQuery("/qualifiedStatement|unqualifiedStatement/statement!"),
|
|
14
|
+
qualifiedStatementNodeQuery = nodeQuery("/proofStep|lastProofStep/qualifiedStatement!"),
|
|
15
|
+
unqualifiedStatementNodeQuery = nodeQuery("/proofStep|lastProofStep/unqualifiedStatement!");
|
|
16
|
+
|
|
17
|
+
export default function verifyProofStep(proofStepNode, localContext) {
|
|
18
|
+
let proofStepVerified = false;
|
|
19
|
+
|
|
20
|
+
const subproofNode = subproofNodeQuery(proofStepNode),
|
|
21
|
+
qualifiedStatementNode = qualifiedStatementNodeQuery(proofStepNode),
|
|
22
|
+
unqualifiedStatementNode = unqualifiedStatementNodeQuery(proofStepNode);
|
|
23
|
+
|
|
24
|
+
if (false) {
|
|
25
|
+
///
|
|
26
|
+
} else if (subproofNode !== null) {
|
|
27
|
+
let subproofVerified;
|
|
28
|
+
|
|
29
|
+
subproofVerified = verifySubproof(subproofNode, localContext);
|
|
30
|
+
|
|
31
|
+
if (subproofVerified) {
|
|
32
|
+
const proofStep = ProofStep.fromSubproofNode(subproofNode);
|
|
33
|
+
|
|
34
|
+
localContext.addProofStep(proofStep);
|
|
35
|
+
|
|
36
|
+
proofStepVerified = true;
|
|
37
|
+
}
|
|
38
|
+
} else if (qualifiedStatementNode !== null) {
|
|
39
|
+
let qualifiedStatementVerified;
|
|
40
|
+
|
|
41
|
+
const assignments = [];
|
|
42
|
+
|
|
43
|
+
qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext);
|
|
44
|
+
|
|
45
|
+
if (qualifiedStatementVerified) {
|
|
46
|
+
const assignmentAssigned = assignAssignment(assignments, localContext);
|
|
47
|
+
|
|
48
|
+
qualifiedStatementVerified = assignmentAssigned; ///
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (qualifiedStatementVerified) {
|
|
52
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
53
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
54
|
+
|
|
55
|
+
localContext.addProofStep(proofStep);
|
|
56
|
+
|
|
57
|
+
proofStepVerified = true;
|
|
58
|
+
}
|
|
59
|
+
} else if (unqualifiedStatementNode !== null) {
|
|
60
|
+
let unqualifiedStatementVerified;
|
|
61
|
+
|
|
62
|
+
const derived = true,
|
|
63
|
+
assignments = [];
|
|
64
|
+
|
|
65
|
+
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
66
|
+
|
|
67
|
+
if (unqualifiedStatementVerified) {
|
|
68
|
+
const assignmentAssigned = assignAssignment(assignments, localContext);
|
|
69
|
+
|
|
70
|
+
unqualifiedStatementVerified = assignmentAssigned; ///
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (unqualifiedStatementVerified) {
|
|
74
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
75
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
76
|
+
|
|
77
|
+
localContext.addProofStep(proofStep);
|
|
78
|
+
|
|
79
|
+
proofStepVerified = true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return proofStepVerified;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
Object.assign(verifySubDerivation, {
|
|
87
|
+
verifyProofStep
|
|
88
|
+
});
|
|
@@ -1,149 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import verifyPremises from "../verify/premises";
|
|
5
|
-
import LocalMetaContext from "../context/localMeta";
|
|
6
|
-
import verifyQualifiedMetastatement from "../verify/metastatement/qualified";
|
|
7
|
-
import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
|
|
3
|
+
import verifyRuleProofStep from "../verify/ruleProofStep";
|
|
8
4
|
|
|
9
|
-
import {
|
|
10
|
-
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
11
|
-
import { RULE_SUBPROOF_RULE_NAME, QUALIFIED_METASTATEMENT_RULE_NAME, UNQUALIFIED_METASTATEMENT_RULE_NAME } from "../ruleNames";
|
|
5
|
+
import { nodesQuery } from "../utilities/query";
|
|
12
6
|
|
|
13
|
-
const
|
|
14
|
-
premiseNodesQuery = nodesQuery("/ruleSubproof/premise"),
|
|
15
|
-
metastatementNodeQuery = nodeQuery("/qualifiedMetastatement|unqualifiedMetastatement/metastatement!"),
|
|
16
|
-
ruleSubDerivationNodeQuery = nodeQuery("/ruleSubproof/ruleSubDerivation");
|
|
7
|
+
const ruleProofStepNodesQuery = nodesQuery("/ruleDerivation/ruleProofStep|lastRuleProofStep");
|
|
17
8
|
|
|
18
9
|
export default function verifyRuleDerivation(ruleDerivationNode, localMetaContext) {
|
|
19
10
|
let ruleDerivationVerified;
|
|
20
11
|
|
|
21
|
-
const
|
|
12
|
+
const ruleProofStepNodes = ruleProofStepNodesQuery(ruleDerivationNode);
|
|
22
13
|
|
|
23
|
-
ruleDerivationVerified =
|
|
24
|
-
const
|
|
14
|
+
ruleDerivationVerified = ruleProofStepNodes.every((ruleProofStepNode) => {
|
|
15
|
+
const ruleProofStepVerified = verifyRuleProofStep(ruleProofStepNode, localMetaContext);
|
|
25
16
|
|
|
26
|
-
if (
|
|
17
|
+
if (ruleProofStepVerified) {
|
|
27
18
|
return true;
|
|
28
19
|
}
|
|
29
20
|
});
|
|
30
21
|
|
|
31
22
|
return ruleDerivationVerified;
|
|
32
23
|
}
|
|
33
|
-
|
|
34
|
-
function verifyRuleSubDerivation(ruleSubDerivationNode, localMetaContext) {
|
|
35
|
-
let ruleSubDerivationVerified;
|
|
36
|
-
|
|
37
|
-
const childNodes = childNodesQuery(ruleSubDerivationNode);
|
|
38
|
-
|
|
39
|
-
ruleSubDerivationVerified = childNodes.every((childNode) => {
|
|
40
|
-
const childVerified = verifyChild(childNode, localMetaContext);
|
|
41
|
-
|
|
42
|
-
if (childVerified) {
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
return ruleSubDerivationVerified;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function verifyRuleSubproof(ruleSubproofNode, localMetaContext) {
|
|
51
|
-
let ruleSubproofVerified = false;
|
|
52
|
-
|
|
53
|
-
localMetaContext = LocalMetaContext.fromLocalMetaContext(localMetaContext); ///
|
|
54
|
-
|
|
55
|
-
const premises = [],
|
|
56
|
-
premiseNodes = premiseNodesQuery(ruleSubproofNode),
|
|
57
|
-
premisesVerified = verifyPremises(premiseNodes, premises, localMetaContext);
|
|
58
|
-
|
|
59
|
-
if (premisesVerified) {
|
|
60
|
-
const ruleSubDerivationNode = ruleSubDerivationNodeQuery(ruleSubproofNode),
|
|
61
|
-
ruleSubDerivationVerified = verifyRuleSubDerivation(ruleSubDerivationNode, localMetaContext);
|
|
62
|
-
|
|
63
|
-
if (ruleSubDerivationVerified) {
|
|
64
|
-
ruleSubproofVerified = true;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return ruleSubproofVerified;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function verifyChild(childNode, localMetaContext) {
|
|
72
|
-
let childVerified;
|
|
73
|
-
|
|
74
|
-
const childNodeRuleName = childNode.getRuleName();
|
|
75
|
-
|
|
76
|
-
switch (childNodeRuleName) {
|
|
77
|
-
case RULE_SUBPROOF_RULE_NAME: {
|
|
78
|
-
const ruleSubproofNode = childNode, ///
|
|
79
|
-
ruleSubproofVerified = verifyRuleSubproof(ruleSubproofNode, localMetaContext);
|
|
80
|
-
|
|
81
|
-
if (ruleSubproofVerified) {
|
|
82
|
-
const metaproofStep = MetaproofStep.fromRuleSubproofNode(ruleSubproofNode);
|
|
83
|
-
|
|
84
|
-
localMetaContext.addMetaproofStep(metaproofStep);
|
|
85
|
-
|
|
86
|
-
childVerified = true;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
case QUALIFIED_METASTATEMENT_RULE_NAME: {
|
|
93
|
-
let qualifiedMetastatementVerified;
|
|
94
|
-
|
|
95
|
-
const derived = true,
|
|
96
|
-
assignments = [],
|
|
97
|
-
substitutions = null,
|
|
98
|
-
qualifiedMetastatementNode = childNode; ///
|
|
99
|
-
|
|
100
|
-
qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, substitutions, assignments, derived, localMetaContext);
|
|
101
|
-
|
|
102
|
-
if (qualifiedMetastatementVerified) {
|
|
103
|
-
const assignmentAssigned = assignAssignment(assignments, localMetaContext);
|
|
104
|
-
|
|
105
|
-
qualifiedMetastatementVerified = assignmentAssigned; ///
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
if (qualifiedMetastatementVerified) {
|
|
109
|
-
const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
110
|
-
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
111
|
-
|
|
112
|
-
localMetaContext.addMetaproofStep(metaproofStep);
|
|
113
|
-
|
|
114
|
-
childVerified = qualifiedMetastatementVerified; ///
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
break;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
case UNQUALIFIED_METASTATEMENT_RULE_NAME: {
|
|
121
|
-
let unqualifiedMetastatementVerified;
|
|
122
|
-
|
|
123
|
-
const derived = true,
|
|
124
|
-
assignments = [],
|
|
125
|
-
unqualifiedMetastatementNode = childNode; ///
|
|
126
|
-
|
|
127
|
-
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localMetaContext);
|
|
128
|
-
|
|
129
|
-
if (unqualifiedMetastatementVerified) {
|
|
130
|
-
const assignmentAssigned = assignAssignment(assignments, localMetaContext);
|
|
131
|
-
|
|
132
|
-
unqualifiedMetastatementVerified = assignmentAssigned; ///
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
if (unqualifiedMetastatementVerified) {
|
|
136
|
-
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
137
|
-
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
138
|
-
|
|
139
|
-
localMetaContext.addMetaproofStep(metaproofStep);
|
|
140
|
-
|
|
141
|
-
childVerified = true;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return childVerified;
|
|
149
|
-
}
|