occam-verify-cli 0.0.932 → 0.0.933
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 +4 -4
- package/lib/consequent.js +4 -4
- package/lib/context/local.js +181 -3
- package/lib/equality.js +4 -4
- package/lib/metaLemma.js +4 -4
- package/lib/metatheorem.js +4 -4
- package/lib/premise.js +6 -6
- package/lib/substitution/statementForMetavariable.js +2 -2
- package/lib/supposition.js +6 -6
- package/lib/unifier/equality.js +216 -0
- package/lib/unifier/metaLevel.js +231 -0
- package/lib/unifier/statementAgainstCombinator.js +231 -0
- package/lib/unifier/termAgainstConstructor.js +211 -0
- package/lib/unifier.js +201 -0
- package/lib/unify/argumentAgainstArgument.js +24 -0
- package/lib/unify/metavariableAgainstStatement.js +66 -0
- package/lib/unify/statementAgainstMetaType.js +28 -0
- package/lib/unify/statementAtainstStatement.js +52 -0
- package/lib/unify/termAgainstTerm.js +22 -0
- package/lib/unify/termAgainstType.js +26 -0
- package/lib/unify/variableAgainstTerm.js +70 -0
- package/lib/verifier/metaLevel.js +236 -0
- package/lib/verifier/statementAsCombinator.js +236 -0
- package/lib/verifier/termAsConstructor.js +219 -0
- package/lib/verifier.js +182 -0
- package/lib/verify/assertion/contained.js +2 -2
- package/lib/verify/assertion/defined.js +2 -2
- package/lib/verify/declaration.js +3 -3
- package/lib/verify/frame.js +9 -12
- package/lib/verify/judgement.js +2 -2
- package/lib/verify/statement/qualified.js +6 -3
- package/lib/verify/statement/unqualified.js +2 -1
- package/lib/verify/statement.js +26 -19
- package/lib/verify/statementAsCombinator.js +2 -2
- package/lib/verify/term.js +6 -6
- package/lib/verify/termAsConstructor.js +2 -2
- package/package.json +2 -2
- package/src/conclusion.js +3 -3
- package/src/consequent.js +3 -3
- package/src/context/local.js +60 -3
- package/src/equality.js +3 -3
- package/src/metaLemma.js +1 -1
- package/src/metatheorem.js +1 -1
- package/src/premise.js +5 -5
- package/src/substitution/statementForMetavariable.js +2 -2
- package/src/supposition.js +5 -5
- package/src/unifier/equality.js +84 -0
- package/src/unifier/metaLevel.js +109 -0
- package/src/unifier/statementAgainstCombinator.js +104 -0
- package/src/unifier/termAgainstConstructor.js +76 -0
- package/src/unifier.js +133 -0
- package/src/unify/argumentAgainstArgument.js +15 -0
- package/src/{verify → unify}/metavariableAgainstStatement.js +18 -18
- package/src/{verify → unify}/statementAgainstMetaType.js +4 -4
- package/src/{verify → unify}/statementAtainstStatement.js +7 -7
- package/src/{verify → unify}/termAgainstTerm.js +5 -5
- package/src/{verify → unify}/termAgainstType.js +7 -7
- package/src/{verify → unify}/variableAgainstTerm.js +6 -6
- package/src/verifier/{node/metaLevel.js → metaLevel.js} +14 -14
- package/src/verifier/{node/statementAsCombinator.js → statementAsCombinator.js} +14 -14
- package/src/verifier/{node/termAsConstructor.js → termAsConstructor.js} +12 -12
- package/src/{verifier/node.js → verifier.js} +19 -1
- package/src/verify/assertion/contained.js +2 -2
- package/src/verify/assertion/defined.js +2 -2
- package/src/verify/declaration.js +3 -3
- package/src/verify/frame.js +10 -13
- package/src/verify/judgement.js +1 -1
- package/src/verify/statement/qualified.js +12 -3
- package/src/verify/statement/unqualified.js +2 -1
- package/src/verify/statement.js +30 -25
- package/src/verify/statementAsCombinator.js +2 -2
- package/src/verify/term.js +6 -6
- package/src/verify/termAsConstructor.js +2 -2
- package/lib/mixins/context.js +0 -135
- package/lib/mixins/nodesVerifier/intrinsiclevel.js +0 -59
- package/lib/mixins/nodesVerifier/metaLevel.js +0 -40
- package/lib/utilities/verifier.js +0 -80
- package/lib/verifier/node/metaLevel.js +0 -201
- package/lib/verifier/node/statementAsCombinator.js +0 -201
- package/lib/verifier/node/termAsConstructor.js +0 -184
- package/lib/verifier/node.js +0 -157
- package/lib/verifier/nodes/equality.js +0 -176
- package/lib/verifier/nodes/metaLevel.js +0 -191
- package/lib/verifier/nodes/statementAgainstCombinator.js +0 -191
- package/lib/verifier/nodes/termAgainstConstructor.js +0 -171
- package/lib/verifier/nodes.js +0 -175
- package/lib/verify/argumentAgainstArgument.js +0 -24
- package/lib/verify/metavariableAgainstStatement.js +0 -66
- package/lib/verify/statementAgainstMetaType.js +0 -28
- package/lib/verify/statementAtainstStatement.js +0 -52
- package/lib/verify/termAgainstTerm.js +0 -22
- package/lib/verify/termAgainstType.js +0 -26
- package/lib/verify/variableAgainstTerm.js +0 -70
- package/src/mixins/context.js +0 -96
- package/src/mixins/nodesVerifier/intrinsiclevel.js +0 -73
- package/src/mixins/nodesVerifier/metaLevel.js +0 -39
- package/src/utilities/verifier.js +0 -38
- package/src/verifier/nodes/equality.js +0 -84
- package/src/verifier/nodes/metaLevel.js +0 -109
- package/src/verifier/nodes/statementAgainstCombinator.js +0 -105
- package/src/verifier/nodes/termAgainstConstructor.js +0 -76
- package/src/verifier/nodes.js +0 -114
- package/src/verify/argumentAgainstArgument.js +0 -15
|
@@ -8,8 +8,8 @@ import { nodeQuery } from "../utilities/query";
|
|
|
8
8
|
|
|
9
9
|
const variableNodeQuery = nodeQuery("/term/variable");
|
|
10
10
|
|
|
11
|
-
export default function
|
|
12
|
-
let
|
|
11
|
+
export default function unifyVariableAgainstTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
12
|
+
let variableUnifiedAgainstTerm = false;
|
|
13
13
|
|
|
14
14
|
const substitution = substitutions.find((substitution) => {
|
|
15
15
|
const substitutionMatchesVariableNodeA = substitution.matchVariableNode(variableNodeA);
|
|
@@ -25,14 +25,14 @@ export default function verifyVariableAgainstTerm(variableNodeA, termNodeB, subs
|
|
|
25
25
|
if (substitutionMatchesTermNodeB) {
|
|
26
26
|
const verifiedAhead = verifyAhead();
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
variableUnifiedAgainstTerm = verifiedAhead; ///
|
|
29
29
|
}
|
|
30
30
|
} else {
|
|
31
31
|
const variableA = localContextA.findVariableByVariableNode(variableNodeA);
|
|
32
32
|
|
|
33
33
|
if (variableA !== null) {
|
|
34
34
|
const terms = [],
|
|
35
|
-
|
|
35
|
+
termUnified = verifyTerm(termNodeB, terms, localContextB, () => {
|
|
36
36
|
let verifiedAhead = false;
|
|
37
37
|
|
|
38
38
|
const firstTerm = first(terms),
|
|
@@ -67,11 +67,11 @@ export default function verifyVariableAgainstTerm(variableNodeA, termNodeB, subs
|
|
|
67
67
|
return verifiedAhead;
|
|
68
68
|
});
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
variableUnifiedAgainstTerm = termUnified; ///
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
return
|
|
74
|
+
return variableUnifiedAgainstTerm;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
function variableFromTerm(term, localContext) {
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import Verifier from "../verifier";
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { verifyStandaloneTerm } from "
|
|
8
|
-
import { verifyStandaloneVariable } from "
|
|
9
|
-
import { verifyStandaloneMetavariable } from "
|
|
5
|
+
import { verify } from "../verifier";
|
|
6
|
+
import { nodeQuery } from "../utilities/query";
|
|
7
|
+
import { verifyStandaloneTerm } from "../verify/term";
|
|
8
|
+
import { verifyStandaloneVariable } from "../verify/variable";
|
|
9
|
+
import { verifyStandaloneMetavariable } from "../verify/metavariable";
|
|
10
10
|
|
|
11
11
|
const termNodeQuery = nodeQuery("/term!"),
|
|
12
12
|
variableNodeQuery = nodeQuery("/variable!"),
|
|
13
13
|
nonTerminalNodeQuery = nodeQuery("/*"),
|
|
14
14
|
metavariableNodeQuery = nodeQuery("/metavariable!");
|
|
15
15
|
|
|
16
|
-
class
|
|
16
|
+
class MetaLevelVerifier extends Verifier {
|
|
17
17
|
verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
|
|
18
18
|
let nonTerminalNodeVerified;
|
|
19
19
|
|
|
20
20
|
const nodeQueryMaps = [
|
|
21
21
|
{
|
|
22
22
|
nodeQuery: termNodeQuery,
|
|
23
|
-
|
|
23
|
+
verify: (node, localContext, verifyAhead) => {
|
|
24
24
|
let nonTerminalNodeVerified;
|
|
25
25
|
|
|
26
26
|
const termNode = node, ///
|
|
@@ -33,7 +33,7 @@ class MetaLevelNodeVerifier extends NodeVerifier {
|
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
nodeQuery: variableNodeQuery,
|
|
36
|
-
|
|
36
|
+
verify: (node, localContext, verifyAhead) => {
|
|
37
37
|
let nonTerminalNodeVerified;
|
|
38
38
|
|
|
39
39
|
const variableNode = node, ///
|
|
@@ -46,7 +46,7 @@ class MetaLevelNodeVerifier extends NodeVerifier {
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
nodeQuery: metavariableNodeQuery,
|
|
49
|
-
|
|
49
|
+
verify: (node, localContext, verifyAhead) => {
|
|
50
50
|
let nonTerminalNodeVerified;
|
|
51
51
|
|
|
52
52
|
const metavariableNode = node, ///
|
|
@@ -59,7 +59,7 @@ class MetaLevelNodeVerifier extends NodeVerifier {
|
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
nodeQuery: nonTerminalNodeQuery,
|
|
62
|
-
|
|
62
|
+
verify: (node, localContext, verifyAhead) => {
|
|
63
63
|
let nonTerminalNodeVerified;
|
|
64
64
|
|
|
65
65
|
const nonTerminalNode = node; ///
|
|
@@ -73,7 +73,7 @@ class MetaLevelNodeVerifier extends NodeVerifier {
|
|
|
73
73
|
}
|
|
74
74
|
];
|
|
75
75
|
|
|
76
|
-
const nodeVerified =
|
|
76
|
+
const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
|
|
77
77
|
|
|
78
78
|
nonTerminalNodeVerified = nodeVerified; ///
|
|
79
79
|
|
|
@@ -102,6 +102,6 @@ class MetaLevelNodeVerifier extends NodeVerifier {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
const
|
|
105
|
+
const metaLevelVerifier = new MetaLevelVerifier();
|
|
106
106
|
|
|
107
|
-
export default
|
|
107
|
+
export default metaLevelVerifier;
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import Verifier from "../verifier";
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { verifyStandaloneType } from "
|
|
8
|
-
import { verifyStandaloneTerm } from "
|
|
9
|
-
import { verifyStandaloneStatement } from "
|
|
5
|
+
import { verify } from "../verifier";
|
|
6
|
+
import { nodeQuery } from "../utilities/query";
|
|
7
|
+
import { verifyStandaloneType } from "../verify/type";
|
|
8
|
+
import { verifyStandaloneTerm } from "../verify/term";
|
|
9
|
+
import { verifyStandaloneStatement } from "../verify/statement";
|
|
10
10
|
|
|
11
11
|
const termNodeQuery = nodeQuery("/term!"),
|
|
12
12
|
typeNodeQuery = nodeQuery("/type!"),
|
|
13
13
|
statementNodeQuery = nodeQuery("/statement!"),
|
|
14
14
|
nonTerminalNodeQuery = nodeQuery("/*");
|
|
15
15
|
|
|
16
|
-
class
|
|
16
|
+
class StatementAsCombinatorVerifier extends Verifier {
|
|
17
17
|
verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
|
|
18
18
|
let nonTerminalNodeVerified;
|
|
19
19
|
|
|
20
20
|
const nodeQueryMaps = [
|
|
21
21
|
{
|
|
22
22
|
nodeQuery: termNodeQuery,
|
|
23
|
-
|
|
23
|
+
verify: (node, localContext, verifyAhead) => {
|
|
24
24
|
let nonTerminalNodeVerified;
|
|
25
25
|
|
|
26
26
|
const termNode = node, ///
|
|
@@ -33,7 +33,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
nodeQuery: typeNodeQuery,
|
|
36
|
-
|
|
36
|
+
verify: (node, localContext, verifyAhead) => {
|
|
37
37
|
let nonTerminalNodeVerified;
|
|
38
38
|
|
|
39
39
|
const typeNode = node, ///
|
|
@@ -46,7 +46,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
nodeQuery: statementNodeQuery,
|
|
49
|
-
|
|
49
|
+
verify: (node, localContext, verifyAhead) => {
|
|
50
50
|
let nonTerminalNodeVerified;
|
|
51
51
|
|
|
52
52
|
const statementNode = node, ///
|
|
@@ -59,7 +59,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
nodeQuery: nonTerminalNodeQuery,
|
|
62
|
-
|
|
62
|
+
verify: (node, localContext, verifyAhead) => {
|
|
63
63
|
let nonTerminalNodeVerified;
|
|
64
64
|
|
|
65
65
|
const nonTerminalNode = node; ///
|
|
@@ -73,7 +73,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
73
73
|
}
|
|
74
74
|
];
|
|
75
75
|
|
|
76
|
-
const nodeVerified =
|
|
76
|
+
const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
|
|
77
77
|
|
|
78
78
|
nonTerminalNodeVerified = nodeVerified; ///
|
|
79
79
|
|
|
@@ -102,6 +102,6 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
const
|
|
105
|
+
const statementAsCombinatorVerifier = new StatementAsCombinatorVerifier();
|
|
106
106
|
|
|
107
|
-
export default
|
|
107
|
+
export default statementAsCombinatorVerifier;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import Verifier from "../verifier";
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { verifyStandaloneType } from "
|
|
8
|
-
import { verifyStandaloneTerm } from "
|
|
5
|
+
import { verify } from "../verifier";
|
|
6
|
+
import { nodeQuery } from "../utilities/query";
|
|
7
|
+
import { verifyStandaloneType } from "../verify/type";
|
|
8
|
+
import { verifyStandaloneTerm } from "../verify/term";
|
|
9
9
|
|
|
10
10
|
const termNodeQuery = nodeQuery("/term!"),
|
|
11
11
|
typeNodeQuery = nodeQuery("/type!"),
|
|
12
12
|
nonTerminalNodeQuery = nodeQuery("/*");
|
|
13
13
|
|
|
14
|
-
class
|
|
14
|
+
class TermAsConstructorVerifier extends Verifier {
|
|
15
15
|
verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
|
|
16
16
|
let nonTerminalNodeVerified;
|
|
17
17
|
|
|
18
18
|
const nodeQueryMaps = [
|
|
19
19
|
{
|
|
20
20
|
nodeQuery: termNodeQuery,
|
|
21
|
-
|
|
21
|
+
verify: (node, localContext, verifyAhead) => {
|
|
22
22
|
let nonTerminalNodeVerified;
|
|
23
23
|
|
|
24
24
|
const termNode = node, ///
|
|
@@ -31,7 +31,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
nodeQuery: typeNodeQuery,
|
|
34
|
-
|
|
34
|
+
verify: (node, localContext, verifyAhead) => {
|
|
35
35
|
let nonTerminalNodeVerified;
|
|
36
36
|
|
|
37
37
|
const typeNode = node, ///
|
|
@@ -44,7 +44,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
nodeQuery: nonTerminalNodeQuery,
|
|
47
|
-
|
|
47
|
+
verify: (node, localContext, verifyAhead) => {
|
|
48
48
|
let nonTerminalNodeVerified;
|
|
49
49
|
|
|
50
50
|
const nonTerminalNode = node; ///
|
|
@@ -58,7 +58,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
58
58
|
}
|
|
59
59
|
];
|
|
60
60
|
|
|
61
|
-
const nodeVerified =
|
|
61
|
+
const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
|
|
62
62
|
|
|
63
63
|
nonTerminalNodeVerified = nodeVerified; ///
|
|
64
64
|
|
|
@@ -80,6 +80,6 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
const
|
|
83
|
+
const termAsConstructorVerifier = new TermAsConstructorVerifier();
|
|
84
84
|
|
|
85
|
-
export default
|
|
85
|
+
export default termAsConstructorVerifier;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export default class
|
|
3
|
+
export default class Verifier {
|
|
4
4
|
verifyNode(node, ...remainingArguments) {
|
|
5
5
|
let nodeVerified;
|
|
6
6
|
|
|
@@ -82,3 +82,21 @@ export default class NodeVerifier {
|
|
|
82
82
|
return childNodesVerify;
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
+
|
|
86
|
+
export function verify(nodeQueryMaps, nonTerminalNode, ...remainingArguments) {
|
|
87
|
+
let nodeVerified = false;
|
|
88
|
+
|
|
89
|
+
nodeVerified = nodeQueryMaps.some((nodeQueryMap) => {
|
|
90
|
+
const { nodeQuery, verifyNode } = nodeQueryMap;
|
|
91
|
+
|
|
92
|
+
const node = nodeQuery(nonTerminalNode);
|
|
93
|
+
|
|
94
|
+
if (node !== null) {
|
|
95
|
+
nodeVerified = verifyNode(node, ...remainingArguments);
|
|
96
|
+
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
return nodeVerified;
|
|
102
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import metaLevelVerifier from "../../verifier/metaLevel";
|
|
4
4
|
|
|
5
5
|
import { isAssertionNegated } from "../../utilities/verify";
|
|
6
6
|
import { nodeQuery, nodesQuery } from "../../utilities/query";
|
|
@@ -84,7 +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 =
|
|
87
|
+
nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
88
88
|
const verifiedAhead = true;
|
|
89
89
|
|
|
90
90
|
return verifiedAhead;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import verifyTerm from "../../verify/term";
|
|
4
|
-
import
|
|
4
|
+
import metaLevelVerifier from "../../verifier/metaLevel";
|
|
5
5
|
|
|
6
6
|
import { first } from "../../utilities/array";
|
|
7
7
|
import { nodeQuery } from "../../utilities/query";
|
|
@@ -113,7 +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 =
|
|
116
|
+
nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
117
117
|
const verifiedAhead = true;
|
|
118
118
|
|
|
119
119
|
return verifiedAhead;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Declaration from "../declaration"
|
|
4
|
+
import metaLevelUnifier from "../unifier/metaLevel";
|
|
4
5
|
import referenceMetaType from "../metaType/reference";
|
|
5
|
-
import metaLevelNodeVerifier from "../verifier/node/metaLevel";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
8
|
|
|
9
9
|
const referenceNodeQuery = nodeQuery("/declaration/reference!"),
|
|
10
10
|
statementNodeQuery = nodeQuery("/declaration/statement!"),
|
|
11
|
-
metavariableNodeQuery = nodeQuery("/
|
|
11
|
+
metavariableNodeQuery = nodeQuery("/metavariable!");
|
|
12
12
|
|
|
13
13
|
export default function verifyDeclaration(declarationNode, declarations, localContext) {
|
|
14
14
|
let declarationVerified = false;
|
|
@@ -23,7 +23,7 @@ export default function verifyDeclaration(declarationNode, declarations, localCo
|
|
|
23
23
|
if (referenceVerified) {
|
|
24
24
|
const statementNode = statementNodeQuery(declarationNode);
|
|
25
25
|
|
|
26
|
-
const { verifyStatement } =
|
|
26
|
+
const { verifyStatement } = metaLevelUnifier,
|
|
27
27
|
derived = false,
|
|
28
28
|
assignments = [],
|
|
29
29
|
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
package/src/verify/frame.js
CHANGED
|
@@ -19,27 +19,24 @@ export default function verifyFrame(frameNode, frames, assignments, derived, loc
|
|
|
19
19
|
|
|
20
20
|
const declarations = [],
|
|
21
21
|
declarationNodes = declarationNodesQuery(frameNode),
|
|
22
|
+
metavariableNodes = metavariableNodesQuery(frameNode),
|
|
22
23
|
declarationsVerified = declarationNodes.every((declarationNode) => {
|
|
23
24
|
const declarationVerified = verifyDeclaration(declarationNode, declarations, localContext);
|
|
24
25
|
|
|
25
26
|
return declarationVerified;
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const metavariableNodes = metavariableNodesQuery(frameNode),
|
|
30
|
-
metavariablesVerified = metavariableNodes.every((metavariableNode) => {
|
|
31
|
-
const metavariableVerified = verifyMetavariable(metavariableNode, declarations, localContext);
|
|
27
|
+
}),
|
|
28
|
+
metavariablesVerified = metavariableNodes.every((metavariableNode) => {
|
|
29
|
+
const metavariableVerified = verifyMetavariable(metavariableNode, declarations, localContext);
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
return metavariableVerified;
|
|
32
|
+
});
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
if (declarationsVerified && metavariablesVerified) {
|
|
35
|
+
const frame = Frame.fromDeclarations(declarations);
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+
frames.push(frame);
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
}
|
|
39
|
+
frameVerified = true;
|
|
43
40
|
}
|
|
44
41
|
|
|
45
42
|
if (frameVerified) {
|
package/src/verify/judgement.js
CHANGED
|
@@ -9,7 +9,7 @@ import { first } from "../utilities/array";
|
|
|
9
9
|
import { nodeQuery } from "../utilities/query";
|
|
10
10
|
|
|
11
11
|
const frameNodeQuery = nodeQuery("/judgement/frame!"),
|
|
12
|
-
metavariableNodeQuery = nodeQuery("/judgement/metavariable!");
|
|
12
|
+
metavariableNodeQuery = nodeQuery("/judgement/statement/metavariable!");
|
|
13
13
|
|
|
14
14
|
export default function verifyJudgement(judgementNode, assignments, derived, localContext) {
|
|
15
15
|
let judgementVerified;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import unifyMetavariableAgainstStatement from "../../unify/metavariableAgainstStatement";
|
|
4
|
+
|
|
3
5
|
import { nodeQuery } from "../../utilities/query";
|
|
4
6
|
import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
|
|
5
7
|
|
|
6
8
|
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
7
9
|
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference/metavariable!");
|
|
8
10
|
|
|
9
|
-
import verifyMetavariableAgainstStatement from "../../verify/metavariableAgainstStatement";
|
|
10
|
-
|
|
11
11
|
export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext) {
|
|
12
12
|
let qualifiedStatementVerified;
|
|
13
13
|
|
|
@@ -184,7 +184,16 @@ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, subst
|
|
|
184
184
|
|
|
185
185
|
if (metavariablePresent) {
|
|
186
186
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
187
|
-
|
|
187
|
+
localContextA = null,
|
|
188
|
+
localContextB = localContext, ///
|
|
189
|
+
statementNodeB = statementNode, ///
|
|
190
|
+
substitutionNode = null,
|
|
191
|
+
metavariableNodeA = metavariableString, ///
|
|
192
|
+
metavariableVerifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, () => {
|
|
193
|
+
const verifiedAhead = true;
|
|
194
|
+
|
|
195
|
+
return verifiedAhead;
|
|
196
|
+
});
|
|
188
197
|
|
|
189
198
|
qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
|
|
190
199
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import verifyStatement from "../../verify/statement";
|
|
4
4
|
|
|
5
5
|
import { nodeQuery } from "../../utilities/query";
|
|
6
|
-
import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
|
|
6
|
+
import { verifyStatementAsEquality, verifyStatementAsJudgement, verifyStatementAsTypeAssertion } from "../../verify/statement";
|
|
7
7
|
|
|
8
8
|
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
|
|
9
9
|
|
|
@@ -92,6 +92,7 @@ function verifyDerivedStatement(statementNode, assignments, derived, localContex
|
|
|
92
92
|
|
|
93
93
|
const verifyStatementFunctions = [
|
|
94
94
|
verifyStatementAsEquality,
|
|
95
|
+
verifyStatementAsJudgement,
|
|
95
96
|
verifyStatementAsTypeAssertion
|
|
96
97
|
];
|
|
97
98
|
|
package/src/verify/statement.js
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyEquality from "../verify/equality";
|
|
4
4
|
import verifyJudgement from "../verify/judgement";
|
|
5
|
+
import metaLevelUnifier from "../unifier/metaLevel";
|
|
5
6
|
import bracketedCombinator from "../ocmbinator/bracketed";
|
|
6
7
|
import verifyTypeAssertion from "../verify/assertion/type";
|
|
7
8
|
import verifyDefinedAssertion from "../verify/assertion/defined";
|
|
8
9
|
import verifySubproofAssertion from "../verify/assertion/subproof";
|
|
9
10
|
import verifyContainedAssertion from "../verify/assertion/contained";
|
|
10
|
-
import
|
|
11
|
+
import statementAgainstCombinatorUnifier from "../unifier/statementAgainstCombinator";
|
|
11
12
|
|
|
12
13
|
import { nodeQuery } from "../utilities/query";
|
|
13
14
|
import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
|
|
@@ -15,10 +16,10 @@ import { STATEMENT_META_TYPE_NAME } from "../metaTypeNames";
|
|
|
15
16
|
const variableNodeQuery = nodeQuery("/substitution/variable!"),
|
|
16
17
|
equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
17
18
|
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
18
|
-
termVariableNodeQuery = nodeQuery("/substitution/term/variable!"),
|
|
19
19
|
metavariableNodeQuery = nodeQuery("/statement/metavariable!"),
|
|
20
20
|
substitutionNodeQuery = nodeQuery("/statement/substitution!"),
|
|
21
21
|
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
|
|
22
|
+
termVariableNodeQuery = nodeQuery("/substitution/term/variable!"),
|
|
22
23
|
definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
|
|
23
24
|
subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
|
|
24
25
|
containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!");
|
|
@@ -80,7 +81,11 @@ export function verifyStandaloneStatement(statementNode, localContext, verifyAhe
|
|
|
80
81
|
return standaloneStatementVerified;
|
|
81
82
|
}
|
|
82
83
|
|
|
83
|
-
Object.assign(
|
|
84
|
+
Object.assign(metaLevelUnifier, {
|
|
85
|
+
verifyStatement
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
Object.assign(statementAgainstCombinatorUnifier, {
|
|
84
89
|
verifyStatement
|
|
85
90
|
});
|
|
86
91
|
|
|
@@ -112,48 +117,48 @@ export function verifyStatementAsEquality(statementNode, assignments, derived, l
|
|
|
112
117
|
return statementVerifiedAsEquality;
|
|
113
118
|
}
|
|
114
119
|
|
|
115
|
-
export function
|
|
116
|
-
let
|
|
120
|
+
export function verifyStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
121
|
+
let statementVerifiedAsJudgement = false;
|
|
117
122
|
|
|
118
|
-
const
|
|
123
|
+
const judgementNode = judgementNodeQuery(statementNode);
|
|
119
124
|
|
|
120
|
-
if (
|
|
125
|
+
if (judgementNode !== null) {
|
|
121
126
|
const statementString = localContext.nodeAsString(statementNode);
|
|
122
127
|
|
|
123
|
-
localContext.trace(`Verifying the '${statementString}' statement as a
|
|
128
|
+
localContext.trace(`Verifying the '${statementString}' statement as a judgement...`, statementNode);
|
|
124
129
|
|
|
125
|
-
const
|
|
130
|
+
const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
126
131
|
|
|
127
|
-
|
|
132
|
+
statementVerifiedAsJudgement = judgementVerified; ///
|
|
128
133
|
|
|
129
|
-
if (
|
|
130
|
-
localContext.debug(`...verified the '${statementString}' statement as a
|
|
134
|
+
if (statementVerifiedAsJudgement) {
|
|
135
|
+
localContext.debug(`...verified the '${statementString}' statement as a judgement.`, statementNode);
|
|
131
136
|
}
|
|
132
137
|
}
|
|
133
138
|
|
|
134
|
-
return
|
|
139
|
+
return statementVerifiedAsJudgement;
|
|
135
140
|
}
|
|
136
141
|
|
|
137
|
-
function
|
|
138
|
-
let
|
|
142
|
+
export function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
143
|
+
let statementVerifiedAsTypeAssertion = false;
|
|
139
144
|
|
|
140
|
-
const
|
|
145
|
+
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
141
146
|
|
|
142
|
-
if (
|
|
147
|
+
if (typeAssertionNode !== null) {
|
|
143
148
|
const statementString = localContext.nodeAsString(statementNode);
|
|
144
149
|
|
|
145
|
-
localContext.trace(`Verifying the '${statementString}' statement as a
|
|
150
|
+
localContext.trace(`Verifying the '${statementString}' statement as a type assertion...`, statementNode);
|
|
146
151
|
|
|
147
|
-
const
|
|
152
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
|
|
148
153
|
|
|
149
|
-
|
|
154
|
+
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
150
155
|
|
|
151
|
-
if (
|
|
152
|
-
localContext.debug(`...verified the '${statementString}' statement as a
|
|
156
|
+
if (statementVerifiedAsTypeAssertion) {
|
|
157
|
+
localContext.debug(`...verified the '${statementString}' statement as a type assertion.`, statementNode);
|
|
153
158
|
}
|
|
154
159
|
}
|
|
155
160
|
|
|
156
|
-
return
|
|
161
|
+
return statementVerifiedAsTypeAssertion;
|
|
157
162
|
}
|
|
158
163
|
|
|
159
164
|
function verifyStatementAsMetavariable(statementNode, assignments, derived, localContext) {
|
|
@@ -312,13 +317,13 @@ function verifyStatementAgainstCombinator(statementNode, combinator, localContex
|
|
|
312
317
|
const combinatorStatementNode = combinator.getStatementNode(),
|
|
313
318
|
nonTerminalNodeA = statementNode, ///
|
|
314
319
|
nonTerminalNodeB = combinatorStatementNode, ///
|
|
315
|
-
|
|
320
|
+
nonTerminalNodeUnify = statementAgainstCombinatorUnifier.unifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, () => {
|
|
316
321
|
const verifiedAhead = true;
|
|
317
322
|
|
|
318
323
|
return verifiedAhead;
|
|
319
324
|
});
|
|
320
325
|
|
|
321
|
-
statementVerifiedAgainstCombinator =
|
|
326
|
+
statementVerifiedAgainstCombinator = nonTerminalNodeUnify; ///
|
|
322
327
|
|
|
323
328
|
if (statementVerifiedAgainstCombinator) {
|
|
324
329
|
localContext.debug(`...verified the '${statementString}' statement against the '${combinatorString}' combinator.`, statementNode);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Combinator from "../combinator";
|
|
4
|
-
import
|
|
4
|
+
import statementAsCombinatorVerifier from "../verifier/statementAsCombinator";
|
|
5
5
|
|
|
6
6
|
export default function verifyStatementAsCombinator(statementNode, fileContext) {
|
|
7
7
|
let statementVerifiedAsCombinator = false;
|
|
@@ -12,7 +12,7 @@ export default function verifyStatementAsCombinator(statementNode, fileContext)
|
|
|
12
12
|
|
|
13
13
|
const nonTerminalNode = statementNode, ///
|
|
14
14
|
childNodes = nonTerminalNode.getChildNodes(),
|
|
15
|
-
childNodesVerified =
|
|
15
|
+
childNodesVerified = statementAsCombinatorVerifier.verifyChildNodes(childNodes, fileContext, () => {
|
|
16
16
|
const verifiedAhead = true;
|
|
17
17
|
|
|
18
18
|
return verifiedAhead;
|