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,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import LocalContext from "../context/local";
|
|
4
|
+
import MetaproofStep from "../step/metaproof";
|
|
5
|
+
import verifyRuleSubproof from "../verify/ruleSubproof";
|
|
6
|
+
import verifyRuleSubDerivation from "../verify/ruleSubDerivation";
|
|
7
|
+
import verifyQualifiedStatement from "../verify/statement/qualified";
|
|
8
|
+
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
9
|
+
import verifyQualifiedMetastatement from "../verify/metastatement/qualified";
|
|
10
|
+
import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
|
|
11
|
+
|
|
12
|
+
import { nodeQuery } from "../utilities/query";
|
|
13
|
+
import { assignAssignment } from "../utilities/assignments";
|
|
14
|
+
|
|
15
|
+
const statementNodeQuery = nodeQuery("/qualifiedStatement|unqualifiedStatement/statement!"),
|
|
16
|
+
ruleSubproofNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/ruleSubproof!"),
|
|
17
|
+
metastatementNodeQuery = nodeQuery("/qualifiedMetastatement|unqualifiedMetastatement/metastatement!"),
|
|
18
|
+
qualifiedStatementNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/qualifiedStatement!"),
|
|
19
|
+
unqualifiedStatementNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/unqualifiedStatement!"),
|
|
20
|
+
qualifiedMetastatementNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/qualifiedMetastatement!"),
|
|
21
|
+
unqualifiedMetastatementNodeQuery = nodeQuery("/ruleProofStep|lastRuleProofStep/unqualifiedMetastatement!");
|
|
22
|
+
|
|
23
|
+
export default function verifyRuleProofStep(ruleProofStepNode, localMetaContext) {
|
|
24
|
+
let ruleProofStepVerified = false;
|
|
25
|
+
|
|
26
|
+
const ruleSubproofNode = ruleSubproofNodeQuery(ruleProofStepNode),
|
|
27
|
+
qualifiedStatementNode = qualifiedStatementNodeQuery(ruleProofStepNode),
|
|
28
|
+
unqualifiedStatementNode = unqualifiedStatementNodeQuery(ruleProofStepNode),
|
|
29
|
+
qualifiedMetastatementNode = qualifiedMetastatementNodeQuery(ruleProofStepNode),
|
|
30
|
+
unqualifiedMetastatementNode = unqualifiedMetastatementNodeQuery(ruleProofStepNode);
|
|
31
|
+
|
|
32
|
+
if (false) {
|
|
33
|
+
///
|
|
34
|
+
} else if (ruleSubproofNode !== null) {
|
|
35
|
+
let ruleSubproofVerified;
|
|
36
|
+
|
|
37
|
+
ruleSubproofVerified = verifyRuleSubproof(ruleSubproofNode, localMetaContext);
|
|
38
|
+
|
|
39
|
+
if (ruleSubproofVerified) {
|
|
40
|
+
const metaproofStep = MetaproofStep.fromRuleSubproofNode(ruleSubproofNode);
|
|
41
|
+
|
|
42
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
43
|
+
|
|
44
|
+
ruleProofStepVerified = true;
|
|
45
|
+
}
|
|
46
|
+
} else if (qualifiedStatementNode !== null) {
|
|
47
|
+
let qualifiedStatementVerified;
|
|
48
|
+
|
|
49
|
+
const assignments = [],
|
|
50
|
+
localContext = LocalContext.fromLocalMetaContext(localMetaContext);
|
|
51
|
+
|
|
52
|
+
qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext);
|
|
53
|
+
|
|
54
|
+
if (qualifiedStatementVerified) {
|
|
55
|
+
const assignmentAssigned = assignAssignment(assignments, localContext);
|
|
56
|
+
|
|
57
|
+
qualifiedStatementVerified = assignmentAssigned; ///
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (qualifiedStatementVerified) {
|
|
61
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
62
|
+
metaproofStep = MetaproofStep.fromStatementNode(statementNode);
|
|
63
|
+
|
|
64
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
65
|
+
|
|
66
|
+
ruleProofStepVerified = true;
|
|
67
|
+
}
|
|
68
|
+
} else if (unqualifiedStatementNode !== null) {
|
|
69
|
+
debugger
|
|
70
|
+
} else if (qualifiedMetastatementNode !== null) {
|
|
71
|
+
let qualifiedMetastatementVerified;
|
|
72
|
+
|
|
73
|
+
const assignments = [],
|
|
74
|
+
substitutions = null;
|
|
75
|
+
|
|
76
|
+
qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, substitutions, assignments, localMetaContext);
|
|
77
|
+
|
|
78
|
+
if (qualifiedMetastatementVerified) {
|
|
79
|
+
const assignmentAssigned = assignAssignment(assignments, localMetaContext);
|
|
80
|
+
|
|
81
|
+
qualifiedMetastatementVerified = assignmentAssigned; ///
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (qualifiedMetastatementVerified) {
|
|
85
|
+
const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
86
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
87
|
+
|
|
88
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
89
|
+
|
|
90
|
+
ruleProofStepVerified = qualifiedMetastatementVerified; ///
|
|
91
|
+
}
|
|
92
|
+
} else if (unqualifiedMetastatementNode !== null) {
|
|
93
|
+
let unqualifiedMetastatementVerified;
|
|
94
|
+
|
|
95
|
+
const derived = true,
|
|
96
|
+
assignments = [];
|
|
97
|
+
|
|
98
|
+
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localMetaContext);
|
|
99
|
+
|
|
100
|
+
if (unqualifiedMetastatementVerified) {
|
|
101
|
+
const assignmentAssigned = assignAssignment(assignments, localMetaContext);
|
|
102
|
+
|
|
103
|
+
unqualifiedMetastatementVerified = assignmentAssigned; ///
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (unqualifiedMetastatementVerified) {
|
|
107
|
+
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
108
|
+
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
109
|
+
|
|
110
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
111
|
+
|
|
112
|
+
ruleProofStepVerified = true;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return ruleProofStepVerified;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
Object.assign(verifyRuleSubDerivation, {
|
|
120
|
+
verifyRuleProofStep
|
|
121
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { nodesQuery } from "../utilities/query";
|
|
4
|
+
|
|
5
|
+
const ruleProofStepNodesQuery = nodesQuery("/ruleSubDerivation/ruleProofStep|lastRuleProofStep");
|
|
6
|
+
|
|
7
|
+
export default function verifyRuleSubDerivation(ruleSubDerivationNode, localMetaContext) {
|
|
8
|
+
let ruleSubDerivationVerified;
|
|
9
|
+
|
|
10
|
+
const ruleProofStepNodes = ruleProofStepNodesQuery(ruleSubDerivationNode);
|
|
11
|
+
|
|
12
|
+
ruleSubDerivationVerified = ruleProofStepNodes.every((ruleProofStepNode) => {
|
|
13
|
+
const { verifyRuleProofStep } = verifyRuleSubDerivation,
|
|
14
|
+
ruleProofStepVerified = verifyRuleProofStep(ruleProofStepNode, localMetaContext);
|
|
15
|
+
|
|
16
|
+
if (ruleProofStepVerified) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return ruleSubDerivationVerified;
|
|
22
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import verifyPremises from "../verify/premises";
|
|
4
|
+
import LocalMetaContext from "../context/localMeta";
|
|
5
|
+
import verifyRuleSubDerivation from "../verify/ruleSubDerivation";
|
|
6
|
+
|
|
7
|
+
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
8
|
+
|
|
9
|
+
const premiseNodesQuery = nodesQuery("/ruleSubproof/premise"),
|
|
10
|
+
ruleSubDerivationNodeQuery = nodeQuery("/ruleSubproof/ruleSubDerivation");
|
|
11
|
+
|
|
12
|
+
export default function verifyRuleSubproof(ruleSubproofNode, localMetaContext) {
|
|
13
|
+
let ruleSubproofVerified = false;
|
|
14
|
+
|
|
15
|
+
localMetaContext = LocalMetaContext.fromLocalMetaContext(localMetaContext); ///
|
|
16
|
+
|
|
17
|
+
const premises = [],
|
|
18
|
+
premiseNodes = premiseNodesQuery(ruleSubproofNode),
|
|
19
|
+
premisesVerified = verifyPremises(premiseNodes, premises, localMetaContext);
|
|
20
|
+
|
|
21
|
+
if (premisesVerified) {
|
|
22
|
+
const ruleSubDerivationNode = ruleSubDerivationNodeQuery(ruleSubproofNode),
|
|
23
|
+
ruleSubDerivationVerified = verifyRuleSubDerivation(ruleSubDerivationNode, localMetaContext);
|
|
24
|
+
|
|
25
|
+
if (ruleSubDerivationVerified) {
|
|
26
|
+
ruleSubproofVerified = true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return ruleSubproofVerified;
|
|
31
|
+
}
|
|
32
|
+
|
|
@@ -1,241 +1,199 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import verifyEquality from "../equality";
|
|
4
|
-
import verifyTypeAssertion from "../typeAssertion";
|
|
5
|
-
|
|
6
3
|
import { nodeQuery } from "../../utilities/query";
|
|
4
|
+
import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
|
|
7
5
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
typeAssertionNodeQuery = nodeQuery("/qualifiedStatement/statement/typeAssertion!"),
|
|
11
|
-
referenceMetavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
|
|
12
|
-
|
|
13
|
-
export default function verifyQualifiedStatement(qualifiedStatementNode, assignments, derived, localContext) {
|
|
14
|
-
let qualifiedStatementVerified = false;
|
|
6
|
+
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
7
|
+
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
|
|
15
8
|
|
|
16
|
-
|
|
9
|
+
export default function verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext) {
|
|
10
|
+
let qualifiedStatementVerified;
|
|
17
11
|
|
|
18
|
-
|
|
19
|
-
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
12
|
+
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
20
13
|
|
|
21
|
-
|
|
14
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
|
|
22
15
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
16
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
17
|
+
verifyQualifiedStatementFunctions = [
|
|
18
|
+
verifyQualifiedStatementAAgainstRule,
|
|
19
|
+
verifyQualifiedStatementAAgainstAxiom,
|
|
20
|
+
verifyQualifiedStatementAAgainstLemma,
|
|
21
|
+
verifyQualifiedStatementAAgainstTheorem,
|
|
22
|
+
verifyQualifiedStatementAAgainstConjecture
|
|
23
|
+
];
|
|
31
24
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (qualifiedStatementVerified) {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
25
|
+
qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
|
|
26
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, metavariableNode, localContext);
|
|
39
27
|
|
|
40
28
|
if (qualifiedStatementVerified) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
verifyQualifiedStatementAsEquality,
|
|
45
|
-
verifyQualifiedStatementAsTypeAssertion
|
|
46
|
-
];
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
47
32
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
33
|
+
if (qualifiedStatementVerified) {
|
|
34
|
+
const derived = false,
|
|
35
|
+
statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
36
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
|
|
37
|
+
const verifiedAhead = true;
|
|
51
38
|
|
|
52
|
-
|
|
53
|
-
|
|
39
|
+
return verifiedAhead;
|
|
40
|
+
});
|
|
54
41
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}
|
|
42
|
+
qualifiedStatementVerified = statementVerified; ///
|
|
43
|
+
}
|
|
60
44
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
45
|
+
if (qualifiedStatementVerified) {
|
|
46
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement.`, qualifiedStatementNode);
|
|
64
47
|
}
|
|
65
48
|
|
|
66
49
|
return qualifiedStatementVerified;
|
|
67
50
|
}
|
|
68
51
|
|
|
69
|
-
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode,
|
|
52
|
+
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariableNode, localContext) {
|
|
70
53
|
let qualifiedStatementVerifiedAgainstRule = false;
|
|
71
54
|
|
|
72
|
-
const
|
|
73
|
-
rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
55
|
+
const rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
74
56
|
|
|
75
57
|
if (rule !== null) {
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
statementLocalContext = localContext, ///
|
|
58
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
59
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
79
60
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
80
61
|
|
|
81
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
62
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' rule...`, qualifiedStatementNode);
|
|
82
63
|
|
|
83
|
-
const ruleMatchesStatement = rule.matchStatement(statementNode,
|
|
64
|
+
const ruleMatchesStatement = rule.matchStatement(statementNode, localContext);
|
|
84
65
|
|
|
85
66
|
qualifiedStatementVerifiedAgainstRule = ruleMatchesStatement; ///
|
|
86
67
|
|
|
87
68
|
if (qualifiedStatementVerifiedAgainstRule) {
|
|
88
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
69
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' rule.`, qualifiedStatementNode);
|
|
89
70
|
}
|
|
90
71
|
}
|
|
91
72
|
|
|
92
73
|
return qualifiedStatementVerifiedAgainstRule;
|
|
93
74
|
}
|
|
94
75
|
|
|
95
|
-
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode,
|
|
76
|
+
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavariableNode, localContext) {
|
|
96
77
|
let qualifiedStatementVerifiedAgainstAxiom = false;
|
|
97
78
|
|
|
98
|
-
const
|
|
99
|
-
axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
79
|
+
const axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
100
80
|
|
|
101
81
|
if (axiom !== null) {
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
statementLocalContext = localContext, ///
|
|
82
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
83
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
105
84
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
106
85
|
|
|
107
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
86
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' axiom...`, qualifiedStatementNode);
|
|
108
87
|
|
|
109
|
-
const axiomMatchesStatement = axiom.matchStatement(statementNode,
|
|
88
|
+
const axiomMatchesStatement = axiom.matchStatement(statementNode, localContext);
|
|
110
89
|
|
|
111
90
|
qualifiedStatementVerifiedAgainstAxiom = axiomMatchesStatement; ///
|
|
112
91
|
|
|
113
92
|
if (qualifiedStatementVerifiedAgainstAxiom) {
|
|
114
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
93
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' axiom.`, qualifiedStatementNode);
|
|
115
94
|
}
|
|
116
95
|
}
|
|
117
96
|
|
|
118
97
|
return qualifiedStatementVerifiedAgainstAxiom;
|
|
119
98
|
}
|
|
120
99
|
|
|
121
|
-
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode,
|
|
100
|
+
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavariableNode, localContext) {
|
|
122
101
|
let qualifiedStatementVerifiedAgainstLemma = false;
|
|
123
102
|
|
|
124
|
-
const
|
|
125
|
-
lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
103
|
+
const lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
126
104
|
|
|
127
105
|
if (lemma !== null) {
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
statementLocalContext = localContext, ///
|
|
106
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
107
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
131
108
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
132
109
|
|
|
133
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
110
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' lemma...`, qualifiedStatementNode);
|
|
134
111
|
|
|
135
|
-
const lemmaMatchesStatement = lemma.matchStatement(statementNode,
|
|
112
|
+
const lemmaMatchesStatement = lemma.matchStatement(statementNode, localContext);
|
|
136
113
|
|
|
137
114
|
qualifiedStatementVerifiedAgainstLemma = lemmaMatchesStatement; ///
|
|
138
115
|
|
|
139
116
|
if (qualifiedStatementVerifiedAgainstLemma) {
|
|
140
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
117
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' lemma.`, qualifiedStatementNode);
|
|
141
118
|
}
|
|
142
119
|
}
|
|
143
120
|
|
|
144
121
|
return qualifiedStatementVerifiedAgainstLemma;
|
|
145
122
|
}
|
|
146
123
|
|
|
147
|
-
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode,
|
|
124
|
+
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavariableNode, localContext) {
|
|
148
125
|
let qualifiedStatementVerifiedAgainstTheorem = false;
|
|
149
126
|
|
|
150
|
-
const
|
|
151
|
-
theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
127
|
+
const theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
152
128
|
|
|
153
129
|
if (theorem !== null) {
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
statementLocalContext = localContext, ///
|
|
130
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
131
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
157
132
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
158
133
|
|
|
159
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
134
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' theorem...`, qualifiedStatementNode);
|
|
160
135
|
|
|
161
|
-
const theoremMatchesStatement = theorem.matchStatement(statementNode,
|
|
136
|
+
const theoremMatchesStatement = theorem.matchStatement(statementNode, localContext);
|
|
162
137
|
|
|
163
138
|
qualifiedStatementVerifiedAgainstTheorem = theoremMatchesStatement; ///
|
|
164
139
|
|
|
165
140
|
if (qualifiedStatementVerifiedAgainstTheorem) {
|
|
166
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
141
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' theorem.`, qualifiedStatementNode);
|
|
167
142
|
}
|
|
168
143
|
}
|
|
169
144
|
|
|
170
145
|
return qualifiedStatementVerifiedAgainstTheorem;
|
|
171
146
|
}
|
|
172
147
|
|
|
173
|
-
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode,
|
|
148
|
+
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, metavariableNode, localContext) {
|
|
174
149
|
let qualifiedStatementVerifiedAgainstConjecture = false;
|
|
175
150
|
|
|
176
|
-
const
|
|
177
|
-
conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
151
|
+
const conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
178
152
|
|
|
179
153
|
if (conjecture !== null) {
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
statementLocalContext = localContext, ///
|
|
154
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
155
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
183
156
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
184
157
|
|
|
185
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${
|
|
158
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' conjecture...`, qualifiedStatementNode);
|
|
186
159
|
|
|
187
|
-
const conjectureMatchesStatement = conjecture.matchStatement(statementNode,
|
|
160
|
+
const conjectureMatchesStatement = conjecture.matchStatement(statementNode, localContext);
|
|
188
161
|
|
|
189
162
|
qualifiedStatementVerifiedAgainstConjecture = conjectureMatchesStatement; ///
|
|
190
163
|
|
|
191
164
|
if (qualifiedStatementVerifiedAgainstConjecture) {
|
|
192
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${
|
|
165
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' conjecture.`, qualifiedStatementNode);
|
|
193
166
|
}
|
|
194
167
|
}
|
|
195
168
|
|
|
196
169
|
return qualifiedStatementVerifiedAgainstConjecture;
|
|
197
170
|
}
|
|
198
171
|
|
|
199
|
-
function
|
|
200
|
-
let
|
|
201
|
-
|
|
202
|
-
const equalityNode = equalityNodeQuery(qualifiedStatementNode);
|
|
172
|
+
function verifyStatement(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
173
|
+
let statementVerified;
|
|
203
174
|
|
|
204
|
-
|
|
205
|
-
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
175
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
206
176
|
|
|
207
|
-
|
|
177
|
+
localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
|
|
208
178
|
|
|
209
|
-
|
|
179
|
+
const verifyStatementFunctions = [
|
|
180
|
+
verifyStatementAsEquality,
|
|
181
|
+
verifyStatementAsTypeAssertion
|
|
182
|
+
];
|
|
210
183
|
|
|
211
|
-
|
|
184
|
+
verifyStatementFunctions.some((verifyStatementFunction) => {
|
|
185
|
+
const statementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext, verifyAhead);
|
|
212
186
|
|
|
213
|
-
if (
|
|
214
|
-
|
|
187
|
+
if (statementVerified) {
|
|
188
|
+
return true;
|
|
215
189
|
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
return statementVerifiedAsEquality;
|
|
219
|
-
}
|
|
190
|
+
});
|
|
220
191
|
|
|
221
|
-
|
|
222
|
-
let statementVerifiedAsTypeAssertion = true; ///
|
|
192
|
+
statementVerified = true; ///
|
|
223
193
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (typeAssertionNode !== null) {
|
|
227
|
-
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
228
|
-
|
|
229
|
-
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement as a type assertion...`, qualifiedStatementNode);
|
|
230
|
-
|
|
231
|
-
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, verifyAhead);
|
|
232
|
-
|
|
233
|
-
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
234
|
-
|
|
235
|
-
if (statementVerifiedAsTypeAssertion) {
|
|
236
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement as a type assertion.`, qualifiedStatementNode);
|
|
237
|
-
}
|
|
194
|
+
if (statementVerified) {
|
|
195
|
+
localContext.debug(`...verified the '${statementString}' statement.`, statementNode);
|
|
238
196
|
}
|
|
239
197
|
|
|
240
|
-
return
|
|
198
|
+
return statementVerified;
|
|
241
199
|
}
|
|
@@ -9,32 +9,29 @@ const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
|
|
|
9
9
|
export default function verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
|
|
10
10
|
let unqualifiedStatementVerified = false;
|
|
11
11
|
|
|
12
|
-
const statementNode = statementNodeQuery(unqualifiedStatementNode)
|
|
12
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
13
|
+
unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
15
|
+
localContext.trace(`Verifying the '${unqualifiedStatementString}' unqualified statement...`, unqualifiedStatementNode);
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
if (derived) {
|
|
18
|
+
const statementMatches = localContext.matchStatement(statementNode);
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
unqualifiedStatementVerified = statementMatches; ///
|
|
23
|
-
}
|
|
20
|
+
unqualifiedStatementVerified = statementMatches; ///
|
|
21
|
+
}
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
if (!unqualifiedStatementVerified) {
|
|
24
|
+
const statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
|
|
25
|
+
const verifiedAhead = true;
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
return verifiedAhead;
|
|
28
|
+
});
|
|
31
29
|
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
unqualifiedStatementVerified = statementVerified; ///
|
|
31
|
+
}
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
33
|
+
if (unqualifiedStatementVerified) {
|
|
34
|
+
localContext.debug(`...verified the '${unqualifiedStatementString}' unqualified statement.`, unqualifiedStatementNode);
|
|
38
35
|
}
|
|
39
36
|
|
|
40
37
|
return unqualifiedStatementVerified;
|
package/src/verify/statement.js
CHANGED
|
@@ -71,7 +71,7 @@ Object.assign(statementAgainstCombinatorNodesVerifier, {
|
|
|
71
71
|
|
|
72
72
|
export default verifyStatement;
|
|
73
73
|
|
|
74
|
-
function verifyStatementAsEquality(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
74
|
+
export function verifyStatementAsEquality(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
75
75
|
let statementVerifiedAsEquality = false;
|
|
76
76
|
|
|
77
77
|
const equalityNode = equalityNodeQuery(statementNode);
|
|
@@ -93,7 +93,7 @@ function verifyStatementAsEquality(statementNode, assignments, derived, localCon
|
|
|
93
93
|
return statementVerifiedAsEquality;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
96
|
+
export function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
97
97
|
let statementVerifiedAsTypeAssertion = false;
|
|
98
98
|
|
|
99
99
|
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { nodesQuery } from "../utilities/query";
|
|
4
|
+
|
|
5
|
+
const proofStepNodesQuery = nodesQuery("/subDerivation/proofStep|lastProofStep");
|
|
6
|
+
|
|
7
|
+
export default function verifySubDerivation(subDerivationNode, localMetaContext) {
|
|
8
|
+
let subDerivationVerified;
|
|
9
|
+
|
|
10
|
+
const proofStepNodes = proofStepNodesQuery(subDerivationNode);
|
|
11
|
+
|
|
12
|
+
subDerivationVerified = proofStepNodes.every((proofStepNode) => {
|
|
13
|
+
const { verifyProofStep } = verifySubDerivation,
|
|
14
|
+
proofStepVerified = verifyProofStep(proofStepNode, localMetaContext);
|
|
15
|
+
|
|
16
|
+
if (proofStepVerified) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return subDerivationVerified;
|
|
22
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import LocalContext from "../context/local";
|
|
4
|
+
import verifySuppositions from "../verify/suppositions";
|
|
5
|
+
import verifySubDerivation from "../verify/subDerivation";
|
|
6
|
+
|
|
7
|
+
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
8
|
+
|
|
9
|
+
const suppositionNodesQuery = nodesQuery("/subproof/supposition"),
|
|
10
|
+
subDerivationNodeQuery = nodeQuery("/subproof/subDerivation");
|
|
11
|
+
|
|
12
|
+
export default function verifySubproof(subproofNode, localContext) {
|
|
13
|
+
let subproofVerified = false;
|
|
14
|
+
|
|
15
|
+
localContext = LocalContext.fromLocalContext(localContext); ///
|
|
16
|
+
|
|
17
|
+
const suppositions = [],
|
|
18
|
+
suppositionNodes = suppositionNodesQuery(subproofNode),
|
|
19
|
+
suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, localContext);
|
|
20
|
+
|
|
21
|
+
if (suppositionsVerified) {
|
|
22
|
+
const subDerivationNode = subDerivationNodeQuery(subproofNode),
|
|
23
|
+
subDerivationVerified = verifySubDerivation(subDerivationNode, localContext);
|
|
24
|
+
|
|
25
|
+
if (subDerivationVerified) {
|
|
26
|
+
subproofVerified = true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return subproofVerified;
|
|
31
|
+
}
|
|
32
|
+
|