occam-verify-cli 0.0.935 → 0.0.937
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 +3 -6
- package/lib/consequent.js +3 -6
- package/lib/context/local.js +1 -1
- package/lib/equality.js +2 -5
- package/lib/premise.js +5 -11
- package/lib/proofStep.js +3 -6
- package/lib/substitution/statementForMetavariable.js +3 -6
- package/lib/supposition.js +5 -11
- 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/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 +2 -5
- package/lib/verify/assertion/defined.js +2 -5
- package/lib/verify/statement/qualified.js +2 -2
- package/lib/verify/statement.js +23 -13
- package/lib/verify/statementAsCombinator.js +4 -8
- package/lib/verify/term.js +5 -5
- package/lib/verify/termAsConstructor.js +30 -23
- package/package.json +4 -4
- package/src/conclusion.js +5 -9
- package/src/consequent.js +5 -9
- package/src/context/local.js +7 -7
- package/src/equality.js +2 -8
- package/src/premise.js +10 -18
- package/src/proofStep.js +5 -9
- package/src/substitution/statementForMetavariable.js +4 -8
- package/src/supposition.js +10 -18
- 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/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 +1 -5
- package/src/verify/assertion/defined.js +1 -5
- package/src/verify/statement/qualified.js +2 -2
- package/src/verify/statement.js +31 -19
- 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
|
@@ -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
|
-
}
|
|
@@ -84,11 +84,7 @@ function verifyStatedContainedAssertion(containedAssertionNode, assignments, der
|
|
|
84
84
|
localContext.debug(`The '${containedAssertionString}' stated contained assertion cannot be verified.`, containedAssertionNode);
|
|
85
85
|
|
|
86
86
|
const nonTerminalNode = containedAssertionNode, ///
|
|
87
|
-
nonTerminalNodeVerified = metaLevelVerifier.
|
|
88
|
-
const verifiedAhead = true;
|
|
89
|
-
|
|
90
|
-
return verifiedAhead;
|
|
91
|
-
});
|
|
87
|
+
nonTerminalNodeVerified = metaLevelVerifier.verify(nonTerminalNode, localContext);
|
|
92
88
|
|
|
93
89
|
statedContainedAssertionVerified = nonTerminalNodeVerified; ///
|
|
94
90
|
|
|
@@ -113,11 +113,7 @@ function verifyStatedDefinedAssertion(definedAssertionNode, assignments, derived
|
|
|
113
113
|
localContext.trace(`Verifying the '${definedAssertionString}' stated defined assertion...`, definedAssertionNode);
|
|
114
114
|
|
|
115
115
|
const nonTerminalNode = definedAssertionNode, ///
|
|
116
|
-
nonTerminalNodeVerified = metaLevelVerifier.
|
|
117
|
-
const verifiedAhead = true;
|
|
118
|
-
|
|
119
|
-
return verifiedAhead;
|
|
120
|
-
});
|
|
116
|
+
nonTerminalNodeVerified = metaLevelVerifier.verify(nonTerminalNode, localContext);
|
|
121
117
|
|
|
122
118
|
statedDefinedAssertionVerified = nonTerminalNodeVerified; ///
|
|
123
119
|
|
|
@@ -192,9 +192,9 @@ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, subst
|
|
|
192
192
|
localContextA = null,
|
|
193
193
|
localContextB = localContext, ///
|
|
194
194
|
statementNodeB = statementNode, ///
|
|
195
|
-
|
|
195
|
+
substitutionNodeA = null,
|
|
196
196
|
metavariableNodeA = metavariableNode, ///
|
|
197
|
-
metavariableVerifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB,
|
|
197
|
+
metavariableVerifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, () => {
|
|
198
198
|
const verifiedAhead = true;
|
|
199
199
|
|
|
200
200
|
return verifiedAhead;
|
package/src/verify/statement.js
CHANGED
|
@@ -13,16 +13,17 @@ import statementAgainstCombinatorUnifier from "../unifier/statementAgainstCombin
|
|
|
13
13
|
import { nodeQuery } from "../utilities/query";
|
|
14
14
|
import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
|
|
15
15
|
|
|
16
|
-
const variableNodeQuery = nodeQuery("
|
|
16
|
+
const variableNodeQuery = nodeQuery("/*/variable!"),
|
|
17
17
|
equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
18
18
|
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
19
|
-
metavariableNodeQuery = nodeQuery("
|
|
19
|
+
metavariableNodeQuery = nodeQuery("/*/metavariable!"),
|
|
20
20
|
substitutionNodeQuery = nodeQuery("/statement/substitution!"),
|
|
21
|
-
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
|
|
22
21
|
termVariableNodeQuery = nodeQuery("/substitution/term/variable!"),
|
|
22
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
|
|
23
23
|
definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
|
|
24
24
|
subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
|
|
25
|
-
containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!")
|
|
25
|
+
containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!"),
|
|
26
|
+
statementMetavariableNodeQuery = nodeQuery("/substitution/statement/metavariable!");
|
|
26
27
|
|
|
27
28
|
function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
28
29
|
let statementVerified;
|
|
@@ -311,16 +312,9 @@ function verifyStatementAgainstCombinator(statementNode, combinator, localContex
|
|
|
311
312
|
|
|
312
313
|
localContext.trace(`Verifying the '${statementString}' statement against the '${combinatorString}' combinator...`, statementNode);
|
|
313
314
|
|
|
314
|
-
const combinatorStatementNode = combinator.getStatementNode()
|
|
315
|
-
nonTerminalNodeA = statementNode, ///
|
|
316
|
-
nonTerminalNodeB = combinatorStatementNode, ///
|
|
317
|
-
nonTerminalNodeUnify = statementAgainstCombinatorUnifier.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, () => {
|
|
318
|
-
const verifiedAhead = true;
|
|
319
|
-
|
|
320
|
-
return verifiedAhead;
|
|
321
|
-
});
|
|
315
|
+
const combinatorStatementNode = combinator.getStatementNode();
|
|
322
316
|
|
|
323
|
-
statementVerifiedAgainstCombinator =
|
|
317
|
+
statementVerifiedAgainstCombinator = statementAgainstCombinatorUnifier.unify(statementNode, combinatorStatementNode, localContext);
|
|
324
318
|
|
|
325
319
|
if (statementVerifiedAgainstCombinator) {
|
|
326
320
|
localContext.debug(`...verified the '${statementString}' statement against the '${combinatorString}' combinator.`, statementNode);
|
|
@@ -352,15 +346,33 @@ function verifySubstitution(substitutionNode, localContext) {
|
|
|
352
346
|
substitutionVerified = true;
|
|
353
347
|
} else {
|
|
354
348
|
const variableNode = variableNodeQuery(substitutionNode),
|
|
355
|
-
|
|
349
|
+
metavariableNode = metavariableNodeQuery(substitutionNode);
|
|
350
|
+
|
|
351
|
+
if (variableNode !== null) {
|
|
352
|
+
const variablePresent = localContext.isVariablePresentByVariableNode(variableNode);
|
|
353
|
+
|
|
354
|
+
if (variablePresent) {
|
|
355
|
+
const termVariableNode = termVariableNodeQuery(substitutionNode);
|
|
356
|
+
|
|
357
|
+
if (termVariableNode !== null) {
|
|
358
|
+
const termVariablePresent = localContext.isVariablePresentByVariableNode(termVariableNode);
|
|
359
|
+
|
|
360
|
+
substitutionVerified = termVariablePresent; ///
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
if (metavariableNode !== null) {
|
|
366
|
+
const metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode);
|
|
356
367
|
|
|
357
|
-
|
|
358
|
-
|
|
368
|
+
if (metavariablePresent) {
|
|
369
|
+
const statementMetavariableNode = statementMetavariableNodeQuery(substitutionNode);
|
|
359
370
|
|
|
360
|
-
|
|
361
|
-
|
|
371
|
+
if (statementMetavariableNode !== null) {
|
|
372
|
+
const statementMetavariablePresent = localContext.isMetavariablePresentByMetavariableNode(statementMetavariableNode);
|
|
362
373
|
|
|
363
|
-
|
|
374
|
+
substitutionVerified = statementMetavariablePresent; ///
|
|
375
|
+
}
|
|
364
376
|
}
|
|
365
377
|
}
|
|
366
378
|
}
|
|
@@ -4,27 +4,19 @@ import Combinator from "../combinator";
|
|
|
4
4
|
import statementAsCombinatorVerifier from "../verifier/statementAsCombinator";
|
|
5
5
|
|
|
6
6
|
export default function verifyStatementAsCombinator(statementNode, fileContext) {
|
|
7
|
-
let statementVerifiedAsCombinator
|
|
7
|
+
let statementVerifiedAsCombinator;
|
|
8
8
|
|
|
9
9
|
const statementString = fileContext.nodeAsString(statementNode);
|
|
10
10
|
|
|
11
11
|
fileContext.trace(`Verifying the '${statementString}' statement as a combinator....`, statementNode);
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
15
|
-
childNodesVerified = statementAsCombinatorVerifier.verifyChildNodes(childNodes, fileContext, () => {
|
|
16
|
-
const verifiedAhead = true;
|
|
13
|
+
statementVerifiedAsCombinator = statementAsCombinatorVerifier.verify(statementNode, fileContext);
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
if (childNodesVerified) {
|
|
15
|
+
if (statementVerifiedAsCombinator) {
|
|
22
16
|
const tokens = fileContext.getTokens(),
|
|
23
17
|
combinator = Combinator.fromStatementNodeAndTokens(statementNode, tokens);
|
|
24
18
|
|
|
25
19
|
fileContext.addCombinator(combinator);
|
|
26
|
-
|
|
27
|
-
statementVerifiedAsCombinator = true;
|
|
28
20
|
}
|
|
29
21
|
|
|
30
22
|
if (statementVerifiedAsCombinator) {
|