occam-verify-cli 0.0.869 → 0.0.871
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/axiomLemmaTheoremConjecture.js +13 -13
- package/lib/conclusion.js +3 -3
- package/lib/context/file.js +77 -73
- package/lib/equality.js +2 -4
- package/lib/equivalence.js +1 -1
- package/lib/label.js +5 -6
- package/lib/metaLemmaMetatheorem.js +13 -13
- package/lib/mixins/context.js +28 -28
- package/lib/premise.js +4 -4
- package/lib/rule.js +13 -13
- package/lib/ruleNames.js +1 -29
- package/lib/substitution/metastatementForMetavariable.js +3 -2
- package/lib/substitution/statementForMetavariable.js +27 -64
- package/lib/substitution/termForVariable.js +5 -5
- package/lib/utilities/name.js +8 -8
- package/lib/utilities/node.js +14 -14
- package/lib/utilities/query.js +4 -9
- package/lib/utilities/tokens.js +6 -6
- package/lib/utilities/verifier.js +86 -0
- package/lib/verifier/node/metastatement.js +41 -28
- package/lib/verifier/node/statementAsCombinator.js +41 -28
- package/lib/verifier/node/termAsConstructor.js +30 -22
- package/lib/verifier/nodes/equality.js +27 -32
- package/lib/verifier/nodes/intrinsicLevel.js +25 -34
- package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +270 -0
- package/lib/verifier/nodes/metaLevel.js +25 -34
- package/lib/verifier/nodes/statementAgainstCombinator.js +45 -49
- package/lib/verifier/nodes/termAgainstConstructor.js +24 -51
- package/lib/verify/argumentAgainstArgument.js +24 -0
- package/lib/verify/axiom.js +4 -4
- package/lib/verify/conjecture.js +4 -4
- package/lib/verify/containment.js +5 -5
- package/lib/verify/equality.js +9 -9
- package/lib/verify/label.js +8 -9
- package/lib/verify/labels.js +15 -8
- package/lib/verify/lemma.js +4 -4
- package/lib/verify/metaDerivation.js +19 -19
- package/lib/verify/metaLemma.js +4 -4
- package/lib/verify/metaproof.js +4 -6
- package/lib/verify/metastatement/qualified.js +3 -3
- package/lib/verify/metatheorem.js +4 -4
- package/lib/verify/metavariable.js +7 -5
- package/lib/verify/metavariableAgainstMetastatement.js +44 -0
- package/lib/verify/metavariableAgainstStatement.js +65 -0
- package/lib/verify/rule.js +4 -4
- package/lib/verify/statement/qualified.js +29 -29
- package/lib/verify/statement.js +4 -4
- package/lib/verify/statementAgainstMetaType.js +24 -0
- package/lib/verify/statementAtainstStatement.js +52 -0
- package/lib/verify/term.js +7 -8
- package/lib/verify/termAgainstTerm.js +22 -0
- package/lib/verify/termAgainstType.js +26 -0
- package/lib/verify/terms.js +2 -3
- package/lib/verify/theorem.js +4 -4
- package/lib/verify/type.js +7 -5
- package/lib/verify/typeAssertion.js +45 -40
- package/lib/verify/variable.js +7 -5
- package/lib/verify/variableAgainstTerm.js +70 -0
- package/package.json +4 -4
- package/src/axiomLemmaTheoremConjecture.js +13 -13
- package/src/conclusion.js +2 -2
- package/src/context/file.js +79 -73
- package/src/equality.js +3 -9
- package/src/equivalence.js +1 -1
- package/src/label.js +6 -7
- package/src/metaLemmaMetatheorem.js +13 -13
- package/src/mixins/context.js +17 -17
- package/src/premise.js +3 -3
- package/src/rule.js +13 -13
- package/src/ruleNames.js +0 -7
- package/src/substitution/metastatementForMetavariable.js +3 -1
- package/src/substitution/statementForMetavariable.js +32 -74
- package/src/substitution/termForVariable.js +3 -3
- package/src/utilities/name.js +7 -7
- package/src/utilities/node.js +13 -13
- package/src/utilities/query.js +3 -9
- package/src/utilities/tokens.js +4 -4
- package/src/utilities/verifier.js +46 -0
- package/src/verifier/node/metastatement.js +41 -34
- package/src/verifier/node/statementAsCombinator.js +39 -32
- package/src/verifier/node/termAsConstructor.js +30 -25
- package/src/verifier/nodes/equality.js +31 -36
- package/src/verifier/nodes/intrinsicLevel.js +30 -38
- package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +222 -0
- package/src/verifier/nodes/metaLevel.js +30 -38
- package/src/verifier/nodes/statementAgainstCombinator.js +52 -55
- package/src/verifier/nodes/termAgainstConstructor.js +30 -71
- package/src/verify/argumentAgainstArgument.js +15 -0
- package/src/verify/axiom.js +4 -4
- package/src/verify/conjecture.js +4 -4
- package/src/verify/containment.js +4 -4
- package/src/verify/equality.js +8 -8
- package/src/verify/label.js +8 -9
- package/src/verify/labels.js +17 -7
- package/src/verify/lemma.js +4 -4
- package/src/verify/metaDerivation.js +18 -18
- package/src/verify/metaLemma.js +6 -6
- package/src/verify/metaproof.js +3 -6
- package/src/verify/metastatement/qualified.js +5 -4
- package/src/verify/metatheorem.js +4 -4
- package/src/verify/metavariable.js +7 -5
- package/src/verify/metavariableAgainstMetastatement.js +42 -0
- package/src/verify/metavariableAgainstStatement.js +77 -0
- package/src/verify/rule.js +4 -4
- package/src/verify/statement/qualified.js +35 -30
- package/src/verify/statement.js +5 -5
- package/src/verify/statementAgainstMetaType.js +21 -0
- package/src/verify/statementAtainstStatement.js +60 -0
- package/src/verify/term.js +13 -17
- package/src/verify/termAgainstTerm.js +20 -0
- package/src/verify/termAgainstType.js +28 -0
- package/src/verify/terms.js +1 -3
- package/src/verify/theorem.js +4 -4
- package/src/verify/type.js +7 -5
- package/src/verify/typeAssertion.js +56 -55
- package/src/verify/variable.js +7 -5
- package/src/verify/variableAgainstTerm.js +86 -0
- package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -327
- package/lib/verifier/nodes/substitution.js +0 -223
- package/lib/verify/givenMetavariable.js +0 -31
- package/lib/verify/givenType.js +0 -31
- package/lib/verify/givenVariable.js +0 -31
- package/lib/verify/termAndGivenType.js +0 -39
- package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -219
- package/src/verifier/nodes/substitution.js +0 -125
- package/src/verify/givenMetavariable.js +0 -31
- package/src/verify/givenType.js +0 -31
- package/src/verify/givenVariable.js +0 -31
- package/src/verify/termAndGivenType.js +0 -37
|
@@ -1,59 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
+
import verifyTermAgainstTerm from "../../verify/termAgainstTerm";
|
|
4
5
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
6
|
+
import { nodeQuery } from "../../utilities/query";
|
|
7
|
+
import { verifyNodes } from "../../utilities/verifier";
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equivalences, localContext, verifyAhead) {
|
|
10
|
-
let nonTerminalNodeVerified = false;
|
|
9
|
+
const termNodeQuery = nodeQuery("/term!");
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
class EqualityNodesVerifier extends NodesVerifier {
|
|
12
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
|
|
13
|
+
let nonTerminalNodeVerified;
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
const nodeQueryMaps = [
|
|
16
|
+
{
|
|
17
|
+
nodeQueryA: termNodeQuery,
|
|
18
|
+
nodeQueryB: termNodeQuery,
|
|
19
|
+
verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
|
|
20
|
+
let nonTerminalNodeVerified;
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
const termNodeA = nodeA, ///
|
|
23
|
+
termNodeB = nodeB, ///
|
|
24
|
+
termNodeVerifiedAgainstTermNode =
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
+
this.verifyTermNodeAgainstTermNode(termNodeA, termNodeB, localContext, verifyAhead);
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equivalences, localContext, verifyAhead);
|
|
28
|
+
nonTerminalNodeVerified = termNodeVerifiedAgainstTermNode; ///
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
return nonTerminalNodeVerified;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
];
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
}
|
|
35
|
+
const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
nonTerminalNodeVerified = nodesVerified ?
|
|
38
|
+
true :
|
|
39
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
termNodesEqual = areTermNodesEqual(leftTermNode, rightTermNode, equivalences);
|
|
41
|
+
return nonTerminalNodeVerified;
|
|
42
|
+
}
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
verifyTermNodeAgainstTermNode(termNodeA, termNodeB, localContext, verifyAhead) {
|
|
45
|
+
let termNodeVerifiedAgainstTermNode;
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
} else {
|
|
50
|
-
const nonTerminalNodeA = termNodeA, ///
|
|
51
|
-
nonTerminalNodeB = termNodeB; ///
|
|
47
|
+
const termVerifiedAgainstTerm = verifyTermAgainstTerm(termNodeA, termNodeB, localContext, verifyAhead);
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
}
|
|
49
|
+
termNodeVerifiedAgainstTermNode = termVerifiedAgainstTerm; ///
|
|
55
50
|
|
|
56
|
-
return
|
|
51
|
+
return termNodeVerifiedAgainstTermNode;
|
|
57
52
|
}
|
|
58
53
|
}
|
|
59
54
|
|
|
@@ -1,68 +1,60 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
-
import
|
|
4
|
+
import verifyVariableAgainstTerm from "../../verify/variableAgainstTerm";
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../../utilities/query";
|
|
7
|
-
import {
|
|
7
|
+
import { verifyNodes } from "../../utilities/verifier";
|
|
8
8
|
|
|
9
|
-
const
|
|
9
|
+
const termNodeQuery = nodeQuery("/term!"),
|
|
10
|
+
termVariableNodeQuery = nodeQuery("/term/variable!");
|
|
10
11
|
|
|
11
12
|
class IntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
12
13
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
13
|
-
let nonTerminalNodeVerified
|
|
14
|
+
let nonTerminalNodeVerified;
|
|
14
15
|
|
|
15
|
-
const
|
|
16
|
-
|
|
16
|
+
const nodeQueryMaps = [
|
|
17
|
+
{
|
|
18
|
+
nodeQueryA: termVariableNodeQuery,
|
|
19
|
+
nodeQueryB: termNodeQuery,
|
|
20
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
21
|
+
let nonTerminalNodeVerified;
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
|
|
23
|
+
const termNodeB = nodeB, ///
|
|
24
|
+
termVariableNodeA = nodeA, ///
|
|
25
|
+
termVariableNodeVerifiedAgainstTermNode =
|
|
20
26
|
|
|
21
|
-
|
|
22
|
-
case TERM_RULE_NAME: {
|
|
23
|
-
const termNodeA = nonTerminalNodeA, ///
|
|
24
|
-
termNodeB = nonTerminalNodeB, ///
|
|
25
|
-
termNodeVerified = this.verifyTermNode(termNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
27
|
+
this.verifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
26
28
|
|
|
27
|
-
nonTerminalNodeVerified =
|
|
29
|
+
nonTerminalNodeVerified = termVariableNodeVerifiedAgainstTermNode; ///
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
return nonTerminalNodeVerified;
|
|
30
32
|
}
|
|
33
|
+
}
|
|
34
|
+
];
|
|
31
35
|
|
|
32
|
-
|
|
33
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
36
|
+
const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
34
37
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
38
|
+
nonTerminalNodeVerified = nodesVerified ?
|
|
39
|
+
true :
|
|
40
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
39
41
|
|
|
40
42
|
return nonTerminalNodeVerified;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
let
|
|
45
|
+
verifyTermVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
46
|
+
let termVariableNodeVerifiedAgainstTermNode;
|
|
45
47
|
|
|
46
|
-
const
|
|
48
|
+
const termNode = termNodeB, ///
|
|
49
|
+
variableNode = termVariableNodeA, ///
|
|
50
|
+
termVerifiedAgainstVariable = verifyVariableAgainstTerm(variableNode, termNode, substitutions, localContextA, localContextB, verifyAhead);
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
const variableNodeVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
52
|
+
termVariableNodeVerifiedAgainstTermNode = termVerifiedAgainstVariable; ///
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
} else {
|
|
53
|
-
const nonTerminalNodeA = termNodeA, ///
|
|
54
|
-
nonTerminalNodeB = termNodeB, ///
|
|
55
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
56
|
-
|
|
57
|
-
termNodeVerified = nonTerminalNodeVerified; ///
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return termNodeVerified;
|
|
54
|
+
return termVariableNodeVerifiedAgainstTermNode;
|
|
61
55
|
}
|
|
62
56
|
}
|
|
63
57
|
|
|
64
|
-
Object.assign(IntrinsicLevelNodesVerifier.prototype, intrinsicLevelNodesVerifierMixins);
|
|
65
|
-
|
|
66
58
|
const intrinsicLevelNodesVerifier = new IntrinsicLevelNodesVerifier();
|
|
67
59
|
|
|
68
60
|
export default intrinsicLevelNodesVerifier;
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
+
import verifyVariableAgainstTerm from "../../verify/variableAgainstTerm";
|
|
5
|
+
import verifyMetavariableAgainstStatement from "../../verify/metavariableAgainstStatement";
|
|
6
|
+
|
|
7
|
+
import { nodeQuery } from "../../utilities/query";
|
|
8
|
+
import { verifyNodes } from "../../utilities/verifier";
|
|
9
|
+
|
|
10
|
+
const termNodeQuery = nodeQuery("/term!"),
|
|
11
|
+
statementNodeQuery = nodeQuery("/statement!"),
|
|
12
|
+
termVariableNodeQuery = nodeQuery("/term/variable!"),
|
|
13
|
+
metastatementNodeQuery = nodeQuery("/metastatement!"),
|
|
14
|
+
metaArgumentStatementNodeQuery = nodeQuery("/metaArgument/statement!"),
|
|
15
|
+
metastatementStatementNodeQuery = nodeQuery("/metastatement/statement!"),
|
|
16
|
+
metastatementMetavariableNodeQuery = nodeQuery("/metastatement/metavariable!"),
|
|
17
|
+
metastatementSubstitutionNodeQuery = nodeQuery("/metastatement/substitution");
|
|
18
|
+
|
|
19
|
+
class IntrinsicLevelAgainstMetaLevelNodesVerifier extends NodesVerifier {
|
|
20
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
21
|
+
let nonTerminalNodeVerified;
|
|
22
|
+
|
|
23
|
+
const nodeQueryMaps = [
|
|
24
|
+
{
|
|
25
|
+
nodeQueryA: metastatementMetavariableNodeQuery,
|
|
26
|
+
nodeQueryB: metastatementStatementNodeQuery,
|
|
27
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
28
|
+
let nonTerminalNodeVerified;
|
|
29
|
+
|
|
30
|
+
const metastatementStatementNodeB = nodeB, ///
|
|
31
|
+
metastatementMetavariableNodeA = nodeA, ///
|
|
32
|
+
metastatementSubstitutionNodeA = metastatementSubstitutionNodeQuery(nonTerminalNodeA),
|
|
33
|
+
metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode =
|
|
34
|
+
|
|
35
|
+
this.verifyMetastatementMetavariableNodeAgainstMetastatementStatementNode(metastatementMetavariableNodeA, metastatementStatementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead);
|
|
36
|
+
|
|
37
|
+
nonTerminalNodeVerified = metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode; ///
|
|
38
|
+
|
|
39
|
+
return nonTerminalNodeVerified;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
nodeQueryA: metastatementMetavariableNodeQuery,
|
|
44
|
+
nodeQueryB: metaArgumentStatementNodeQuery,
|
|
45
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
46
|
+
let nonTerminalNodeVerified;
|
|
47
|
+
|
|
48
|
+
const metaArgumentStatementNodeB = nodeB, ///
|
|
49
|
+
metastatementMetavariableNodeA = nodeA, ///
|
|
50
|
+
metastatementSubstitutionNodeA = metastatementSubstitutionNodeQuery(nonTerminalNodeA),
|
|
51
|
+
metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode =
|
|
52
|
+
|
|
53
|
+
this.verifyMetastatementMetavariableNodeAgainstMetaArgumentStatementNode(metastatementMetavariableNodeA, metaArgumentStatementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead);
|
|
54
|
+
|
|
55
|
+
nonTerminalNodeVerified = metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode; ///
|
|
56
|
+
|
|
57
|
+
return nonTerminalNodeVerified;
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
nodeQueryA: metastatementMetavariableNodeQuery,
|
|
62
|
+
nodeQueryB: statementNodeQuery,
|
|
63
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
64
|
+
let nonTerminalNodeVerified;
|
|
65
|
+
|
|
66
|
+
const statementNodeB = nodeB, ///
|
|
67
|
+
metastatementMetavariableNodeA = nodeA, ///
|
|
68
|
+
metastatementSubstitutionNodeA = metastatementSubstitutionNodeQuery(nonTerminalNodeA),
|
|
69
|
+
metastatementMetavariableNodeVerifiedAgainstStatementNode =
|
|
70
|
+
|
|
71
|
+
this.verifyMetastatementMetavariableNodeAgainstStatementNode(metastatementMetavariableNodeA, statementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead);
|
|
72
|
+
|
|
73
|
+
nonTerminalNodeVerified = metastatementMetavariableNodeVerifiedAgainstStatementNode; ///
|
|
74
|
+
|
|
75
|
+
return nonTerminalNodeVerified;
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
nodeQueryA: metastatementStatementNodeQuery,
|
|
80
|
+
nodeQueryB: statementNodeQuery,
|
|
81
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
82
|
+
let nonTerminalNodeVerified;
|
|
83
|
+
|
|
84
|
+
const statementNodeB = nodeB, ///
|
|
85
|
+
metastatementStatementNodeA = nodeA, ///
|
|
86
|
+
metastatementStatementNodeVerifiedAgainstStatementNode =
|
|
87
|
+
|
|
88
|
+
this.verifyMetastatementStatementNodeAgainstStatementNode(metastatementStatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
89
|
+
|
|
90
|
+
nonTerminalNodeVerified = metastatementStatementNodeVerifiedAgainstStatementNode; ///
|
|
91
|
+
|
|
92
|
+
return nonTerminalNodeVerified;
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
nodeQueryA: metastatementNodeQuery,
|
|
97
|
+
nodeQueryB: statementNodeQuery,
|
|
98
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
99
|
+
let nonTerminalNodeVerified;
|
|
100
|
+
|
|
101
|
+
const statementNodeB = nodeB, ///
|
|
102
|
+
metastatementNodeA = nodeA, ///
|
|
103
|
+
metastatementNodeVerifiedAgainstStatementNode =
|
|
104
|
+
|
|
105
|
+
this.verifyMetastatementNodeAgainstStatementNode(metastatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
106
|
+
|
|
107
|
+
nonTerminalNodeVerified = metastatementNodeVerifiedAgainstStatementNode; ///
|
|
108
|
+
|
|
109
|
+
return nonTerminalNodeVerified;
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
nodeQueryA: termVariableNodeQuery,
|
|
114
|
+
nodeQueryB: termNodeQuery,
|
|
115
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localContextB, verifyAhead) => {
|
|
116
|
+
let nonTerminalNodeVerified;
|
|
117
|
+
|
|
118
|
+
const termNodeB = nodeB, ///
|
|
119
|
+
termVariableNodeA = nodeA, ///
|
|
120
|
+
variableNodeVerifiedAgainstTermNode =
|
|
121
|
+
|
|
122
|
+
this.verifyVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
123
|
+
|
|
124
|
+
nonTerminalNodeVerified = variableNodeVerifiedAgainstTermNode; ///
|
|
125
|
+
|
|
126
|
+
return nonTerminalNodeVerified;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
];
|
|
130
|
+
|
|
131
|
+
const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
132
|
+
|
|
133
|
+
nonTerminalNodeVerified = nodesVerified ?
|
|
134
|
+
true :
|
|
135
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
136
|
+
|
|
137
|
+
return nonTerminalNodeVerified;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
verifyMetastatementMetavariableNodeAgainstMetastatementStatementNode(metastatementMetavariableNodeA, metastatementStatementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead) {
|
|
141
|
+
let metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode;
|
|
142
|
+
|
|
143
|
+
const statementNode = metastatementStatementNodeB, ///
|
|
144
|
+
metavariableNode = metastatementMetavariableNodeA, ///
|
|
145
|
+
substitutionNode = metastatementSubstitutionNodeA, ///
|
|
146
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutionNode, substitutions, localContextA, localContextB, verifyAhead)
|
|
147
|
+
|
|
148
|
+
metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode = metavariableVerifiedAgainstStatement; ///
|
|
149
|
+
|
|
150
|
+
return metastatementMetavariableNodeVerifiedAgainstMetastatementStatementNode;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
verifyMetastatementMetavariableNodeAgainstMetaArgumentStatementNode(metastatementMetavariableNodeA, metaArgumentStatementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead) {
|
|
154
|
+
let metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode;
|
|
155
|
+
|
|
156
|
+
const statementNode = metaArgumentStatementNodeB, ///
|
|
157
|
+
metavariableNode = metastatementMetavariableNodeA, ///
|
|
158
|
+
substitutionNode = metastatementSubstitutionNodeA, ///
|
|
159
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutionNode, substitutions, localContextA, localContextB, verifyAhead)
|
|
160
|
+
|
|
161
|
+
metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode = metavariableVerifiedAgainstStatement; ///
|
|
162
|
+
|
|
163
|
+
return metastatementMetavariableNodeVerifiedAgainstMetaArgumentStatementNode;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
verifyMetastatementMetavariableNodeAgainstStatementNode(metastatementMetavariableNodeA, statementNodeB, metastatementSubstitutionNodeA, substitutions, localContextA, localContextB, verifyAhead) {
|
|
167
|
+
let metastatementMetavariableNodeVerifiedAgainstStatementNode;
|
|
168
|
+
|
|
169
|
+
const statementNode = statementNodeB, ///
|
|
170
|
+
metavariableNode = metastatementMetavariableNodeA, ///
|
|
171
|
+
substitutionNode = metastatementSubstitutionNodeA, ///
|
|
172
|
+
metavariableVerifiedAgainstStatement = verifyMetavariableAgainstStatement(metavariableNode, statementNode, substitutionNode, substitutions, localContextA, localContextB, verifyAhead)
|
|
173
|
+
|
|
174
|
+
metastatementMetavariableNodeVerifiedAgainstStatementNode = metavariableVerifiedAgainstStatement; ///
|
|
175
|
+
|
|
176
|
+
return metastatementMetavariableNodeVerifiedAgainstStatementNode;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
verifyMetastatementStatementNodeAgainstStatementNode(metastatementStatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
180
|
+
let metastatementStatementNodeVerifiedAgainstStatementNode;
|
|
181
|
+
|
|
182
|
+
const nonTerminalNodeA = metastatementStatementNodeA, ///
|
|
183
|
+
nonTerminalNodeB = statementNodeB, ///
|
|
184
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
185
|
+
|
|
186
|
+
metastatementStatementNodeVerifiedAgainstStatementNode = nonTerminalNodeVerified; ///
|
|
187
|
+
|
|
188
|
+
return metastatementStatementNodeVerifiedAgainstStatementNode;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
verifyMetastatementNodeAgainstStatementNode(metastatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
192
|
+
let metastatementNodeVerifiedAgainstStatementNode;
|
|
193
|
+
|
|
194
|
+
const nonTerminalNodeA = metastatementNodeA, ///
|
|
195
|
+
nonTerminalNodeB = statementNodeB, ///
|
|
196
|
+
nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
197
|
+
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
198
|
+
childNodesA = nonTerminalNodeAChildNodes, ///
|
|
199
|
+
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
200
|
+
childNodesVerified = this.verifyChildNodes(childNodesA, childNodesB, substitutions, localContextA, localContextB, verifyAhead);
|
|
201
|
+
|
|
202
|
+
metastatementNodeVerifiedAgainstStatementNode = childNodesVerified; ///
|
|
203
|
+
|
|
204
|
+
return metastatementNodeVerifiedAgainstStatementNode;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
verifyVariableNodeAgainstTermNode(termVariableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
208
|
+
let variableNodeVerifiedAgainstTermNode;
|
|
209
|
+
|
|
210
|
+
const termNode = termNodeB, ///
|
|
211
|
+
variableNode = termVariableNodeA, ///
|
|
212
|
+
variableVerifiedAgainstTerm = verifyVariableAgainstTerm(variableNode, termNode, substitutions, localContextA, localContextB, verifyAhead);
|
|
213
|
+
|
|
214
|
+
variableNodeVerifiedAgainstTermNode = variableVerifiedAgainstTerm; ///
|
|
215
|
+
|
|
216
|
+
return variableNodeVerifiedAgainstTermNode;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const intrinsicLevelAgainstMetaLevelNodesVerifier = new IntrinsicLevelAgainstMetaLevelNodesVerifier();
|
|
221
|
+
|
|
222
|
+
export default intrinsicLevelAgainstMetaLevelNodesVerifier;
|
|
@@ -1,68 +1,60 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
-
import
|
|
4
|
+
import verifyMetavariableAgainstMetastatement from "../../verify/metavariableAgainstMetastatement";
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "../../utilities/query";
|
|
7
|
-
import {
|
|
7
|
+
import { verifyNodes } from "../../utilities/verifier";
|
|
8
8
|
|
|
9
|
-
const
|
|
9
|
+
const metastatementNodeQuery = nodeQuery("/metastatement!"),
|
|
10
|
+
metastatementMetavariableNodeQuery = nodeQuery("/metastatement/metavariable!");
|
|
10
11
|
|
|
11
12
|
class MetaLevelNodesVerifier extends NodesVerifier {
|
|
12
13
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
|
|
13
|
-
let nonTerminalNodeVerified
|
|
14
|
+
let nonTerminalNodeVerified;
|
|
14
15
|
|
|
15
|
-
const
|
|
16
|
-
|
|
16
|
+
const nodeQueryMaps = [
|
|
17
|
+
{
|
|
18
|
+
nodeQueryA: metastatementMetavariableNodeQuery,
|
|
19
|
+
nodeQueryB: metastatementNodeQuery,
|
|
20
|
+
verifyNodes: (nodeA, nodeB, substitutions, localContextA, localMetaContextB, verifyAhead) => {
|
|
21
|
+
let nonTerminalNodeVerified;
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
|
|
23
|
+
const metastatementNodeB = nodeB, ///
|
|
24
|
+
metastatementMetavariableNodeA = nodeA, ///
|
|
25
|
+
metastatementMetavariableNodeVerifiedAgainstMetastatementNode =
|
|
20
26
|
|
|
21
|
-
|
|
22
|
-
case METASTATEMENT_RULE_NAME: {
|
|
23
|
-
const metastatementNodeA = nonTerminalNodeA, ///
|
|
24
|
-
metastatementNodeB = nonTerminalNodeB, ///
|
|
25
|
-
metastatementNodeVerified = this.verifyMetastatementNode(metastatementNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
27
|
+
this.verifyMetastatementMetavariableNodeAgainstMetastatementNode(metastatementMetavariableNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
26
28
|
|
|
27
|
-
nonTerminalNodeVerified =
|
|
29
|
+
nonTerminalNodeVerified = metastatementMetavariableNodeVerifiedAgainstMetastatementNode; ///
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
return nonTerminalNodeVerified;
|
|
30
32
|
}
|
|
33
|
+
}
|
|
34
|
+
];
|
|
31
35
|
|
|
32
|
-
|
|
33
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
36
|
+
const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
34
37
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
38
|
+
nonTerminalNodeVerified = nodesVerified ?
|
|
39
|
+
true :
|
|
40
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
39
41
|
|
|
40
42
|
return nonTerminalNodeVerified;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
let
|
|
45
|
+
verifyMetastatementMetavariableNodeAgainstMetastatementNode(metastatementMetavariableNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead) {
|
|
46
|
+
let metastatementMetavariableNodeVerifiedAgainstMetastatementNode;
|
|
45
47
|
|
|
46
|
-
const
|
|
48
|
+
const metavariableNode = metastatementMetavariableNodeA, ///
|
|
49
|
+
metastatementNode = metastatementNodeB, ///
|
|
50
|
+
metavariableVerifiedAgainstMetastatement = verifyMetavariableAgainstMetastatement(metavariableNode, metastatementNode, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
const metaVariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, metastatementNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
52
|
+
metastatementMetavariableNodeVerifiedAgainstMetastatementNode = metavariableVerifiedAgainstMetastatement; ///
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
} else {
|
|
53
|
-
const nonTerminalNodeA = metastatementNodeA, ///
|
|
54
|
-
nonTerminalNodeB = metastatementNodeB, ///
|
|
55
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localMetaContextB, verifyAhead);
|
|
56
|
-
|
|
57
|
-
metastatementNodeVerified = nonTerminalNodeVerified; ///
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return metastatementNodeVerified;
|
|
54
|
+
return metastatementMetavariableNodeVerifiedAgainstMetastatementNode;
|
|
61
55
|
}
|
|
62
56
|
}
|
|
63
57
|
|
|
64
|
-
Object.assign(MetaLevelNodesVerifier.prototype, metaLevelNodesVerifierMixins);
|
|
65
|
-
|
|
66
58
|
const metaLevelNodesVerifier = new MetaLevelNodesVerifier();
|
|
67
59
|
|
|
68
60
|
export default metaLevelNodesVerifier;
|
|
@@ -1,89 +1,86 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
-
import
|
|
4
|
+
import verifyArgumentAgainstArgument from "../../verify/argumentAgainstArgument";
|
|
5
|
+
import verifyStatementAgainstMetaType from "../../verify/statementAgainstMetaType";
|
|
5
6
|
|
|
6
7
|
import { nodeQuery } from "../../utilities/query";
|
|
7
|
-
import {
|
|
8
|
-
import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../../ruleNames";
|
|
8
|
+
import { verifyNodes } from "../../utilities/verifier";
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const argumentNodeQuery = nodeQuery("/argument!"),
|
|
11
|
+
metaArgumentMetaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
|
|
12
|
+
metaArgumentStatementNodeQuery = nodeQuery("/metaArgument/statement!");
|
|
13
13
|
|
|
14
14
|
class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
15
15
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
|
|
16
|
-
let nonTerminalNodeVerified
|
|
16
|
+
let nonTerminalNodeVerified;
|
|
17
17
|
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
const nodeQueryMaps = [
|
|
19
|
+
{
|
|
20
|
+
nodeQueryA: metaArgumentStatementNodeQuery,
|
|
21
|
+
nodeQueryB: metaArgumentMetaTypeNodeQuery,
|
|
22
|
+
verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
|
|
23
|
+
let nonTerminalNodeVerified;
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const metaArgumentNode = nonTerminalNode, ///
|
|
27
|
-
combinatorMetaargumentNode = combinatorNonTerminalNode, ///
|
|
28
|
-
metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead);
|
|
25
|
+
const metaArgumentMetaTypeNodeB = nodeB, ///
|
|
26
|
+
metaArgumentStatementNodeA = nodeA, ///
|
|
27
|
+
metaArgumentStatementVerifiedAgainstMetaArgumentMetaType =
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
this.verifyMetaArgumentStatementAgainstMetaArgumentMetaType(metaArgumentStatementNodeA, metaArgumentMetaTypeNodeB, localContext, verifyAhead);
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
}
|
|
31
|
+
nonTerminalNodeVerified = metaArgumentStatementVerifiedAgainstMetaArgumentMetaType; ///
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
return nonTerminalNodeVerified;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
nodeQueryA: argumentNodeQuery,
|
|
38
|
+
nodeQueryB: argumentNodeQuery,
|
|
39
|
+
verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
|
|
40
|
+
let nonTerminalNodeVerified;
|
|
39
41
|
|
|
40
|
-
|
|
42
|
+
const argumentNodeA = nodeA, ///
|
|
43
|
+
argumentNodeB = nodeB, ///
|
|
44
|
+
argumentNodeVerifiedAgainstArgumentNode =
|
|
41
45
|
|
|
42
|
-
|
|
43
|
-
}
|
|
46
|
+
this.verifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, verifyAhead);
|
|
44
47
|
|
|
45
|
-
|
|
46
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
48
|
+
nonTerminalNodeVerified = argumentNodeVerifiedAgainstArgumentNode; ///
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
return nonTerminalNodeVerified;
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
|
-
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
56
|
+
|
|
57
|
+
nonTerminalNodeVerified = nodesVerified ?
|
|
58
|
+
true :
|
|
59
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
52
60
|
|
|
53
61
|
return nonTerminalNodeVerified;
|
|
54
62
|
}
|
|
55
63
|
|
|
56
|
-
|
|
57
|
-
let
|
|
64
|
+
verifyMetaArgumentStatementAgainstMetaArgumentMetaType(metaArgumentStatementNodeA, metaArgumentMetaTypeNodeB, localContext, verifyAhead) {
|
|
65
|
+
let metaArgumentStatementVerifiedAgainstMetaArgumentMetaType = false;
|
|
58
66
|
|
|
59
|
-
const
|
|
67
|
+
const metaTypeNode = metaArgumentMetaTypeNodeB, ///
|
|
68
|
+
statementNode = metaArgumentStatementNodeA, ///
|
|
69
|
+
statementVerifiedAgainstMetaType = verifyStatementAgainstMetaType(statementNode, metaTypeNode, localContext, verifyAhead);
|
|
60
70
|
|
|
61
|
-
|
|
62
|
-
combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
71
|
+
metaArgumentStatementVerifiedAgainstMetaArgumentMetaType = statementVerifiedAgainstMetaType; ///
|
|
63
72
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
} else {
|
|
67
|
-
if (combinatorMetaTYpeNode === null) {
|
|
68
|
-
const combinatorMetaargumentString = localContext.nodeAsString(combinatorMetaargumentNode);
|
|
73
|
+
return metaArgumentStatementVerifiedAgainstMetaArgumentMetaType;
|
|
74
|
+
}
|
|
69
75
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
|
|
73
|
-
content = combinatorMetaTypeTerminalNode.getContent(),
|
|
74
|
-
contentStatementMetaType = (content === STATEMENT_META_TYPE_NAME);
|
|
76
|
+
verifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, verifyAhead) {
|
|
77
|
+
let argumentNodeVerifiedAgainstArgumentNode;
|
|
75
78
|
|
|
76
|
-
|
|
77
|
-
localContext.debug(`Expected the meta-type of the combinator to be '${STATEMENT_META_TYPE_NAME}' but got '${content}' instead.`, metaArgumentNode);
|
|
78
|
-
} else {
|
|
79
|
-
const verifiedAhead = verifyAhead();
|
|
79
|
+
const argumentVerifiedAgainstArgument = verifyArgumentAgainstArgument(argumentNodeA, argumentNodeB, localContext, verifyAhead);
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
81
|
+
argumentNodeVerifiedAgainstArgumentNode = argumentVerifiedAgainstArgument; ///
|
|
85
82
|
|
|
86
|
-
return
|
|
83
|
+
return argumentNodeVerifiedAgainstArgumentNode;
|
|
87
84
|
}
|
|
88
85
|
}
|
|
89
86
|
|