occam-verify-cli 0.0.936 → 0.0.938
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/conclusion.js +7 -10
- package/lib/consequent.js +7 -10
- package/lib/context/local.js +1 -1
- package/lib/equality.js +2 -5
- package/lib/premise.js +15 -21
- package/lib/proofStep.js +3 -6
- package/lib/rule.js +23 -23
- package/lib/substitution/statementForMetavariable.js +3 -6
- package/lib/supposition.js +15 -21
- package/lib/topLevelAssertion.js +27 -23
- package/lib/unifier/equality.js +37 -107
- package/lib/unifier/metaLevel.js +48 -121
- package/lib/unifier/statementAgainstCombinator.js +41 -123
- package/lib/unifier/termAgainstConstructor.js +29 -103
- package/lib/unifier.js +60 -41
- package/lib/unify/metavariableAgainstStatement.js +5 -5
- package/lib/unify/statementAgainstMetaType.js +10 -4
- package/lib/unify/statementAtainstStatement.js +3 -6
- package/lib/unify/termAgainstTerm.js +1 -1
- package/lib/unify/termAgainstType.js +10 -4
- package/lib/utilities/string.js +2 -2
- package/lib/utilities/unifier.js +51 -0
- package/lib/verifier/metaLevel.js +48 -128
- package/lib/verifier/statementAsCombinator.js +48 -128
- package/lib/verifier/termAsConstructor.js +42 -112
- package/lib/verifier.js +50 -33
- package/lib/verify/assertion/contained.js +3 -6
- package/lib/verify/assertion/defined.js +3 -6
- package/lib/verify/assertion/subproof.js +9 -14
- package/lib/verify/statement/qualified.js +7 -7
- package/lib/verify/statement.js +10 -54
- package/lib/verify/statementAsCombinator.js +4 -8
- package/lib/verify/term.js +5 -5
- package/lib/verify/termAsConstructor.js +30 -23
- package/package.json +2 -2
- package/src/conclusion.js +8 -12
- package/src/consequent.js +8 -12
- package/src/context/local.js +7 -7
- package/src/equality.js +2 -8
- package/src/premise.js +20 -28
- package/src/proofStep.js +5 -9
- package/src/rule.js +22 -22
- package/src/substitution/statementForMetavariable.js +4 -8
- package/src/supposition.js +20 -28
- package/src/topLevelAssertion.js +29 -22
- package/src/unifier/equality.js +31 -59
- package/src/unifier/metaLevel.js +50 -83
- package/src/unifier/statementAgainstCombinator.js +33 -83
- package/src/unifier/termAgainstConstructor.js +19 -57
- package/src/unifier.js +57 -31
- package/src/unify/metavariableAgainstStatement.js +5 -3
- package/src/unify/statementAgainstMetaType.js +8 -3
- package/src/unify/statementAtainstStatement.js +4 -8
- package/src/unify/termAgainstTerm.js +1 -1
- package/src/unify/termAgainstType.js +7 -3
- package/src/utilities/string.js +1 -1
- package/src/verifier/metaLevel.js +37 -81
- package/src/verifier/statementAsCombinator.js +39 -82
- package/src/verifier/termAsConstructor.js +33 -62
- package/src/verifier.js +47 -21
- package/src/verify/assertion/contained.js +2 -7
- package/src/verify/assertion/defined.js +2 -7
- package/src/verify/assertion/subproof.js +3 -16
- package/src/verify/statement/qualified.js +7 -7
- package/src/verify/statement.js +10 -78
- package/src/verify/statementAsCombinator.js +3 -11
- package/src/verify/term.js +8 -8
- package/src/verify/termAsConstructor.js +40 -27
- package/lib/unify/argumentAgainstArgument.js +0 -24
- package/lib/utilities/terminalNodes.js +0 -51
- package/src/unify/argumentAgainstArgument.js +0 -15
- /package/src/utilities/{terminalNodes.js → unifier.js} +0 -0
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
4
|
+
|
|
3
5
|
import { nodeQuery } from "../utilities/query";
|
|
4
6
|
import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
|
|
5
7
|
|
|
6
8
|
const metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type!");
|
|
7
9
|
|
|
8
|
-
export default function unifyStatementAgainstMetaType(
|
|
10
|
+
export default function unifyStatementAgainstMetaType(statementNodeA, metaTypeNodeB, localContext, unifyAhead) {
|
|
9
11
|
let statementVerifiedAgainstMetaType = false;
|
|
10
12
|
|
|
11
|
-
const
|
|
13
|
+
const metaTypeNode = metaTypeNodeB, ///
|
|
14
|
+
metaTypeTerminalNode = metaTypeTerminalNodeQuery(metaTypeNode),
|
|
12
15
|
content = metaTypeTerminalNode.getContent();
|
|
13
16
|
|
|
14
17
|
if (content === STATEMENT_META_TYPE_NAME) {
|
|
15
18
|
let unifiedAhead = false;
|
|
16
19
|
|
|
17
|
-
const
|
|
20
|
+
const { verifyStatement } = shim,
|
|
21
|
+
derived = false,
|
|
18
22
|
assignments = [],
|
|
23
|
+
statementNode = statementNodeA, ///
|
|
19
24
|
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
20
25
|
|
|
21
26
|
if (statementVerified) {
|
|
@@ -19,15 +19,11 @@ export default function unifyStatementAgainstStatement(statementNodeA, statement
|
|
|
19
19
|
substitutionsA.push(substitutionA);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const verifiedAhead = true;
|
|
22
|
+
const nodeA = statementNodeA, ///
|
|
23
|
+
nodeB = statementNodeB, ///
|
|
24
|
+
unified = metaLevelUnifier.unify(nodeA, nodeB, substitutionsA, localContextA, localContextB);
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
if (nonTerminalNodeUnified) {
|
|
26
|
+
if (unified) {
|
|
31
27
|
if (!transformed) {
|
|
32
28
|
const substitutionB = termForVariableSubstitution, ///
|
|
33
29
|
substitutionsB = [
|
|
@@ -6,7 +6,7 @@ export default function unifyTermAgainstTerm(termNodeA, termNodeB, localContext,
|
|
|
6
6
|
let termUnifiedAgainstTerm = false;
|
|
7
7
|
|
|
8
8
|
const leftTermNode = termNodeA, ///
|
|
9
|
-
rightTermNode = termNodeB,
|
|
9
|
+
rightTermNode = termNodeB, ///
|
|
10
10
|
equivalences = localContext.getEquivalences(),
|
|
11
11
|
termNodesEqual = areTermNodesEqual(leftTermNode, rightTermNode, equivalences);
|
|
12
12
|
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
4
|
+
|
|
3
5
|
import { first } from "../utilities/array";
|
|
4
6
|
|
|
5
|
-
export default function unifyTermAgainstType(
|
|
7
|
+
export default function unifyTermAgainstType(termNodeA, typeNodeB, localContext, unifyAhead) {
|
|
6
8
|
let termUnifiedAgainstType;
|
|
7
9
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
+
const { verifyTerm } = shim,
|
|
11
|
+
terms = [],
|
|
12
|
+
termVerified = verifyTerm(termNodeA, terms, localContext, () => {
|
|
10
13
|
let unifiedAhead = false;
|
|
11
14
|
|
|
12
15
|
const firstTerm = first(terms),
|
|
13
16
|
term = firstTerm, ///
|
|
14
17
|
termType = term.getType(),
|
|
18
|
+
typeNode = typeNodeB, ///
|
|
15
19
|
type = localContext.findTypeByTypeNode(typeNode),
|
|
16
20
|
termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
|
|
17
21
|
|
package/src/utilities/string.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import Verifier from "../verifier";
|
|
4
4
|
|
|
5
|
-
import { verify } from "../verifier";
|
|
6
5
|
import { nodeQuery } from "../utilities/query";
|
|
7
6
|
import { verifyStandaloneTerm } from "../verify/term";
|
|
8
7
|
import { verifyStandaloneVariable } from "../verify/variable";
|
|
@@ -10,96 +9,53 @@ import { verifyStandaloneMetavariable } from "../verify/metavariable";
|
|
|
10
9
|
|
|
11
10
|
const termNodeQuery = nodeQuery("/term!"),
|
|
12
11
|
variableNodeQuery = nodeQuery("/variable!"),
|
|
13
|
-
nonTerminalNodeQuery = nodeQuery("/*"),
|
|
14
12
|
metavariableNodeQuery = nodeQuery("/metavariable!");
|
|
15
13
|
|
|
16
14
|
class MetaLevelVerifier extends Verifier {
|
|
17
|
-
|
|
18
|
-
let
|
|
15
|
+
verify(node, localContext) {
|
|
16
|
+
let verified;
|
|
19
17
|
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
verify: (node, localContext, verifyAhead) => {
|
|
24
|
-
let nonTerminalNodeVerified;
|
|
18
|
+
const nonTerminalNode = node, ///
|
|
19
|
+
nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
20
|
+
const verifiedAhead = true;
|
|
25
21
|
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
return verifiedAhead;
|
|
23
|
+
});
|
|
28
24
|
|
|
29
|
-
|
|
25
|
+
verified = nonTerminalNodeVerified; ///
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
nodeQuery: variableNodeQuery,
|
|
36
|
-
verify: (node, localContext, verifyAhead) => {
|
|
37
|
-
let nonTerminalNodeVerified;
|
|
38
|
-
|
|
39
|
-
const variableNode = node, ///
|
|
40
|
-
variableNodeVerified = this.verifyVariableNode(variableNode, localContext, verifyAhead);
|
|
41
|
-
|
|
42
|
-
nonTerminalNodeVerified = variableNodeVerified; ///
|
|
43
|
-
|
|
44
|
-
return nonTerminalNodeVerified;
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
nodeQuery: metavariableNodeQuery,
|
|
49
|
-
verify: (node, localContext, verifyAhead) => {
|
|
50
|
-
let nonTerminalNodeVerified;
|
|
51
|
-
|
|
52
|
-
const metavariableNode = node, ///
|
|
53
|
-
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNode, localContext, verifyAhead);
|
|
54
|
-
|
|
55
|
-
nonTerminalNodeVerified = metavariableNodeVerified; ///
|
|
56
|
-
|
|
57
|
-
return nonTerminalNodeVerified;
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
nodeQuery: nonTerminalNodeQuery,
|
|
62
|
-
verify: (node, localContext, verifyAhead) => {
|
|
63
|
-
let nonTerminalNodeVerified;
|
|
64
|
-
|
|
65
|
-
const nonTerminalNode = node; ///
|
|
66
|
-
|
|
67
|
-
nonTerminalNodeVerified =
|
|
68
|
-
|
|
69
|
-
super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
|
|
70
|
-
|
|
71
|
-
return nonTerminalNodeVerified;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
];
|
|
75
|
-
|
|
76
|
-
const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
|
|
77
|
-
|
|
78
|
-
nonTerminalNodeVerified = nodeVerified; ///
|
|
79
|
-
|
|
80
|
-
return nonTerminalNodeVerified;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
verifyMetavariableNode(metavariableNode, localContext, verifyAhead) {
|
|
84
|
-
const standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, localContext, verifyAhead),
|
|
85
|
-
metavariableNodeVerified = standaloneMetavariableVerified; ///
|
|
86
|
-
|
|
87
|
-
return metavariableNodeVerified;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
verifyVariableNode(variableNode, localContext, verifyAhead) {
|
|
91
|
-
const standaloneVariableVerified = verifyStandaloneVariable(variableNode, localContext, verifyAhead),
|
|
92
|
-
variableNodeVerified = standaloneVariableVerified; ///
|
|
93
|
-
|
|
94
|
-
return variableNodeVerified;
|
|
27
|
+
return verified;
|
|
95
28
|
}
|
|
96
29
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
30
|
+
static maps = [
|
|
31
|
+
{
|
|
32
|
+
nodeQuery: metavariableNodeQuery,
|
|
33
|
+
verify: (metavariableNode, localContext, verifyAhead) => {
|
|
34
|
+
const standaloneMetavariableVerified = verifyStandaloneMetavariable(metavariableNode, localContext, verifyAhead),
|
|
35
|
+
metavariableVerified = standaloneMetavariableVerified; ///
|
|
100
36
|
|
|
101
|
-
|
|
102
|
-
|
|
37
|
+
return metavariableVerified;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
nodeQuery: variableNodeQuery,
|
|
42
|
+
verify: (variableNode, localContext, verifyAhead) => {
|
|
43
|
+
const standaloneVariableVerified = verifyStandaloneVariable(variableNode, localContext, verifyAhead),
|
|
44
|
+
variableVerified = standaloneVariableVerified; ///
|
|
45
|
+
|
|
46
|
+
return variableVerified;
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
nodeQuery: termNodeQuery,
|
|
51
|
+
verify: (termNode, localContext, verifyAhead) => {
|
|
52
|
+
const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
53
|
+
termVerified = standaloneTermVerified; ///
|
|
54
|
+
|
|
55
|
+
return termVerified;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
];
|
|
103
59
|
}
|
|
104
60
|
|
|
105
61
|
const metaLevelVerifier = new MetaLevelVerifier();
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import Verifier from "../verifier";
|
|
4
4
|
|
|
5
|
-
import { verify } from "../verifier";
|
|
6
5
|
import { nodeQuery } from "../utilities/query";
|
|
7
6
|
import { verifyStandaloneType } from "../verify/type";
|
|
8
7
|
import { verifyStandaloneTerm } from "../verify/term";
|
|
@@ -10,96 +9,54 @@ import { verifyStandaloneStatement } from "../verify/statement";
|
|
|
10
9
|
|
|
11
10
|
const termNodeQuery = nodeQuery("/term!"),
|
|
12
11
|
typeNodeQuery = nodeQuery("/type!"),
|
|
13
|
-
statementNodeQuery = nodeQuery("/statement!")
|
|
14
|
-
nonTerminalNodeQuery = nodeQuery("/*");
|
|
12
|
+
statementNodeQuery = nodeQuery("/statement!");
|
|
15
13
|
|
|
16
14
|
class StatementAsCombinatorVerifier extends Verifier {
|
|
17
|
-
|
|
18
|
-
let
|
|
15
|
+
verify(statementNode, fileContext) {
|
|
16
|
+
let statementVerifiedAsCombinator;
|
|
19
17
|
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
let nonTerminalNodeVerified;
|
|
18
|
+
const nonTerminalNode = statementNode, ///
|
|
19
|
+
childNodes = nonTerminalNode.getChildNodes(),
|
|
20
|
+
childNodesVerified = this.verifyChildNodes(childNodes, fileContext, () => {
|
|
21
|
+
const verifiedAhead = true;
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
return verifiedAhead;
|
|
24
|
+
});
|
|
28
25
|
|
|
29
|
-
|
|
26
|
+
statementVerifiedAsCombinator = childNodesVerified; ///
|
|
30
27
|
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
nodeQuery: typeNodeQuery,
|
|
36
|
-
verify: (node, localContext, verifyAhead) => {
|
|
37
|
-
let nonTerminalNodeVerified;
|
|
38
|
-
|
|
39
|
-
const typeNode = node, ///
|
|
40
|
-
typeNodeVerified = this.verifyTypeNode(typeNode, localContext, verifyAhead);
|
|
41
|
-
|
|
42
|
-
nonTerminalNodeVerified = typeNodeVerified; ///
|
|
43
|
-
|
|
44
|
-
return nonTerminalNodeVerified;
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
nodeQuery: statementNodeQuery,
|
|
49
|
-
verify: (node, localContext, verifyAhead) => {
|
|
50
|
-
let nonTerminalNodeVerified;
|
|
51
|
-
|
|
52
|
-
const statementNode = node, ///
|
|
53
|
-
statementNodeVerified = this.verifyStatementNode(statementNode, localContext, verifyAhead);
|
|
54
|
-
|
|
55
|
-
nonTerminalNodeVerified = statementNodeVerified; ///
|
|
56
|
-
|
|
57
|
-
return nonTerminalNodeVerified;
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
nodeQuery: nonTerminalNodeQuery,
|
|
62
|
-
verify: (node, localContext, verifyAhead) => {
|
|
63
|
-
let nonTerminalNodeVerified;
|
|
64
|
-
|
|
65
|
-
const nonTerminalNode = node; ///
|
|
66
|
-
|
|
67
|
-
nonTerminalNodeVerified =
|
|
68
|
-
|
|
69
|
-
super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
|
|
70
|
-
|
|
71
|
-
return nonTerminalNodeVerified;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
];
|
|
75
|
-
|
|
76
|
-
const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
|
|
77
|
-
|
|
78
|
-
nonTerminalNodeVerified = nodeVerified; ///
|
|
79
|
-
|
|
80
|
-
return nonTerminalNodeVerified;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
verifyStatementNode(statementNode, localContext, verifyAhead) {
|
|
84
|
-
const standaloneStatementVerified = verifyStandaloneStatement(statementNode, localContext, verifyAhead),
|
|
85
|
-
statementNodeVerified = standaloneStatementVerified; ///
|
|
86
|
-
|
|
87
|
-
return statementNodeVerified;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
verifyTermNode(termNode, localContext, verifyAhead) {
|
|
91
|
-
const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
92
|
-
termNodeVerified = standaloneTermVerified; ///
|
|
93
|
-
|
|
94
|
-
return termNodeVerified;
|
|
28
|
+
return statementVerifiedAsCombinator;
|
|
95
29
|
}
|
|
96
30
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
31
|
+
static maps = [
|
|
32
|
+
{
|
|
33
|
+
nodeQuery: termNodeQuery,
|
|
34
|
+
verify: (termNode, localContext, verifyAhead) => {
|
|
35
|
+
const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
36
|
+
termVerified = standaloneTermVerified; ///
|
|
100
37
|
|
|
101
|
-
|
|
102
|
-
|
|
38
|
+
return termVerified;
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
nodeQuery: typeNodeQuery,
|
|
43
|
+
verify: (typeNode, localContext, verifyAhead) => {
|
|
44
|
+
const standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
|
|
45
|
+
typeVerified = standaloneTypeVerified; ///
|
|
46
|
+
|
|
47
|
+
return typeVerified;
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
nodeQuery: statementNodeQuery,
|
|
52
|
+
verify: (statementNode, localContext, verifyAhead) => {
|
|
53
|
+
const standaloneStatementVerified = verifyStandaloneStatement(statementNode, localContext, verifyAhead),
|
|
54
|
+
statementVerified = standaloneStatementVerified; ///
|
|
55
|
+
|
|
56
|
+
return statementVerified;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
];
|
|
103
60
|
}
|
|
104
61
|
|
|
105
62
|
const statementAsCombinatorVerifier = new StatementAsCombinatorVerifier();
|
|
@@ -1,83 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Verifier from "../verifier";
|
|
4
|
+
import LocalContext from "../context/local";
|
|
4
5
|
|
|
5
|
-
import { verify } from "../verifier";
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
import { verifyStandaloneType } from "../verify/type";
|
|
8
8
|
import { verifyStandaloneTerm } from "../verify/term";
|
|
9
9
|
|
|
10
10
|
const termNodeQuery = nodeQuery("/term!"),
|
|
11
|
-
typeNodeQuery = nodeQuery("/type!")
|
|
12
|
-
nonTerminalNodeQuery = nodeQuery("/*");
|
|
11
|
+
typeNodeQuery = nodeQuery("/type!");
|
|
13
12
|
|
|
14
13
|
class TermAsConstructorVerifier extends Verifier {
|
|
15
|
-
|
|
16
|
-
let
|
|
14
|
+
verify(termNode, fileContext) {
|
|
15
|
+
let termVerifiedAsConstructor;
|
|
17
16
|
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
let nonTerminalNodeVerified;
|
|
17
|
+
const nonTerminalNode = termNode, ///
|
|
18
|
+
childNodes = nonTerminalNode.getChildNodes(),
|
|
19
|
+
childNodesVerified = this.verifyChildNodes(childNodes, fileContext, () => {
|
|
20
|
+
const verifiedAhead = true;
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
return verifiedAhead;
|
|
23
|
+
});
|
|
26
24
|
|
|
27
|
-
|
|
25
|
+
termVerifiedAsConstructor = childNodesVerified; ///
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
nodeQuery: typeNodeQuery,
|
|
34
|
-
verify: (node, localContext, verifyAhead) => {
|
|
35
|
-
let nonTerminalNodeVerified;
|
|
36
|
-
|
|
37
|
-
const typeNode = node, ///
|
|
38
|
-
typeNodeVerified = this.verifyTypeNode(typeNode, localContext, verifyAhead);
|
|
39
|
-
|
|
40
|
-
nonTerminalNodeVerified = typeNodeVerified; ///
|
|
41
|
-
|
|
42
|
-
return nonTerminalNodeVerified;
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
nodeQuery: nonTerminalNodeQuery,
|
|
47
|
-
verify: (node, localContext, verifyAhead) => {
|
|
48
|
-
let nonTerminalNodeVerified;
|
|
49
|
-
|
|
50
|
-
const nonTerminalNode = node; ///
|
|
51
|
-
|
|
52
|
-
nonTerminalNodeVerified =
|
|
53
|
-
|
|
54
|
-
super.verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead);
|
|
55
|
-
|
|
56
|
-
return nonTerminalNodeVerified;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
];
|
|
60
|
-
|
|
61
|
-
const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
|
|
62
|
-
|
|
63
|
-
nonTerminalNodeVerified = nodeVerified; ///
|
|
64
|
-
|
|
65
|
-
return nonTerminalNodeVerified;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
verifyTermNode(termNode, localContext, verifyAhead) {
|
|
69
|
-
const standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
70
|
-
termNodeVerified = standaloneTermVerified; ///
|
|
71
|
-
|
|
72
|
-
return termNodeVerified;
|
|
27
|
+
return termVerifiedAsConstructor;
|
|
73
28
|
}
|
|
74
29
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
30
|
+
static maps = [
|
|
31
|
+
{
|
|
32
|
+
nodeQuery: termNodeQuery,
|
|
33
|
+
verify: (termNode, fileContext, verifyAhead) => {
|
|
34
|
+
const localContext = LocalContext.fromFileContext(fileContext),
|
|
35
|
+
standaloneTermVerified = verifyStandaloneTerm(termNode, localContext, verifyAhead),
|
|
36
|
+
termVerified = standaloneTermVerified; ///
|
|
78
37
|
|
|
79
|
-
|
|
80
|
-
|
|
38
|
+
return termVerified;
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
nodeQuery: typeNodeQuery,
|
|
43
|
+
verify: (typeNode, fileContext, verifyAhead) => {
|
|
44
|
+
const localContext = LocalContext.fromFileContext(fileContext),
|
|
45
|
+
standaloneTypeVerified = verifyStandaloneType(typeNode, localContext, verifyAhead),
|
|
46
|
+
typeVerified = standaloneTypeVerified; ///
|
|
47
|
+
|
|
48
|
+
return typeVerified;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
];
|
|
81
52
|
}
|
|
82
53
|
|
|
83
54
|
const termAsConstructorVerifier = new TermAsConstructorVerifier();
|
package/src/verifier.js
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { nodeQuery } from "./utilities/query";
|
|
4
|
+
|
|
5
|
+
const nonTerminalNodeQuery = nodeQuery("/*");
|
|
6
|
+
|
|
3
7
|
export default class Verifier {
|
|
8
|
+
verify(node, ...remainingArguments) {
|
|
9
|
+
let verified;
|
|
10
|
+
|
|
11
|
+
const nodeVerified = this.verifyNode(node, ...remainingArguments);
|
|
12
|
+
|
|
13
|
+
verified = nodeVerified; ///
|
|
14
|
+
|
|
15
|
+
return verified;
|
|
16
|
+
}
|
|
17
|
+
|
|
4
18
|
verifyNode(node, ...remainingArguments) {
|
|
5
19
|
let nodeVerified;
|
|
6
20
|
|
|
@@ -46,10 +60,40 @@ export default class Verifier {
|
|
|
46
60
|
verifyNonTerminalNode(nonTerminalNode, ...remainingArguments) {
|
|
47
61
|
let nonTerminalNodeVerified;
|
|
48
62
|
|
|
49
|
-
|
|
50
|
-
|
|
63
|
+
let { maps } = this.constructor;
|
|
64
|
+
|
|
65
|
+
maps = [ ///
|
|
66
|
+
...maps,
|
|
67
|
+
{
|
|
68
|
+
nodeQuery: nonTerminalNodeQuery,
|
|
69
|
+
verify: (node, ...remainingArguments) => {
|
|
70
|
+
let nonTerminalNodeVerified;
|
|
71
|
+
|
|
72
|
+
const childNodes = nonTerminalNode.getChildNodes(), ///
|
|
73
|
+
childNodesVerify = this.verifyChildNodes(childNodes, ...remainingArguments);
|
|
74
|
+
|
|
75
|
+
nonTerminalNodeVerified = childNodesVerify; ///
|
|
76
|
+
|
|
77
|
+
return nonTerminalNodeVerified;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
let nodeVerified = false;
|
|
51
83
|
|
|
52
|
-
|
|
84
|
+
maps.some((map) => {
|
|
85
|
+
const { nodeQuery, verify } = map;
|
|
86
|
+
|
|
87
|
+
const node = nodeQuery(nonTerminalNode);
|
|
88
|
+
|
|
89
|
+
if (node !== null) {
|
|
90
|
+
nodeVerified = verify(node, ...remainingArguments);
|
|
91
|
+
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
nonTerminalNodeVerified = nodeVerified; ///
|
|
53
97
|
|
|
54
98
|
return nonTerminalNodeVerified;
|
|
55
99
|
}
|
|
@@ -82,21 +126,3 @@ export default class Verifier {
|
|
|
82
126
|
return childNodesVerify;
|
|
83
127
|
}
|
|
84
128
|
}
|
|
85
|
-
|
|
86
|
-
export function verify(nodeQueryMaps, nonTerminalNode, ...remainingArguments) {
|
|
87
|
-
let nodeVerified = false;
|
|
88
|
-
|
|
89
|
-
nodeVerified = nodeQueryMaps.some((nodeQueryMap) => {
|
|
90
|
-
const { nodeQuery, verify } = nodeQueryMap;
|
|
91
|
-
|
|
92
|
-
const node = nodeQuery(nonTerminalNode);
|
|
93
|
-
|
|
94
|
-
if (node !== null) {
|
|
95
|
-
nodeVerified = verify(node, ...remainingArguments);
|
|
96
|
-
|
|
97
|
-
return true;
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
return nodeVerified;
|
|
102
|
-
}
|
|
@@ -83,14 +83,9 @@ function verifyStatedContainedAssertion(containedAssertionNode, assignments, der
|
|
|
83
83
|
|
|
84
84
|
localContext.debug(`The '${containedAssertionString}' stated contained assertion cannot be verified.`, containedAssertionNode);
|
|
85
85
|
|
|
86
|
-
const
|
|
87
|
-
nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
88
|
-
const verifiedAhead = true;
|
|
86
|
+
const verified = metaLevelVerifier.verify(containedAssertionNode, localContext);
|
|
89
87
|
|
|
90
|
-
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
statedContainedAssertionVerified = nonTerminalNodeVerified; ///
|
|
88
|
+
statedContainedAssertionVerified = verified; ///
|
|
94
89
|
|
|
95
90
|
if (statedContainedAssertionVerified) {
|
|
96
91
|
localContext.debug(`...verified the '${containedAssertionString}' stated contained assertion.`, containedAssertionNode);
|
|
@@ -112,14 +112,9 @@ function verifyStatedDefinedAssertion(definedAssertionNode, assignments, derived
|
|
|
112
112
|
|
|
113
113
|
localContext.trace(`Verifying the '${definedAssertionString}' stated defined assertion...`, definedAssertionNode);
|
|
114
114
|
|
|
115
|
-
const
|
|
116
|
-
nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
117
|
-
const verifiedAhead = true;
|
|
115
|
+
const verified = metaLevelVerifier.verify(definedAssertionNode, localContext);
|
|
118
116
|
|
|
119
|
-
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
statedDefinedAssertionVerified = nonTerminalNodeVerified; ///
|
|
117
|
+
statedDefinedAssertionVerified = verified; ///
|
|
123
118
|
|
|
124
119
|
if (statedDefinedAssertionVerified) {
|
|
125
120
|
localContext.debug(`...verified the '${definedAssertionString}' stated defined assertion.`, definedAssertionNode);
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import { STATEMENT_META_TYPE_NAME } from "../../metaTypeNames";
|
|
5
|
-
|
|
6
|
-
const metavariableNodesQuery = nodesQuery("/subproofAssertion/statement/metavariable!");
|
|
3
|
+
import metaLevelVerifier from "../../verifier/metaLevel";
|
|
7
4
|
|
|
8
5
|
export default function verifySubproofAssertion(subproofAssertionNode, assignments, derived, localContext) {
|
|
9
6
|
let subproofAssertionVerified;
|
|
@@ -54,19 +51,9 @@ function verifyStatedSubproofAssertion(subproofAssertionNode, assignments, deriv
|
|
|
54
51
|
|
|
55
52
|
localContext.trace(`Verifying the '${subproofAssertionString}' stated subproof assertion...`, subproofAssertionNode);
|
|
56
53
|
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
statedSubproofAssertionVerified = metavariableNodes.every((metavariableNode) => {
|
|
60
|
-
const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
|
|
61
|
-
|
|
62
|
-
if (metavariable !== null) {
|
|
63
|
-
const metaTypeName = metavariable.getMetaTypeName();
|
|
54
|
+
const verified = metaLevelVerifier.verify(subproofAssertionNode, localContext);
|
|
64
55
|
|
|
65
|
-
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
});
|
|
56
|
+
statedSubproofAssertionVerified = verified; ///
|
|
70
57
|
|
|
71
58
|
if (statedSubproofAssertionVerified) {
|
|
72
59
|
localContext.debug(`...verified the '${subproofAssertionString}' stated subproof assertion.`, subproofAssertionNode);
|