occam-verify-cli 0.0.535 → 0.0.536
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/conclusion.js +3 -3
- package/lib/consequence.js +2 -2
- package/lib/constants.js +5 -1
- package/lib/context/proof.js +16 -1
- package/lib/equality.js +236 -69
- package/lib/log.js +6 -6
- package/lib/node/statement/equality.js +16 -0
- package/lib/premise.js +7 -7
- package/lib/supposition.js +4 -4
- package/lib/type.js +12 -5
- package/lib/variable.js +3 -23
- package/lib/verifier/metastatementForMetavariable.js +16 -16
- package/lib/verifier/statementForMetavariable.js +17 -17
- package/lib/verifier/termForVariable.js +17 -17
- package/lib/verifier.js +65 -20
- package/lib/verify/assertion/type.js +22 -11
- package/lib/verify/statement.js +227 -24
- package/package.json +1 -1
- package/src/conclusion.js +4 -4
- package/src/consequence.js +2 -2
- package/src/constants.js +1 -0
- package/src/context/proof.js +18 -0
- package/src/equality.js +159 -85
- package/src/log.js +7 -5
- package/src/node/statement/equality.js +9 -0
- package/src/premise.js +8 -8
- package/src/supposition.js +4 -4
- package/src/type.js +17 -8
- package/src/variable.js +2 -18
- package/src/verifier/metastatementForMetavariable.js +15 -15
- package/src/verifier/statementForMetavariable.js +16 -16
- package/src/verifier/termForVariable.js +16 -16
- package/src/verifier.js +18 -18
- package/src/verify/assertion/type.js +28 -13
- package/src/verify/statement.js +226 -42
- package/lib/verifier/statement.js +0 -199
- package/src/verifier/statement.js +0 -135
|
@@ -12,7 +12,7 @@ const metavariableNodeQuery = nodeQuery('/metastatement/metavariable!'),
|
|
|
12
12
|
|
|
13
13
|
export default class StatementForMetavariableVerifier extends Verifier {
|
|
14
14
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions) {
|
|
15
|
-
let
|
|
15
|
+
let nonTerminalNodeVerified = false;
|
|
16
16
|
|
|
17
17
|
const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(),
|
|
18
18
|
nonTerminalNodeBRuleNameMetaArgumentRuleName = (nonTerminalNodeBRuleName === META_ARGUMENT_RULE_NAME);
|
|
@@ -23,7 +23,7 @@ export default class StatementForMetavariableVerifier extends Verifier {
|
|
|
23
23
|
|
|
24
24
|
nonTerminalNodeB = metaArgumentChildNodeB; ///
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
27
27
|
} else {
|
|
28
28
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
29
29
|
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(),
|
|
@@ -33,10 +33,10 @@ export default class StatementForMetavariableVerifier extends Verifier {
|
|
|
33
33
|
if (nonTerminalNodeARuleNameMetastatementRuleName && nonTerminalNodeBRuleNameStatementRuleName) {
|
|
34
34
|
const metastatementNodeA = nonTerminalNodeA, ///
|
|
35
35
|
statementNodeB = nonTerminalNodeB, ///
|
|
36
|
-
|
|
36
|
+
statementNodeVerified = this.verifyStatementNode(metastatementNodeA, statementNodeB, substitutions);
|
|
37
37
|
|
|
38
|
-
if (
|
|
39
|
-
|
|
38
|
+
if (statementNodeVerified) {
|
|
39
|
+
nonTerminalNodeVerified = true; ///
|
|
40
40
|
} else {
|
|
41
41
|
const nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(),
|
|
42
42
|
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
@@ -44,32 +44,32 @@ export default class StatementForMetavariableVerifier extends Verifier {
|
|
|
44
44
|
nodesB = nonTerminalNodeBChildNodes, ///
|
|
45
45
|
nodesMatch = this.verifyNodes(nodesA, nodesB, substitutions);
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
nonTerminalNodeVerified = nodesMatch; ///
|
|
48
48
|
}
|
|
49
49
|
} else if (nonTerminalNodeBRuleName === nonTerminalNodeARuleName) {
|
|
50
|
-
|
|
50
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
return
|
|
54
|
+
return nonTerminalNodeVerified;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
verifyStatementNode(metastatementNodeA, statementNodeB, substitutions) {
|
|
58
|
-
let
|
|
58
|
+
let statementNodeVerified = false;
|
|
59
59
|
|
|
60
60
|
const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
|
|
61
61
|
|
|
62
62
|
if (metavariableNodeA !== null) {
|
|
63
|
-
const
|
|
63
|
+
const metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, statementNodeB, substitutions);
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
statementNodeVerified = metavariableNodeVerified; ///
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
return
|
|
68
|
+
return statementNodeVerified;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
verifyMetavariableNode(metavariableNodeA, statementNodeB, substitutions) {
|
|
72
|
-
let
|
|
72
|
+
let metavariableNodeVerified;
|
|
73
73
|
|
|
74
74
|
const metavariableNameA = metavariableNameFromMetavariableNode(metavariableNodeA),
|
|
75
75
|
substitution = substitutions.find((substitution) => {
|
|
@@ -84,7 +84,7 @@ export default class StatementForMetavariableVerifier extends Verifier {
|
|
|
84
84
|
const statementNode = statementNodeB, ///
|
|
85
85
|
statementNodeMatches = substitution.matchStatementNode(statementNode);
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
metavariableNodeVerified = statementNodeMatches; ///
|
|
88
88
|
} else {
|
|
89
89
|
const { createSubstitutions } = this.constructor;
|
|
90
90
|
|
|
@@ -97,9 +97,9 @@ export default class StatementForMetavariableVerifier extends Verifier {
|
|
|
97
97
|
substitutions.push(substitution);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
metavariableNodeVerified = true;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
return
|
|
103
|
+
return metavariableNodeVerified;
|
|
104
104
|
}
|
|
105
105
|
}
|
|
@@ -11,7 +11,7 @@ const variableNodeQuery = nodeQuery('/term/variable!');
|
|
|
11
11
|
|
|
12
12
|
export default class TermForVariableVerifier extends Verifier {
|
|
13
13
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions) {
|
|
14
|
-
let
|
|
14
|
+
let nonTerminalNodeVerified = false;
|
|
15
15
|
|
|
16
16
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(),
|
|
17
17
|
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
@@ -23,37 +23,37 @@ export default class TermForVariableVerifier extends Verifier {
|
|
|
23
23
|
if (nonTerminalNodeARuleNameTermRuleName && nonTerminalNodeBRuleNameTermRuleName) {
|
|
24
24
|
const termNodeA = nonTerminalNodeA, ///
|
|
25
25
|
termNodeB = nonTerminalNodeB, ///
|
|
26
|
-
|
|
26
|
+
termNodeVerified = this.verifyTermNode(termNodeA, termNodeB, substitutions);
|
|
27
27
|
|
|
28
|
-
if (
|
|
29
|
-
|
|
28
|
+
if (termNodeVerified) {
|
|
29
|
+
nonTerminalNodeVerified = true; ///
|
|
30
30
|
} else {
|
|
31
|
-
|
|
31
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
32
32
|
}
|
|
33
33
|
} else {
|
|
34
|
-
|
|
34
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
return
|
|
38
|
+
return nonTerminalNodeVerified;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
verifyTermNode(termNodeA, termNodeB, substitutions) {
|
|
42
|
-
let
|
|
42
|
+
let termNodeVerified = false;
|
|
43
43
|
|
|
44
44
|
const variableNodeA = variableNodeQuery(termNodeA);
|
|
45
45
|
|
|
46
46
|
if (variableNodeA !== null) {
|
|
47
|
-
const
|
|
47
|
+
const variableVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions);
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
termNodeVerified = variableVerified; ///
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
return
|
|
52
|
+
return termNodeVerified;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
verifyVariableNode(variableNodeB, termNodeB, substitutions) {
|
|
56
|
-
let
|
|
56
|
+
let variableVerified;
|
|
57
57
|
|
|
58
58
|
const variableNameA = variableNameFromVariableNode(variableNodeB),
|
|
59
59
|
substitution = substitutions.find((substitution) => {
|
|
@@ -66,9 +66,9 @@ export default class TermForVariableVerifier extends Verifier {
|
|
|
66
66
|
|
|
67
67
|
if (substitution !== null) {
|
|
68
68
|
const termNode = termNodeB, ///
|
|
69
|
-
|
|
69
|
+
substitutionNodesVerified = substitution.matchTermNode(termNode);
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
variableVerified = substitutionNodesVerified; ///
|
|
72
72
|
} else {
|
|
73
73
|
const { createSubstitutions } = this.constructor;
|
|
74
74
|
|
|
@@ -81,9 +81,9 @@ export default class TermForVariableVerifier extends Verifier {
|
|
|
81
81
|
substitutions.push(substitution);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
variableVerified = true;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
return
|
|
87
|
+
return variableVerified;
|
|
88
88
|
}
|
|
89
89
|
}
|
package/src/verifier.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
export default class Verifier {
|
|
4
|
-
verifyNode(nodeA, nodeB,
|
|
5
|
-
let
|
|
4
|
+
verifyNode(nodeA, nodeB, ...remainingArguments) {
|
|
5
|
+
let nodeVerified = false;
|
|
6
6
|
|
|
7
7
|
const nodeATerminalNode = nodeA.isTerminalNode(),
|
|
8
8
|
nodeBTerminalNode = nodeB.isTerminalNode();
|
|
@@ -11,22 +11,22 @@ export default class Verifier {
|
|
|
11
11
|
if (nodeATerminalNode) {
|
|
12
12
|
const terminalNodeA = nodeA, ///
|
|
13
13
|
terminalNodeB = nodeB, ///
|
|
14
|
-
|
|
14
|
+
terminalNodeVerified = this.verifyTerminalNode(terminalNodeA, terminalNodeB);
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
nodeVerified = terminalNodeVerified; ///
|
|
17
17
|
} else {
|
|
18
18
|
const nonTerminalNodeA = nodeA, ///
|
|
19
19
|
nonTerminalNodeB = nodeB, ///
|
|
20
|
-
|
|
20
|
+
nonTerminalNodeVerified = this.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, ...remainingArguments);
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
nodeVerified = nonTerminalNodeVerified; ///
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
return
|
|
26
|
+
return nodeVerified;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
verifyNodes(nodesA, nodesB,
|
|
29
|
+
verifyNodes(nodesA, nodesB, ...remainingArguments) {
|
|
30
30
|
let nodesVerify = false;
|
|
31
31
|
|
|
32
32
|
const nodesALength = nodesA.length,
|
|
@@ -35,9 +35,9 @@ export default class Verifier {
|
|
|
35
35
|
if (nodesALength === nodesBLength) {
|
|
36
36
|
nodesVerify = nodesA.every((nodeA, index) => {
|
|
37
37
|
const nodeB = nodesB[index],
|
|
38
|
-
|
|
38
|
+
nodeVerified = this.verifyNode(nodeA, nodeB, ...remainingArguments);
|
|
39
39
|
|
|
40
|
-
if (
|
|
40
|
+
if (nodeVerified) {
|
|
41
41
|
return true;
|
|
42
42
|
}
|
|
43
43
|
})
|
|
@@ -46,15 +46,15 @@ export default class Verifier {
|
|
|
46
46
|
return nodesVerify;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
verifyTerminalNode(terminalNodeA, terminalNodeB,
|
|
49
|
+
verifyTerminalNode(terminalNodeA, terminalNodeB, ...remainingArguments) {
|
|
50
50
|
const matches = terminalNodeA.match(terminalNodeB),
|
|
51
|
-
|
|
51
|
+
terminalNodeVerified = matches; ///
|
|
52
52
|
|
|
53
|
-
return
|
|
53
|
+
return terminalNodeVerified;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
57
|
-
let
|
|
56
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, ...remainingArguments) {
|
|
57
|
+
let nonTerminalNodeVerified = false;
|
|
58
58
|
|
|
59
59
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
|
|
60
60
|
nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(); ///
|
|
@@ -64,11 +64,11 @@ export default class Verifier {
|
|
|
64
64
|
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
65
65
|
nodesA = nonTerminalNodeAChildNodes, ///
|
|
66
66
|
nodesB = nonTerminalNodeBChildNodes, ///
|
|
67
|
-
nodesVerify = this.verifyNodes(nodesA, nodesB,
|
|
67
|
+
nodesVerify = this.verifyNodes(nodesA, nodesB, ...remainingArguments);
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
nonTerminalNodeVerified = nodesVerify; ///
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
return
|
|
72
|
+
return nonTerminalNodeVerified;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
@@ -31,7 +31,7 @@ export default function verifyTypeAssertion(typeAssertionNode, assignments, deri
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
if (!typeAssertionVerified) {
|
|
34
|
-
const termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, context);
|
|
34
|
+
const termTypeAssertionVerified = verifyTermTypeAssertion(typeAssertionNode, derived, context);
|
|
35
35
|
|
|
36
36
|
typeAssertionVerified = termTypeAssertionVerified; ///
|
|
37
37
|
}
|
|
@@ -66,13 +66,13 @@ function verifyVariableTypeAssertion(typeAssertionNode, assignments, derived, co
|
|
|
66
66
|
variableType = variable.getType();
|
|
67
67
|
|
|
68
68
|
if (derived) {
|
|
69
|
-
const
|
|
69
|
+
const assertedTypeEqualToOrSuperTypeOfVariableType = assertedType.isEqualToOrSuperTypeOf(variableType);
|
|
70
70
|
|
|
71
|
-
if (!
|
|
71
|
+
if (!assertedTypeEqualToOrSuperTypeOfVariableType) {
|
|
72
72
|
const assertedTypeName = assertedType.getName(),
|
|
73
73
|
variableTypeName = variableType.getName();
|
|
74
74
|
|
|
75
|
-
context.error(`The '${
|
|
75
|
+
context.error(`The '${assertedTypeName}' asserted type is not equal to or a super-type of the '${variableName}' variable's '${variableTypeName}' type.`, typeAssertionNode);
|
|
76
76
|
} else {
|
|
77
77
|
variableTypeAssertionVerified = true;
|
|
78
78
|
}
|
|
@@ -101,7 +101,7 @@ function verifyVariableTypeAssertion(typeAssertionNode, assignments, derived, co
|
|
|
101
101
|
return variableTypeAssertionVerified;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
function verifyTermTypeAssertion(typeAssertionNode, context) {
|
|
104
|
+
function verifyTermTypeAssertion(typeAssertionNode, derived, context) {
|
|
105
105
|
let termTypeAssertionVerified = false;
|
|
106
106
|
|
|
107
107
|
const types = [],
|
|
@@ -118,17 +118,32 @@ function verifyTermTypeAssertion(typeAssertionNode, context) {
|
|
|
118
118
|
context.error(`The '${assertedTypeName}' asserted type is not present.`, typeAssertionNode);
|
|
119
119
|
} else {
|
|
120
120
|
const firstType = first(types),
|
|
121
|
-
termType = firstType
|
|
122
|
-
termTypeIsEqualToAssertedType = termType.isEqualTo(assertedType);
|
|
121
|
+
termType = firstType; ///
|
|
123
122
|
|
|
124
|
-
if (
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
123
|
+
if (derived) {
|
|
124
|
+
const assertedTypeIsEqualToOrSuperTypeOfTermType = assertedType.isEqualToOrSuperTypeOf(termType);
|
|
125
|
+
|
|
126
|
+
if (!assertedTypeIsEqualToOrSuperTypeOfTermType) {
|
|
127
|
+
const termString = context.nodeAsString(termNode),
|
|
128
|
+
termTypeName = termType.getName(),
|
|
129
|
+
assertedTypeName = assertedType.getName();
|
|
128
130
|
|
|
129
|
-
|
|
131
|
+
context.error(`The '${assertedTypeName}' asserted type is not equal to or a super-type of the '${termString}' term's '${termTypeName}' type.`, typeAssertionNode);
|
|
132
|
+
} else {
|
|
133
|
+
termTypeAssertionVerified = true;
|
|
134
|
+
}
|
|
130
135
|
} else {
|
|
131
|
-
|
|
136
|
+
const assertedTypeIsEqualToOrSubTypeOfTermType = assertedType.isEqualToOrSubTypeOf(termType);
|
|
137
|
+
|
|
138
|
+
if (!assertedTypeIsEqualToOrSubTypeOfTermType) {
|
|
139
|
+
const termString = context.nodeAsString(termNode),
|
|
140
|
+
termTypeName = termType.getName(),
|
|
141
|
+
assertedTypeName = assertedType.getName();
|
|
142
|
+
|
|
143
|
+
context.error(`The '${assertedTypeName}' asserted type is not equal to or a sub-type of the '${termString}' term's '${termTypeName}' type.`, typeAssertionNode);
|
|
144
|
+
} else {
|
|
145
|
+
termTypeAssertionVerified = true;
|
|
146
|
+
}
|
|
132
147
|
}
|
|
133
148
|
}
|
|
134
149
|
}
|