occam-verify-cli 0.0.923 → 0.0.925
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/mixins/nodesVerifier/metaLevel.js +2 -2
- package/lib/premise.js +6 -6
- package/lib/theorem.js +9 -9
- package/lib/topLevelAssertion.js +186 -0
- package/lib/verifier/nodes/intrinsicLevel.js +3 -3
- package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +3 -3
- package/lib/verifier/nodes/metaLevel.js +16 -16
- package/lib/verify/assertion/contained.js +91 -0
- package/lib/verify/assertion/defined.js +114 -0
- package/lib/verify/assertion/subproof.js +65 -0
- package/lib/verify/assertion/type.js +112 -0
- package/lib/verify/axiom.js +4 -4
- package/lib/verify/conjecture.js +4 -4
- package/lib/verify/declaration.js +3 -6
- package/lib/verify/derivation.js +7 -7
- package/lib/verify/equality.js +3 -3
- 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 -24
- 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 +19 -25
- package/lib/verify/statement/unqualified.js +38 -10
- package/lib/verify/statement.js +106 -97
- 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/mixins/nodesVerifier/metaLevel.js +1 -1
- package/src/premise.js +6 -6
- package/src/theorem.js +4 -4
- package/src/{metaLemmaMetatheorem.js → topLevelAssertion.js} +16 -26
- package/src/verifier/nodes/intrinsicLevel.js +2 -2
- package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +3 -3
- package/src/verifier/nodes/metaLevel.js +18 -19
- package/src/verify/assertion/contained.js +111 -0
- package/src/verify/{statementAsDefinedAssertion.js → assertion/defined.js} +25 -41
- package/src/verify/assertion/subproof.js +77 -0
- package/src/verify/{typeAssertion.js → assertion/type.js} +15 -15
- package/src/verify/axiom.js +5 -4
- package/src/verify/conjecture.js +5 -4
- package/src/verify/declaration.js +2 -6
- package/src/verify/derivation.js +6 -6
- package/src/verify/equality.js +2 -2
- 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 -32
- 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 +30 -33
- package/src/verify/statement/unqualified.js +52 -10
- package/src/verify/statement.js +168 -47
- 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/lib/verify/typeAssertion.js +0 -112
- package/src/axiomLemmaTheoremConjecture.js +0 -165
- package/src/verify/statementAsContainedAssertion.js +0 -127
|
@@ -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,19 @@ 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
|
-
const verifiedAhead = true;
|
|
188
|
-
|
|
189
|
-
return verifiedAhead;
|
|
190
|
-
});
|
|
187
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, verifyAhead);
|
|
191
188
|
|
|
192
189
|
qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
|
|
193
190
|
}
|
|
@@ -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,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import verifyEquality from "../verify/equality";
|
|
4
|
-
import
|
|
5
|
-
import verifyTypeAssertion from "../verify/
|
|
6
|
-
import
|
|
7
|
-
import
|
|
4
|
+
import verifyJudgement from "../verify/judgement";
|
|
5
|
+
import verifyTypeAssertion from "../verify/assertion/type";
|
|
6
|
+
import verifyDefinedAssertion from "../verify/assertion/defined";
|
|
7
|
+
import verifySubproofAssertion from "../verify/assertion/subproof";
|
|
8
|
+
import verifyContainedAssertion from "../verify/assertion/contained";
|
|
8
9
|
import statementAgainstCombinatorNodesVerifier from "../verifier/nodes/statementAgainstCombinator";
|
|
9
10
|
|
|
10
11
|
import { nodeQuery } from "../utilities/query";
|
|
11
|
-
import {
|
|
12
|
-
import { isStatementContainedAssertion } from "../verify/statementAsContainedAssertion";
|
|
12
|
+
import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
|
|
13
13
|
|
|
14
14
|
const equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
15
|
-
|
|
15
|
+
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
16
|
+
metavariableNodeQuery = nodeQuery("/statement/metavariable!"),
|
|
17
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
|
|
18
|
+
definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
|
|
19
|
+
subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
|
|
20
|
+
containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!");
|
|
16
21
|
|
|
17
22
|
function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
18
23
|
let statementVerified;
|
|
@@ -22,9 +27,12 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
|
22
27
|
localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
|
|
23
28
|
|
|
24
29
|
const verifyStatementFunctions = [
|
|
30
|
+
verifyStatementAsMetavariable,
|
|
25
31
|
verifyStatementAsEquality,
|
|
32
|
+
verifyStatementAsJudgement,
|
|
26
33
|
verifyStatementAsTypeAssertion,
|
|
27
34
|
verifyStatementAsDefinedAssertion,
|
|
35
|
+
verifyStatementAsSubproofAssertion,
|
|
28
36
|
verifyStatementAsContainedAssertion,
|
|
29
37
|
verifyStatementAgainstCombinators
|
|
30
38
|
];
|
|
@@ -53,7 +61,7 @@ export function verifyStandaloneStatement(statementNode, localContext, verifyAhe
|
|
|
53
61
|
|
|
54
62
|
const derived = false,
|
|
55
63
|
assignments = [],
|
|
56
|
-
statementVerified = verifyStatement(statementNode, assignments, derived);
|
|
64
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
57
65
|
|
|
58
66
|
if (statementVerified) {
|
|
59
67
|
const verifiedAhead = verifyAhead();
|
|
@@ -77,15 +85,14 @@ export default verifyStatement;
|
|
|
77
85
|
export function verifyStatementAsEquality(statementNode, assignments, derived, localContext) {
|
|
78
86
|
let statementVerifiedAsEquality = false;
|
|
79
87
|
|
|
80
|
-
const
|
|
88
|
+
const equalityNode = equalityNodeQuery(statementNode);
|
|
81
89
|
|
|
82
|
-
if (
|
|
90
|
+
if (equalityNode !== null) {
|
|
83
91
|
const statementString = localContext.nodeAsString(statementNode);
|
|
84
92
|
|
|
85
93
|
localContext.trace(`Verifying the '${statementString}' statement as an equality...`, statementNode);
|
|
86
94
|
|
|
87
|
-
const
|
|
88
|
-
equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
|
|
95
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
|
|
89
96
|
const verifiedAhead = true;
|
|
90
97
|
|
|
91
98
|
return verifiedAhead;
|
|
@@ -104,19 +111,14 @@ export function verifyStatementAsEquality(statementNode, assignments, derived, l
|
|
|
104
111
|
export function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
105
112
|
let statementVerifiedAsTypeAssertion = false;
|
|
106
113
|
|
|
107
|
-
const
|
|
114
|
+
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
108
115
|
|
|
109
|
-
if (
|
|
116
|
+
if (typeAssertionNode !== null) {
|
|
110
117
|
const statementString = localContext.nodeAsString(statementNode);
|
|
111
118
|
|
|
112
119
|
localContext.trace(`Verifying the '${statementString}' statement as a type assertion...`, statementNode);
|
|
113
120
|
|
|
114
|
-
const
|
|
115
|
-
typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, () => {
|
|
116
|
-
const verifiedAhead = true;
|
|
117
|
-
|
|
118
|
-
return verifiedAhead;
|
|
119
|
-
});
|
|
121
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
|
|
120
122
|
|
|
121
123
|
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
122
124
|
|
|
@@ -128,21 +130,154 @@ export function verifyStatementAsTypeAssertion(statementNode, assignments, deriv
|
|
|
128
130
|
return statementVerifiedAsTypeAssertion;
|
|
129
131
|
}
|
|
130
132
|
|
|
131
|
-
function
|
|
132
|
-
let
|
|
133
|
+
function verifyStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
134
|
+
let statementVerifiedAsJudgement = false;
|
|
135
|
+
|
|
136
|
+
const judgementNode = judgementNodeQuery(statementNode);
|
|
137
|
+
|
|
138
|
+
if (judgementNode !== null) {
|
|
139
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
140
|
+
|
|
141
|
+
localContext.trace(`Verifying the '${statementString}' statement as a judgement...`, statementNode);
|
|
142
|
+
|
|
143
|
+
const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
144
|
+
|
|
145
|
+
statementVerifiedAsJudgement = judgementVerified; ///
|
|
146
|
+
|
|
147
|
+
if (statementVerifiedAsJudgement) {
|
|
148
|
+
localContext.debug(`...verified the '${statementString}' statement as a judgement.`, statementNode);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return statementVerifiedAsJudgement;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function verifyStatementAsMetavariable(statementNode, assignments, derived, localContext) {
|
|
156
|
+
let statementVerifiedAsMetavariable = false;
|
|
157
|
+
|
|
158
|
+
const metavariableNode = metavariableNodeQuery(statementNode);
|
|
159
|
+
|
|
160
|
+
if (metavariableNode !== null) {
|
|
161
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
162
|
+
|
|
163
|
+
localContext.trace(`Verifying the '${statementString}' statement as a metavariable...`, statementNode);
|
|
164
|
+
|
|
165
|
+
const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
|
|
166
|
+
|
|
167
|
+
if (metavariable !== null) {
|
|
168
|
+
const metaTypeName = metavariable.getMetaTypeName();
|
|
169
|
+
|
|
170
|
+
if (metaTypeName === STATEMENT_META_TYPE_NAME) {
|
|
171
|
+
statementVerifiedAsMetavariable = true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (statementVerifiedAsMetavariable) {
|
|
176
|
+
localContext.debug(`...verified the '${statementString}' statement as a metavariable.`, statementNode);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return statementVerifiedAsMetavariable;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function verifyStatementAsDefinedAssertion(statementNode, assignments, derived, localContext) {
|
|
184
|
+
let statementVerifiedAsDefinedAssertion = false;
|
|
185
|
+
|
|
186
|
+
const definedAssertionNode = definedAssertionNodeQuery(statementNode);
|
|
187
|
+
|
|
188
|
+
if (definedAssertionNode !== null) {
|
|
189
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
190
|
+
|
|
191
|
+
localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
|
|
192
|
+
|
|
193
|
+
const definedAssertionVerified = verifyDefinedAssertion(definedAssertionNode, assignments, derived, localContext, () => {
|
|
194
|
+
const verifiedAhead = true;
|
|
195
|
+
|
|
196
|
+
return verifiedAhead;
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
statementVerifiedAsDefinedAssertion = definedAssertionVerified; ///
|
|
200
|
+
|
|
201
|
+
if (statementVerifiedAsDefinedAssertion) {
|
|
202
|
+
localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return statementVerifiedAsDefinedAssertion;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function verifyStatementAsSubproofAssertion(statementNode, assignments, derived, localContext) {
|
|
210
|
+
let statementVerifiedAsSubproofAssertion = false;
|
|
211
|
+
|
|
212
|
+
const subproofAssertionNode = subproofAssertionNodeQuery(statementNode);
|
|
213
|
+
|
|
214
|
+
if (subproofAssertionNode !== null) {
|
|
215
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
216
|
+
|
|
217
|
+
localContext.trace(`Verifying the '${statementString}' statement as a subproof assertion...`, statementNode);
|
|
218
|
+
|
|
219
|
+
const subproofAssertionVerified = verifySubproofAssertion(subproofAssertionNode, assignments, derived, localContext, () => {
|
|
220
|
+
const verifiedAhead = true;
|
|
221
|
+
|
|
222
|
+
return verifiedAhead;
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
statementVerifiedAsSubproofAssertion = subproofAssertionVerified; ///
|
|
226
|
+
|
|
227
|
+
if (statementVerifiedAsSubproofAssertion) {
|
|
228
|
+
localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return statementVerifiedAsSubproofAssertion;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
function verifyStatementAsContainedAssertion(statementNode, assignments, derived, localContext) {
|
|
236
|
+
let statementVerifiedAsContainedAssertion = false;
|
|
237
|
+
|
|
238
|
+
const containedAssertionNode = containedAssertionNodeQuery(statementNode);
|
|
239
|
+
|
|
240
|
+
if (containedAssertionNode !== null) {
|
|
241
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
242
|
+
|
|
243
|
+
localContext.trace(`Verifying the '${statementString}' statement as a defined assertion...`, statementNode);
|
|
244
|
+
|
|
245
|
+
const containedAssertionVerified = verifyContainedAssertion(containedAssertionNode, assignments, derived, localContext, () => {
|
|
246
|
+
const verifiedAhead = true;
|
|
133
247
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
statementDefinedAssertion = isStatementDefinedAssertion(statementNode),
|
|
137
|
-
statementContainedAssertion = isStatementContainedAssertion(statementNode);
|
|
248
|
+
return verifiedAhead;
|
|
249
|
+
});
|
|
138
250
|
|
|
139
|
-
|
|
140
|
-
let combinators = localContext.getCombinators();
|
|
251
|
+
statementVerifiedAsContainedAssertion = containedAssertionVerified; ///
|
|
141
252
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
253
|
+
if (statementVerifiedAsContainedAssertion) {
|
|
254
|
+
localContext.debug(`...verified the '${statementString}' statement as a defined assertion.`, statementNode);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
return statementVerifiedAsContainedAssertion;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function verifyStatementAgainstCombinators(statementNode, assignments, derived, localContext) {
|
|
262
|
+
let statementVerifiedAgainstCombinators = false;
|
|
263
|
+
|
|
264
|
+
const equalityNode = equalityNodeQuery(statementNode),
|
|
265
|
+
judgementNode = judgementNodeQuery(statementNode),
|
|
266
|
+
metavariableNode = metavariableNodeQuery(statementNode),
|
|
267
|
+
typeAssertionNode = typeAssertionNodeQuery(statementNode),
|
|
268
|
+
definedAssertionNode = definedAssertionNodeQuery(statementNode),
|
|
269
|
+
subproofAssertionNode = subproofAssertionNodeQuery(statementNode),
|
|
270
|
+
containedAssertionNode = containedAssertionNodeQuery(statementNode);
|
|
271
|
+
|
|
272
|
+
if ( (equalityNode === null) &&
|
|
273
|
+
(judgementNode === null) &&
|
|
274
|
+
(metavariableNode === null) &&
|
|
275
|
+
(typeAssertionNode === null) &&
|
|
276
|
+
(definedAssertionNode === null) &&
|
|
277
|
+
(subproofAssertionNode === null) &&
|
|
278
|
+
(containedAssertionNode === null) ) {
|
|
279
|
+
|
|
280
|
+
const combinators = localContext.getCombinators();
|
|
146
281
|
|
|
147
282
|
statementVerifiedAgainstCombinators = combinators.some((combinator) => {
|
|
148
283
|
const statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, localContext);
|
|
@@ -180,18 +315,4 @@ function verifyStatementAgainstCombinator(statementNode, combinator, localContex
|
|
|
180
315
|
}
|
|
181
316
|
|
|
182
317
|
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
|
-
}
|
|
318
|
+
}
|
|
@@ -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;
|
package/src/verify/subproof.js
CHANGED
|
@@ -9,7 +9,7 @@ import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
|
9
9
|
const suppositionNodesQuery = nodesQuery("/subproof/supposition"),
|
|
10
10
|
subDerivationNodeQuery = nodeQuery("/subproof/subDerivation");
|
|
11
11
|
|
|
12
|
-
export default function verifySubproof(subproofNode, localContext) {
|
|
12
|
+
export default function verifySubproof(subproofNode, substitutions, localContext) {
|
|
13
13
|
let subproofVerified = false;
|
|
14
14
|
|
|
15
15
|
localContext = LocalContext.fromLocalContext(localContext); ///
|
|
@@ -20,7 +20,7 @@ export default function verifySubproof(subproofNode, localContext) {
|
|
|
20
20
|
|
|
21
21
|
if (suppositionsVerified) {
|
|
22
22
|
const subDerivationNode = subDerivationNodeQuery(subproofNode),
|
|
23
|
-
subDerivationVerified = verifySubDerivation(subDerivationNode, localContext);
|
|
23
|
+
subDerivationVerified = verifySubDerivation(subDerivationNode, substitutions, localContext);
|
|
24
24
|
|
|
25
25
|
if (subDerivationVerified) {
|
|
26
26
|
subproofVerified = true;
|
|
@@ -11,9 +11,9 @@ export default function verifyTermAsConstructor(termNode, typeNode, fileContext)
|
|
|
11
11
|
|
|
12
12
|
fileContext.debug(`Verifying the '${termString}' term as a constructor...`, termNode);
|
|
13
13
|
|
|
14
|
-
const
|
|
14
|
+
const localContext = LocalContext.fromFileContext(fileContext),
|
|
15
|
+
nonTerminalNode = termNode, ///
|
|
15
16
|
childNodes = nonTerminalNode.getChildNodes(),
|
|
16
|
-
localContext = LocalContext.fromFileContext(fileContext),
|
|
17
17
|
childNodesVerified = termAsConstructorNodeVerifier.verifyChildNodes(childNodes, localContext, () => {
|
|
18
18
|
const verifiedAhead = true;
|
|
19
19
|
|
package/src/verify/theorem.js
CHANGED
|
@@ -27,9 +27,9 @@ export default function verifyTheorem(theoremNode, fileContext) {
|
|
|
27
27
|
labelsVerified = verifyLabels(labelNodes, labels, fileContext);
|
|
28
28
|
|
|
29
29
|
if (labelsVerified) {
|
|
30
|
-
const
|
|
30
|
+
const localContext = LocalContext.fromFileContext(fileContext),
|
|
31
31
|
suppositions = [],
|
|
32
|
-
|
|
32
|
+
suppositionNodes = suppositionsNodeQuery(theoremNode),
|
|
33
33
|
suppositionsVerified = verifySuppositions(suppositionNodes, suppositions, localContext);
|
|
34
34
|
|
|
35
35
|
if (suppositionsVerified) {
|
|
@@ -41,10 +41,13 @@ export default function verifyTheorem(theoremNode, fileContext) {
|
|
|
41
41
|
const proofNode = proofNodeQuery(theoremNode),
|
|
42
42
|
firstConsequent = first(consequents),
|
|
43
43
|
consequent = firstConsequent, ///
|
|
44
|
-
|
|
44
|
+
statementNode = consequent.getStatementNode(),
|
|
45
|
+
substitutions = [],
|
|
46
|
+
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
45
47
|
|
|
46
48
|
if (proofVerified) {
|
|
47
|
-
const
|
|
49
|
+
const substitutions = [],
|
|
50
|
+
theorem = Theorem.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext);
|
|
48
51
|
|
|
49
52
|
fileContext.addTheorem(theorem);
|
|
50
53
|
|