occam-verify-cli 0.0.923 → 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/conjecture.js +9 -9
- package/lib/constants.js +1 -9
- package/lib/context/file.js +3 -3
- package/lib/context/local.js +5 -5
- 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/theorem.js +9 -9
- package/lib/topLevelAssertion.js +186 -0
- package/lib/verify/axiom.js +4 -4
- package/lib/verify/conjecture.js +4 -4
- package/lib/verify/containedAssertion.js +91 -0
- package/lib/verify/declaration.js +2 -2
- 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 +4 -4
- package/lib/verify/metastatement.js +4 -23
- package/lib/verify/metatheorem.js +4 -4
- package/lib/verify/metavariable.js +2 -2
- package/lib/verify/proof.js +3 -3
- package/lib/verify/proofStep.js +4 -4
- package/lib/verify/rule.js +3 -3
- package/lib/verify/statement/qualified.js +18 -21
- 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/termAsConstructor.js +2 -2
- package/lib/verify/theorem.js +4 -4
- package/package.json +2 -2
- package/src/axiom.js +4 -4
- package/src/conjecture.js +4 -4
- package/src/constants.js +0 -2
- package/src/context/file.js +2 -2
- package/src/context/local.js +4 -3
- 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/theorem.js +4 -4
- package/src/{metaLemmaMetatheorem.js → topLevelAssertion.js} +16 -26
- package/src/verify/axiom.js +5 -4
- package/src/verify/conjecture.js +5 -4
- package/src/verify/{statementAsContainedAssertion.js → containedAssertion.js} +20 -36
- package/src/verify/declaration.js +1 -1
- 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 +4 -4
- package/src/verify/metastatement.js +3 -31
- package/src/verify/metatheorem.js +4 -4
- package/src/verify/metavariable.js +1 -1
- package/src/verify/proof.js +2 -2
- package/src/verify/proofStep.js +3 -3
- package/src/verify/rule.js +4 -4
- package/src/verify/statement/qualified.js +33 -32
- 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/termAsConstructor.js +2 -2
- package/src/verify/theorem.js +7 -4
- package/lib/axiomLemmaTheoremConjecture.js +0 -174
- package/lib/metaLemmaMetatheorem.js +0 -191
- package/lib/verify/statementAsContainedAssertion.js +0 -109
- package/lib/verify/statementAsDefinedAssertion.js +0 -132
- package/src/axiomLemmaTheoremConjecture.js +0 -165
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyJudgement from "../verify/judgement";
|
|
4
4
|
import metaLevelNodeVerifier from "../verifier/node/metaLevel";
|
|
5
|
-
import verifyStatementAsDefinedAssertion from "./statementAsDefinedAssertion";
|
|
6
|
-
import verifyStatementAsContainedAssertion from "./statementAsContainedAssertion";
|
|
7
5
|
|
|
8
6
|
import { nodeQuery } from "../utilities/query";
|
|
9
7
|
|
|
@@ -17,9 +15,6 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
|
17
15
|
localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
|
|
18
16
|
|
|
19
17
|
const verifyStatementFunctions = [
|
|
20
|
-
verifyStatementAsJudgement,
|
|
21
|
-
verifyStatementAsDefinedAssertion,
|
|
22
|
-
verifyStatementAsContainedAssertion,
|
|
23
18
|
verifyStatementAsIs
|
|
24
19
|
];
|
|
25
20
|
|
|
@@ -44,29 +39,6 @@ Object.assign(metaLevelNodeVerifier, {
|
|
|
44
39
|
|
|
45
40
|
export default verifyStatement;
|
|
46
41
|
|
|
47
|
-
function verifyStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
48
|
-
let statementVerifiedAsJudgement = false;
|
|
49
|
-
|
|
50
|
-
const statementJudgement = isStatementJudgement(statementNode);
|
|
51
|
-
|
|
52
|
-
if (statementJudgement) {
|
|
53
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
54
|
-
|
|
55
|
-
localContext.trace(`Verifying the '${statementString}' statement as a judgement...`, statementNode);
|
|
56
|
-
|
|
57
|
-
const judgementNode = judgementNodeQuery(statementNode),
|
|
58
|
-
judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
59
|
-
|
|
60
|
-
statementVerifiedAsJudgement = judgementVerified; ///
|
|
61
|
-
|
|
62
|
-
if (statementVerifiedAsJudgement) {
|
|
63
|
-
localContext.debug(`...verified the '${statementString}' statement as a judgement.`, statementNode);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return statementVerifiedAsJudgement;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
42
|
function verifyStatementAsIs(statementNode, assignments, derived, localContext) {
|
|
71
43
|
let statementVerifiedAsIs;
|
|
72
44
|
|
|
@@ -104,7 +76,7 @@ function verifyDerivedStatementAsIs(statementNode, assignments, derived, localCo
|
|
|
104
76
|
if (derived) {
|
|
105
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
82
|
return derivedStatementVerifiedAsIs;
|
|
@@ -116,7 +88,7 @@ function verifyStatedStatementAsIs(statementNode, assignments, derived, localCon
|
|
|
116
88
|
if (!derived) {
|
|
117
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
93
|
const nonTerminalNode = statementNode, ///
|
|
122
94
|
nonTerminalNodeVerified = metaLevelNodeVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
@@ -128,7 +100,7 @@ function verifyStatedStatementAsIs(statementNode, assignments, derived, localCon
|
|
|
128
100
|
statedStatementVerifiedAsIs = nonTerminalNodeVerified; ///
|
|
129
101
|
|
|
130
102
|
if (statedStatementVerifiedAsIs) {
|
|
131
|
-
localContext.debug(`...verified the
|
|
103
|
+
localContext.debug(`...verified the '${statementString}' stated statement as is.`, statementNode);
|
|
132
104
|
}
|
|
133
105
|
}
|
|
134
106
|
|
|
@@ -27,21 +27,21 @@ 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
|
-
substitutions = [],
|
|
30
|
+
const localContext = LocalContext.fromFileContext(fileContext),
|
|
32
31
|
suppositions = [],
|
|
33
32
|
suppositionNodes = suppositionsNodeQuery(metatheoremNode),
|
|
34
|
-
suppositionsVerified = verifySuppositions(suppositionNodes, suppositions,
|
|
33
|
+
suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, localContext);
|
|
35
34
|
|
|
36
35
|
if (suppositionsVerified) {
|
|
37
36
|
const consequents = [],
|
|
38
37
|
consequentNode = consequentNodeQuery(metatheoremNode),
|
|
39
|
-
consequentVerified = verifyConsequent(consequentNode, consequents,
|
|
38
|
+
consequentVerified = verifyConsequent(consequentNode, consequents, localContext);
|
|
40
39
|
|
|
41
40
|
if (consequentVerified) {
|
|
42
41
|
const proofNode = proofNodeQuery(metatheoremNode),
|
|
43
42
|
firstConsequent = first(consequents),
|
|
44
43
|
consequent = firstConsequent, ///
|
|
44
|
+
substitutions = [],
|
|
45
45
|
statementNode = consequent.getStatementNode(),
|
|
46
46
|
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
47
47
|
|
|
@@ -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/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
|
@@ -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
|
@@ -10,9 +10,9 @@ import verifyConclusion from "../verify/conclusion";
|
|
|
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
|
-
proofNodeQuery = nodeQuery("/rule/proof!"),
|
|
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
|
|
|
@@ -15,18 +15,17 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
|
|
|
15
15
|
|
|
16
16
|
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
|
|
17
17
|
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
];
|
|
18
|
+
const verifyQualifiedStatementFunctions = [
|
|
19
|
+
verifyQualifiedStatementAAgainstRule,
|
|
20
|
+
verifyQualifiedStatementAAgainstAxiom,
|
|
21
|
+
verifyQualifiedStatementAAgainstLemma,
|
|
22
|
+
verifyQualifiedStatementAAgainstTheorem,
|
|
23
|
+
verifyQualifiedStatementAAgainstConjecture,
|
|
24
|
+
verifyQualifiedStatementAAgainstReference
|
|
25
|
+
];
|
|
27
26
|
|
|
28
27
|
qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
|
|
29
|
-
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode,
|
|
28
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
|
|
30
29
|
|
|
31
30
|
if (qualifiedStatementVerified) {
|
|
32
31
|
return true;
|
|
@@ -36,11 +35,7 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
|
|
|
36
35
|
if (qualifiedStatementVerified) {
|
|
37
36
|
const derived = false,
|
|
38
37
|
statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
39
|
-
statementVerified = verifyStatement(statementNode, assignments, derived, localContext
|
|
40
|
-
const verifiedAhead = true;
|
|
41
|
-
|
|
42
|
-
return verifiedAhead;
|
|
43
|
-
});
|
|
38
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
44
39
|
|
|
45
40
|
qualifiedStatementVerified = statementVerified; ///
|
|
46
41
|
}
|
|
@@ -52,10 +47,11 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
|
|
|
52
47
|
return qualifiedStatementVerified;
|
|
53
48
|
}
|
|
54
49
|
|
|
55
|
-
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode,
|
|
50
|
+
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, substitutions, localContext) {
|
|
56
51
|
let qualifiedStatementVerifiedAgainstRule = false;
|
|
57
52
|
|
|
58
|
-
const
|
|
53
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
54
|
+
rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
59
55
|
|
|
60
56
|
if (rule !== null) {
|
|
61
57
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -76,10 +72,11 @@ function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, metavariab
|
|
|
76
72
|
return qualifiedStatementVerifiedAgainstRule;
|
|
77
73
|
}
|
|
78
74
|
|
|
79
|
-
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode,
|
|
75
|
+
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, substitutions, localContext) {
|
|
80
76
|
let qualifiedStatementVerifiedAgainstAxiom = false;
|
|
81
77
|
|
|
82
|
-
const
|
|
78
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
79
|
+
axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
83
80
|
|
|
84
81
|
if (axiom !== null) {
|
|
85
82
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -100,10 +97,11 @@ function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, metavaria
|
|
|
100
97
|
return qualifiedStatementVerifiedAgainstAxiom;
|
|
101
98
|
}
|
|
102
99
|
|
|
103
|
-
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode,
|
|
100
|
+
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, substitutions, localContext) {
|
|
104
101
|
let qualifiedStatementVerifiedAgainstLemma = false;
|
|
105
102
|
|
|
106
|
-
const
|
|
103
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
104
|
+
lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
107
105
|
|
|
108
106
|
if (lemma !== null) {
|
|
109
107
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -124,10 +122,11 @@ function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, metavaria
|
|
|
124
122
|
return qualifiedStatementVerifiedAgainstLemma;
|
|
125
123
|
}
|
|
126
124
|
|
|
127
|
-
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode,
|
|
125
|
+
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, substitutions, localContext) {
|
|
128
126
|
let qualifiedStatementVerifiedAgainstTheorem = false;
|
|
129
127
|
|
|
130
|
-
const
|
|
128
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
129
|
+
theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
131
130
|
|
|
132
131
|
if (theorem !== null) {
|
|
133
132
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -148,10 +147,11 @@ function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, metavar
|
|
|
148
147
|
return qualifiedStatementVerifiedAgainstTheorem;
|
|
149
148
|
}
|
|
150
149
|
|
|
151
|
-
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode,
|
|
150
|
+
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, substitutions, localContext) {
|
|
152
151
|
let qualifiedStatementVerifiedAgainstConjecture = false;
|
|
153
152
|
|
|
154
|
-
const
|
|
153
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
154
|
+
conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
155
155
|
|
|
156
156
|
if (conjecture !== null) {
|
|
157
157
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -172,22 +172,23 @@ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, meta
|
|
|
172
172
|
return qualifiedStatementVerifiedAgainstConjecture;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode,
|
|
175
|
+
function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, substitutions, localContext) {
|
|
176
176
|
let qualifiedStatementVerifiedAgainstReference = false;
|
|
177
177
|
|
|
178
|
-
const
|
|
179
|
-
|
|
178
|
+
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
179
|
+
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
180
|
+
metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode),
|
|
180
181
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
181
182
|
|
|
182
183
|
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${metavariableString}' reference...`, qualifiedStatementNode);
|
|
183
184
|
|
|
184
185
|
if (metavariablePresent) {
|
|
185
186
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutions, () => {
|
|
188
|
+
const verifiedAhead = true;
|
|
188
189
|
|
|
189
|
-
|
|
190
|
-
|
|
190
|
+
return verifiedAhead;
|
|
191
|
+
});
|
|
191
192
|
|
|
192
193
|
qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
|
|
193
194
|
}
|
|
@@ -7,28 +7,70 @@ import { nodeQuery } from "../../utilities/query";
|
|
|
7
7
|
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
|
|
8
8
|
|
|
9
9
|
export default function verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
|
|
10
|
-
let unqualifiedStatementVerified
|
|
10
|
+
let unqualifiedStatementVerified;
|
|
11
11
|
|
|
12
|
-
const
|
|
13
|
-
unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
12
|
+
const unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
14
13
|
|
|
15
14
|
localContext.trace(`Verifying the '${unqualifiedStatementString}' unqualified statement...`, unqualifiedStatementNode);
|
|
16
15
|
|
|
16
|
+
const verifyUnqualifiedStatementFunctions = [
|
|
17
|
+
verifyDerivedUnqualifiedStatement,
|
|
18
|
+
verifyStatedUnqualifiedStatement
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
unqualifiedStatementVerified = verifyUnqualifiedStatementFunctions.some((verifyUnqualifiedStatementFunction) => {
|
|
22
|
+
const unqualifiedStatementVerified = verifyUnqualifiedStatementFunction(unqualifiedStatementNode, assignments, derived, localContext);
|
|
23
|
+
|
|
24
|
+
if (unqualifiedStatementVerified) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
if (unqualifiedStatementVerified) {
|
|
30
|
+
localContext.debug(`...verified the '${unqualifiedStatementString}' unqualified statement.`, unqualifiedStatementNode);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return unqualifiedStatementVerified;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
|
|
37
|
+
let derivedUnqualifiedStatementVerified = false;
|
|
38
|
+
|
|
17
39
|
if (derived) {
|
|
40
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
41
|
+
unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
42
|
+
|
|
43
|
+
localContext.trace(`Verifying the '${unqualifiedStatementString}' derived unqualified statement...`, unqualifiedStatementNode);
|
|
44
|
+
|
|
18
45
|
const matchesStatementNode = localContext.matchStatementNode(statementNode);
|
|
19
46
|
|
|
20
|
-
|
|
47
|
+
derivedUnqualifiedStatementVerified = matchesStatementNode; ///
|
|
48
|
+
|
|
49
|
+
if (derivedUnqualifiedStatementVerified) {
|
|
50
|
+
localContext.debug(`...verified the '${unqualifiedStatementString}' derived unqualified statement.`, unqualifiedStatementNode);
|
|
51
|
+
}
|
|
21
52
|
}
|
|
22
53
|
|
|
23
|
-
|
|
54
|
+
return derivedUnqualifiedStatementVerified;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function verifyStatedUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
|
|
58
|
+
let statedUnqualifiedStatementVerified = false;
|
|
59
|
+
|
|
60
|
+
if (!derived) {
|
|
61
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
62
|
+
unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
63
|
+
|
|
64
|
+
localContext.trace(`Verifying the '${unqualifiedStatementString}' stated unqualified statement...`, unqualifiedStatementNode);
|
|
65
|
+
|
|
24
66
|
const statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
25
67
|
|
|
26
|
-
|
|
27
|
-
}
|
|
68
|
+
statedUnqualifiedStatementVerified = statementVerified; ///
|
|
28
69
|
|
|
29
|
-
|
|
30
|
-
|
|
70
|
+
if (statedUnqualifiedStatementVerified) {
|
|
71
|
+
localContext.debug(`...verified the '${unqualifiedStatementString}' stated unqualified statement.`, unqualifiedStatementNode);
|
|
72
|
+
}
|
|
31
73
|
}
|
|
32
74
|
|
|
33
|
-
return
|
|
75
|
+
return statedUnqualifiedStatementVerified;
|
|
34
76
|
}
|
package/src/verify/statement.js
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import verifyEquality from "../verify/equality";
|
|
4
|
-
import
|
|
4
|
+
import verifyJudgement from "../verify/judgement";
|
|
5
5
|
import verifyTypeAssertion from "../verify/typeAssertion";
|
|
6
|
-
import
|
|
7
|
-
import
|
|
6
|
+
import verifyDefinedAssertion from "./definedAssertion";
|
|
7
|
+
import verifyContainedAssertion from "./containedAssertion";
|
|
8
8
|
import statementAgainstCombinatorNodesVerifier from "../verifier/nodes/statementAgainstCombinator";
|
|
9
9
|
|
|
10
10
|
import { nodeQuery } from "../utilities/query";
|
|
11
|
-
import {
|
|
12
|
-
import { isStatementContainedAssertion } from "../verify/statementAsContainedAssertion";
|
|
11
|
+
import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
|
|
13
12
|
|
|
14
13
|
const equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
15
|
-
|
|
14
|
+
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
15
|
+
metavariableNodeQuery = nodeQuery("/statement/metavariable!"),
|
|
16
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
|
|
17
|
+
definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
|
|
18
|
+
containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!");
|
|
16
19
|
|
|
17
20
|
function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
18
21
|
let statementVerified;
|
|
@@ -22,7 +25,9 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
|
22
25
|
localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
|
|
23
26
|
|
|
24
27
|
const verifyStatementFunctions = [
|
|
28
|
+
verifyStatementAsMetavariable,
|
|
25
29
|
verifyStatementAsEquality,
|
|
30
|
+
verifyStatementAsJudgement,
|
|
26
31
|
verifyStatementAsTypeAssertion,
|
|
27
32
|
verifyStatementAsDefinedAssertion,
|
|
28
33
|
verifyStatementAsContainedAssertion,
|
|
@@ -77,15 +82,14 @@ export default verifyStatement;
|
|
|
77
82
|
export function verifyStatementAsEquality(statementNode, assignments, derived, localContext) {
|
|
78
83
|
let statementVerifiedAsEquality = false;
|
|
79
84
|
|
|
80
|
-
const
|
|
85
|
+
const equalityNode = equalityNodeQuery(statementNode);
|
|
81
86
|
|
|
82
|
-
if (
|
|
87
|
+
if (equalityNode !== null) {
|
|
83
88
|
const statementString = localContext.nodeAsString(statementNode);
|
|
84
89
|
|
|
85
90
|
localContext.trace(`Verifying the '${statementString}' statement as an equality...`, statementNode);
|
|
86
91
|
|
|
87
|
-
const
|
|
88
|
-
equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
|
|
92
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
|
|
89
93
|
const verifiedAhead = true;
|
|
90
94
|
|
|
91
95
|
return verifiedAhead;
|
|
@@ -104,15 +108,14 @@ export function verifyStatementAsEquality(statementNode, assignments, derived, l
|
|
|
104
108
|
export function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
105
109
|
let statementVerifiedAsTypeAssertion = false;
|
|
106
110
|
|
|
107
|
-
const
|
|
111
|
+
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
108
112
|
|
|
109
|
-
if (
|
|
113
|
+
if (typeAssertionNode !== null) {
|
|
110
114
|
const statementString = localContext.nodeAsString(statementNode);
|
|
111
115
|
|
|
112
116
|
localContext.trace(`Verifying the '${statementString}' statement as a type assertion...`, statementNode);
|
|
113
117
|
|
|
114
|
-
const
|
|
115
|
-
typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, () => {
|
|
118
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, () => {
|
|
116
119
|
const verifiedAhead = true;
|
|
117
120
|
|
|
118
121
|
return verifiedAhead;
|
|
@@ -128,21 +131,126 @@ export function verifyStatementAsTypeAssertion(statementNode, assignments, deriv
|
|
|
128
131
|
return statementVerifiedAsTypeAssertion;
|
|
129
132
|
}
|
|
130
133
|
|
|
134
|
+
function verifyStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
135
|
+
let statementVerifiedAsJudgement = false;
|
|
136
|
+
|
|
137
|
+
const judgementNode = judgementNodeQuery(statementNode);
|
|
138
|
+
|
|
139
|
+
if (judgementNode !== null) {
|
|
140
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
141
|
+
|
|
142
|
+
localContext.trace(`Verifying the '${statementString}' statement as a judgement...`, statementNode);
|
|
143
|
+
|
|
144
|
+
const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
145
|
+
|
|
146
|
+
statementVerifiedAsJudgement = judgementVerified; ///
|
|
147
|
+
|
|
148
|
+
if (statementVerifiedAsJudgement) {
|
|
149
|
+
localContext.debug(`...verified the '${statementString}' statement as a judgement.`, statementNode);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return statementVerifiedAsJudgement;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function verifyStatementAsMetavariable(statementNode, assignments, derived, localContext) {
|
|
157
|
+
let statementVerifiedAsMetavariable = false;
|
|
158
|
+
|
|
159
|
+
const metavariableNode = metavariableNodeQuery(statementNode);
|
|
160
|
+
|
|
161
|
+
if (metavariableNode !== null) {
|
|
162
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
163
|
+
|
|
164
|
+
localContext.trace(`Verifying the '${statementString}' statement as a metavariable...`, statementNode);
|
|
165
|
+
|
|
166
|
+
const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
|
|
167
|
+
|
|
168
|
+
if (metavariable !== null) {
|
|
169
|
+
const metaTypeName = metavariable.getMetaTypeName();
|
|
170
|
+
|
|
171
|
+
if (metaTypeName === STATEMENT_META_TYPE_NAME) {
|
|
172
|
+
statementVerifiedAsMetavariable = true;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (statementVerifiedAsMetavariable) {
|
|
177
|
+
localContext.debug(`...verified the '${statementString}' statement as a metavariable.`, statementNode);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return statementVerifiedAsMetavariable;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function verifyStatementAsDefinedAssertion(statementNode, assignments, derived, localContext) {
|
|
185
|
+
let statementVerifiedAsDefinedAssertion = false;
|
|
186
|
+
|
|
187
|
+
const definedAssertionNode = definedAssertionNodeQuery(statementNode);
|
|
188
|
+
|
|
189
|
+
if (definedAssertionNode !== null) {
|
|
190
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
191
|
+
|
|
192
|
+
localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
|
|
193
|
+
|
|
194
|
+
const definedAssertionVerified = verifyDefinedAssertion(definedAssertionNode, assignments, derived, localContext, () => {
|
|
195
|
+
const verifiedAhead = true;
|
|
196
|
+
|
|
197
|
+
return verifiedAhead;
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
statementVerifiedAsDefinedAssertion = definedAssertionVerified; ///
|
|
201
|
+
|
|
202
|
+
if (statementVerifiedAsDefinedAssertion) {
|
|
203
|
+
localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return statementVerifiedAsDefinedAssertion;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function verifyStatementAsContainedAssertion(statementNode, assignments, derived, localContext) {
|
|
211
|
+
let statementVerifiedAsContainedAssertion = false;
|
|
212
|
+
|
|
213
|
+
const containedAssertionNode = containedAssertionNodeQuery(statementNode);
|
|
214
|
+
|
|
215
|
+
if (containedAssertionNode !== null) {
|
|
216
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
217
|
+
|
|
218
|
+
localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
|
|
219
|
+
|
|
220
|
+
const containedAssertionVerified = verifyContainedAssertion(containedAssertionNode, assignments, derived, localContext, () => {
|
|
221
|
+
const verifiedAhead = true;
|
|
222
|
+
|
|
223
|
+
return verifiedAhead;
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
statementVerifiedAsContainedAssertion = containedAssertionVerified; ///
|
|
227
|
+
|
|
228
|
+
if (statementVerifiedAsContainedAssertion) {
|
|
229
|
+
localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return statementVerifiedAsContainedAssertion;
|
|
234
|
+
}
|
|
235
|
+
|
|
131
236
|
function verifyStatementAgainstCombinators(statementNode, assignments, derived, localContext) {
|
|
132
237
|
let statementVerifiedAgainstCombinators = false;
|
|
133
238
|
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
239
|
+
const equalityNode = equalityNodeQuery(statementNode),
|
|
240
|
+
judgementNode = judgementNodeQuery(statementNode),
|
|
241
|
+
metavariableNode = metavariableNodeQuery(statementNode),
|
|
242
|
+
typeAssertionNode = typeAssertionNodeQuery(statementNode),
|
|
243
|
+
definedAssertionNode = definedAssertionNodeQuery(statementNode),
|
|
244
|
+
containedAssertionNode = containedAssertionNodeQuery(statementNode);
|
|
138
245
|
|
|
139
|
-
if (
|
|
140
|
-
|
|
246
|
+
if ( (equalityNode === null) &&
|
|
247
|
+
(judgementNode === null) &&
|
|
248
|
+
(metavariableNode === null) &&
|
|
249
|
+
(typeAssertionNode === null) &&
|
|
250
|
+
(definedAssertionNode === null) &&
|
|
251
|
+
(containedAssertionNode === null) ) {
|
|
141
252
|
|
|
142
|
-
combinators =
|
|
143
|
-
bracketedCombinator,
|
|
144
|
-
...combinators
|
|
145
|
-
];
|
|
253
|
+
const combinators = localContext.getCombinators();
|
|
146
254
|
|
|
147
255
|
statementVerifiedAgainstCombinators = combinators.some((combinator) => {
|
|
148
256
|
const statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, localContext);
|
|
@@ -180,18 +288,4 @@ function verifyStatementAgainstCombinator(statementNode, combinator, localContex
|
|
|
180
288
|
}
|
|
181
289
|
|
|
182
290
|
return statementVerifiedAgainstCombinator;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
function isStatementEquality(statementNode) {
|
|
186
|
-
const equalityNode = equalityNodeQuery(statementNode),
|
|
187
|
-
statementEquality = (equalityNode !== null);
|
|
188
|
-
|
|
189
|
-
return statementEquality;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
function isStatementTypeAssertion(statementNode) {
|
|
193
|
-
const typeAssertionNode = typeAssertionNodeQuery(statementNode),
|
|
194
|
-
statementTypeAssertion = (typeAssertionNode !== null);
|
|
195
|
-
|
|
196
|
-
return statementTypeAssertion;
|
|
197
|
-
}
|
|
291
|
+
}
|
|
@@ -4,14 +4,14 @@ import { nodesQuery } from "../utilities/query";
|
|
|
4
4
|
|
|
5
5
|
const proofStepNodesQuery = nodesQuery("/subDerivation/proofStep|lastProofStep");
|
|
6
6
|
|
|
7
|
-
export default function verifySubDerivation(subDerivationNode, localContext) {
|
|
7
|
+
export default function verifySubDerivation(subDerivationNode, substitutions, localContext) {
|
|
8
8
|
let subDerivationVerified;
|
|
9
9
|
|
|
10
10
|
const proofStepNodes = proofStepNodesQuery(subDerivationNode);
|
|
11
11
|
|
|
12
12
|
subDerivationVerified = proofStepNodes.every((proofStepNode) => {
|
|
13
13
|
const { verifyProofStep } = verifySubDerivation,
|
|
14
|
-
proofStepVerified = verifyProofStep(proofStepNode, localContext);
|
|
14
|
+
proofStepVerified = verifyProofStep(proofStepNode, substitutions, localContext);
|
|
15
15
|
|
|
16
16
|
if (proofStepVerified) {
|
|
17
17
|
return true;
|