occam-verify-cli 0.0.922 → 0.0.924
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/axiom.js +9 -9
- package/lib/conclusion.js +11 -41
- package/lib/conjecture.js +9 -9
- package/lib/constants.js +1 -13
- package/lib/context/file.js +3 -3
- package/lib/context/local.js +19 -59
- package/lib/declaration.js +15 -15
- package/lib/lemma.js +9 -9
- package/lib/metaLemma.js +7 -7
- package/lib/metatheorem.js +7 -7
- package/lib/metavariable.js +8 -1
- package/lib/mixins/nodesVerifier/metaLevel.js +6 -6
- package/lib/premise.js +14 -91
- package/lib/{step/proof.js → proofStep.js} +1 -1
- package/lib/rule.js +1 -45
- package/lib/ruleNames.js +1 -9
- package/lib/substitution/statementForMetavariable.js +9 -1
- package/lib/substitution.js +1 -8
- package/lib/supposition.js +55 -1
- package/lib/theorem.js +9 -9
- package/lib/topLevelAssertion.js +186 -0
- package/lib/utilities/customGrammar.js +2 -2
- package/lib/utilities/match.js +13 -50
- package/lib/utilities/node.js +2 -27
- package/lib/utilities/tokens.js +1 -8
- package/lib/utilities/verify.js +8 -24
- package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +29 -29
- package/lib/verifier/nodes/metaLevel.js +13 -13
- package/lib/verify/axiom.js +4 -4
- package/lib/verify/conclusion.js +10 -11
- package/lib/verify/conjecture.js +4 -4
- package/lib/verify/containedAssertion.js +91 -0
- package/lib/verify/declaration.js +7 -7
- package/lib/verify/definedAssertion.js +115 -0
- package/lib/verify/derivation.js +7 -7
- package/lib/verify/frame.js +2 -2
- package/lib/verify/judgement.js +2 -2
- package/lib/verify/lemma.js +5 -5
- package/lib/verify/metaLemma.js +12 -12
- package/lib/verify/metastatement.js +48 -67
- package/lib/verify/metatheorem.js +12 -12
- package/lib/verify/metavariable.js +2 -2
- package/lib/verify/premise.js +11 -30
- package/lib/verify/proof.js +3 -3
- package/lib/verify/proofStep.js +8 -8
- package/lib/verify/rule.js +10 -10
- package/lib/verify/statement/qualified.js +38 -15
- package/lib/verify/statement/unqualified.js +38 -10
- package/lib/verify/statement.js +85 -92
- package/lib/verify/subDerivation.js +3 -3
- package/lib/verify/subproof.js +3 -3
- package/lib/verify/supposition.js +3 -3
- package/lib/verify/termAsConstructor.js +2 -2
- package/lib/verify/theorem.js +4 -4
- package/package.json +2 -2
- package/src/axiom.js +4 -4
- package/src/conclusion.js +13 -52
- package/src/conjecture.js +4 -4
- package/src/constants.js +0 -3
- package/src/context/file.js +2 -2
- package/src/context/local.js +21 -67
- package/src/declaration.js +19 -19
- package/src/lemma.js +4 -4
- package/src/metaLemma.js +4 -4
- package/src/metatheorem.js +4 -4
- package/src/metavariable.js +6 -0
- package/src/mixins/nodesVerifier/metaLevel.js +8 -8
- package/src/premise.js +20 -137
- package/src/rule.js +0 -67
- package/src/ruleNames.js +0 -2
- package/src/substitution/statementForMetavariable.js +14 -0
- package/src/substitution.js +0 -6
- package/src/supposition.js +46 -0
- package/src/theorem.js +4 -4
- package/src/{axiomLemmaTheoremConjecture.js → topLevelAssertion.js} +36 -23
- package/src/utilities/customGrammar.js +1 -2
- package/src/utilities/match.js +13 -60
- package/src/utilities/node.js +3 -32
- package/src/utilities/tokens.js +0 -8
- package/src/utilities/verify.js +4 -20
- package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +36 -37
- package/src/verifier/nodes/metaLevel.js +17 -17
- package/src/verify/axiom.js +5 -4
- package/src/verify/conclusion.js +9 -13
- package/src/verify/conjecture.js +5 -4
- package/src/verify/{statementAsContainedAssertion.js → containedAssertion.js} +20 -36
- package/src/verify/declaration.js +8 -8
- package/src/verify/{statementAsDefinedAssertion.js → definedAssertion.js} +22 -37
- package/src/verify/derivation.js +6 -6
- package/src/verify/frame.js +1 -1
- package/src/verify/judgement.js +1 -1
- package/src/verify/lemma.js +8 -5
- package/src/verify/metaLemma.js +24 -24
- package/src/verify/metastatement.js +48 -76
- package/src/verify/metatheorem.js +23 -23
- package/src/verify/metavariable.js +1 -1
- package/src/verify/premise.js +14 -46
- package/src/verify/proof.js +2 -2
- package/src/verify/proofStep.js +4 -4
- package/src/verify/rule.js +11 -11
- package/src/verify/statement/qualified.js +56 -21
- package/src/verify/statement/unqualified.js +52 -10
- package/src/verify/statement.js +133 -39
- package/src/verify/subDerivation.js +2 -2
- package/src/verify/subproof.js +2 -2
- package/src/verify/supposition.js +1 -1
- package/src/verify/termAsConstructor.js +2 -2
- package/src/verify/theorem.js +7 -4
- package/lib/axiomLemmaTheoremConjecture.js +0 -174
- package/lib/metaConsequent.js +0 -108
- package/lib/metaLemmaMetatheorem.js +0 -191
- package/lib/metaSupposition.js +0 -160
- package/lib/node/metastatement/bracketed.js +0 -16
- package/lib/step/metaproof.js +0 -106
- package/lib/substitution/metastatementForMetavariable.js +0 -173
- package/lib/verify/metaConsequent.js +0 -50
- package/lib/verify/metaDerivation.js +0 -31
- package/lib/verify/metaSubDerivation.js +0 -25
- package/lib/verify/metaSubproof.js +0 -34
- package/lib/verify/metaSupposition.js +0 -61
- package/lib/verify/metaSuppositions.js +0 -28
- package/lib/verify/metaproof.js +0 -31
- package/lib/verify/metaproofStep.js +0 -98
- package/lib/verify/metastatement/qualified.js +0 -95
- package/lib/verify/metastatement/unqualified.js +0 -37
- package/lib/verify/metastatementAsContainedAssertion.js +0 -109
- package/lib/verify/metastatementAsDefinedAssertion.js +0 -132
- package/lib/verify/metavariableAgainstMetastatement.js +0 -44
- package/lib/verify/statementAsContainedAssertion.js +0 -109
- package/lib/verify/statementAsDefinedAssertion.js +0 -132
- package/src/metaConsequent.js +0 -83
- package/src/metaLemmaMetatheorem.js +0 -188
- package/src/metaSupposition.js +0 -127
- package/src/node/metastatement/bracketed.js +0 -9
- package/src/step/metaproof.js +0 -73
- package/src/substitution/metastatementForMetavariable.js +0 -90
- package/src/verify/metaConsequent.js +0 -61
- package/src/verify/metaDerivation.js +0 -23
- package/src/verify/metaSubDerivation.js +0 -22
- package/src/verify/metaSubproof.js +0 -32
- package/src/verify/metaSupposition.js +0 -78
- package/src/verify/metaSuppositions.js +0 -17
- package/src/verify/metaproof.js +0 -28
- package/src/verify/metaproofStep.js +0 -137
- package/src/verify/metastatement/qualified.js +0 -130
- package/src/verify/metastatement/unqualified.js +0 -34
- package/src/verify/metastatementAsContainedAssertion.js +0 -127
- package/src/verify/metastatementAsDefinedAssertion.js +0 -156
- package/src/verify/metavariableAgainstMetastatement.js +0 -42
- /package/src/{step/proof.js → proofStep.js} +0 -0
|
@@ -2,142 +2,114 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyJudgement from "../verify/judgement";
|
|
4
4
|
import metaLevelNodeVerifier from "../verifier/node/metaLevel";
|
|
5
|
-
import verifyMetastatementAsDefinedAssertion from "./metastatementAsDefinedAssertion";
|
|
6
|
-
import verifyMetastatementAsContainedAssertion from "./metastatementAsContainedAssertion";
|
|
7
5
|
|
|
8
6
|
import { nodeQuery } from "../utilities/query";
|
|
9
7
|
|
|
10
|
-
const judgementNodeQuery = nodeQuery("/
|
|
8
|
+
const judgementNodeQuery = nodeQuery("/statement/judgement!");
|
|
11
9
|
|
|
12
|
-
function
|
|
13
|
-
let
|
|
10
|
+
function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
11
|
+
let statementVerified;
|
|
14
12
|
|
|
15
|
-
const
|
|
13
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
16
14
|
|
|
17
|
-
localContext.trace(`Verifying the '${
|
|
15
|
+
localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
|
|
18
16
|
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
verifyMetastatementAsDefinedAssertion,
|
|
22
|
-
verifyMetastatementAsContainedAssertion,
|
|
23
|
-
verifyMetastatementAsIs
|
|
17
|
+
const verifyStatementFunctions = [
|
|
18
|
+
verifyStatementAsIs
|
|
24
19
|
];
|
|
25
20
|
|
|
26
|
-
|
|
27
|
-
const
|
|
21
|
+
statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
|
|
22
|
+
const statementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
|
|
28
23
|
|
|
29
|
-
if (
|
|
24
|
+
if (statementVerified) {
|
|
30
25
|
return true;
|
|
31
26
|
}
|
|
32
27
|
});
|
|
33
28
|
|
|
34
|
-
if (
|
|
35
|
-
localContext.debug(`...verified the '${
|
|
29
|
+
if (statementVerified) {
|
|
30
|
+
localContext.debug(`...verified the '${statementString}' statement.`, statementNode);
|
|
36
31
|
}
|
|
37
32
|
|
|
38
|
-
return
|
|
33
|
+
return statementVerified;
|
|
39
34
|
}
|
|
40
35
|
|
|
41
36
|
Object.assign(metaLevelNodeVerifier, {
|
|
42
|
-
|
|
37
|
+
verifyStatement
|
|
43
38
|
});
|
|
44
39
|
|
|
45
|
-
export default
|
|
40
|
+
export default verifyStatement;
|
|
46
41
|
|
|
47
|
-
function
|
|
48
|
-
let
|
|
42
|
+
function verifyStatementAsIs(statementNode, assignments, derived, localContext) {
|
|
43
|
+
let statementVerifiedAsIs;
|
|
49
44
|
|
|
50
|
-
const
|
|
45
|
+
const statementJudgement = isStatementJudgement(statementNode);
|
|
51
46
|
|
|
52
|
-
if (
|
|
53
|
-
const
|
|
47
|
+
if (!statementJudgement) {
|
|
48
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
54
49
|
|
|
55
|
-
localContext.trace(`Verifying the '${
|
|
50
|
+
localContext.trace(`Verifying the '${statementString}' statement as is...`, statementNode);
|
|
56
51
|
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
metastatementVerifiedAsJudgement = judgementVerified; ///
|
|
61
|
-
|
|
62
|
-
if (metastatementVerifiedAsJudgement) {
|
|
63
|
-
localContext.debug(`...verified the '${metastatementString}' metastatement as a judgement.`, metastatementNode);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return metastatementVerifiedAsJudgement;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function verifyMetastatementAsIs(metastatementNode, assignments, derived, localContext) {
|
|
71
|
-
let metastatementVerifiedAsIs;
|
|
72
|
-
|
|
73
|
-
const metastatementJudgement = isMetastatementJudgement(metastatementNode);
|
|
74
|
-
|
|
75
|
-
if (!metastatementJudgement) {
|
|
76
|
-
const metastatementString = localContext.nodeAsString(metastatementNode);
|
|
77
|
-
|
|
78
|
-
localContext.trace(`Verifying the '${metastatementString}' metastatement as is...`, metastatementNode);
|
|
79
|
-
|
|
80
|
-
const verifyMetastatementAsIsFunctions = [
|
|
81
|
-
verifyDerivedMetastatementAsIs,
|
|
82
|
-
verifyStatedMetastatementAsIs
|
|
52
|
+
const verifyStatementAsIsFunctions = [
|
|
53
|
+
verifyDerivedStatementAsIs,
|
|
54
|
+
verifyStatedStatementAsIs
|
|
83
55
|
];
|
|
84
56
|
|
|
85
|
-
|
|
86
|
-
const
|
|
57
|
+
statementVerifiedAsIs = verifyStatementAsIsFunctions.some((verifyStatementAsIsFunction) => {
|
|
58
|
+
const statementVerifiedAsIs = verifyStatementAsIsFunction(statementNode, assignments, derived, localContext);
|
|
87
59
|
|
|
88
|
-
if (
|
|
60
|
+
if (statementVerifiedAsIs) {
|
|
89
61
|
return true;
|
|
90
62
|
}
|
|
91
63
|
});
|
|
92
64
|
|
|
93
|
-
if (
|
|
94
|
-
localContext.debug(`...verified the '${
|
|
65
|
+
if (statementVerifiedAsIs) {
|
|
66
|
+
localContext.debug(`...verified the '${statementString}' statement as is.`, statementNode);
|
|
95
67
|
}
|
|
96
68
|
}
|
|
97
69
|
|
|
98
|
-
return
|
|
70
|
+
return statementVerifiedAsIs;
|
|
99
71
|
}
|
|
100
72
|
|
|
101
|
-
function
|
|
102
|
-
let
|
|
73
|
+
function verifyDerivedStatementAsIs(statementNode, assignments, derived, localContext) {
|
|
74
|
+
let derivedStatementVerifiedAsIs = false;
|
|
103
75
|
|
|
104
76
|
if (derived) {
|
|
105
|
-
const
|
|
77
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
106
78
|
|
|
107
|
-
localContext.debug(`Cannot verify the
|
|
79
|
+
localContext.debug(`Cannot verify the '${statementString}' derived statement as is.`, statementNode);
|
|
108
80
|
}
|
|
109
81
|
|
|
110
|
-
return
|
|
82
|
+
return derivedStatementVerifiedAsIs;
|
|
111
83
|
}
|
|
112
84
|
|
|
113
|
-
function
|
|
114
|
-
let
|
|
85
|
+
function verifyStatedStatementAsIs(statementNode, assignments, derived, localContext) {
|
|
86
|
+
let statedStatementVerifiedAsIs = false;
|
|
115
87
|
|
|
116
88
|
if (!derived) {
|
|
117
|
-
const
|
|
89
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
118
90
|
|
|
119
|
-
localContext.trace(`Verifying the
|
|
91
|
+
localContext.trace(`Verifying the '${statementString}' stated statement as is...`, statementNode);
|
|
120
92
|
|
|
121
|
-
const nonTerminalNode =
|
|
93
|
+
const nonTerminalNode = statementNode, ///
|
|
122
94
|
nonTerminalNodeVerified = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
123
95
|
const verifiedAhead = true;
|
|
124
96
|
|
|
125
97
|
return verifiedAhead;
|
|
126
98
|
});
|
|
127
99
|
|
|
128
|
-
|
|
100
|
+
statedStatementVerifiedAsIs = nonTerminalNodeVerified; ///
|
|
129
101
|
|
|
130
|
-
if (
|
|
131
|
-
localContext.debug(`...verified the
|
|
102
|
+
if (statedStatementVerifiedAsIs) {
|
|
103
|
+
localContext.debug(`...verified the '${statementString}' stated statement as is.`, statementNode);
|
|
132
104
|
}
|
|
133
105
|
}
|
|
134
106
|
|
|
135
|
-
return
|
|
107
|
+
return statedStatementVerifiedAsIs;
|
|
136
108
|
}
|
|
137
109
|
|
|
138
|
-
function
|
|
139
|
-
const judgementNode = judgementNodeQuery(
|
|
140
|
-
|
|
110
|
+
function isStatementJudgement(statementNode) {
|
|
111
|
+
const judgementNode = judgementNodeQuery(statementNode),
|
|
112
|
+
statementJudgement = (judgementNode !== null);
|
|
141
113
|
|
|
142
|
-
return
|
|
114
|
+
return statementJudgement;
|
|
143
115
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import verifyProof from "../verify/proof";
|
|
3
4
|
import Metatheorem from "../metatheorem";
|
|
4
5
|
import verifyLabels from "../verify/labels";
|
|
5
6
|
import LocalContext from "../context/local";
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import verifyMetaSuppositions from "../verify/metaSuppositions";
|
|
7
|
+
import verifyConsequent from "../verify/consequent";
|
|
8
|
+
import verifySuppositions from "../verify/suppositions";
|
|
9
9
|
|
|
10
10
|
import { first } from "../utilities/array";
|
|
11
11
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
12
12
|
|
|
13
13
|
const labelNodesQuery = nodesQuery("/metatheorem/label"),
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
proofNodeQuery = nodeQuery("/metatheorem/proof!"),
|
|
15
|
+
consequentNodeQuery = nodeQuery("/metatheorem/consequent!"),
|
|
16
|
+
suppositionsNodeQuery = nodesQuery("/metatheorem/supposition");
|
|
17
17
|
|
|
18
18
|
export default function verifyMetatheorem(metatheoremNode, fileContext) {
|
|
19
19
|
let metatheoremVerified = false;
|
|
@@ -27,26 +27,26 @@ export default function verifyMetatheorem(metatheoremNode, fileContext) {
|
|
|
27
27
|
labelsVerified = verifyLabels(labelNodes, labels, fileContext);
|
|
28
28
|
|
|
29
29
|
if (labelsVerified) {
|
|
30
|
-
const localContext = LocalContext.fromFileContext(fileContext),
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
metaSuppositionsVerified = verifyMetaSuppositions(metaSuppositionNodes, metaSuppositions, substitutions, localContext);
|
|
30
|
+
const localContext = LocalContext.fromFileContext(fileContext),
|
|
31
|
+
suppositions = [],
|
|
32
|
+
suppositionNodes = suppositionsNodeQuery(metatheoremNode),
|
|
33
|
+
suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, localContext);
|
|
35
34
|
|
|
36
|
-
if (
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
if (suppositionsVerified) {
|
|
36
|
+
const consequents = [],
|
|
37
|
+
consequentNode = consequentNodeQuery(metatheoremNode),
|
|
38
|
+
consequentVerified = verifyConsequent(consequentNode, consequents, localContext);
|
|
40
39
|
|
|
41
|
-
if (
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
if (consequentVerified) {
|
|
41
|
+
const proofNode = proofNodeQuery(metatheoremNode),
|
|
42
|
+
firstConsequent = first(consequents),
|
|
43
|
+
consequent = firstConsequent, ///
|
|
44
|
+
substitutions = [],
|
|
45
|
+
statementNode = consequent.getStatementNode(),
|
|
46
|
+
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
47
47
|
|
|
48
|
-
if (
|
|
49
|
-
const metatheorem = Metatheorem.
|
|
48
|
+
if (proofVerified) {
|
|
49
|
+
const metatheorem = Metatheorem.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext);
|
|
50
50
|
|
|
51
51
|
fileContext.addMetatheorem(metatheorem);
|
|
52
52
|
|
|
@@ -73,7 +73,7 @@ export function verifyStandaloneMetavariable(metavariableNode, localContext, ver
|
|
|
73
73
|
|
|
74
74
|
localContext.trace(`Verifying the '${metavariableString}' standalone metavariable...`, metavariableNode);
|
|
75
75
|
|
|
76
|
-
const metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode
|
|
76
|
+
const metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode);
|
|
77
77
|
|
|
78
78
|
if (metavariablePresent) {
|
|
79
79
|
const verifiedAhead = verifyAhead();
|
package/src/verify/premise.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Premise from "../premise";
|
|
4
|
-
import
|
|
4
|
+
import ProofStep from "../proofStep";
|
|
5
5
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
6
|
-
import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
|
|
7
6
|
|
|
8
7
|
import { nodeQuery } from "../utilities/query";
|
|
9
8
|
import { assignAssignment } from "../utilities/assignments";
|
|
10
9
|
|
|
11
10
|
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
|
|
12
|
-
|
|
13
|
-
unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement!"),
|
|
14
|
-
unqualifiedMetastatementNodeQuery = nodeQuery("/premise/unqualifiedMetastatement!");
|
|
11
|
+
unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement!");
|
|
15
12
|
|
|
16
13
|
export default function verifyPremise(premiseNode, premises, localContext) {
|
|
17
14
|
let premiseVerified;
|
|
@@ -21,56 +18,27 @@ export default function verifyPremise(premiseNode, premises, localContext) {
|
|
|
21
18
|
localContext.trace(`Verifying the '${premiseString}' premise...`, premiseNode);
|
|
22
19
|
|
|
23
20
|
const unqualifiedStatementNode = unqualifiedStatementNodeQuery(premiseNode),
|
|
24
|
-
|
|
21
|
+
derived = false,
|
|
22
|
+
assignments = [],
|
|
23
|
+
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
25
24
|
|
|
26
|
-
if (
|
|
27
|
-
const
|
|
28
|
-
assignments = [],
|
|
29
|
-
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
25
|
+
if (unqualifiedStatementVerified) {
|
|
26
|
+
const assignmentAssigned = assignAssignment(assignments, localContext);
|
|
30
27
|
|
|
31
|
-
if (
|
|
32
|
-
const
|
|
28
|
+
if (assignmentAssigned) {
|
|
29
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
30
|
+
metaproofStep = ProofStep.fromStatementNode(statementNode),
|
|
31
|
+
premise = Premise.fromStatementNode(statementNode);
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
}
|
|
33
|
+
premises.push(premise);
|
|
37
34
|
|
|
38
|
-
|
|
39
|
-
const derived = false,
|
|
40
|
-
assignments = [],
|
|
41
|
-
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localContext);
|
|
35
|
+
localContext.addProofStep(metaproofStep);
|
|
42
36
|
|
|
43
|
-
|
|
44
|
-
const assignmentAssigned = assignAssignment(assignments, localContext);
|
|
45
|
-
|
|
46
|
-
premiseVerified = assignmentAssigned; ///
|
|
37
|
+
premiseVerified = true;
|
|
47
38
|
}
|
|
48
39
|
}
|
|
49
40
|
|
|
50
41
|
if (premiseVerified) {
|
|
51
|
-
let premise,
|
|
52
|
-
metaproofStep;
|
|
53
|
-
|
|
54
|
-
if (unqualifiedStatementNode !== null) {
|
|
55
|
-
const statementNode = statementNodeQuery(unqualifiedStatementNode);
|
|
56
|
-
|
|
57
|
-
metaproofStep = MetaproofStep.fromMetastatementNode(statementNode);
|
|
58
|
-
|
|
59
|
-
premise = Premise.fromStatementNode(statementNode);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (unqualifiedMetastatementNode !== null) {
|
|
63
|
-
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
|
|
64
|
-
|
|
65
|
-
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
66
|
-
|
|
67
|
-
premise = Premise.fromMetastatementNode(metastatementNode);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
premises.push(premise);
|
|
71
|
-
|
|
72
|
-
localContext.addMetaproofStep(metaproofStep);
|
|
73
|
-
|
|
74
42
|
localContext.debug(`...verified the '${premiseString}' premise.`, premiseNode);
|
|
75
43
|
}
|
|
76
44
|
|
package/src/verify/proof.js
CHANGED
|
@@ -7,13 +7,13 @@ import { nodeQuery } from "../utilities/query";
|
|
|
7
7
|
|
|
8
8
|
const derivationNodeQuery = nodeQuery("/proof/derivation!");
|
|
9
9
|
|
|
10
|
-
export default function verifyProof(proofNode, conclusion, localContext) {
|
|
10
|
+
export default function verifyProof(proofNode, conclusion, substitutions, localContext) {
|
|
11
11
|
let proofVerified = false;
|
|
12
12
|
|
|
13
13
|
localContext = LocalContext.fromLocalContext(localContext); ///
|
|
14
14
|
|
|
15
15
|
const derivationNode = derivationNodeQuery(proofNode),
|
|
16
|
-
derivationVerified = verifyDerivation(derivationNode, localContext);
|
|
16
|
+
derivationVerified = verifyDerivation(derivationNode, substitutions, localContext);
|
|
17
17
|
|
|
18
18
|
if (derivationVerified) {
|
|
19
19
|
const lastProofStep = localContext.getLastProofStep();
|
package/src/verify/proofStep.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import ProofStep from "../
|
|
3
|
+
import ProofStep from "../proofStep";
|
|
4
4
|
import verifySubproof from "../verify/subproof";
|
|
5
5
|
import verifySubDerivation from "../verify/subDerivation";
|
|
6
6
|
import verifyQualifiedStatement from "../verify/statement/qualified";
|
|
@@ -14,7 +14,7 @@ const subproofNodeQuery = nodeQuery("/proofStep|lastProofStep/subproof!"),
|
|
|
14
14
|
qualifiedStatementNodeQuery = nodeQuery("/proofStep|lastProofStep/qualifiedStatement!"),
|
|
15
15
|
unqualifiedStatementNodeQuery = nodeQuery("/proofStep|lastProofStep/unqualifiedStatement!");
|
|
16
16
|
|
|
17
|
-
export default function verifyProofStep(proofStepNode, localContext) {
|
|
17
|
+
export default function verifyProofStep(proofStepNode, substitutions, localContext) {
|
|
18
18
|
let proofStepVerified = false;
|
|
19
19
|
|
|
20
20
|
const subproofNode = subproofNodeQuery(proofStepNode),
|
|
@@ -26,7 +26,7 @@ export default function verifyProofStep(proofStepNode, localContext) {
|
|
|
26
26
|
} else if (subproofNode !== null) {
|
|
27
27
|
let subproofVerified;
|
|
28
28
|
|
|
29
|
-
subproofVerified = verifySubproof(subproofNode, localContext);
|
|
29
|
+
subproofVerified = verifySubproof(subproofNode, substitutions, localContext);
|
|
30
30
|
|
|
31
31
|
if (subproofVerified) {
|
|
32
32
|
const proofStep = ProofStep.fromSubproofNode(subproofNode);
|
|
@@ -40,7 +40,7 @@ export default function verifyProofStep(proofStepNode, localContext) {
|
|
|
40
40
|
|
|
41
41
|
const assignments = [];
|
|
42
42
|
|
|
43
|
-
qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, assignments, localContext);
|
|
43
|
+
qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext);
|
|
44
44
|
|
|
45
45
|
if (qualifiedStatementVerified) {
|
|
46
46
|
const assignmentAssigned = assignAssignment(assignments, localContext);
|
package/src/verify/rule.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Rule from "../rule";
|
|
4
|
+
import verifyProof from "../verify/proof";
|
|
4
5
|
import LocalContext from "../context/local";
|
|
5
6
|
import verifyLabels from "../verify/labels";
|
|
6
7
|
import verifyPremises from "../verify/premises";
|
|
7
|
-
import verifyMetaproof from "../verify/metaproof";
|
|
8
8
|
import verifyConclusion from "../verify/conclusion";
|
|
9
9
|
|
|
10
10
|
import { first } from "../utilities/array";
|
|
11
11
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
12
12
|
|
|
13
|
-
const
|
|
13
|
+
const proofNodeQuery = nodeQuery("/rule/proof!"),
|
|
14
|
+
labelNodesQuery = nodesQuery("/rule/label"),
|
|
14
15
|
premisesNodeQuery = nodesQuery("/rule/premise"),
|
|
15
|
-
metaproofNodeQuery = nodeQuery("/rule/metaproof!"),
|
|
16
16
|
conclusionNodeQuery = nodeQuery("/rule/conclusion!");
|
|
17
17
|
|
|
18
18
|
export default function verifyRule(ruleNode, fileContext) {
|
|
@@ -27,8 +27,8 @@ export default function verifyRule(ruleNode, fileContext) {
|
|
|
27
27
|
labelsVerified = verifyLabels(labelNodes, labels, fileContext);
|
|
28
28
|
|
|
29
29
|
if (labelsVerified) {
|
|
30
|
-
const
|
|
31
|
-
|
|
30
|
+
const localContext = LocalContext.fromFileContext(fileContext),
|
|
31
|
+
premises = [],
|
|
32
32
|
premiseNodes = premisesNodeQuery(ruleNode),
|
|
33
33
|
premisesVerified = verifyPremises(premiseNodes, premises, localContext);
|
|
34
34
|
|
|
@@ -38,20 +38,20 @@ export default function verifyRule(ruleNode, fileContext) {
|
|
|
38
38
|
conclusionVerified = verifyConclusion(conclusionNode, conclusions, localContext);
|
|
39
39
|
|
|
40
40
|
if (conclusionVerified) {
|
|
41
|
-
let
|
|
41
|
+
let proofVerified = true; ///
|
|
42
42
|
|
|
43
43
|
const firstConclusion = first(conclusions),
|
|
44
|
-
|
|
44
|
+
proofNode = proofNodeQuery(ruleNode),
|
|
45
45
|
conclusion = firstConclusion; ///
|
|
46
46
|
|
|
47
|
-
if (
|
|
47
|
+
if (proofNode !== null) {
|
|
48
48
|
const substitutions = [],
|
|
49
|
-
|
|
49
|
+
statementNode = conclusion.getStatementNode();
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
if (
|
|
54
|
+
if (proofVerified) {
|
|
55
55
|
const rule = Rule.fromLabelsPremisesConclusionAndFileContext(labels, premises, conclusion, fileContext);
|
|
56
56
|
|
|
57
57
|
fileContext.addRule(rule);
|
|
@@ -6,24 +6,26 @@ import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../..
|
|
|
6
6
|
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
7
7
|
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference!/metavariable!");
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
import verifyMetavariableAgainstStatement from "../../verify/metavariableAgainstStatement";
|
|
10
|
+
|
|
11
|
+
export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext) {
|
|
10
12
|
let qualifiedStatementVerified;
|
|
11
13
|
|
|
12
14
|
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
13
15
|
|
|
14
16
|
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
|
|
15
17
|
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
const verifyQualifiedStatementFunctions = [
|
|
19
|
+
verifyQualifiedStatementAAgainstRule,
|
|
20
|
+
verifyQualifiedStatementAAgainstAxiom,
|
|
21
|
+
verifyQualifiedStatementAAgainstLemma,
|
|
22
|
+
verifyQualifiedStatementAAgainstTheorem,
|
|
23
|
+
verifyQualifiedStatementAAgainstConjecture,
|
|
24
|
+
verifyQualifiedStatementAAgainstReference
|
|
25
|
+
];
|
|
24
26
|
|
|
25
27
|
qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
|
|
26
|
-
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode,
|
|
28
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
|
|
27
29
|
|
|
28
30
|
if (qualifiedStatementVerified) {
|
|
29
31
|
return true;
|
|
@@ -35,7 +37,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
35
37
|
statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
36
38
|
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
37
39
|
|
|
38
|
-
qualifiedStatementVerified = statementVerified;
|
|
40
|
+
qualifiedStatementVerified = statementVerified; ///
|
|
39
41
|
}
|
|
40
42
|
|
|
41
43
|
if (qualifiedStatementVerified) {
|
|
@@ -45,10 +47,11 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
45
47
|
return qualifiedStatementVerified;
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode,
|
|
50
|
+
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, substitutions, localContext) {
|
|
49
51
|
let qualifiedStatementVerifiedAgainstRule = false;
|
|
50
52
|
|
|
51
|
-
const
|
|
53
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
54
|
+
rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
52
55
|
|
|
53
56
|
if (rule !== null) {
|
|
54
57
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -69,10 +72,11 @@ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariab
|
|
|
69
72
|
return qualifiedStatementVerifiedAgainstRule;
|
|
70
73
|
}
|
|
71
74
|
|
|
72
|
-
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode,
|
|
75
|
+
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, substitutions, localContext) {
|
|
73
76
|
let qualifiedStatementVerifiedAgainstAxiom = false;
|
|
74
77
|
|
|
75
|
-
const
|
|
78
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
79
|
+
axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
76
80
|
|
|
77
81
|
if (axiom !== null) {
|
|
78
82
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -93,10 +97,11 @@ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavaria
|
|
|
93
97
|
return qualifiedStatementVerifiedAgainstAxiom;
|
|
94
98
|
}
|
|
95
99
|
|
|
96
|
-
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode,
|
|
100
|
+
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, substitutions, localContext) {
|
|
97
101
|
let qualifiedStatementVerifiedAgainstLemma = false;
|
|
98
102
|
|
|
99
|
-
const
|
|
103
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
104
|
+
lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
100
105
|
|
|
101
106
|
if (lemma !== null) {
|
|
102
107
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -117,10 +122,11 @@ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavaria
|
|
|
117
122
|
return qualifiedStatementVerifiedAgainstLemma;
|
|
118
123
|
}
|
|
119
124
|
|
|
120
|
-
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode,
|
|
125
|
+
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, substitutions, localContext) {
|
|
121
126
|
let qualifiedStatementVerifiedAgainstTheorem = false;
|
|
122
127
|
|
|
123
|
-
const
|
|
128
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
129
|
+
theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
124
130
|
|
|
125
131
|
if (theorem !== null) {
|
|
126
132
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -141,10 +147,11 @@ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavar
|
|
|
141
147
|
return qualifiedStatementVerifiedAgainstTheorem;
|
|
142
148
|
}
|
|
143
149
|
|
|
144
|
-
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode,
|
|
150
|
+
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, substitutions, localContext) {
|
|
145
151
|
let qualifiedStatementVerifiedAgainstConjecture = false;
|
|
146
152
|
|
|
147
|
-
const
|
|
153
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
154
|
+
conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
148
155
|
|
|
149
156
|
if (conjecture !== null) {
|
|
150
157
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -165,6 +172,34 @@ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, meta
|
|
|
165
172
|
return qualifiedStatementVerifiedAgainstConjecture;
|
|
166
173
|
}
|
|
167
174
|
|
|
175
|
+
function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, substitutions, localContext) {
|
|
176
|
+
let qualifiedStatementVerifiedAgainstReference = false;
|
|
177
|
+
|
|
178
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
179
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
180
|
+
metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode),
|
|
181
|
+
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
182
|
+
|
|
183
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference...`, qualifiedStatementNode);
|
|
184
|
+
|
|
185
|
+
if (metavariablePresent) {
|
|
186
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
187
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutions, () => {
|
|
188
|
+
const verifiedAhead = true;
|
|
189
|
+
|
|
190
|
+
return verifiedAhead;
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (qualifiedStatementVerifiedAgainstReference) {
|
|
197
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference.`, qualifiedStatementNode);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return qualifiedStatementVerifiedAgainstReference;
|
|
201
|
+
}
|
|
202
|
+
|
|
168
203
|
function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
169
204
|
let statementVerified;
|
|
170
205
|
|