occam-verify-cli 0.0.844 → 0.0.846
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/assignment/equality.js +4 -4
- package/lib/assignment/variable.js +4 -4
- package/lib/conclusion.js +5 -5
- package/lib/context/local.js +14 -1
- package/lib/equality.js +5 -3
- package/lib/equivalence.js +17 -17
- package/lib/mixins/nodesVerifier/intrinsiclevel.js +2 -2
- package/lib/mixins/nodesVerifier/metaLevel.js +2 -2
- package/lib/premise.js +6 -5
- package/lib/substitution/statementForMetavariable.js +29 -9
- package/lib/substitution/termForVariable.js +8 -1
- package/lib/term.js +9 -9
- package/lib/utilities/array.js +1 -11
- package/lib/utilities/equivalences.js +14 -14
- package/lib/verifier/node/metastatement.js +5 -4
- package/lib/verifier/node/statementAsCombinator.js +6 -6
- package/lib/verifier/node/termAsConstructor.js +5 -5
- package/lib/verifier/nodes/metaLevel.js +7 -7
- package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +30 -31
- package/lib/verifier/nodes/statementAgainstCombinator.js +11 -11
- package/lib/verifier/nodes/substitution.js +223 -0
- package/lib/verifier/nodes/termAgainstConstructor.js +10 -10
- package/lib/verify/containment.js +29 -10
- package/lib/verify/defining.js +6 -6
- package/lib/verify/equality.js +17 -17
- package/lib/verify/givenType.js +6 -6
- package/lib/verify/givenVariable.js +6 -6
- package/lib/verify/metavariable.js +6 -6
- package/lib/verify/statement/qualified.js +13 -13
- package/lib/verify/statement/unqualified.js +2 -2
- package/lib/verify/statement.js +40 -40
- package/lib/verify/statementAsCombinator.js +2 -1
- package/lib/verify/term.js +30 -30
- package/lib/verify/termAndGivenType.js +7 -7
- package/lib/verify/termAsConstructor.js +3 -2
- package/lib/verify/terms.js +7 -7
- package/lib/verify/type.js +7 -7
- package/lib/verify/typeAssertion.js +19 -19
- package/lib/verify/variable.js +6 -6
- package/package.json +1 -1
- package/src/assignment/equality.js +5 -5
- package/src/assignment/variable.js +5 -5
- package/src/conclusion.js +6 -6
- package/src/context/local.js +12 -0
- package/src/equality.js +6 -4
- package/src/equivalence.js +16 -16
- package/src/mixins/nodesVerifier/intrinsiclevel.js +2 -2
- package/src/mixins/nodesVerifier/metaLevel.js +1 -1
- package/src/premise.js +9 -4
- package/src/substitution/statementForMetavariable.js +44 -12
- package/src/substitution/termForVariable.js +10 -0
- package/src/term.js +8 -8
- package/src/utilities/array.js +0 -6
- package/src/utilities/equivalences.js +13 -13
- package/src/verifier/node/metastatement.js +8 -9
- package/src/verifier/node/statementAsCombinator.js +8 -11
- package/src/verifier/node/termAsConstructor.js +6 -8
- package/src/verifier/nodes/metaLevel.js +6 -6
- package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +37 -41
- package/src/verifier/nodes/statementAgainstCombinator.js +10 -10
- package/src/verifier/nodes/substitution.js +125 -0
- package/src/verifier/nodes/termAgainstConstructor.js +9 -9
- package/src/verify/containment.js +38 -12
- package/src/verify/defining.js +5 -5
- package/src/verify/equality.js +16 -16
- package/src/verify/givenType.js +5 -5
- package/src/verify/givenVariable.js +5 -5
- package/src/verify/metavariable.js +5 -5
- package/src/verify/statement/qualified.js +12 -13
- package/src/verify/statement/unqualified.js +1 -2
- package/src/verify/statement.js +39 -39
- package/src/verify/statementAsCombinator.js +1 -0
- package/src/verify/term.js +29 -29
- package/src/verify/termAndGivenType.js +7 -7
- package/src/verify/termAsConstructor.js +3 -1
- package/src/verify/terms.js +7 -7
- package/src/verify/type.js +6 -6
- package/src/verify/typeAssertion.js +18 -18
- package/src/verify/variable.js +5 -5
|
@@ -12,7 +12,7 @@ const metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
|
|
|
12
12
|
metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
|
|
13
13
|
|
|
14
14
|
class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
15
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
15
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
|
|
16
16
|
let nonTerminalNodeVerified = false;
|
|
17
17
|
|
|
18
18
|
const nonTerminalNode = nonTerminalNodeA, ///
|
|
@@ -25,7 +25,7 @@ class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
|
25
25
|
case META_ARGUMENT_RULE_NAME: {
|
|
26
26
|
const metaArgumentNode = nonTerminalNode, ///
|
|
27
27
|
combinatorMetaargumentNode = combinatorNonTerminalNode, ///
|
|
28
|
-
metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode,
|
|
28
|
+
metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead);
|
|
29
29
|
|
|
30
30
|
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
31
31
|
|
|
@@ -35,7 +35,7 @@ class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
|
35
35
|
case ARGUMENT_RULE_NAME: {
|
|
36
36
|
const argumentNode = nonTerminalNode, ///
|
|
37
37
|
constructorArgumentNode = combinatorNonTerminalNode, ///
|
|
38
|
-
argumentNodeVerified = termAgainstConstructorNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode,
|
|
38
|
+
argumentNodeVerified = termAgainstConstructorNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead);
|
|
39
39
|
|
|
40
40
|
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
41
41
|
|
|
@@ -43,7 +43,7 @@ class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
default: {
|
|
46
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
46
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
47
47
|
|
|
48
48
|
break;
|
|
49
49
|
}
|
|
@@ -53,28 +53,28 @@ class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
|
53
53
|
return nonTerminalNodeVerified;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode,
|
|
56
|
+
verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead) {
|
|
57
57
|
let metaArgumentNodeVerified = false;
|
|
58
58
|
|
|
59
|
-
const metaArgumentString =
|
|
59
|
+
const metaArgumentString = localContext.nodeAsString(metaArgumentNode);
|
|
60
60
|
|
|
61
61
|
const statementNode = statementNodeQuery(metaArgumentNode),
|
|
62
62
|
combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
63
63
|
|
|
64
64
|
if (statementNode === null) {
|
|
65
|
-
|
|
65
|
+
localContext.debug(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
|
|
66
66
|
} else {
|
|
67
67
|
if (combinatorMetaTYpeNode === null) {
|
|
68
|
-
const combinatorMetaargumentString =
|
|
68
|
+
const combinatorMetaargumentString = localContext.nodeAsString(combinatorMetaargumentNode);
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
localContext.debug(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
|
|
71
71
|
} else {
|
|
72
72
|
const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
|
|
73
73
|
content = combinatorMetaTypeTerminalNode.getContent(),
|
|
74
74
|
contentStatementMetaType = (content === STATEMENT_META_TYPE);
|
|
75
75
|
|
|
76
76
|
if (!contentStatementMetaType) {
|
|
77
|
-
|
|
77
|
+
localContext.debug(`Expected the meta-type of the combinator to be '${STATEMENT_META_TYPE}' but got '${content}' instead.`, metaArgumentNode);
|
|
78
78
|
} else {
|
|
79
79
|
const verifiedAhead = verifyAhead();
|
|
80
80
|
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
+
|
|
5
|
+
import TermForVariableSubstitution from "../../substitution/termForVariable";
|
|
6
|
+
|
|
7
|
+
import { nodeQuery } from "../../utilities/query";
|
|
8
|
+
import { TERM_RULE_NAME } from "../../ruleNames";
|
|
9
|
+
|
|
10
|
+
const variableNodeQuery = nodeQuery("/term/variable");
|
|
11
|
+
|
|
12
|
+
class SubstitutionNodesVerifier extends NodesVerifier {
|
|
13
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
14
|
+
let nonTerminalNodeVerified = false;
|
|
15
|
+
|
|
16
|
+
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
17
|
+
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
18
|
+
|
|
19
|
+
if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
|
|
20
|
+
const ruleName = nonTerminalNodeARuleName; ///
|
|
21
|
+
|
|
22
|
+
switch (ruleName) {
|
|
23
|
+
case TERM_RULE_NAME: {
|
|
24
|
+
const termNodeA = nonTerminalNodeA, ///
|
|
25
|
+
termNodeB = nonTerminalNodeB, ///
|
|
26
|
+
termNodeVerified = this.verifyTermNode(termNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
27
|
+
|
|
28
|
+
nonTerminalNodeVerified = termNodeVerified; ///
|
|
29
|
+
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
default: {
|
|
34
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
35
|
+
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return nonTerminalNodeVerified;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
verifyTermNode(termNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
45
|
+
let termNodeVerified;
|
|
46
|
+
|
|
47
|
+
const variableNodeA = variableNodeQuery(termNodeA);
|
|
48
|
+
|
|
49
|
+
if (variableNodeA !== null) {
|
|
50
|
+
const variableNodeVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
51
|
+
|
|
52
|
+
termNodeVerified = variableNodeVerified; ///
|
|
53
|
+
} else {
|
|
54
|
+
const nonTerminalNodeA = termNodeA, ///
|
|
55
|
+
nonTerminalNodeB = termNodeB, ///
|
|
56
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
57
|
+
|
|
58
|
+
termNodeVerified = nonTerminalNodeVerified; ///
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return termNodeVerified;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
65
|
+
let variableNodeVerified = false;
|
|
66
|
+
|
|
67
|
+
if (variableNodeVerified === false) {
|
|
68
|
+
const variableNodeB = variableNodeQuery(termNodeB);
|
|
69
|
+
|
|
70
|
+
if (variableNodeB !== null) {
|
|
71
|
+
const variableNodeAMatchedVariableNodeB = variableNodeA.match(variableNodeB);
|
|
72
|
+
|
|
73
|
+
if (variableNodeAMatchedVariableNodeB) {
|
|
74
|
+
const verifiedAhead = verifyAhead();
|
|
75
|
+
|
|
76
|
+
variableNodeVerified = verifiedAhead; ///
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (variableNodeVerified === false) {
|
|
82
|
+
const variableNode = variableNodeA,
|
|
83
|
+
substitution = substitutions.find((substitution) => {
|
|
84
|
+
const matches = substitution.matchVariableNode(variableNode);
|
|
85
|
+
|
|
86
|
+
if (matches) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}) || null;
|
|
90
|
+
|
|
91
|
+
if (substitution !== null) {
|
|
92
|
+
const termNode = termNodeB, ///
|
|
93
|
+
termNodeMatches = substitution.matchTermNode(termNode);
|
|
94
|
+
|
|
95
|
+
if (termNodeMatches) {
|
|
96
|
+
const verifiedAhead = verifyAhead();
|
|
97
|
+
|
|
98
|
+
variableNodeVerified = verifiedAhead; ///
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
let verifiedAhead;
|
|
102
|
+
|
|
103
|
+
const termNode = termNodeB, ///
|
|
104
|
+
termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
|
|
105
|
+
substitution = termForVariableSubstitution; ///
|
|
106
|
+
|
|
107
|
+
substitutions.push(substitution);
|
|
108
|
+
|
|
109
|
+
verifiedAhead = verifyAhead();
|
|
110
|
+
|
|
111
|
+
if (!verifiedAhead) {
|
|
112
|
+
substitutions.pop();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
variableNodeVerified = verifiedAhead; ///
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return variableNodeVerified;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const substitutionNodesVerifier = new SubstitutionNodesVerifier();
|
|
124
|
+
|
|
125
|
+
export default substitutionNodesVerifier;
|
|
@@ -10,7 +10,7 @@ const termNodeQuery = nodeQuery("/argument/term!"),
|
|
|
10
10
|
typeNodeQuery = nodeQuery("/argument/type!");
|
|
11
11
|
|
|
12
12
|
class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
13
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
13
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
|
|
14
14
|
let nonTerminalNodeVerified = false;
|
|
15
15
|
|
|
16
16
|
const nonTerminalNode = nonTerminalNodeA, ///
|
|
@@ -23,7 +23,7 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
23
23
|
case ARGUMENT_RULE_NAME: {
|
|
24
24
|
const argumentNode = nonTerminalNode, ///
|
|
25
25
|
constructorArgumentNode = constructorNonTerminalNode, ///
|
|
26
|
-
argumentNodeVerified = this.verifyArgumentNode(argumentNode, constructorArgumentNode,
|
|
26
|
+
argumentNodeVerified = this.verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead);
|
|
27
27
|
|
|
28
28
|
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
29
29
|
|
|
@@ -31,7 +31,7 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
default: {
|
|
34
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, constructorNonTerminalNode,
|
|
34
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, constructorNonTerminalNode, localContext, verifyAhead);
|
|
35
35
|
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
@@ -41,15 +41,15 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
41
41
|
return nonTerminalNodeVerified;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
verifyArgumentNode(argumentNode, constructorArgumentNode,
|
|
44
|
+
verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead) {
|
|
45
45
|
let argumentNodeVerified = false;
|
|
46
46
|
|
|
47
|
-
const argumentString =
|
|
47
|
+
const argumentString = localContext.nodeAsString(argumentNode);
|
|
48
48
|
|
|
49
49
|
const typeNode = typeNodeQuery(argumentNode);
|
|
50
50
|
|
|
51
51
|
if (typeNode !== null) {
|
|
52
|
-
|
|
52
|
+
localContext.debug(`The '${argumentString}' argument should be a term, not a type.`, argumentNode);
|
|
53
53
|
} else {
|
|
54
54
|
const termNode = termNodeQuery(argumentNode);
|
|
55
55
|
|
|
@@ -59,7 +59,7 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
59
59
|
if (constructorTermNode !== null) {
|
|
60
60
|
const node = termNode, ///
|
|
61
61
|
constructorNode = constructorTermNode, ///
|
|
62
|
-
nodeVerified = this.verifyNode(node, constructorNode,
|
|
62
|
+
nodeVerified = this.verifyNode(node, constructorNode, localContext, verifyAhead);
|
|
63
63
|
|
|
64
64
|
argumentNodeVerified = nodeVerified; ///
|
|
65
65
|
}
|
|
@@ -71,14 +71,14 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
71
71
|
if (constructorTypeNode !== null) {
|
|
72
72
|
const { verifyTerm } = termAgainstConstructorNodesVerifier,
|
|
73
73
|
terms = [],
|
|
74
|
-
termVerified = verifyTerm(termNode, terms,
|
|
74
|
+
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
75
75
|
let verifiedAhead = false;
|
|
76
76
|
|
|
77
77
|
const constructorTypeName = typeNameFromTypeNode(constructorTypeNode),
|
|
78
78
|
firstTerm = first(terms),
|
|
79
79
|
term = firstTerm, ///
|
|
80
80
|
termType = term.getType(),
|
|
81
|
-
constructorType =
|
|
81
|
+
constructorType = localContext.findTypeByTypeName(constructorTypeName),
|
|
82
82
|
termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(constructorType);
|
|
83
83
|
|
|
84
84
|
if (termTypeEqualToOrSubTypeOfType) {
|
|
@@ -4,33 +4,59 @@ import { second } from "../utilities/array";
|
|
|
4
4
|
import { CONTAINED } from "../constants";
|
|
5
5
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
6
6
|
|
|
7
|
-
const
|
|
8
|
-
|
|
7
|
+
const termNodeQuery = nodeQuery("/argument/term!"),
|
|
8
|
+
variableNodeQuery = nodeQuery("/argument/term/variable!"),
|
|
9
|
+
metaArgumentTermNodesQuery = nodesQuery("/metaArgument//term"),
|
|
10
|
+
metaArgumentVariableNodesQuery = nodesQuery("/metaArgument//variable");
|
|
9
11
|
|
|
10
|
-
export default function verifyContainment(argumentNode, containmentNode, metaArgumentNode,
|
|
12
|
+
export default function verifyContainment(argumentNode, containmentNode, metaArgumentNode, localContext) {
|
|
11
13
|
let containmentVerified = false;
|
|
12
14
|
|
|
13
|
-
const
|
|
15
|
+
const contained = containedFromContainmentNode(containmentNode),
|
|
16
|
+
termNode = termNodeQuery(argumentNode),
|
|
17
|
+
variableNode = variableNodeQuery(argumentNode);
|
|
14
18
|
|
|
15
|
-
if (
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
if (false) {
|
|
20
|
+
///
|
|
21
|
+
} else if (variableNode !== null) {
|
|
22
|
+
const metaArgumentVariableNodes = metaArgumentVariableNodesQuery(metaArgumentNode),
|
|
23
|
+
variableNodeMatchesMetaArgumentVariableNode = metaArgumentVariableNodes.some((metaArgumentVariableNode) => {
|
|
24
|
+
const variableNodeMatchesMetaArgumentVariableNode = variableNode.match(metaArgumentVariableNode);
|
|
20
25
|
|
|
21
|
-
if (
|
|
26
|
+
if (variableNodeMatchesMetaArgumentVariableNode) {
|
|
22
27
|
return true;
|
|
23
28
|
}
|
|
24
29
|
});
|
|
25
30
|
|
|
26
31
|
if (contained) {
|
|
27
|
-
if (
|
|
32
|
+
if (variableNodeMatchesMetaArgumentVariableNode) {
|
|
28
33
|
containmentVerified = true;
|
|
29
34
|
}
|
|
30
35
|
}
|
|
31
36
|
|
|
32
37
|
if (!contained) {
|
|
33
|
-
if (!
|
|
38
|
+
if (!variableNodeMatchesMetaArgumentVariableNode) {
|
|
39
|
+
containmentVerified = true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} else if (termNode !== null) {
|
|
43
|
+
const metaArgumentTermNodes = metaArgumentTermNodesQuery(metaArgumentNode),
|
|
44
|
+
termNodeMatchesMetaArgumentTermNode = metaArgumentTermNodes.some((metaArgumentTermNode) => {
|
|
45
|
+
const termNodeMatchesMetaArgumentTermNode = termNode.match(metaArgumentTermNode);
|
|
46
|
+
|
|
47
|
+
if (termNodeMatchesMetaArgumentTermNode) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
if (contained) {
|
|
53
|
+
if (termNodeMatchesMetaArgumentTermNode) {
|
|
54
|
+
containmentVerified = true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!contained) {
|
|
59
|
+
if (!termNodeMatchesMetaArgumentTermNode) {
|
|
34
60
|
containmentVerified = true;
|
|
35
61
|
}
|
|
36
62
|
}
|
package/src/verify/defining.js
CHANGED
|
@@ -9,7 +9,7 @@ import { first, second } from "../utilities/array";
|
|
|
9
9
|
const termNodeQuery = nodeQuery("/argument/term!"),
|
|
10
10
|
variableNodeQuery = nodeQuery("/argument/term/variable!");
|
|
11
11
|
|
|
12
|
-
export default function verifyDefining(argumentNode, definingNode,
|
|
12
|
+
export default function verifyDefining(argumentNode, definingNode, localContext) {
|
|
13
13
|
let definingVerified = false;
|
|
14
14
|
|
|
15
15
|
const defined = definedFromDefiningNode(definingNode),
|
|
@@ -19,10 +19,10 @@ export default function verifyDefining(argumentNode, definingNode, context) {
|
|
|
19
19
|
if (false) {
|
|
20
20
|
///
|
|
21
21
|
} else if (variableNode !== null) {
|
|
22
|
-
const variable =
|
|
22
|
+
const variable = localContext.findVariableByVariableNode(variableNode);
|
|
23
23
|
|
|
24
24
|
if (variable !== null) {
|
|
25
|
-
const variableDefined =
|
|
25
|
+
const variableDefined = localContext.isVariableDefined(variable);
|
|
26
26
|
|
|
27
27
|
if (defined) {
|
|
28
28
|
if (variableDefined) {
|
|
@@ -38,12 +38,12 @@ export default function verifyDefining(argumentNode, definingNode, context) {
|
|
|
38
38
|
}
|
|
39
39
|
} else if (termNode !== null) {
|
|
40
40
|
const terms = [],
|
|
41
|
-
termVerified = verifyTerm(termNode, terms,
|
|
41
|
+
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
42
42
|
let verifiedAhead;
|
|
43
43
|
|
|
44
44
|
const firstTerm = first(terms),
|
|
45
45
|
term = firstTerm, ///
|
|
46
|
-
termGrounded =
|
|
46
|
+
termGrounded = localContext.isTermGrounded(term);
|
|
47
47
|
|
|
48
48
|
if (defined) {
|
|
49
49
|
if (termGrounded) {
|
package/src/verify/equality.js
CHANGED
|
@@ -10,12 +10,12 @@ import { first, second } from "../utilities/array";
|
|
|
10
10
|
const leftTermNodeQuery = nodeQuery("/equality/argument[0]/term!"),
|
|
11
11
|
rightTermNodeQuery = nodeQuery("/equality/argument[1]/term!");
|
|
12
12
|
|
|
13
|
-
export default function verifyEquality(equalityNode, assignments, derived,
|
|
13
|
+
export default function verifyEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
|
|
14
14
|
let equalityVerified;
|
|
15
15
|
|
|
16
|
-
const equalityString =
|
|
16
|
+
const equalityString = localContext.nodeAsString(equalityNode);
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
localContext.trace(`Verifying the '${equalityString}' equality...`, equalityNode);
|
|
19
19
|
|
|
20
20
|
const verifyEqualityFunctions = [
|
|
21
21
|
verifyDerivedEquality,
|
|
@@ -23,7 +23,7 @@ export default function verifyEquality(equalityNode, assignments, derived, conte
|
|
|
23
23
|
];
|
|
24
24
|
|
|
25
25
|
equalityVerified = verifyEqualityFunctions.some((verifyEqualityFunction) => {
|
|
26
|
-
const equalityVerified = verifyEqualityFunction(equalityNode, assignments, derived,
|
|
26
|
+
const equalityVerified = verifyEqualityFunction(equalityNode, assignments, derived, localContext, verifyAhead);
|
|
27
27
|
|
|
28
28
|
if (equalityVerified) {
|
|
29
29
|
return true;
|
|
@@ -31,19 +31,19 @@ export default function verifyEquality(equalityNode, assignments, derived, conte
|
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
if (equalityVerified) {
|
|
34
|
-
|
|
34
|
+
localContext.debug(`...verified the '${equalityString}' equality.`, equalityNode);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
return equalityVerified;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
function verifyDerivedEquality(equalityNode, assignments, derived,
|
|
40
|
+
function verifyDerivedEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
|
|
41
41
|
let derivedEqualityVerified = false;
|
|
42
42
|
|
|
43
43
|
if (derived) {
|
|
44
|
-
const equalityString =
|
|
44
|
+
const equalityString = localContext.nodeAsString(equalityNode);
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
localContext.trace(`Verifying the '${equalityString}' derived equality...`, equalityNode);
|
|
47
47
|
|
|
48
48
|
const terms = [],
|
|
49
49
|
leftTermNode = leftTermNodeQuery(equalityNode),
|
|
@@ -52,7 +52,7 @@ function verifyDerivedEquality(equalityNode, assignments, derived, context, veri
|
|
|
52
52
|
leftTermNode,
|
|
53
53
|
rightTermNode
|
|
54
54
|
],
|
|
55
|
-
termsVerified = verifyTerms(termNodes, terms,
|
|
55
|
+
termsVerified = verifyTerms(termNodes, terms, localContext, () => {
|
|
56
56
|
let verifiedAhead = false;
|
|
57
57
|
|
|
58
58
|
const firstTerm = first(terms),
|
|
@@ -62,7 +62,7 @@ function verifyDerivedEquality(equalityNode, assignments, derived, context, veri
|
|
|
62
62
|
equality = Equality.fromLeftTermRightTermAndEqualityNode(leftTerm, rightTerm, equalityNode);
|
|
63
63
|
|
|
64
64
|
if (equality !== null) {
|
|
65
|
-
const equalityEqual = equality.isEqual(
|
|
65
|
+
const equalityEqual = equality.isEqual(localContext);
|
|
66
66
|
|
|
67
67
|
if (equalityEqual) {
|
|
68
68
|
const equalityAssignment = EqualityAssignment.fromEquality(equality),
|
|
@@ -84,20 +84,20 @@ function verifyDerivedEquality(equalityNode, assignments, derived, context, veri
|
|
|
84
84
|
derivedEqualityVerified = termsVerified; ///
|
|
85
85
|
|
|
86
86
|
if (derivedEqualityVerified) {
|
|
87
|
-
|
|
87
|
+
localContext.trace(`...verified the '${equalityString}' derived equality.`, equalityNode);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
return derivedEqualityVerified;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
function verifyGivenEquality(equalityNode, assignments, derived,
|
|
94
|
+
function verifyGivenEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
|
|
95
95
|
let givenEqualityVerified = false;
|
|
96
96
|
|
|
97
97
|
if (!derived) {
|
|
98
|
-
const equalityString =
|
|
98
|
+
const equalityString = localContext.nodeAsString(equalityNode);
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
localContext.trace(`Verifying the '${equalityString}' given equality...`, equalityNode);
|
|
101
101
|
|
|
102
102
|
const terms = [],
|
|
103
103
|
leftTermNode = leftTermNodeQuery(equalityNode),
|
|
@@ -106,7 +106,7 @@ function verifyGivenEquality(equalityNode, assignments, derived, context, verify
|
|
|
106
106
|
leftTermNode,
|
|
107
107
|
rightTermNode
|
|
108
108
|
],
|
|
109
|
-
termsVerified = verifyTerms(termNodes, terms,
|
|
109
|
+
termsVerified = verifyTerms(termNodes, terms, localContext, () => {
|
|
110
110
|
let verifiedAhead = false;
|
|
111
111
|
|
|
112
112
|
const firstTerm = first(terms),
|
|
@@ -134,7 +134,7 @@ function verifyGivenEquality(equalityNode, assignments, derived, context, verify
|
|
|
134
134
|
givenEqualityVerified = termsVerified; ///
|
|
135
135
|
|
|
136
136
|
if (givenEqualityVerified) {
|
|
137
|
-
|
|
137
|
+
localContext.trace(`...verified the '${equalityString}' given equality.`, equalityNode);
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
|
package/src/verify/givenType.js
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
import { typeNameFromTypeNode } from "../utilities/query";
|
|
4
4
|
|
|
5
|
-
export default function verifyGivenType(typeNode, types,
|
|
5
|
+
export default function verifyGivenType(typeNode, types, localContext, verifyAhead) {
|
|
6
6
|
let givenTypeVerified = false;
|
|
7
7
|
|
|
8
|
-
const typeString =
|
|
8
|
+
const typeString = localContext.nodeAsString(typeNode);
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
localContext.trace(`Verifying the given '${typeString}' type...`, typeNode);
|
|
11
11
|
|
|
12
12
|
const typeName = typeNameFromTypeNode(typeNode),
|
|
13
|
-
type =
|
|
13
|
+
type = localContext.findTypeByTypeName(typeName);
|
|
14
14
|
|
|
15
15
|
if (type !== null) {
|
|
16
16
|
let verifiedAhead;
|
|
@@ -27,7 +27,7 @@ export default function verifyGivenType(typeNode, types, context, verifyAhead) {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
if (givenTypeVerified) {
|
|
30
|
-
|
|
30
|
+
localContext.debug(`...verified the given '${typeString}' type.`, typeNode);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
return givenTypeVerified;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export default function verifyGivenVariable(variableNode, variables,
|
|
3
|
+
export default function verifyGivenVariable(variableNode, variables, localContext, verifyAhead) {
|
|
4
4
|
let givenVariableVerified = false;
|
|
5
5
|
|
|
6
|
-
const variableString =
|
|
6
|
+
const variableString = localContext.nodeAsString(variableNode);
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
localContext.trace(`Verifying the '${variableString}' given variable...`, variableNode);
|
|
9
9
|
|
|
10
|
-
const variable =
|
|
10
|
+
const variable = localContext.findVariableByVariableNode(variableNode);
|
|
11
11
|
|
|
12
12
|
if (variable !== null) {
|
|
13
13
|
let verifiedAhead;
|
|
@@ -24,7 +24,7 @@ export default function verifyGivenVariable(variableNode, variables, context, ve
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
if (givenVariableVerified) {
|
|
27
|
-
|
|
27
|
+
localContext.debug(`...verified the '${variableString}' given variable.`, variableNode);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
return givenVariableVerified;
|
|
@@ -35,14 +35,14 @@ export default function verifyMetavariable(metavariableNode, metaTypeNode, fileC
|
|
|
35
35
|
return metavariableVerified;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
export function verifyStandaloneMetavariable(metavariableNode,
|
|
38
|
+
export function verifyStandaloneMetavariable(metavariableNode, localMetaContext, verifyAhead) {
|
|
39
39
|
let standaloneMetavariableVerified = false;
|
|
40
40
|
|
|
41
|
-
const metavariableString =
|
|
41
|
+
const metavariableString = localMetaContext.nodeAsString(metavariableNode);
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
localMetaContext.trace(`Verifying the '${metavariableString}' standalone metavariable...`, metavariableNode);
|
|
44
44
|
|
|
45
|
-
const metavariablePresent =
|
|
45
|
+
const metavariablePresent = localMetaContext.isMetavariablePresentByMetavariableNode(metavariableNode);
|
|
46
46
|
|
|
47
47
|
if (metavariablePresent) {
|
|
48
48
|
const verifiedAhead = verifyAhead();
|
|
@@ -51,7 +51,7 @@ export function verifyStandaloneMetavariable(metavariableNode, contexct, verifyA
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
if (standaloneMetavariableVerified) {
|
|
54
|
-
|
|
54
|
+
localMetaContext.debug(`...verified the '${metavariableString}' standalone metavariable.`, metavariableNode);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
return standaloneMetavariableVerified;
|
|
@@ -41,14 +41,13 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
41
41
|
if (qualifiedStatementVerified) {
|
|
42
42
|
derived = false; ///
|
|
43
43
|
|
|
44
|
-
const
|
|
45
|
-
verifyQualifiedStatementFunctions = [
|
|
44
|
+
const verifyQualifiedStatementFunctions = [
|
|
46
45
|
verifyQualifiedStatementAsEquality,
|
|
47
46
|
verifyQualifiedStatementAsTypeAssertion
|
|
48
47
|
];
|
|
49
48
|
|
|
50
49
|
qualifiedStatementVerified = verifyQualifiedStatementFunctions.every((verifyQualifiedStatementFunction) => { ///
|
|
51
|
-
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, assignments, derived,
|
|
50
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, assignments, derived, localContext, () => {
|
|
52
51
|
const verifiedAhead = true;
|
|
53
52
|
|
|
54
53
|
return verifiedAhead;
|
|
@@ -188,44 +187,44 @@ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, refe
|
|
|
188
187
|
return qualifiedStatementVerifiedAgainstConjecture;
|
|
189
188
|
}
|
|
190
189
|
|
|
191
|
-
function verifyQualifiedStatementAsEquality(qualifiedStatementNode, assignments, derived,
|
|
190
|
+
function verifyQualifiedStatementAsEquality(qualifiedStatementNode, assignments, derived, localContext, verifyAhead) {
|
|
192
191
|
let statementVerifiedAsEquality = true; ///
|
|
193
192
|
|
|
194
193
|
const equalityNode = equalityNodeQuery(qualifiedStatementNode);
|
|
195
194
|
|
|
196
195
|
if (equalityNode !== null) {
|
|
197
|
-
const qualifiedStatementString =
|
|
196
|
+
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
198
197
|
|
|
199
|
-
|
|
198
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement as an equality...`, qualifiedStatementNode);
|
|
200
199
|
|
|
201
|
-
const equalityVerified = verifyEquality(equalityNode, assignments, derived,
|
|
200
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, verifyAhead);
|
|
202
201
|
|
|
203
202
|
statementVerifiedAsEquality = equalityVerified; ///
|
|
204
203
|
|
|
205
204
|
if (statementVerifiedAsEquality) {
|
|
206
|
-
|
|
205
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement as an equality.`, qualifiedStatementNode);
|
|
207
206
|
}
|
|
208
207
|
}
|
|
209
208
|
|
|
210
209
|
return statementVerifiedAsEquality;
|
|
211
210
|
}
|
|
212
211
|
|
|
213
|
-
function verifyQualifiedStatementAsTypeAssertion(qualifiedStatementNode, assignments, derived,
|
|
212
|
+
function verifyQualifiedStatementAsTypeAssertion(qualifiedStatementNode, assignments, derived, localContext, verifyAhead) {
|
|
214
213
|
let statementVerifiedAsTypeAssertion = true; ///
|
|
215
214
|
|
|
216
215
|
const typeAssertionNode = typeAssertionNodeQuery(qualifiedStatementNode);
|
|
217
216
|
|
|
218
217
|
if (typeAssertionNode !== null) {
|
|
219
|
-
const qualifiedStatementString =
|
|
218
|
+
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
220
219
|
|
|
221
|
-
|
|
220
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement as a type assertion...`, qualifiedStatementNode);
|
|
222
221
|
|
|
223
|
-
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived,
|
|
222
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, verifyAhead);
|
|
224
223
|
|
|
225
224
|
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
226
225
|
|
|
227
226
|
if (statementVerifiedAsTypeAssertion) {
|
|
228
|
-
|
|
227
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement as a type assertion.`, qualifiedStatementNode);
|
|
229
228
|
}
|
|
230
229
|
}
|
|
231
230
|
|
|
@@ -23,8 +23,7 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
if (!unqualifiedStatementVerified) {
|
|
26
|
-
const
|
|
27
|
-
statementVerified = verifyStatement(statementNode, assignments, derived, context, () => {
|
|
26
|
+
const statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
|
|
28
27
|
const verifiedAhead = true;
|
|
29
28
|
|
|
30
29
|
return verifiedAhead;
|