occam-verify-cli 0.0.526 → 0.0.529
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/README.md +4 -0
- package/bin/abbreviations.js +5 -1
- package/bin/action/help.js +4 -0
- package/bin/action/verify.js +35 -13
- package/bin/actions.js +11 -6
- package/bin/defaults.js +4 -0
- package/bin/options.js +4 -0
- package/bin/utilities/releaseContext.js +5 -7
- package/lib/assertion/type.js +10 -40
- package/lib/axiom.js +8 -8
- package/lib/axiomLemmaTheoremConjecture.js +190 -0
- package/lib/combinator.js +4 -3
- package/lib/conclusion.js +8 -7
- package/lib/conjecture.js +141 -0
- package/lib/consequence.js +6 -5
- package/lib/constants.js +11 -27
- package/lib/constructor.js +5 -4
- package/lib/context/file.js +88 -73
- package/lib/context/metaproof.js +51 -20
- package/lib/context/proof.js +48 -114
- package/lib/context/release/directory.js +25 -6
- package/lib/context/release/file.js +38 -25
- package/lib/context/release.js +32 -51
- package/lib/equality.js +79 -51
- package/lib/index.js +4 -16
- package/lib/kinds.js +5 -1
- package/lib/label.js +4 -3
- package/lib/lemma.js +8 -8
- package/lib/log.js +146 -0
- package/lib/matcher.js +25 -75
- package/lib/metaTypeNames.js +13 -0
- package/lib/mixins/file.js +62 -2
- package/lib/mixins/logging.js +13 -13
- package/lib/node/metastatement/bracketed.js +16 -0
- package/lib/node/statement/bracketed.js +16 -0
- package/lib/node/statement/combinator/bracketed.js +17 -0
- package/lib/node/statement/combinator/equality.js +17 -0
- package/lib/node/statement/equality.js +16 -0
- package/lib/ocmbinator/bracketed.js +3 -4
- package/lib/ocmbinator/equality.js +3 -4
- package/lib/premise.js +13 -12
- package/lib/rule.js +5 -5
- package/lib/ruleNames.js +1 -9
- package/lib/step/metaproof.js +28 -25
- package/lib/step/proof.js +23 -1
- package/lib/substitution/metastatementForMetavariable.js +16 -13
- package/lib/substitution/statementForMetavariable.js +16 -13
- package/lib/substitution/termForVariable.js +76 -0
- package/lib/supposition.js +7 -6
- package/lib/theorem.js +8 -8
- package/lib/type.js +12 -5
- package/lib/utilities/metaproof.js +60 -0
- package/lib/utilities/node.js +56 -0
- package/lib/utilities/proof.js +60 -0
- package/lib/utilities/releaseContext.js +24 -12
- package/lib/utilities/string.js +3 -38
- package/lib/variable.js +4 -38
- package/lib/{matcher → verifier}/metastatementForMetavariable/conclusion.js +12 -12
- package/lib/{matcher → verifier}/metastatementForMetavariable/premise.js +12 -12
- package/lib/verifier/metastatementForMetavariable.js +198 -0
- package/lib/{matcher → verifier}/statementForMetavariable/conclusion.js +12 -12
- package/lib/{matcher → verifier}/statementForMetavariable/premise.js +12 -12
- package/lib/verifier/statementForMetavariable.js +203 -0
- package/lib/{matcher/statementForVariable → verifier/termForVariable}/consequence.js +13 -13
- package/lib/{matcher/statementForVariable → verifier/termForVariable}/supposition.js +13 -13
- package/lib/verifier/termForVariable.js +198 -0
- package/lib/verifier.js +92 -0
- package/lib/verify/assertion/type.js +62 -41
- package/lib/verify/axiom.js +3 -6
- package/lib/verify/conclusion.js +2 -4
- package/lib/verify/conjecture.js +54 -0
- package/lib/verify/consequence.js +2 -4
- package/lib/verify/declaration/combinator.js +1 -3
- package/lib/verify/declaration/constructor.js +1 -3
- package/lib/verify/declaration/topLevel.js +7 -5
- package/lib/verify/declaration/type.js +1 -3
- package/lib/verify/declaration/variable.js +1 -3
- package/lib/verify/derivation.js +1 -5
- package/lib/verify/label.js +1 -3
- package/lib/verify/lemma.js +3 -6
- package/lib/verify/metastatement/qualified.js +2 -5
- package/lib/verify/metastatement/unqualified.js +2 -5
- package/lib/verify/metastatement.js +1 -3
- package/lib/verify/premise.js +2 -4
- package/lib/verify/proof.js +3 -5
- package/lib/verify/rule.js +3 -6
- package/lib/verify/ruleDerivation.js +1 -5
- package/lib/verify/ruleProof.js +3 -5
- package/lib/verify/statement/qualified.js +40 -13
- package/lib/verify/statement/unqualified.js +2 -5
- package/lib/verify/statement.js +56 -62
- package/lib/verify/statementAsCombinator.js +4 -6
- package/lib/verify/supposition.js +2 -4
- package/lib/verify/term.js +4 -10
- package/lib/verify/termAsConstructor.js +6 -9
- package/lib/verify/theorem.js +3 -6
- package/lib/verify/type.js +5 -9
- package/lib/verify/variable.js +5 -9
- package/package.json +1 -1
- package/src/assertion/type.js +7 -32
- package/src/axiom.js +4 -4
- package/src/{axiomLemmaTheorem.js → axiomLemmaTheoremConjecture.js} +9 -9
- package/src/combinator.js +3 -3
- package/src/conclusion.js +7 -7
- package/src/conjecture.js +13 -0
- package/src/consequence.js +5 -5
- package/src/constants.js +3 -7
- package/src/constructor.js +4 -4
- package/src/context/file.js +85 -65
- package/src/context/metaproof.js +55 -15
- package/src/context/proof.js +53 -50
- package/src/context/release/directory.js +31 -7
- package/src/context/release/file.js +47 -31
- package/src/context/release.js +23 -32
- package/src/equality.js +108 -61
- package/src/index.js +2 -4
- package/src/kinds.js +1 -0
- package/src/label.js +3 -3
- package/src/lemma.js +4 -4
- package/src/log.js +116 -0
- package/src/matcher.js +32 -24
- package/src/metaTypeNames.js +3 -0
- package/src/mixins/file.js +46 -1
- package/src/mixins/logging.js +6 -6
- package/src/node/metastatement/bracketed.js +9 -0
- package/src/node/statement/bracketed.js +9 -0
- package/src/node/statement/combinator/bracketed.js +10 -0
- package/src/node/statement/combinator/equality.js +11 -0
- package/src/node/statement/equality.js +10 -0
- package/src/ocmbinator/bracketed.js +2 -5
- package/src/ocmbinator/equality.js +2 -5
- package/src/premise.js +13 -13
- package/src/rule.js +4 -4
- package/src/ruleNames.js +0 -2
- package/src/step/metaproof.js +32 -29
- package/src/step/proof.js +28 -0
- package/src/substitution/metastatementForMetavariable.js +10 -15
- package/src/substitution/statementForMetavariable.js +11 -16
- package/src/substitution/termForVariable.js +36 -0
- package/src/supposition.js +6 -6
- package/src/theorem.js +4 -4
- package/src/type.js +17 -7
- package/src/utilities/metaproof.js +62 -0
- package/src/utilities/node.js +73 -0
- package/src/utilities/proof.js +62 -0
- package/src/utilities/releaseContext.js +30 -12
- package/src/utilities/string.js +4 -53
- package/src/variable.js +4 -37
- package/src/verifier/metastatementForMetavariable/conclusion.js +9 -0
- package/src/verifier/metastatementForMetavariable/premise.js +9 -0
- package/src/verifier/metastatementForMetavariable.js +89 -0
- package/src/verifier/statementForMetavariable/conclusion.js +9 -0
- package/src/verifier/statementForMetavariable/premise.js +9 -0
- package/src/verifier/statementForMetavariable.js +105 -0
- package/src/verifier/termForVariable/consequence.js +9 -0
- package/src/verifier/termForVariable/supposition.js +9 -0
- package/src/verifier/termForVariable.js +89 -0
- package/src/verifier.js +74 -0
- package/src/verify/assertion/type.js +74 -74
- package/src/verify/axiom.js +2 -9
- package/src/verify/conclusion.js +1 -7
- package/src/verify/conjecture.js +67 -0
- package/src/verify/consequence.js +1 -7
- package/src/verify/declaration/combinator.js +0 -6
- package/src/verify/declaration/constructor.js +0 -6
- package/src/verify/declaration/topLevel.js +7 -6
- package/src/verify/declaration/type.js +0 -6
- package/src/verify/declaration/variable.js +0 -6
- package/src/verify/derivation.js +0 -12
- package/src/verify/label.js +0 -6
- package/src/verify/lemma.js +4 -11
- package/src/verify/metastatement/qualified.js +1 -8
- package/src/verify/metastatement/unqualified.js +1 -8
- package/src/verify/metastatement.js +0 -6
- package/src/verify/premise.js +1 -7
- package/src/verify/proof.js +1 -7
- package/src/verify/rule.js +2 -9
- package/src/verify/ruleDerivation.js +0 -12
- package/src/verify/ruleProof.js +1 -7
- package/src/verify/statement/qualified.js +54 -20
- package/src/verify/statement/unqualified.js +1 -8
- package/src/verify/statement.js +65 -95
- package/src/verify/statementAsCombinator.js +3 -9
- package/src/verify/supposition.js +1 -7
- package/src/verify/term.js +3 -21
- package/src/verify/termAsConstructor.js +5 -13
- package/src/verify/theorem.js +2 -9
- package/src/verify/type.js +4 -13
- package/src/verify/variable.js +4 -13
- package/bin/callbacks.js +0 -48
- package/lib/axiomLemmaTheorem.js +0 -190
- package/lib/callbacks.js +0 -75
- package/lib/context/release/combinator.js +0 -64
- package/lib/jsonTypes.js +0 -30
- package/lib/matcher/metastatementForMetavariable.js +0 -201
- package/lib/matcher/statementForMetavariable.js +0 -201
- package/lib/matcher/statementForVariable.js +0 -201
- package/lib/mixins/callbacks.js +0 -27
- package/lib/substitution/statementForVariable.js +0 -86
- package/lib/utilities/json.js +0 -187
- package/lib/utilities/substitution.js +0 -61
- package/lib/utilities/version.js +0 -32
- package/lib/versionChanges.js +0 -34
- package/src/callbacks.js +0 -39
- package/src/context/release/combinator.js +0 -39
- package/src/jsonTypes.js +0 -6
- package/src/matcher/metastatementForMetavariable/conclusion.js +0 -9
- package/src/matcher/metastatementForMetavariable/premise.js +0 -9
- package/src/matcher/metastatementForMetavariable.js +0 -99
- package/src/matcher/statementForMetavariable/conclusion.js +0 -9
- package/src/matcher/statementForMetavariable/premise.js +0 -9
- package/src/matcher/statementForMetavariable.js +0 -99
- package/src/matcher/statementForVariable/consequence.js +0 -9
- package/src/matcher/statementForVariable/supposition.js +0 -9
- package/src/matcher/statementForVariable.js +0 -99
- package/src/mixins/callbacks.js +0 -15
- package/src/substitution/statementForVariable.js +0 -64
- package/src/utilities/json.js +0 -264
- package/src/utilities/substitution.js +0 -79
- package/src/utilities/version.js +0 -30
- package/src/versionChanges.js +0 -11
package/src/equality.js
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import matcher from "./matcher";
|
|
4
|
+
import verifyTerm from "./verify/term";
|
|
5
|
+
import equalityCombinator from "./ocmbinator/equality";
|
|
6
|
+
import equalityStatementNode from "./node/statement/equality";
|
|
7
|
+
|
|
3
8
|
import { nodeQuery } from "./utilities/query";
|
|
9
|
+
import { first, second } from "./utilities/array";
|
|
10
|
+
import { EQUALITY_DEPTH } from "./constants";
|
|
4
11
|
import { TERM_RULE_NAME } from "./ruleNames";
|
|
12
|
+
import { verifyStatementAgainstCombinator } from "./verify/statement";
|
|
5
13
|
|
|
6
14
|
const leftTermNodeQuery = nodeQuery("/statement/argument[0]/term!"),
|
|
7
15
|
rightTermNodeQuery = nodeQuery("/statement/argument[1]/term!");
|
|
@@ -20,30 +28,7 @@ export default class Equality {
|
|
|
20
28
|
return this.rightTermNode;
|
|
21
29
|
}
|
|
22
30
|
|
|
23
|
-
|
|
24
|
-
let matches = false;
|
|
25
|
-
|
|
26
|
-
const leftTermNode = equality.getLeftTermNode(),
|
|
27
|
-
rightTermNode = equality.getRightTermNode();
|
|
28
|
-
|
|
29
|
-
if (!matches) {
|
|
30
|
-
const reversed = false,
|
|
31
|
-
leftTermNodeAndRightTermNodeMatch = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities);
|
|
32
|
-
|
|
33
|
-
matches = leftTermNodeAndRightTermNodeMatch; ///
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (!matches) {
|
|
37
|
-
const reversed = true,
|
|
38
|
-
leftTermNodeAndRightTermNodeMatch = this.matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities);
|
|
39
|
-
|
|
40
|
-
matches = leftTermNodeAndRightTermNodeMatch; ///
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return matches;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
matchLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, reversed, equalities) {
|
|
31
|
+
matchTermNodes(leftTermNode, rightTermNode, reversed, equalities, context) {
|
|
47
32
|
let leftTermNodeAndRightTermNodeMatch = true;
|
|
48
33
|
|
|
49
34
|
if (leftTermNodeAndRightTermNodeMatch) {
|
|
@@ -51,7 +36,7 @@ export default class Equality {
|
|
|
51
36
|
this.rightTermNode :
|
|
52
37
|
this.leftTermNode, ///
|
|
53
38
|
rightNonTerminalNode = leftTermNode, ///
|
|
54
|
-
nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities);
|
|
39
|
+
nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
|
|
55
40
|
|
|
56
41
|
leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
|
|
57
42
|
}
|
|
@@ -61,7 +46,7 @@ export default class Equality {
|
|
|
61
46
|
this.leftTermNode :
|
|
62
47
|
this.rightTermNode, ///
|
|
63
48
|
rightNonTerminalNode = rightTermNode, ///
|
|
64
|
-
nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities);
|
|
49
|
+
nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context);
|
|
65
50
|
|
|
66
51
|
leftTermNodeAndRightTermNodeMatch = nonTerminalNodeEquates; ///
|
|
67
52
|
}
|
|
@@ -69,10 +54,35 @@ export default class Equality {
|
|
|
69
54
|
return leftTermNodeAndRightTermNodeMatch;
|
|
70
55
|
}
|
|
71
56
|
|
|
72
|
-
|
|
57
|
+
match(equality, equalities, context) {
|
|
58
|
+
let matches = false;
|
|
59
|
+
|
|
60
|
+
const leftTermNode = equality.getLeftTermNode(),
|
|
61
|
+
rightTermNode = equality.getRightTermNode();
|
|
62
|
+
|
|
63
|
+
equalities = filterEqualities(equalities, equality); ///
|
|
64
|
+
|
|
65
|
+
if (!matches) {
|
|
66
|
+
const reversed = false,
|
|
67
|
+
leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, equalities, context);
|
|
68
|
+
|
|
69
|
+
matches = leftTermNodeAndRightTermNodeMatch; ///
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (!matches) {
|
|
73
|
+
const reversed = true,
|
|
74
|
+
leftTermNodeAndRightTermNodeMatch = this.matchTermNodes(leftTermNode, rightTermNode, reversed, equalities, context);
|
|
75
|
+
|
|
76
|
+
matches = leftTermNodeAndRightTermNodeMatch; ///
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return matches;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
equate(equalities, context) {
|
|
73
83
|
const leftNonTerminalNode = this.leftTermNode, ///
|
|
74
84
|
rightNonTerminalNode = this.rightTermNode, ///
|
|
75
|
-
nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities),
|
|
85
|
+
nonTerminalNodeEquates = equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context),
|
|
76
86
|
equates = nonTerminalNodeEquates; ///
|
|
77
87
|
|
|
78
88
|
return equates;
|
|
@@ -84,10 +94,15 @@ export default class Equality {
|
|
|
84
94
|
const statementNode = proofStep.getStatementNode();
|
|
85
95
|
|
|
86
96
|
if (statementNode !== null) {
|
|
87
|
-
const
|
|
88
|
-
|
|
97
|
+
const nodeA = statementNode, ///
|
|
98
|
+
nodeB = equalityStatementNode, ///
|
|
99
|
+
depth = EQUALITY_DEPTH,
|
|
100
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB, depth);
|
|
101
|
+
|
|
102
|
+
if (nodeMatches) {
|
|
103
|
+
const leftTermNode = leftTermNodeQuery(statementNode),
|
|
104
|
+
rightTermNode = rightTermNodeQuery(statementNode);
|
|
89
105
|
|
|
90
|
-
if ((leftTermNode !== null) && (rightTermNode !== null)) {
|
|
91
106
|
equality = new Equality(leftTermNode, rightTermNode);
|
|
92
107
|
}
|
|
93
108
|
}
|
|
@@ -95,22 +110,24 @@ export default class Equality {
|
|
|
95
110
|
return equality;
|
|
96
111
|
}
|
|
97
112
|
|
|
98
|
-
static fromStatementNode(statementNode) {
|
|
99
|
-
|
|
100
|
-
rightTermNode = rightTermNodeQuery(statementNode),
|
|
101
|
-
equality = new Equality(leftTermNode, rightTermNode);
|
|
113
|
+
static fromStatementNode(statementNode, context) {
|
|
114
|
+
let equality = null;
|
|
102
115
|
|
|
103
|
-
|
|
104
|
-
|
|
116
|
+
const combinator = equalityCombinator, ///
|
|
117
|
+
statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context);
|
|
105
118
|
|
|
106
|
-
|
|
107
|
-
|
|
119
|
+
if (statementVerifiedAgainstCombinator) {
|
|
120
|
+
const leftTermNode = leftTermNodeQuery(statementNode),
|
|
121
|
+
rightTermNode = rightTermNodeQuery(statementNode);
|
|
122
|
+
|
|
123
|
+
equality = new Equality(leftTermNode, rightTermNode);
|
|
124
|
+
}
|
|
108
125
|
|
|
109
126
|
return equality;
|
|
110
127
|
}
|
|
111
128
|
}
|
|
112
129
|
|
|
113
|
-
function equateNode(nodeA, nodeB, equalities) {
|
|
130
|
+
function equateNode(nodeA, nodeB, equalities, context) {
|
|
114
131
|
let nodeEquates = false;
|
|
115
132
|
|
|
116
133
|
const nodeATerminalNode = nodeA.isTerminalNode(),
|
|
@@ -120,13 +137,13 @@ function equateNode(nodeA, nodeB, equalities) {
|
|
|
120
137
|
if (nodeATerminalNode) {
|
|
121
138
|
const terminalNodeA = nodeA, ///
|
|
122
139
|
terminalNodeB = nodeB, ///
|
|
123
|
-
terminalNodeEquates = equateTerminalNode(terminalNodeA, terminalNodeB, equalities);
|
|
140
|
+
terminalNodeEquates = equateTerminalNode(terminalNodeA, terminalNodeB, equalities, context);
|
|
124
141
|
|
|
125
142
|
nodeEquates = terminalNodeEquates; ///
|
|
126
143
|
} else {
|
|
127
144
|
const nonTerminalNodeA = nodeA, ///
|
|
128
145
|
nonTerminalNodeB = nodeB, ///
|
|
129
|
-
nonTerminalNodeEquates = equateNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equalities);
|
|
146
|
+
nonTerminalNodeEquates = equateNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, equalities, context);
|
|
130
147
|
|
|
131
148
|
nodeEquates = nonTerminalNodeEquates; ///
|
|
132
149
|
}
|
|
@@ -135,7 +152,7 @@ function equateNode(nodeA, nodeB, equalities) {
|
|
|
135
152
|
return nodeEquates;
|
|
136
153
|
}
|
|
137
154
|
|
|
138
|
-
function equateNodes(leftNodes, rightNodes, equalities) {
|
|
155
|
+
function equateNodes(leftNodes, rightNodes, equalities, context) {
|
|
139
156
|
let nodesEquate = false;
|
|
140
157
|
|
|
141
158
|
const leftNodesLength = leftNodes.length,
|
|
@@ -144,7 +161,7 @@ function equateNodes(leftNodes, rightNodes, equalities) {
|
|
|
144
161
|
if (leftNodesLength === rightNodesLength) {
|
|
145
162
|
nodesEquate = leftNodes.every((LeftNode, index) => {
|
|
146
163
|
const rightNode = rightNodes[index],
|
|
147
|
-
nodeEquates = equateNode(LeftNode, rightNode, equalities);
|
|
164
|
+
nodeEquates = equateNode(LeftNode, rightNode, equalities, context);
|
|
148
165
|
|
|
149
166
|
if (nodeEquates) {
|
|
150
167
|
return true;
|
|
@@ -155,14 +172,14 @@ function equateNodes(leftNodes, rightNodes, equalities) {
|
|
|
155
172
|
return nodesEquate;
|
|
156
173
|
}
|
|
157
174
|
|
|
158
|
-
function equateTerminalNode(terminalNodeA, terminalNodeB, equalities) {
|
|
175
|
+
function equateTerminalNode(terminalNodeA, terminalNodeB, equalities, context) {
|
|
159
176
|
const matches = terminalNodeA.match(terminalNodeB),
|
|
160
177
|
terminalNodeEquates = matches; ///
|
|
161
178
|
|
|
162
179
|
return terminalNodeEquates;
|
|
163
180
|
}
|
|
164
181
|
|
|
165
|
-
function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities) {
|
|
182
|
+
function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equalities, context) {
|
|
166
183
|
let nonTerminalNodeEquates = false;
|
|
167
184
|
|
|
168
185
|
const leftNonTerminalNodeRuleName = leftNonTerminalNode.getRuleName(),
|
|
@@ -175,7 +192,7 @@ function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equali
|
|
|
175
192
|
if (ruleNameTermRuleName) {
|
|
176
193
|
const leftTermNode = leftNonTerminalNode, ///
|
|
177
194
|
rightTermNode = rightNonTerminalNode, ///
|
|
178
|
-
termNodeEquates = equateTermNode(leftTermNode, rightTermNode, equalities);
|
|
195
|
+
termNodeEquates = equateTermNode(leftTermNode, rightTermNode, equalities, context);
|
|
179
196
|
|
|
180
197
|
nonTerminalNodeEquates = termNodeEquates; ///
|
|
181
198
|
}
|
|
@@ -185,7 +202,7 @@ function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equali
|
|
|
185
202
|
rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(),
|
|
186
203
|
leftNodes = leftNonTerminalNodeChildNodes, ///
|
|
187
204
|
rightNodes = rightNonTerminalNodeChildNodes, ///
|
|
188
|
-
nodesEquate = equateNodes(leftNodes, rightNodes, equalities);
|
|
205
|
+
nodesEquate = equateNodes(leftNodes, rightNodes, equalities, context);
|
|
189
206
|
|
|
190
207
|
nonTerminalNodeEquates = nodesEquate; ///
|
|
191
208
|
}
|
|
@@ -194,23 +211,24 @@ function equateNonTerminalNode(leftNonTerminalNode, rightNonTerminalNode, equali
|
|
|
194
211
|
return nonTerminalNodeEquates;
|
|
195
212
|
}
|
|
196
213
|
|
|
197
|
-
function equateTermNode(leftTermNode, rightTermNode, equalities) {
|
|
198
|
-
|
|
199
|
-
equalityA = equality, ///
|
|
200
|
-
equalityMatches = equalities.some((equality) => { ///
|
|
201
|
-
let equalitiesB = equalities; ///
|
|
214
|
+
function equateTermNode(leftTermNode, rightTermNode, equalities, context) {
|
|
215
|
+
let termNodeEquates = false;
|
|
202
216
|
|
|
203
|
-
|
|
217
|
+
const equality = equalityFromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, context);
|
|
204
218
|
|
|
205
|
-
|
|
219
|
+
if (equality !== null) {
|
|
220
|
+
const equalityA = equality, ///
|
|
221
|
+
equalitiesB = equalities, ///
|
|
222
|
+
equalityMatches = equalitiesB.some((equalityB) => { ///
|
|
223
|
+
const equalityAMatchesEqualityB = equalityA.match(equalityB, equalitiesB, context);
|
|
206
224
|
|
|
207
|
-
|
|
225
|
+
if (equalityAMatchesEqualityB) {
|
|
226
|
+
return true;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
208
229
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
}),
|
|
213
|
-
termNodeEquates = equalityMatches; ///
|
|
230
|
+
termNodeEquates = equalityMatches; ///
|
|
231
|
+
}
|
|
214
232
|
|
|
215
233
|
return termNodeEquates;
|
|
216
234
|
}
|
|
@@ -228,3 +246,32 @@ function filterEqualities(equalities, equality) {
|
|
|
228
246
|
|
|
229
247
|
return equalities;
|
|
230
248
|
}
|
|
249
|
+
|
|
250
|
+
function equalityFromLeftTermNodeAndRightTermNode(leftTermNode, rightTermNode, context) {
|
|
251
|
+
let equality = null;
|
|
252
|
+
|
|
253
|
+
const types = [],
|
|
254
|
+
leftTermVerified = verifyTerm(leftTermNode, types, context),
|
|
255
|
+
rightTermVerified = verifyTerm(rightTermNode, types, context);
|
|
256
|
+
|
|
257
|
+
if (leftTermVerified && rightTermVerified) {
|
|
258
|
+
const firstType = first(types),
|
|
259
|
+
secondType = second(types),
|
|
260
|
+
leftTermType = firstType, ///
|
|
261
|
+
rightTermType = secondType, ///
|
|
262
|
+
leftTermTypeEqualToRightTermType = leftTermType.isEqualTo(rightTermType);
|
|
263
|
+
|
|
264
|
+
if (leftTermTypeEqualToRightTermType) {
|
|
265
|
+
equality = new Equality(leftTermNode, rightTermNode);
|
|
266
|
+
} else {
|
|
267
|
+
const leftTermString = context.nodeAsString(leftTermNode),
|
|
268
|
+
rightTermString = context.nodeAsString(rightTermNode),
|
|
269
|
+
leftTermTypeName = leftTermType.getName(),
|
|
270
|
+
rightTermTypeName = rightTermType.getName();
|
|
271
|
+
|
|
272
|
+
context.error(`The left '${leftTermString}' term's '${leftTermTypeName}' type is not equal to the right '${rightTermString}' term's '${rightTermTypeName}' type.'`, leftTermNode);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return equality;
|
|
277
|
+
}
|
package/src/index.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export { default as
|
|
3
|
+
export { default as Log } from "./log";
|
|
4
|
+
|
|
4
5
|
export { default as verifyRelease } from "./verify/release";
|
|
5
6
|
export { default as ReleaseContext } from "./context/release";
|
|
6
|
-
export { default as versionChanges } from "./versionChanges";
|
|
7
7
|
export { default as FileReleaseContext } from "./context/release/file";
|
|
8
8
|
export { default as DirectoryReleaseContext } from "./context/release/directory";
|
|
9
9
|
|
|
10
|
-
export { default as jsonUtilities } from "./utilities/json";
|
|
11
|
-
export { default as versionUtilities } from "./utilities/version";
|
|
12
10
|
export { default as customGrammarUtilities } from "./utilities/customGrammar";
|
|
13
11
|
export { default as releaseContextUtilities } from "./utilities/releaseContext";
|
package/src/kinds.js
CHANGED
|
@@ -5,5 +5,6 @@ export const RULE_KIND = "rule";
|
|
|
5
5
|
export const AXIOM_KIND = "axiom";
|
|
6
6
|
export const LEMMA_KIND = "lemma";
|
|
7
7
|
export const THEOREM_KIND = "theorem";
|
|
8
|
+
export const CONJECTURE_KIND = "conjecture";
|
|
8
9
|
export const COMBINATOR_KIND = "combinator";
|
|
9
10
|
export const CONSTRUCTOR_KIND = "constructor";
|
package/src/label.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { nodeAsString } from "./utilities/string";
|
|
4
4
|
import { labelNameFromLabelNode } from "./utilities/query";
|
|
5
|
-
import { labelNodeFromLabelString } from "./utilities/
|
|
5
|
+
import { labelNodeFromLabelString } from "./utilities/node";
|
|
6
6
|
|
|
7
7
|
export default class Label {
|
|
8
8
|
constructor(node) {
|
|
@@ -34,9 +34,9 @@ export default class Label {
|
|
|
34
34
|
return json;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
static fromJSON(json,
|
|
37
|
+
static fromJSON(json, lexer, parser) {
|
|
38
38
|
const labelString = json, ///
|
|
39
|
-
labelNode = labelNodeFromLabelString(labelString,
|
|
39
|
+
labelNode = labelNodeFromLabelString(labelString, lexer, parser),
|
|
40
40
|
node = labelNode, ///
|
|
41
41
|
label = new Label(node);
|
|
42
42
|
|
package/src/lemma.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import AxiomLemmaTheoremConjecture from "./axiomLemmaTheoremConjecture";
|
|
4
4
|
|
|
5
5
|
import { LEMMA_KIND } from "./kinds";
|
|
6
6
|
|
|
7
|
-
export default class Lemma extends
|
|
7
|
+
export default class Lemma extends AxiomLemmaTheoremConjecture {
|
|
8
8
|
static kind = LEMMA_KIND;
|
|
9
9
|
|
|
10
|
-
static fromJSON(json,
|
|
10
|
+
static fromJSON(json, lexer, parser) { return AxiomLemmaTheoremConjecture.fromJSON(Lemma, json, lexer, parser); }
|
|
11
11
|
|
|
12
|
-
static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return
|
|
12
|
+
static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheoremConjecture.fromLabelsSuppositionsAndConsequence(Lemma, labels, suppositions, consequence); }
|
|
13
13
|
}
|
package/src/log.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { levels } from "necessary";
|
|
4
|
+
|
|
5
|
+
import { leastLineIndexFromNodeAndTokens, greatestLineIndexFromNodeAndTokens } from "./utilities/tokens";
|
|
6
|
+
|
|
7
|
+
const { TRACE_LEVEL, DEBUG_LEVEL, INFO_LEVEL, WARNING_LEVEL, ERROR_LEVEL, FATAL_LEVEL } = levels;
|
|
8
|
+
|
|
9
|
+
export default class Log {
|
|
10
|
+
constructor(messages, logLevel, follow) {
|
|
11
|
+
this.messages = messages;
|
|
12
|
+
this.logLevel = logLevel;
|
|
13
|
+
this.follow = follow;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getMessages() {
|
|
17
|
+
return this.messages;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getLogLevel() {
|
|
21
|
+
return this.logLevel;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getFollow() {
|
|
25
|
+
return this.follow;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
trace(message, node, tokens, filePath) {
|
|
29
|
+
const level = TRACE_LEVEL;
|
|
30
|
+
|
|
31
|
+
this.write(level, message, node, tokens, filePath);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
debug(message, node, tokens, filePath) {
|
|
35
|
+
const level = DEBUG_LEVEL;
|
|
36
|
+
|
|
37
|
+
this.write(level, message, node, tokens, filePath);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
info(message, node, tokens, filePath) {
|
|
41
|
+
const level = INFO_LEVEL;
|
|
42
|
+
|
|
43
|
+
this.write(level, message, node, tokens, filePath);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
warning(message, node, tokens, filePath) {
|
|
47
|
+
const level = WARNING_LEVEL;
|
|
48
|
+
|
|
49
|
+
this.write(level, message, node, tokens, filePath);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
error(message, node, tokens, filePath) {
|
|
53
|
+
const level = ERROR_LEVEL;
|
|
54
|
+
|
|
55
|
+
this.write(level, message, node, tokens, filePath);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
fatal(message, node, tokens, filePath) {
|
|
59
|
+
const level = FATAL_LEVEL;
|
|
60
|
+
|
|
61
|
+
this.write(level, message, node, tokens, filePath);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
write(level, message, node, tokens, filePath) {
|
|
65
|
+
const levels = [
|
|
66
|
+
TRACE_LEVEL,
|
|
67
|
+
DEBUG_LEVEL,
|
|
68
|
+
INFO_LEVEL,
|
|
69
|
+
WARNING_LEVEL,
|
|
70
|
+
ERROR_LEVEL,
|
|
71
|
+
FATAL_LEVEL,
|
|
72
|
+
],
|
|
73
|
+
levelIndex = levels.indexOf(level),
|
|
74
|
+
logLevelIndex = levels.indexOf(this.logLevel);
|
|
75
|
+
|
|
76
|
+
if (levelIndex < logLevelIndex) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
message = formatMessage(level, message, node, tokens, filePath); ///
|
|
81
|
+
|
|
82
|
+
this.follow ?
|
|
83
|
+
console.log(message) :
|
|
84
|
+
this.messages.push(message);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static followAndLogLevel(follow, logLevel) {
|
|
88
|
+
const messages = follow ?
|
|
89
|
+
null :
|
|
90
|
+
[],
|
|
91
|
+
log = new Log(messages, logLevel, follow);
|
|
92
|
+
|
|
93
|
+
return log;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function formatMessage(level, message, node, tokens, filePath) {
|
|
98
|
+
const upperCaseLevel = level.toUpperCase();
|
|
99
|
+
|
|
100
|
+
if (node === null) {
|
|
101
|
+
message = `${upperCaseLevel}: ${message}`;
|
|
102
|
+
} else {
|
|
103
|
+
const leastLineIndex = leastLineIndexFromNodeAndTokens(node, tokens),
|
|
104
|
+
greatestLineIndex = greatestLineIndexFromNodeAndTokens(node, tokens);
|
|
105
|
+
|
|
106
|
+
if (leastLineIndex === greatestLineIndex) {
|
|
107
|
+
const lineIndex = leastLineIndex; ///
|
|
108
|
+
|
|
109
|
+
message = `${upperCaseLevel}: ${filePath} (${lineIndex}) - ${message}`;
|
|
110
|
+
} else {
|
|
111
|
+
message = `${upperCaseLevel}: ${filePath} (${leastLineIndex}-${greatestLineIndex}) - ${message}`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return message;
|
|
116
|
+
}
|
package/src/matcher.js
CHANGED
|
@@ -1,41 +1,47 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
matchNode(nodeA, nodeB,
|
|
3
|
+
class Matcher {
|
|
4
|
+
matchNode(nodeA, nodeB, depth = Infinity) {
|
|
5
5
|
let nodeMatches = false;
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
7
|
+
if (depth === 0) {
|
|
8
|
+
nodeMatches = true;
|
|
9
|
+
} else {
|
|
10
|
+
const nodeATerminalNode = nodeA.isTerminalNode(),
|
|
11
|
+
nodeBTerminalNode = nodeB.isTerminalNode();
|
|
12
|
+
|
|
13
|
+
if (nodeATerminalNode === nodeBTerminalNode) {
|
|
14
|
+
if (nodeATerminalNode) {
|
|
15
|
+
const terminalNodeA = nodeA, ///
|
|
16
|
+
terminalNodeB = nodeB, ///
|
|
17
|
+
terminalNodeMatches = this.matchTerminalNode(terminalNodeA, terminalNodeB);
|
|
18
|
+
|
|
19
|
+
nodeMatches = terminalNodeMatches; ///
|
|
20
|
+
} else {
|
|
21
|
+
const nonTerminalNodeA = nodeA, ///
|
|
22
|
+
nonTerminalNodeB = nodeB, ///
|
|
23
|
+
nonTerminalNodeMatches = this.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, depth);
|
|
24
|
+
|
|
25
|
+
nodeMatches = nonTerminalNodeMatches; ///
|
|
26
|
+
}
|
|
23
27
|
}
|
|
24
28
|
}
|
|
25
29
|
|
|
26
30
|
return nodeMatches;
|
|
27
31
|
}
|
|
28
32
|
|
|
29
|
-
matchNodes(nodesA, nodesB,
|
|
33
|
+
matchNodes(nodesA, nodesB, depth) {
|
|
30
34
|
let nodesMatch = false;
|
|
31
35
|
|
|
32
36
|
const nodesALength = nodesA.length,
|
|
33
37
|
nodesBLength = nodesB.length;
|
|
34
38
|
|
|
35
39
|
if (nodesALength === nodesBLength) {
|
|
40
|
+
depth --;
|
|
41
|
+
|
|
36
42
|
nodesMatch = nodesA.every((nodeA, index) => {
|
|
37
43
|
const nodeB = nodesB[index],
|
|
38
|
-
nodeMatches = this.matchNode(nodeA, nodeB,
|
|
44
|
+
nodeMatches = this.matchNode(nodeA, nodeB, depth);
|
|
39
45
|
|
|
40
46
|
if (nodeMatches) {
|
|
41
47
|
return true;
|
|
@@ -46,14 +52,14 @@ export default class Matcher {
|
|
|
46
52
|
return nodesMatch;
|
|
47
53
|
}
|
|
48
54
|
|
|
49
|
-
matchTerminalNode(terminalNodeA, terminalNodeB,
|
|
55
|
+
matchTerminalNode(terminalNodeA, terminalNodeB, depth) {
|
|
50
56
|
const matches = terminalNodeA.match(terminalNodeB),
|
|
51
57
|
terminalNodeMatches = matches; ///
|
|
52
58
|
|
|
53
59
|
return terminalNodeMatches;
|
|
54
60
|
}
|
|
55
61
|
|
|
56
|
-
matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
62
|
+
matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, depth) {
|
|
57
63
|
let nonTerminalNodeMatches = false;
|
|
58
64
|
|
|
59
65
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), ///
|
|
@@ -64,7 +70,7 @@ export default class Matcher {
|
|
|
64
70
|
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
65
71
|
nodesA = nonTerminalNodeAChildNodes, ///
|
|
66
72
|
nodesB = nonTerminalNodeBChildNodes, ///
|
|
67
|
-
nodesMatch = this.matchNodes(nodesA, nodesB,
|
|
73
|
+
nodesMatch = this.matchNodes(nodesA, nodesB, depth);
|
|
68
74
|
|
|
69
75
|
nonTerminalNodeMatches = nodesMatch; ///
|
|
70
76
|
}
|
|
@@ -73,4 +79,6 @@ export default class Matcher {
|
|
|
73
79
|
}
|
|
74
80
|
}
|
|
75
81
|
|
|
76
|
-
|
|
82
|
+
const matcher = new Matcher();
|
|
83
|
+
|
|
84
|
+
export default matcher;
|
package/src/mixins/file.js
CHANGED
|
@@ -1,12 +1,57 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
function getAxioms() { return this.context.getAxioms(); }
|
|
4
|
+
|
|
5
|
+
function getLemmas() { return this.context.getLemmas(); }
|
|
6
|
+
|
|
7
|
+
function getTheorems() { return this.context.getTheorems(); }
|
|
8
|
+
|
|
9
|
+
function getConjectures() { return this.context.getConjectures(); }
|
|
10
|
+
|
|
11
|
+
function getCombinators() { return this.context.getCombinators(); }
|
|
12
|
+
|
|
13
|
+
function getConstructors() { return this.context.getConstructors(); }
|
|
14
|
+
|
|
15
|
+
function findTypeByTypeName(typeName) { return this.context.findTypeByTypeName(typeName); }
|
|
16
|
+
|
|
17
|
+
function findLabelByTypeName(labelName) { return this.context.findLabelByTypeName(labelName); }
|
|
18
|
+
|
|
3
19
|
function findRuleByReferenceName(referenceName) { return this.context.findRuleByReferenceName(referenceName); }
|
|
4
20
|
|
|
5
21
|
function findAxiomByReferenceName(referenceName) { return this.context.findAxiomByReferenceName(referenceName); }
|
|
6
22
|
|
|
23
|
+
function findLemmaByReferenceName(referenceName) { return this.context.findLemmaByReferenceName(referenceName); }
|
|
24
|
+
|
|
25
|
+
function findTheoremByReferenceName(referenceName) { return this.context.findTheoremByReferenceName(referenceName); }
|
|
26
|
+
|
|
27
|
+
function findConjectureByReferenceName(referenceName) { return this.context.findConjectureByReferenceName(referenceName); }
|
|
28
|
+
|
|
29
|
+
function isLabelPresentByLabelName(labelName) { return this.context.isLabelPresentByLabelName(labelName); }
|
|
30
|
+
|
|
31
|
+
function isTypePresentByTypeName(typeName) { return this.context.isTypePresentByTypeName(typeName); }
|
|
32
|
+
|
|
33
|
+
function nodeAsString(node) { return this.context.nodeAsString(node); }
|
|
34
|
+
|
|
35
|
+
function nodesAsString(node) { return this.context.nodesAsString(node); }
|
|
36
|
+
|
|
7
37
|
const fileMixins = {
|
|
38
|
+
getAxioms,
|
|
39
|
+
getLemmas,
|
|
40
|
+
getTheorems,
|
|
41
|
+
getConjectures,
|
|
42
|
+
getCombinators,
|
|
43
|
+
getConstructors,
|
|
44
|
+
findTypeByTypeName,
|
|
45
|
+
findLabelByTypeName,
|
|
8
46
|
findRuleByReferenceName,
|
|
9
|
-
findAxiomByReferenceName
|
|
47
|
+
findAxiomByReferenceName,
|
|
48
|
+
findLemmaByReferenceName,
|
|
49
|
+
findTheoremByReferenceName,
|
|
50
|
+
findConjectureByReferenceName,
|
|
51
|
+
isLabelPresentByLabelName,
|
|
52
|
+
isTypePresentByTypeName,
|
|
53
|
+
nodeAsString,
|
|
54
|
+
nodesAsString
|
|
10
55
|
};
|
|
11
56
|
|
|
12
57
|
export default fileMixins;
|
package/src/mixins/logging.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function trace(message) { this.context.trace(message); }
|
|
3
|
+
function trace(node, message) { this.context.trace(node, message); }
|
|
4
4
|
|
|
5
|
-
function debug(message) { this.context.debug(message); }
|
|
5
|
+
function debug(node, message) { this.context.debug(node, message); }
|
|
6
6
|
|
|
7
|
-
function info(message) { this.context.info(message); }
|
|
7
|
+
function info(node, message) { this.context.info(node, message); }
|
|
8
8
|
|
|
9
|
-
function warning(message) { this.context.warning(message); }
|
|
9
|
+
function warning(node, message) { this.context.warning(node, message); }
|
|
10
10
|
|
|
11
|
-
function error(message) { this.context.error(message); }
|
|
11
|
+
function error(node, message) { this.context.error(node, message); }
|
|
12
12
|
|
|
13
|
-
function fatal(message) { this.context.fatal(message); }
|
|
13
|
+
function fatal(node, message) { this.context.fatal(node, message); }
|
|
14
14
|
|
|
15
15
|
const loggingMixins = {
|
|
16
16
|
trace,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { metastatementNodeFromMetastatementString } from "../../utilities/node";
|
|
4
|
+
|
|
5
|
+
const bracketedMetastatementString = "(A)";
|
|
6
|
+
|
|
7
|
+
const bracketedMetastatementNode = metastatementNodeFromMetastatementString(bracketedMetastatementString);
|
|
8
|
+
|
|
9
|
+
export default bracketedMetastatementNode;
|