occam-verify-cli 0.0.700 → 0.0.702
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/assignment/equality.js +2 -2
- package/lib/assignment/metavariable.js +2 -2
- package/lib/assignment/variable.js +2 -2
- package/lib/collection.js +44 -6
- package/lib/conclusion.js +6 -6
- package/lib/consequent.js +4 -4
- package/lib/context/file.js +9 -2
- package/lib/context/local.js +27 -64
- package/lib/context/localMeta.js +8 -1
- package/lib/equality.js +20 -4
- package/lib/premise.js +9 -9
- package/lib/supposition.js +4 -4
- package/lib/utilities/collection.js +27 -13
- package/lib/verifier/node/statementAsCombinator.js +4 -1
- package/lib/verifier/node/termAsConstructor.js +4 -20
- package/lib/verifier/nodes/equality.js +169 -0
- package/lib/verifier/nodes/metastatementForMetavariable.js +6 -7
- package/lib/verifier/nodes/statement.js +12 -4
- package/lib/verifier/nodes/statementForMetavariable.js +6 -7
- package/lib/verifier/nodes/termForVariable.js +19 -20
- package/lib/verify/consequent.js +3 -3
- package/lib/verify/derivation.js +28 -6
- package/lib/verify/equality.js +9 -4
- package/lib/verify/givenType.js +32 -0
- package/lib/verify/metastatement.js +3 -3
- package/lib/verify/statement/qualified.js +135 -37
- package/lib/verify/statement.js +34 -42
- package/lib/verify/supposition.js +13 -8
- package/lib/verify/suppositions.js +2 -11
- package/lib/verify/term.js +25 -59
- package/lib/verify/termAndGivenType.js +39 -0
- package/lib/verify/termAsGivenVariable.js +36 -0
- package/lib/verify/typeAssertion.js +35 -22
- package/package.json +1 -1
- package/src/assignment/equality.js +2 -2
- package/src/assignment/metavariable.js +2 -2
- package/src/assignment/variable.js +2 -2
- package/src/collection.js +55 -5
- package/src/conclusion.js +6 -6
- package/src/consequent.js +4 -4
- package/src/context/file.js +7 -1
- package/src/context/local.js +33 -78
- package/src/context/localMeta.js +6 -0
- package/src/equality.js +23 -2
- package/src/premise.js +10 -10
- package/src/supposition.js +3 -3
- package/src/utilities/collection.js +31 -11
- package/src/verifier/node/statementAsCombinator.js +6 -0
- package/src/verifier/node/termAsConstructor.js +5 -26
- package/src/verifier/nodes/equality.js +47 -0
- package/src/verifier/nodes/metastatementForMetavariable.js +10 -10
- package/src/verifier/nodes/statement.js +1 -1
- package/src/verifier/nodes/statementForMetavariable.js +10 -10
- package/src/verifier/nodes/termForVariable.js +30 -30
- package/src/verify/consequent.js +4 -4
- package/src/verify/derivation.js +37 -8
- package/src/verify/equality.js +12 -3
- package/src/verify/{standaloneType.js → givenType.js} +7 -7
- package/src/verify/metastatement.js +2 -2
- package/src/verify/statement/qualified.js +194 -39
- package/src/verify/statement.js +47 -47
- package/src/verify/supposition.js +15 -8
- package/src/verify/suppositions.js +1 -13
- package/src/verify/term.js +26 -62
- package/src/verify/termAndGivenType.js +37 -0
- package/src/verify/termAsGivenVariable.js +39 -0
- package/src/verify/typeAssertion.js +50 -28
- package/lib/verifier/nodes/metastatementForMetavariable/conclusion.js +0 -114
- package/lib/verifier/nodes/metastatementForMetavariable/premise.js +0 -114
- package/lib/verifier/nodes/statementForMetavariable/conclusion.js +0 -114
- package/lib/verifier/nodes/statementForMetavariable/premise.js +0 -114
- package/lib/verifier/nodes/termForVariable/consequent.js +0 -114
- package/lib/verifier/nodes/termForVariable/supposition.js +0 -114
- package/lib/verify/standaloneType.js +0 -32
- package/lib/verify/termAndStandaloneType.js +0 -39
- package/lib/verify/termAsVariableAndStandaloneType.js +0 -39
- package/src/verifier/nodes/metastatementForMetavariable/conclusion.js +0 -11
- package/src/verifier/nodes/metastatementForMetavariable/premise.js +0 -11
- package/src/verifier/nodes/statementForMetavariable/conclusion.js +0 -11
- package/src/verifier/nodes/statementForMetavariable/premise.js +0 -11
- package/src/verifier/nodes/termForVariable/consequent.js +0 -11
- package/src/verifier/nodes/termForVariable/supposition.js +0 -11
- package/src/verify/termAndStandaloneType.js +0 -37
- package/src/verify/termAsVariableAndStandaloneType.js +0 -38
|
@@ -10,7 +10,7 @@ import { TERM_RULE_NAME } from "../../ruleNames";
|
|
|
10
10
|
|
|
11
11
|
const variableNodeQuery = nodeQuery('/term/variable!');
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
class TermForVariableNodesVerifier extends NodesVerifier {
|
|
14
14
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
15
15
|
let nonTerminalNodeVerified = false;
|
|
16
16
|
|
|
@@ -74,47 +74,47 @@ export default class TermForVariableNodesVerifier extends NodesVerifier {
|
|
|
74
74
|
variableVerified = verifiedAhead; ///
|
|
75
75
|
}
|
|
76
76
|
} else {
|
|
77
|
-
const
|
|
77
|
+
const variableNode = variableNodeA, ///
|
|
78
|
+
localContext = localContextA, ///
|
|
79
|
+
variable = localContext.findVariableByVariableNode(variableNode);
|
|
78
80
|
|
|
79
|
-
if (
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
if (variable !== null) {
|
|
82
|
+
const terms = [],
|
|
83
|
+
context = localContextB, ///
|
|
84
|
+
termNode = termNodeB, ///
|
|
85
|
+
termVerified = verifyTerm(termNode, terms, context, () => {
|
|
86
|
+
let verifiedAhead = false;
|
|
83
87
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
let verifiedAhead = false;
|
|
88
|
+
const firstTerm = first(terms),
|
|
89
|
+
term = firstTerm, ///
|
|
90
|
+
termType = term.getType(),
|
|
91
|
+
variableType = variable.getType(),
|
|
92
|
+
variableTypeEqualToOrSuperTypeOfTermType = variableType.isEqualToOrSuperTypeOf(termType);
|
|
90
93
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
variableType = variable.getType(),
|
|
95
|
-
variableTypeEqualToOrSuperTypeOfTermType = variableType.isEqualToOrSuperTypeOf(termType);
|
|
94
|
+
if (variableTypeEqualToOrSuperTypeOfTermType) {
|
|
95
|
+
const termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
|
|
96
|
+
substitution = termForVariableSubstitution; ///
|
|
96
97
|
|
|
97
|
-
|
|
98
|
-
const termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
|
|
99
|
-
substitution = termForVariableSubstitution; ///
|
|
98
|
+
substitutions.push(substitution);
|
|
100
99
|
|
|
101
|
-
|
|
100
|
+
verifiedAhead = verifyAhead();
|
|
102
101
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (!verifiedAhead) {
|
|
106
|
-
substitutions.pop();
|
|
107
|
-
}
|
|
102
|
+
if (!verifiedAhead) {
|
|
103
|
+
substitutions.pop();
|
|
108
104
|
}
|
|
105
|
+
}
|
|
109
106
|
|
|
110
|
-
|
|
111
|
-
|
|
107
|
+
return verifiedAhead;
|
|
108
|
+
});
|
|
112
109
|
|
|
113
|
-
|
|
114
|
-
}
|
|
110
|
+
variableVerified = termVerified; ///
|
|
115
111
|
}
|
|
116
112
|
}
|
|
117
113
|
|
|
118
114
|
return variableVerified;
|
|
119
115
|
}
|
|
120
116
|
}
|
|
117
|
+
|
|
118
|
+
const termForVariableNodesVerifier = new TermForVariableNodesVerifier();
|
|
119
|
+
|
|
120
|
+
export default termForVariableNodesVerifier;
|
package/src/verify/consequent.js
CHANGED
|
@@ -21,15 +21,15 @@ export default function verifyConsequent(consequentNode, consequents, localConte
|
|
|
21
21
|
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
22
22
|
|
|
23
23
|
if (unqualifiedStatementVerified) {
|
|
24
|
+
consequentVerified = true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (consequentVerified) {
|
|
24
28
|
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
25
29
|
consequent = Consequent.fromStatementNode(statementNode);
|
|
26
30
|
|
|
27
31
|
consequents.push(consequent);
|
|
28
32
|
|
|
29
|
-
consequentVerified = true;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (consequentVerified) {
|
|
33
33
|
localContext.debug(`...verified the '${consequentString}' consequent.`, consequentNode);
|
|
34
34
|
}
|
|
35
35
|
|
package/src/verify/derivation.js
CHANGED
|
@@ -68,14 +68,17 @@ function verifySubproof(subproofNode, localContext) {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
function verifyChild(childNode, localContext) {
|
|
71
|
-
let childVerified;
|
|
71
|
+
let childVerified = false;
|
|
72
72
|
|
|
73
73
|
const childNodeRuleName = childNode.getRuleName();
|
|
74
74
|
|
|
75
75
|
switch (childNodeRuleName) {
|
|
76
76
|
case SUBPROOF_RULE_NAME: {
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
let subproofVerified;
|
|
78
|
+
|
|
79
|
+
const subproofNode = childNode; ///
|
|
80
|
+
|
|
81
|
+
subproofVerified = verifySubproof(subproofNode, localContext);
|
|
79
82
|
|
|
80
83
|
if (subproofVerified) {
|
|
81
84
|
const proofStep = ProofStep.fromSubproofNode(subproofNode);
|
|
@@ -89,10 +92,23 @@ function verifyChild(childNode, localContext) {
|
|
|
89
92
|
}
|
|
90
93
|
|
|
91
94
|
case QUALIFIED_STATEMENT_RULE_NAME: {
|
|
95
|
+
let qualifiedStatementVerified;
|
|
96
|
+
|
|
92
97
|
const derived = true,
|
|
93
98
|
assignments = [],
|
|
94
|
-
qualifiedStatementNode = childNode
|
|
95
|
-
|
|
99
|
+
qualifiedStatementNode = childNode; ///
|
|
100
|
+
|
|
101
|
+
qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, assignments, derived, localContext);
|
|
102
|
+
|
|
103
|
+
if (qualifiedStatementVerified) {
|
|
104
|
+
qualifiedStatementVerified = assignments.every((assignment) => { ///
|
|
105
|
+
const assigned = assignment.assign(localContext);
|
|
106
|
+
|
|
107
|
+
if (assigned) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
96
112
|
|
|
97
113
|
if (qualifiedStatementVerified) {
|
|
98
114
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -100,17 +116,30 @@ function verifyChild(childNode, localContext) {
|
|
|
100
116
|
|
|
101
117
|
localContext.addProofStep(proofStep);
|
|
102
118
|
|
|
103
|
-
childVerified =
|
|
119
|
+
childVerified = true; ///
|
|
104
120
|
}
|
|
105
121
|
|
|
106
122
|
break;
|
|
107
123
|
}
|
|
108
124
|
|
|
109
125
|
case UNQUALIFIED_STATEMENT_RULE_NAME: {
|
|
126
|
+
let unqualifiedStatementVerified;
|
|
127
|
+
|
|
110
128
|
const derived = true,
|
|
111
129
|
assignments = [],
|
|
112
|
-
unqualifiedStatementNode = childNode
|
|
113
|
-
|
|
130
|
+
unqualifiedStatementNode = childNode; ///
|
|
131
|
+
|
|
132
|
+
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
133
|
+
|
|
134
|
+
if (unqualifiedStatementVerified) {
|
|
135
|
+
unqualifiedStatementVerified = assignments.every((assignment) => { ///
|
|
136
|
+
const assigned = assignment.assign(localContext);
|
|
137
|
+
|
|
138
|
+
if (assigned) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
114
143
|
|
|
115
144
|
if (unqualifiedStatementVerified) {
|
|
116
145
|
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
package/src/verify/equality.js
CHANGED
|
@@ -59,13 +59,22 @@ function verifyDerivedEquality(equalityNode, assignments, derived, context, veri
|
|
|
59
59
|
secondTerm = second(terms),
|
|
60
60
|
leftTerm = firstTerm, ///
|
|
61
61
|
rightTerm = secondTerm, ///
|
|
62
|
-
equality = Equality.
|
|
62
|
+
equality = Equality.fromLeftTermRightTermAndEqualityNode(leftTerm, rightTerm, equalityNode);
|
|
63
63
|
|
|
64
64
|
if (equality !== null) {
|
|
65
|
-
const equalityEqual =
|
|
65
|
+
const equalityEqual = equality.isEqual(context);
|
|
66
66
|
|
|
67
67
|
if (equalityEqual) {
|
|
68
|
+
const equalityAssignment = EqualityAssignment.fromEquality(equality),
|
|
69
|
+
assignment = equalityAssignment; ///
|
|
70
|
+
|
|
71
|
+
assignments.push(assignment);
|
|
72
|
+
|
|
68
73
|
verifiedAhead = verifyAhead();
|
|
74
|
+
|
|
75
|
+
if (!verifiedAhead) {
|
|
76
|
+
assignments.pop();
|
|
77
|
+
}
|
|
69
78
|
}
|
|
70
79
|
}
|
|
71
80
|
|
|
@@ -104,7 +113,7 @@ function verifyGivenEquality(equalityNode, assignments, derived, context, verify
|
|
|
104
113
|
secondTerm = second(terms),
|
|
105
114
|
leftTerm = firstTerm, ///
|
|
106
115
|
rightTerm = secondTerm, ///
|
|
107
|
-
equality = Equality.
|
|
116
|
+
equality = Equality.fromLeftTermRightTermAndEqualityNode(leftTerm, rightTerm, equalityNode);
|
|
108
117
|
|
|
109
118
|
if (equality !== null) {
|
|
110
119
|
const equalityAssignment = EqualityAssignment.fromEquality(equality),
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import { typeNameFromTypeNode } from "../utilities/query";
|
|
4
4
|
|
|
5
|
-
export default function
|
|
6
|
-
let
|
|
5
|
+
export default function verifyGivenType(typeNode, types, context, verifyAhead) {
|
|
6
|
+
let givenTypeVerified = false;
|
|
7
7
|
|
|
8
8
|
const typeString = context.nodeAsString(typeNode);
|
|
9
9
|
|
|
10
|
-
context.trace(`Verifying the
|
|
10
|
+
context.trace(`Verifying the given '${typeString}' type...`, typeNode);
|
|
11
11
|
|
|
12
12
|
const typeName = typeNameFromTypeNode(typeNode),
|
|
13
13
|
type = context.findTypeByTypeName(typeName);
|
|
@@ -23,12 +23,12 @@ export default function verifyStandaloneType(typeNode, types, context, verifyAhe
|
|
|
23
23
|
types.pop();
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
givenTypeVerified = verifiedAhead; ///
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
if (
|
|
30
|
-
context.debug(`...verified the
|
|
29
|
+
if (givenTypeVerified) {
|
|
30
|
+
context.debug(`...verified the given '${typeString}' type.`, typeNode);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
return
|
|
33
|
+
return givenTypeVerified;
|
|
34
34
|
}
|
|
@@ -28,8 +28,8 @@ function verifyMetastatement(metastatementNode, derived, localMetaContext) {
|
|
|
28
28
|
return metastatementVerified;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
Object.assign(
|
|
32
|
-
|
|
31
|
+
Object.assign(metastatementNodeVerifier, {
|
|
32
|
+
verifyMetastatement
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
export default verifyMetastatement;
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import verifyEquality from "../equality";
|
|
4
|
+
import verifyTypeAssertion from "../typeAssertion";
|
|
5
|
+
|
|
3
6
|
import { nodeQuery, referenceNameFromReferenceNode } from "../../utilities/query";
|
|
4
7
|
|
|
5
|
-
const
|
|
6
|
-
|
|
8
|
+
const equalityNodeQuery = nodeQuery("/qualifiedStatement/statement/equality!"),
|
|
9
|
+
referenceNodeQuery = nodeQuery("/qualifiedStatement/qualification!/reference!"),
|
|
10
|
+
statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
11
|
+
typeAssertionNodeQuery = nodeQuery("/qualifiedStatement/statement/typeAssertion!");
|
|
7
12
|
|
|
8
13
|
export default function verifyQualifiedStatement(qualifiedStatementNode, assignments, derived, localContext) {
|
|
9
14
|
let qualifiedStatementVerified = false;
|
|
@@ -11,68 +16,218 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
11
16
|
const statementNode = statementNodeQuery(qualifiedStatementNode);
|
|
12
17
|
|
|
13
18
|
if (statementNode !== null) {
|
|
14
|
-
const
|
|
15
|
-
statementLocalContext = localContext; ///
|
|
19
|
+
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
16
20
|
|
|
17
|
-
localContext.trace(`Verifying the '${
|
|
21
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
|
|
18
22
|
|
|
19
23
|
const referenceNode = referenceNodeQuery(qualifiedStatementNode),
|
|
20
|
-
referenceName = referenceNameFromReferenceNode(referenceNode)
|
|
24
|
+
referenceName = referenceNameFromReferenceNode(referenceNode),
|
|
25
|
+
verifyQualifiedStatementFunctions = [
|
|
26
|
+
verifyQualifiedStatementAAgainstRule,
|
|
27
|
+
verifyQualifiedStatementAAgainstAxiom,
|
|
28
|
+
verifyQualifiedStatementAAgainstLemma,
|
|
29
|
+
verifyQualifiedStatementAAgainstTheorem,
|
|
30
|
+
verifyQualifiedStatementAAgainstConjecture
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
qualifiedStatementVerified = verifyQualifiedStatementFunctions.some((verifyQualifiedStatementFunction) => { ///
|
|
34
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, referenceName, localContext);
|
|
35
|
+
|
|
36
|
+
if (qualifiedStatementVerified) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
21
40
|
|
|
22
|
-
if (
|
|
23
|
-
|
|
41
|
+
if (qualifiedStatementVerified) {
|
|
42
|
+
derived = false; ///
|
|
24
43
|
|
|
25
|
-
|
|
26
|
-
|
|
44
|
+
const context = localContext, ///
|
|
45
|
+
verifyQualifiedStatementFunctions = [
|
|
46
|
+
verifyQualifiedStatementAsEquality,
|
|
47
|
+
verifyQualifiedStatementAsTypeAssertion
|
|
48
|
+
];
|
|
27
49
|
|
|
28
|
-
|
|
29
|
-
|
|
50
|
+
qualifiedStatementVerified = verifyQualifiedStatementFunctions.every((verifyQualifiedStatementFunction) => { ///
|
|
51
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, assignments, derived, context, () => {
|
|
52
|
+
const verifiedAhead = true;
|
|
53
|
+
|
|
54
|
+
return verifiedAhead;
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
if (qualifiedStatementVerified) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
30
61
|
}
|
|
31
62
|
|
|
32
|
-
if (
|
|
33
|
-
|
|
63
|
+
if (qualifiedStatementVerified) {
|
|
64
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement.`, qualifiedStatementNode);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
34
67
|
|
|
35
|
-
|
|
36
|
-
|
|
68
|
+
return qualifiedStatementVerified;
|
|
69
|
+
}
|
|
37
70
|
|
|
38
|
-
|
|
39
|
-
|
|
71
|
+
function verifyQualifiedStatementAAgainstRule(qualifiedStatementNode, referenceName, localContext) {
|
|
72
|
+
let qualifiedStatementVerifiedAgainstRule = false;
|
|
73
|
+
|
|
74
|
+
const rule = localContext.findRuleByReferenceName(referenceName);
|
|
75
|
+
|
|
76
|
+
if (rule !== null) {
|
|
77
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
78
|
+
statementLocalContext = localContext, ///
|
|
79
|
+
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
80
|
+
|
|
81
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceName}' rule...`, statementNode);
|
|
82
|
+
|
|
83
|
+
const ruleMatchesStatement = rule.matchStatement(statementNode, statementLocalContext);
|
|
84
|
+
|
|
85
|
+
qualifiedStatementVerifiedAgainstRule = ruleMatchesStatement; ///
|
|
86
|
+
|
|
87
|
+
if (qualifiedStatementVerifiedAgainstRule) {
|
|
88
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceName}' rule.`, statementNode);
|
|
40
89
|
}
|
|
90
|
+
}
|
|
41
91
|
|
|
42
|
-
|
|
43
|
-
|
|
92
|
+
return qualifiedStatementVerifiedAgainstRule;
|
|
93
|
+
}
|
|
44
94
|
|
|
45
|
-
|
|
46
|
-
|
|
95
|
+
function verifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, referenceName, localContext) {
|
|
96
|
+
let qualifiedStatementVerifiedAgainstAxiom = false;
|
|
47
97
|
|
|
48
|
-
|
|
49
|
-
|
|
98
|
+
const axiom = localContext.findAxiomByReferenceName(referenceName);
|
|
99
|
+
|
|
100
|
+
if (axiom !== null) {
|
|
101
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
102
|
+
statementLocalContext = localContext, ///
|
|
103
|
+
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
104
|
+
|
|
105
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceName}' axiom...`, statementNode);
|
|
106
|
+
|
|
107
|
+
const axiomMatchesStatement = axiom.matchStatement(statementNode, statementLocalContext);
|
|
108
|
+
|
|
109
|
+
qualifiedStatementVerifiedAgainstAxiom = axiomMatchesStatement; ///
|
|
110
|
+
|
|
111
|
+
if (qualifiedStatementVerifiedAgainstAxiom) {
|
|
112
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceName}' axiom.`, statementNode);
|
|
50
113
|
}
|
|
114
|
+
}
|
|
51
115
|
|
|
52
|
-
|
|
53
|
-
|
|
116
|
+
return qualifiedStatementVerifiedAgainstAxiom;
|
|
117
|
+
}
|
|
54
118
|
|
|
55
|
-
|
|
56
|
-
|
|
119
|
+
function verifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, referenceName, localContext) {
|
|
120
|
+
let qualifiedStatementVerifiedAgainstLemma = false;
|
|
57
121
|
|
|
58
|
-
|
|
59
|
-
|
|
122
|
+
const lemma = localContext.findLemmaByReferenceName(referenceName);
|
|
123
|
+
|
|
124
|
+
if (lemma !== null) {
|
|
125
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
126
|
+
statementLocalContext = localContext, ///
|
|
127
|
+
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
128
|
+
|
|
129
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceName}' lemma...`, statementNode);
|
|
130
|
+
|
|
131
|
+
const lemmaMatchesStatement = lemma.matchStatement(statementNode, statementLocalContext);
|
|
132
|
+
|
|
133
|
+
qualifiedStatementVerifiedAgainstLemma = lemmaMatchesStatement; ///
|
|
134
|
+
|
|
135
|
+
if (qualifiedStatementVerifiedAgainstLemma) {
|
|
136
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceName}' lemma.`, statementNode);
|
|
60
137
|
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return qualifiedStatementVerifiedAgainstLemma;
|
|
141
|
+
}
|
|
61
142
|
|
|
62
|
-
|
|
63
|
-
|
|
143
|
+
function verifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, referenceName, localContext) {
|
|
144
|
+
let qualifiedStatementVerifiedAgainstTheorem = false;
|
|
64
145
|
|
|
65
|
-
|
|
66
|
-
const conjectureMatchesStatement = conjecture.matchStatement(statementNode, statementLocalContext);
|
|
146
|
+
const theorem = localContext.findTheoremByReferenceName(referenceName);
|
|
67
147
|
|
|
68
|
-
|
|
69
|
-
|
|
148
|
+
if (theorem !== null) {
|
|
149
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
150
|
+
statementLocalContext = localContext, ///
|
|
151
|
+
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
152
|
+
|
|
153
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceName}' theorem...`, statementNode);
|
|
154
|
+
|
|
155
|
+
const theoremMatchesStatement = theorem.matchStatement(statementNode, statementLocalContext);
|
|
156
|
+
|
|
157
|
+
qualifiedStatementVerifiedAgainstTheorem = theoremMatchesStatement; ///
|
|
158
|
+
|
|
159
|
+
if (qualifiedStatementVerifiedAgainstTheorem) {
|
|
160
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceName}' theorem.`, statementNode);
|
|
70
161
|
}
|
|
162
|
+
}
|
|
71
163
|
|
|
72
|
-
|
|
73
|
-
|
|
164
|
+
return qualifiedStatementVerifiedAgainstTheorem;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, referenceName, localContext) {
|
|
168
|
+
let qualifiedStatementVerifiedAgainstConjecture = false;
|
|
169
|
+
|
|
170
|
+
const conjecture = localContext.findConjectureByReferenceName(referenceName);
|
|
171
|
+
|
|
172
|
+
if (conjecture !== null) {
|
|
173
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
174
|
+
statementLocalContext = localContext, ///
|
|
175
|
+
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
176
|
+
|
|
177
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement against the '${referenceName}' conjecture...`, statementNode);
|
|
178
|
+
|
|
179
|
+
const conjectureMatchesStatement = conjecture.matchStatement(statementNode, statementLocalContext);
|
|
180
|
+
|
|
181
|
+
qualifiedStatementVerifiedAgainstConjecture = conjectureMatchesStatement; ///
|
|
182
|
+
|
|
183
|
+
if (qualifiedStatementVerifiedAgainstConjecture) {
|
|
184
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement against the '${referenceName}' conjecture.`, statementNode);
|
|
74
185
|
}
|
|
75
186
|
}
|
|
76
187
|
|
|
77
|
-
return
|
|
188
|
+
return qualifiedStatementVerifiedAgainstConjecture;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function verifyQualifiedStatementAsEquality(qualifiedStatementNode, assignments, derived, context, verifyAhead) {
|
|
192
|
+
let statementVerifiedAsEquality = true; ///
|
|
193
|
+
|
|
194
|
+
const equalityNode = equalityNodeQuery(qualifiedStatementNode);
|
|
195
|
+
|
|
196
|
+
if (equalityNode !== null) {
|
|
197
|
+
const qualifiedStatementString = context.nodeAsString(qualifiedStatementNode);
|
|
198
|
+
|
|
199
|
+
context.trace(`Verifying the '${qualifiedStatementString}' qualified statement as an equality...`, qualifiedStatementNode);
|
|
200
|
+
|
|
201
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, context, verifyAhead);
|
|
202
|
+
|
|
203
|
+
statementVerifiedAsEquality = equalityVerified; ///
|
|
204
|
+
|
|
205
|
+
if (statementVerifiedAsEquality) {
|
|
206
|
+
context.debug(`...verified the '${qualifiedStatementString}' qualified statement as an equality.`, qualifiedStatementNode);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return statementVerifiedAsEquality;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function verifyQualifiedStatementAsTypeAssertion(qualifiedStatementNode, assignments, derived, context, verifyAhead) {
|
|
214
|
+
let statementVerifiedAsTypeAssertion = true; ///
|
|
215
|
+
|
|
216
|
+
const typeAssertionNode = typeAssertionNodeQuery(qualifiedStatementNode);
|
|
217
|
+
|
|
218
|
+
if (typeAssertionNode !== null) {
|
|
219
|
+
const qualifiedStatementString = context.nodeAsString(qualifiedStatementNode);
|
|
220
|
+
|
|
221
|
+
context.trace(`Verifying the '${qualifiedStatementString}' qualified statement as a type assertion...`, qualifiedStatementNode);
|
|
222
|
+
|
|
223
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, context, verifyAhead);
|
|
224
|
+
|
|
225
|
+
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
226
|
+
|
|
227
|
+
if (statementVerifiedAsTypeAssertion) {
|
|
228
|
+
context.debug(`...verified the '${qualifiedStatementString}' qualified statement as a type assertion.`, qualifiedStatementNode);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return statementVerifiedAsTypeAssertion;
|
|
78
233
|
}
|