occam-verify-cli 0.0.960 → 0.0.962
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/context/local.js +3 -9
- package/lib/proofStep.js +8 -5
- package/lib/substitution/termForVariable.js +24 -25
- package/lib/unifier/statementWithCombinator.js +6 -6
- package/lib/unify/statementAtainstStatement.js +16 -16
- package/lib/unify/statementWithBracketedCombinator.js +30 -0
- package/lib/unify/statementWithCombinators.js +40 -0
- package/lib/unify/statementWithMetaType.js +6 -30
- package/lib/unify/termWithBracketedConstructor.js +39 -0
- package/lib/unify/termWithConstructors.js +61 -0
- package/lib/unify/termWithType.js +4 -12
- package/lib/utilities/assignments.js +9 -12
- package/lib/verifier/intrinsicLevel.js +140 -0
- package/lib/verifier/metaLevel.js +11 -20
- package/lib/verifier/statementAsCombinator.js +9 -9
- package/lib/verifier/termAsConstructor.js +5 -5
- package/lib/verify/assertion/contained.js +2 -3
- package/lib/verify/assertion/defined.js +2 -4
- package/lib/verify/assertion/subproof.js +20 -18
- package/lib/verify/assertion/type.js +1 -2
- package/lib/verify/declaration.js +27 -9
- package/lib/verify/frame.js +25 -6
- package/lib/verify/premise.js +3 -3
- package/lib/verify/proofStep.js +23 -30
- package/lib/verify/statement/qualified.js +93 -137
- package/lib/verify/statement/unqualified.js +18 -104
- package/lib/verify/statement.js +95 -76
- package/lib/verify/statementAsCombinator.js +2 -2
- package/lib/verify/statementGivenMetaType.js +41 -0
- package/lib/verify/supposition.js +3 -3
- package/lib/verify/term.js +39 -65
- package/lib/verify/termAsConstructor.js +2 -2
- package/lib/verify/termGivenType.js +34 -0
- package/package.json +1 -1
- package/src/context/local.js +4 -13
- package/src/proofStep.js +10 -5
- package/src/substitution/termForVariable.js +33 -30
- package/src/unifier/statementWithCombinator.js +5 -5
- package/src/unify/statementAtainstStatement.js +13 -13
- package/src/unify/statementWithBracketedCombinator.js +22 -0
- package/src/unify/statementWithCombinators.js +38 -0
- package/src/unify/statementWithMetaType.js +6 -42
- package/src/unify/termWithBracketedConstructor.js +39 -0
- package/src/unify/termWithConstructors.js +63 -0
- package/src/unify/termWithType.js +4 -20
- package/src/utilities/assignments.js +6 -13
- package/src/verifier/intrinsicLevel.js +42 -0
- package/src/verifier/metaLevel.js +13 -21
- package/src/verifier/statementAsCombinator.js +11 -7
- package/src/verifier/termAsConstructor.js +4 -3
- package/src/verify/assertion/contained.js +1 -3
- package/src/verify/assertion/defined.js +1 -4
- package/src/verify/assertion/subproof.js +22 -18
- package/src/verify/assertion/type.js +0 -1
- package/src/verify/declaration.js +34 -11
- package/src/verify/frame.js +32 -5
- package/src/verify/premise.js +3 -3
- package/src/verify/proofStep.js +26 -38
- package/src/verify/statement/qualified.js +104 -184
- package/src/verify/statement/unqualified.js +19 -149
- package/src/verify/statement.js +126 -72
- package/src/verify/statementAsCombinator.js +1 -1
- package/src/verify/statementGivenMetaType.js +37 -0
- package/src/verify/supposition.js +3 -3
- package/src/verify/term.js +44 -93
- package/src/verify/termAsConstructor.js +1 -1
- package/src/verify/termGivenType.js +32 -0
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import verifyEquality from "../../verify/equality";
|
|
4
|
-
import verifyJudgement from "../../verify/judgement";
|
|
5
3
|
import verifyStatement from "../../verify/statement";
|
|
6
|
-
import verifyTypeAssertion from "../assertion/type";
|
|
7
4
|
|
|
8
5
|
import { nodeQuery } from "../../utilities/query";
|
|
9
6
|
|
|
10
|
-
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!")
|
|
11
|
-
equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
12
|
-
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
13
|
-
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
7
|
+
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
|
|
14
8
|
|
|
15
9
|
export default function verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
|
|
16
10
|
let unqualifiedStatementVerified;
|
|
@@ -19,18 +13,18 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
|
|
|
19
13
|
|
|
20
14
|
localContext.trace(`Verifying the '${unqualifiedStatementString}' unqualified statement...`, unqualifiedStatementNode);
|
|
21
15
|
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
verifyStatedUnqualifiedStatement
|
|
25
|
-
];
|
|
16
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
17
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
26
18
|
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
if (statementVerified) {
|
|
20
|
+
if (derived) {
|
|
21
|
+
const derivedUnqualifiedStatementVerified = verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, localContext);
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
unqualifiedStatementVerified = derivedUnqualifiedStatementVerified; ///
|
|
24
|
+
} else {
|
|
25
|
+
unqualifiedStatementVerified = true;
|
|
32
26
|
}
|
|
33
|
-
}
|
|
27
|
+
}
|
|
34
28
|
|
|
35
29
|
if (unqualifiedStatementVerified) {
|
|
36
30
|
localContext.debug(`...verified the '${unqualifiedStatementString}' unqualified statement.`, unqualifiedStatementNode);
|
|
@@ -39,145 +33,21 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
|
|
|
39
33
|
return unqualifiedStatementVerified;
|
|
40
34
|
}
|
|
41
35
|
|
|
42
|
-
function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode,
|
|
43
|
-
let derivedUnqualifiedStatementVerified
|
|
36
|
+
function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, localContext) {
|
|
37
|
+
let derivedUnqualifiedStatementVerified;
|
|
44
38
|
|
|
45
|
-
|
|
46
|
-
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
47
|
-
unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
48
|
-
|
|
49
|
-
localContext.trace(`Verifying the '${unqualifiedStatementString}' derived unqualified statement...`, unqualifiedStatementNode);
|
|
39
|
+
const unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
50
40
|
|
|
51
|
-
|
|
41
|
+
localContext.trace(`Verifying the '${unqualifiedStatementString}' derived unqualified statement...`, unqualifiedStatementNode);
|
|
52
42
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
} else {
|
|
56
|
-
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
57
|
-
derivedStatementVerified = verifyDerivedStatement(statementNode, assignments, derived, localContext);
|
|
43
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
44
|
+
statementUnified = localContext.unifyStatement(statementNode, localContext);
|
|
58
45
|
|
|
59
|
-
|
|
60
|
-
}
|
|
46
|
+
derivedUnqualifiedStatementVerified = statementUnified; ///
|
|
61
47
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
48
|
+
if (derivedUnqualifiedStatementVerified) {
|
|
49
|
+
localContext.debug(`...verified the '${unqualifiedStatementString}' derived unqualified statement.`, unqualifiedStatementNode);
|
|
65
50
|
}
|
|
66
51
|
|
|
67
52
|
return derivedUnqualifiedStatementVerified;
|
|
68
53
|
}
|
|
69
|
-
|
|
70
|
-
function verifyStatedUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
|
|
71
|
-
let statedUnqualifiedStatementVerified = false;
|
|
72
|
-
|
|
73
|
-
if (!derived) {
|
|
74
|
-
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
75
|
-
unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
76
|
-
|
|
77
|
-
localContext.trace(`Verifying the '${unqualifiedStatementString}' stated unqualified statement...`, unqualifiedStatementNode);
|
|
78
|
-
|
|
79
|
-
const statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
80
|
-
|
|
81
|
-
statedUnqualifiedStatementVerified = statementVerified; ///
|
|
82
|
-
|
|
83
|
-
if (statedUnqualifiedStatementVerified) {
|
|
84
|
-
localContext.debug(`...verified the '${unqualifiedStatementString}' stated unqualified statement.`, unqualifiedStatementNode);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return statedUnqualifiedStatementVerified;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function verifyDerivedStatement(statementNode, assignments, derived, localContext) {
|
|
92
|
-
let derivedStatementVerified;
|
|
93
|
-
|
|
94
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
95
|
-
|
|
96
|
-
localContext.trace(`Verifying the '${statementString}' derived statement...`, statementNode);
|
|
97
|
-
|
|
98
|
-
const verifyDerivedStatementFunctions = [
|
|
99
|
-
verifyDerivedStatementAsEquality,
|
|
100
|
-
verifyDerivedStatementAsJudgement,
|
|
101
|
-
verifyDerivedStatementAsTypeAssertion
|
|
102
|
-
];
|
|
103
|
-
|
|
104
|
-
derivedStatementVerified = verifyDerivedStatementFunctions.every((verifyDerivedStatementFunction) => { ///
|
|
105
|
-
const derivedStatementVerified = verifyDerivedStatementFunction(statementNode, assignments, derived, localContext);
|
|
106
|
-
|
|
107
|
-
if (derivedStatementVerified) {
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
if (derivedStatementVerified) {
|
|
113
|
-
localContext.debug(`...verified the '${statementString}' derived statement.`, statementNode);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return derivedStatementVerified;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function verifyDerivedStatementAsEquality(statementNode, assignments, derived, localContext) {
|
|
120
|
-
let derivedStatementVerifiedAsEquality = true; ///
|
|
121
|
-
|
|
122
|
-
const equalityNode = equalityNodeQuery(statementNode);
|
|
123
|
-
|
|
124
|
-
if (equalityNode !== null) {
|
|
125
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
126
|
-
|
|
127
|
-
localContext.trace(`Verifying the '${statementString}' derived statement as an equality...`, statementNode);
|
|
128
|
-
|
|
129
|
-
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext);
|
|
130
|
-
|
|
131
|
-
derivedStatementVerifiedAsEquality = equalityVerified; ///
|
|
132
|
-
|
|
133
|
-
if (derivedStatementVerifiedAsEquality) {
|
|
134
|
-
localContext.debug(`...verified the '${statementString}' derived statement as an equality.`, statementNode);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return derivedStatementVerifiedAsEquality;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function verifyDerivedStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
142
|
-
let derivedStatementVerifiedAsJudgement = true;
|
|
143
|
-
|
|
144
|
-
const judgementNode = judgementNodeQuery(statementNode);
|
|
145
|
-
|
|
146
|
-
if (judgementNode !== null) {
|
|
147
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
148
|
-
|
|
149
|
-
localContext.trace(`Verifying the '${statementString}' derived statement as a judgement...`, statementNode);
|
|
150
|
-
|
|
151
|
-
const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
152
|
-
|
|
153
|
-
derivedStatementVerifiedAsJudgement = judgementVerified; ///
|
|
154
|
-
|
|
155
|
-
if (derivedStatementVerifiedAsJudgement) {
|
|
156
|
-
localContext.debug(`...verified the '${statementString}' derived statement as a judgement.`, statementNode);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
return derivedStatementVerifiedAsJudgement;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
function verifyDerivedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
164
|
-
let statementVerifiedAsTypeAssertion = true; ///
|
|
165
|
-
|
|
166
|
-
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
167
|
-
|
|
168
|
-
if (typeAssertionNode !== null) {
|
|
169
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
170
|
-
|
|
171
|
-
localContext.trace(`Verifying the '${statementString}' derived statement as a type assertion...`, statementNode);
|
|
172
|
-
|
|
173
|
-
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
|
|
174
|
-
|
|
175
|
-
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
176
|
-
|
|
177
|
-
if (statementVerifiedAsTypeAssertion) {
|
|
178
|
-
localContext.debug(`...verified the '${statementString}' derived statement as a type assertion.`, statementNode);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return statementVerifiedAsTypeAssertion;
|
|
183
|
-
}
|
package/src/verify/statement.js
CHANGED
|
@@ -1,49 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import shim from "../shim";
|
|
4
|
+
import verifyFrame from "../verify/frame";
|
|
4
5
|
import verifyEquality from "../verify/equality";
|
|
5
6
|
import verifyJudgement from "../verify/judgement";
|
|
6
|
-
import
|
|
7
|
-
import bracketedCombinator from "../ocmbinator/bracketed";
|
|
7
|
+
import verifyDeclaration from "../verify/declaration";
|
|
8
8
|
import verifyTypeAssertion from "../verify/assertion/type";
|
|
9
9
|
import verifyDefinedAssertion from "../verify/assertion/defined";
|
|
10
10
|
import verifySubproofAssertion from "../verify/assertion/subproof";
|
|
11
11
|
import verifyContainedAssertion from "../verify/assertion/contained";
|
|
12
|
-
import
|
|
12
|
+
import unifyStatementWithCombinators from "../unify/statementWithCombinators";
|
|
13
|
+
import unifyStatementWithBracketedCombinator from "../unify/statementWithBracketedCombinator";
|
|
13
14
|
|
|
14
15
|
import { nodeQuery } from "../utilities/query";
|
|
15
16
|
|
|
16
|
-
const
|
|
17
|
+
const frameNodeQuery = nodeQuery("/statement/frame!"),
|
|
18
|
+
equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
17
19
|
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
18
|
-
|
|
20
|
+
declarationNodeQuery = nodeQuery("/statement/declaration!"),
|
|
21
|
+
substitutionNodeQuery = nodeQuery("/statement/substitution!"),
|
|
22
|
+
metavariableNodeQuery = nodeQuery("/statement/metavariable!"),
|
|
19
23
|
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
|
|
20
24
|
definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
|
|
21
25
|
subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
|
|
22
26
|
containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!");
|
|
23
27
|
|
|
28
|
+
const unifyStatementFunctions = [
|
|
29
|
+
unifyStatementWithCombinators,
|
|
30
|
+
unifyStatementWithBracketedCombinator
|
|
31
|
+
],
|
|
32
|
+
verifyStatementFunctions = [
|
|
33
|
+
verifyStatementAsEquality,
|
|
34
|
+
verifyStatementAsFrame,
|
|
35
|
+
verifyStatementAsJudgement,
|
|
36
|
+
verifyStatementAsDeclaration,
|
|
37
|
+
verifyStatementAsSubstitution,
|
|
38
|
+
verifyStatementAsTypeAssertion,
|
|
39
|
+
verifyStatementAsDefinedAssertion,
|
|
40
|
+
verifyStatementAsSubproofAssertion,
|
|
41
|
+
verifyStatementAsContainedAssertion
|
|
42
|
+
];
|
|
43
|
+
|
|
24
44
|
function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
25
|
-
let statementVerified;
|
|
45
|
+
let statementVerified = false;
|
|
26
46
|
|
|
27
47
|
const statementString = localContext.nodeAsString(statementNode);
|
|
28
48
|
|
|
29
49
|
localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
|
|
30
50
|
|
|
31
|
-
|
|
51
|
+
if (!statementVerified) {
|
|
52
|
+
const statementVerifiedAsMetavariable = verifyStatementAsMetavariable(statementNode, assignments, derived, localContext);
|
|
32
53
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
unifyStatementWithCombinators
|
|
45
|
-
];
|
|
54
|
+
statementVerified = statementVerifiedAsMetavariable; ///
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (!statementVerified) {
|
|
58
|
+
const statementUnified = unifyStatementFunctions.some((unifyStatementFunction) => {
|
|
59
|
+
const statementUnified = unifyStatementFunction(statementNode, assignments, derived, localContext);
|
|
60
|
+
|
|
61
|
+
if (statementUnified) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
});
|
|
46
65
|
|
|
66
|
+
statementVerified = statementUnified; ///
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (!statementVerified) {
|
|
47
70
|
statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
|
|
48
71
|
const statementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext);
|
|
49
72
|
|
|
@@ -76,9 +99,9 @@ function verifyStatementAsMetavariable(statementNode, assignments, derived, loca
|
|
|
76
99
|
|
|
77
100
|
localContext.trace(`Verifying the '${statementString}' statement as a metavariable...`, statementNode);
|
|
78
101
|
|
|
79
|
-
const
|
|
102
|
+
const metavariableVerified = verifyMetavariable(metavariableNode, localContext);
|
|
80
103
|
|
|
81
|
-
statementVerifiedAsMetavariable =
|
|
104
|
+
statementVerifiedAsMetavariable = metavariableVerified;
|
|
82
105
|
|
|
83
106
|
if (statementVerifiedAsMetavariable) {
|
|
84
107
|
localContext.debug(`...verified the '${statementString}' statement as a metavariable.`, statementNode);
|
|
@@ -110,6 +133,28 @@ function verifyStatementAsEquality(statementNode, assignments, derived, localCon
|
|
|
110
133
|
return statementVerifiedAsEquality;
|
|
111
134
|
}
|
|
112
135
|
|
|
136
|
+
function verifyStatementAsFrame(statementNode, assignments, derived, localContext) {
|
|
137
|
+
let statementVerifiedAsFrame = false;
|
|
138
|
+
|
|
139
|
+
const frameNode = frameNodeQuery(statementNode);
|
|
140
|
+
|
|
141
|
+
if (frameNode !== null) {
|
|
142
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
143
|
+
|
|
144
|
+
localContext.trace(`Verifying the '${statementString}' statement as a frame...`, statementNode);
|
|
145
|
+
|
|
146
|
+
const frameVerified = verifyFrame(frameNode, assignments, derived, localContext);
|
|
147
|
+
|
|
148
|
+
statementVerifiedAsFrame = frameVerified; ///
|
|
149
|
+
|
|
150
|
+
if (statementVerifiedAsFrame) {
|
|
151
|
+
localContext.debug(`...verified the '${statementString}' statement as a frame.`, statementNode);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return statementVerifiedAsFrame;
|
|
156
|
+
}
|
|
157
|
+
|
|
113
158
|
function verifyStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
114
159
|
let statementVerifiedAsJudgement = false;
|
|
115
160
|
|
|
@@ -132,6 +177,50 @@ function verifyStatementAsJudgement(statementNode, assignments, derived, localCo
|
|
|
132
177
|
return statementVerifiedAsJudgement;
|
|
133
178
|
}
|
|
134
179
|
|
|
180
|
+
function verifyStatementAsDeclaration(statementNode, assignments, derived, localContext) {
|
|
181
|
+
let statementVerifiedAsDeclaration = false;
|
|
182
|
+
|
|
183
|
+
const declarationNode = declarationNodeQuery(statementNode);
|
|
184
|
+
|
|
185
|
+
if (declarationNode !== null) {
|
|
186
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
187
|
+
|
|
188
|
+
localContext.trace(`Verifying the '${statementString}' statement as a declaration...`, statementNode);
|
|
189
|
+
|
|
190
|
+
const declarationVerified = verifyDeclaration(declarationNode, assignments, derived, localContext);
|
|
191
|
+
|
|
192
|
+
statementVerifiedAsDeclaration = declarationVerified; ///
|
|
193
|
+
|
|
194
|
+
if (statementVerifiedAsDeclaration) {
|
|
195
|
+
localContext.debug(`...verified the '${statementString}' statement as a declaration.`, statementNode);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return statementVerifiedAsDeclaration;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function verifyStatementAsSubstitution(statementNode, assignments, derived, localContext) {
|
|
203
|
+
let statementVerifiedAsSubstitution = false;
|
|
204
|
+
|
|
205
|
+
const substitutionNode = substitutionNodeQuery(statementNode);
|
|
206
|
+
|
|
207
|
+
if (substitutionNode !== null) {
|
|
208
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
209
|
+
|
|
210
|
+
localContext.trace(`Verifying the '${statementString}' statement as a substitution...`, statementNode);
|
|
211
|
+
|
|
212
|
+
const substitutionVerified = verifySubstitution(substitutionNode, assignments, derived, localContext);
|
|
213
|
+
|
|
214
|
+
statementVerifiedAsSubstitution = substitutionVerified; ///
|
|
215
|
+
|
|
216
|
+
if (statementVerifiedAsSubstitution) {
|
|
217
|
+
localContext.debug(`...verified the '${statementString}' statement as a substitution.`, statementNode);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return statementVerifiedAsSubstitution;
|
|
222
|
+
}
|
|
223
|
+
|
|
135
224
|
function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
136
225
|
let statementVerifiedAsTypeAssertion = false;
|
|
137
226
|
|
|
@@ -191,7 +280,7 @@ function verifyStatementAsSubproofAssertion(statementNode, assignments, derived,
|
|
|
191
280
|
statementVerifiedAsSubproofAssertion = subproofAssertionVerified; ///
|
|
192
281
|
|
|
193
282
|
if (statementVerifiedAsSubproofAssertion) {
|
|
194
|
-
localContext.debug(`...verified the '${statementString}' statement as a
|
|
283
|
+
localContext.debug(`...verified the '${statementString}' statement as a subproof assertion.`, statementNode);
|
|
195
284
|
}
|
|
196
285
|
}
|
|
197
286
|
|
|
@@ -206,73 +295,38 @@ function verifyStatementAsContainedAssertion(statementNode, assignments, derived
|
|
|
206
295
|
if (containedAssertionNode !== null) {
|
|
207
296
|
const statementString = localContext.nodeAsString(statementNode);
|
|
208
297
|
|
|
209
|
-
localContext.trace(`Verifying the '${statementString}' statement as a
|
|
298
|
+
localContext.trace(`Verifying the '${statementString}' statement as a contained assertion...`, statementNode);
|
|
210
299
|
|
|
211
300
|
const containedAssertionVerified = verifyContainedAssertion(containedAssertionNode, assignments, derived, localContext);
|
|
212
301
|
|
|
213
302
|
statementVerifiedAsContainedAssertion = containedAssertionVerified; ///
|
|
214
303
|
|
|
215
304
|
if (statementVerifiedAsContainedAssertion) {
|
|
216
|
-
localContext.debug(`...verified the '${statementString}' statement as a
|
|
305
|
+
localContext.debug(`...verified the '${statementString}' statement as a contained assertion.`, statementNode);
|
|
217
306
|
}
|
|
218
307
|
}
|
|
219
308
|
|
|
220
309
|
return statementVerifiedAsContainedAssertion;
|
|
221
310
|
}
|
|
222
311
|
|
|
223
|
-
function
|
|
224
|
-
let
|
|
225
|
-
|
|
226
|
-
const equalityNode = equalityNodeQuery(statementNode),
|
|
227
|
-
judgementNode = judgementNodeQuery(statementNode),
|
|
228
|
-
metavariableNode = metavariableNodeQuery(statementNode),
|
|
229
|
-
typeAssertionNode = typeAssertionNodeQuery(statementNode),
|
|
230
|
-
definedAssertionNode = definedAssertionNodeQuery(statementNode),
|
|
231
|
-
subproofAssertionNode = subproofAssertionNodeQuery(statementNode),
|
|
232
|
-
containedAssertionNode = containedAssertionNodeQuery(statementNode);
|
|
233
|
-
|
|
234
|
-
if ( (equalityNode === null) &&
|
|
235
|
-
(judgementNode === null) &&
|
|
236
|
-
(metavariableNode === null) &&
|
|
237
|
-
(typeAssertionNode === null) &&
|
|
238
|
-
(definedAssertionNode === null) &&
|
|
239
|
-
(subproofAssertionNode === null) &&
|
|
240
|
-
(containedAssertionNode === null) ) {
|
|
312
|
+
function verifyMetavariable(metavariableNode, localContext) {
|
|
313
|
+
let metavariableVerified = false;
|
|
241
314
|
|
|
242
|
-
|
|
315
|
+
const metavariableString = localContext.nodeAsString(metavariableNode);
|
|
243
316
|
|
|
244
|
-
|
|
245
|
-
bracketedCombinator,
|
|
246
|
-
...combinators
|
|
247
|
-
];
|
|
317
|
+
localContext.trace(`Verifying the '${metavariableString}' metavariable...`, metavariableNode);
|
|
248
318
|
|
|
249
|
-
|
|
250
|
-
const statementUnifiedWithCombinator = unifyStatementWithCombinator(statementNode, combinator, localContext);
|
|
319
|
+
const metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode);
|
|
251
320
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
321
|
+
if (!metavariablePresent) {
|
|
322
|
+
localContext.trace(`The '${metavariableString}' metavariable is not present.`, metavariableNode);
|
|
323
|
+
} else {
|
|
324
|
+
metavariableVerified = true;
|
|
256
325
|
}
|
|
257
326
|
|
|
258
|
-
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
function unifyStatementWithCombinator(statementNode, combinator, localContext) {
|
|
262
|
-
let statementUnifiedWithCombinator;
|
|
263
|
-
|
|
264
|
-
const statementString = localContext.nodeAsString(statementNode),
|
|
265
|
-
combinatorString = combinator.getString();
|
|
266
|
-
|
|
267
|
-
localContext.trace(`Unifying the '${statementString}' statement with the '${combinatorString}' combinator...`, statementNode);
|
|
268
|
-
|
|
269
|
-
const combinatorStatementNode = combinator.getStatementNode();
|
|
270
|
-
|
|
271
|
-
statementUnifiedWithCombinator = statementWithCombinatorUnifier.unify(statementNode, combinatorStatementNode, localContext);
|
|
272
|
-
|
|
273
|
-
if (statementUnifiedWithCombinator) {
|
|
274
|
-
localContext.debug(`...unified the '${statementString}' statement with the '${combinatorString}' combinator.`, statementNode);
|
|
327
|
+
if (metavariableVerified) {
|
|
328
|
+
localContext.debug(`...verified the '${metavariableString}' metavariable.`, metavariableNode);
|
|
275
329
|
}
|
|
276
330
|
|
|
277
|
-
return
|
|
331
|
+
return metavariableVerified;
|
|
278
332
|
}
|
|
@@ -10,7 +10,7 @@ export default function verifyStatementAsCombinator(statementNode, fileContext)
|
|
|
10
10
|
|
|
11
11
|
fileContext.trace(`Verifying the '${statementString}' statement as a combinator...`, statementNode);
|
|
12
12
|
|
|
13
|
-
statementVerifiedAsCombinator = statementAsCombinatorVerifier.
|
|
13
|
+
statementVerifiedAsCombinator = statementAsCombinatorVerifier.verifyStatement(statementNode, fileContext);
|
|
14
14
|
|
|
15
15
|
if (statementVerifiedAsCombinator) {
|
|
16
16
|
const tokens = fileContext.getTokens(),
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import shim from "../shim";
|
|
4
|
+
|
|
5
|
+
import { FRAME_META_TYPE_NAME, STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
|
|
6
|
+
|
|
7
|
+
export default function verifyStatementGivenMetaType(statementNode, metaType, assignments, derived, localContext) {
|
|
8
|
+
let statementVerifiedGivenMetaType;
|
|
9
|
+
|
|
10
|
+
const metaTypeName = metaType.getName();
|
|
11
|
+
|
|
12
|
+
switch (metaTypeName) {
|
|
13
|
+
case FRAME_META_TYPE_NAME: {
|
|
14
|
+
|
|
15
|
+
debugger
|
|
16
|
+
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
case STATEMENT_META_TYPE_NAME: {
|
|
21
|
+
const { verifyStatement } = shim,
|
|
22
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext)
|
|
23
|
+
|
|
24
|
+
statementVerifiedGivenMetaType = statementVerified;
|
|
25
|
+
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
default: {
|
|
30
|
+
|
|
31
|
+
debugger
|
|
32
|
+
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return statementVerifiedGivenMetaType;
|
|
37
|
+
}
|
|
@@ -5,7 +5,7 @@ import Supposition from "../supposition";
|
|
|
5
5
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
|
-
import {
|
|
8
|
+
import { assignAssignments } from "../utilities/assignments";
|
|
9
9
|
|
|
10
10
|
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
|
|
11
11
|
unqualifiedStatementNodeQuery = nodeQuery("/supposition/unqualifiedStatement!");
|
|
@@ -25,9 +25,9 @@ export default function verifySupposition(suppositionNode, suppositions, localCo
|
|
|
25
25
|
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
26
26
|
|
|
27
27
|
if (unqualifiedStatementVerified) {
|
|
28
|
-
const
|
|
28
|
+
const assignmentsAssigned = assignAssignments(assignments, localContext);
|
|
29
29
|
|
|
30
|
-
if (
|
|
30
|
+
if (assignmentsAssigned) {
|
|
31
31
|
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
32
32
|
supposition = Supposition.fromStatementNode(statementNode),
|
|
33
33
|
proofStep = ProofStep.fromStatementNode(statementNode);
|