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
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { statementNodeFromStatementString } from "../../utilities/node";
|
|
4
|
+
|
|
5
|
+
const bracketedStatementString = "(n=m)";
|
|
6
|
+
|
|
7
|
+
const bracketedStatementNode = statementNodeFromStatementString(bracketedStatementString);
|
|
8
|
+
|
|
9
|
+
export default bracketedStatementNode;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { STATEMENT_META_TYPE_NAME } from "../../../metaTypeNames";
|
|
4
|
+
import { statementNodeFromStatementString } from "../../../utilities/node";
|
|
5
|
+
|
|
6
|
+
const bracketedCombinatorStatementString = `(${STATEMENT_META_TYPE_NAME})`;
|
|
7
|
+
|
|
8
|
+
const bracketedCombinatorStatementNode = statementNodeFromStatementString(bracketedCombinatorStatementString);
|
|
9
|
+
|
|
10
|
+
export default bracketedCombinatorStatementNode;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { OBJECT_TYPE_NAME } from "../../../typeNames";
|
|
4
|
+
import { statementNodeFromStatementString } from "../../../utilities/node";
|
|
5
|
+
|
|
6
|
+
const equalityCombinatorStatementString = `${OBJECT_TYPE_NAME} = ${OBJECT_TYPE_NAME}`;
|
|
7
|
+
|
|
8
|
+
const equalityCombinatorStatementNode = statementNodeFromStatementString(equalityCombinatorStatementString);
|
|
9
|
+
|
|
10
|
+
export default equalityCombinatorStatementNode;
|
|
11
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { statementNodeFromStatementString } from "../../utilities/node";
|
|
4
|
+
|
|
5
|
+
const equalityStatementString = "n=m";
|
|
6
|
+
|
|
7
|
+
const equalityStatementNode = statementNodeFromStatementString(equalityStatementString);
|
|
8
|
+
|
|
9
|
+
export default equalityStatementNode;
|
|
10
|
+
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Combinator from "../combinator";
|
|
4
|
-
import combinatorReleaseContext from "../context/release/combinator";
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
import bracketedCombinatorStatementNode from "../node/statement/combinator/bracketed";
|
|
7
6
|
|
|
8
7
|
class BracketedCombinator extends Combinator {
|
|
9
8
|
static fromNothing() {
|
|
10
|
-
const
|
|
11
|
-
releaseContext = combinatorReleaseContext, ///
|
|
12
|
-
statementNode = statementNodeFromStatementString(statementString, releaseContext),
|
|
9
|
+
const statementNode = bracketedCombinatorStatementNode, ///
|
|
13
10
|
bracketedCombinator = new BracketedCombinator(statementNode);
|
|
14
11
|
|
|
15
12
|
return bracketedCombinator;
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Combinator from "../combinator";
|
|
4
|
-
import CombinatorReleaseContext from "../context/release/combinator";
|
|
5
4
|
|
|
6
|
-
import
|
|
5
|
+
import equalityCombinatorStatementNode from "../node/statement/combinator/equality";
|
|
7
6
|
|
|
8
7
|
class EqualityCombinator extends Combinator {
|
|
9
8
|
static fromNothing() {
|
|
10
|
-
const
|
|
11
|
-
releaseContext = CombinatorReleaseContext, ///
|
|
12
|
-
statementNode = statementNodeFromStatementString(statementString, releaseContext),
|
|
9
|
+
const statementNode = equalityCombinatorStatementNode, ///
|
|
13
10
|
equalityCombinator = new EqualityCombinator(statementNode);
|
|
14
11
|
|
|
15
12
|
return equalityCombinator;
|
package/src/premise.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import { nodeAsString } from "./utilities/string";
|
|
4
4
|
import { nodeQuery, nodesQuery } from "./utilities/query";
|
|
5
|
-
import {
|
|
6
|
-
import { metastatementNodeFromMetastatementString } from "./utilities/
|
|
7
|
-
import {
|
|
5
|
+
import { premiseStatementForMetavariableVerifier } from "./verifier/statementForMetavariable/premise";
|
|
6
|
+
import { metastatementNodeFromMetastatementString } from "./utilities/node";
|
|
7
|
+
import { premiseMetastatementForMetavariableVerifier } from "./verifier/metastatementForMetavariable/premise";
|
|
8
8
|
|
|
9
9
|
const ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion!"),
|
|
10
10
|
ruleSubproofPremiseMetastatementQuery = nodesQuery("/ruleSubproof/premise/unqualifiedMetastatement!/metastatement!"),
|
|
@@ -34,16 +34,16 @@ export default class Premise {
|
|
|
34
34
|
...subproofSuppositionStatementNodes,
|
|
35
35
|
subproofSubDerivationLastStatementNode
|
|
36
36
|
],
|
|
37
|
-
|
|
37
|
+
ruleSubproofAssertionMetastatementNodes = ruleSubproofAssertionMetastatementNodesQuery(subproofAssertionNode),
|
|
38
38
|
subproofStatementNodesLength = subproofStatementNodes.length,
|
|
39
|
-
|
|
39
|
+
ruleSubproofAssertionMetastatementNodesLength = ruleSubproofAssertionMetastatementNodes.length;
|
|
40
40
|
|
|
41
|
-
if (subproofStatementNodesLength ===
|
|
42
|
-
subproofNodeMatches =
|
|
41
|
+
if (subproofStatementNodesLength === ruleSubproofAssertionMetastatementNodesLength) {
|
|
42
|
+
subproofNodeMatches = ruleSubproofAssertionMetastatementNodes.every((ruleSubproofAssertionMetastatementNode, index) => {
|
|
43
43
|
const subproofStatementNode = subproofStatementNodes[index],
|
|
44
44
|
nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
|
|
45
45
|
nonTerminalNodeB = subproofStatementNode, ///
|
|
46
|
-
nonTerminalNodeMatches =
|
|
46
|
+
nonTerminalNodeMatches = premiseStatementForMetavariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
47
47
|
|
|
48
48
|
if (nonTerminalNodeMatches) {
|
|
49
49
|
return true;
|
|
@@ -58,7 +58,7 @@ export default class Premise {
|
|
|
58
58
|
matchStatementNode(statementNode, substitutions) {
|
|
59
59
|
const nonTerminalNodeA = this.metastatementNode, ///
|
|
60
60
|
nonTerminalNodeB = statementNode, ///
|
|
61
|
-
nonTerminalNodeMatches =
|
|
61
|
+
nonTerminalNodeMatches = premiseStatementForMetavariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
|
|
62
62
|
statementNodeMatches = nonTerminalNodeMatches; ///
|
|
63
63
|
|
|
64
64
|
return statementNodeMatches;
|
|
@@ -85,7 +85,7 @@ export default class Premise {
|
|
|
85
85
|
const ruleSubproofMetastatementNode = ruleSubproofMetastatementNodes[index],
|
|
86
86
|
nonTerminalNodeA = ruleSubproofAssertionMetastatementNode, ///
|
|
87
87
|
nonTerminalNodeB = ruleSubproofMetastatementNode, ///
|
|
88
|
-
nonTerminalNodeMatches =
|
|
88
|
+
nonTerminalNodeMatches = premiseMetastatementForMetavariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
89
89
|
|
|
90
90
|
if (nonTerminalNodeMatches) {
|
|
91
91
|
return true;
|
|
@@ -100,7 +100,7 @@ export default class Premise {
|
|
|
100
100
|
matchMetastatementNode(metastatementNode, substitutions) {
|
|
101
101
|
const nonTerminalNodeA = this.metastatementNode, ///
|
|
102
102
|
nonTerminalNodeB = metastatementNode, ///
|
|
103
|
-
nonTerminalNodeMatches =
|
|
103
|
+
nonTerminalNodeMatches = premiseMetastatementForMetavariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
|
|
104
104
|
metastatementNodeMatches = nonTerminalNodeMatches; ///
|
|
105
105
|
|
|
106
106
|
return metastatementNodeMatches;
|
|
@@ -116,10 +116,10 @@ export default class Premise {
|
|
|
116
116
|
return json;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
static fromJSON(json,
|
|
119
|
+
static fromJSON(json, lexer, parser) {
|
|
120
120
|
const { metastatement } = json,
|
|
121
121
|
metastatementString = metastatement, ///
|
|
122
|
-
metastatementNode = metastatementNodeFromMetastatementString(metastatementString,
|
|
122
|
+
metastatementNode = metastatementNodeFromMetastatementString(metastatementString, lexer, parser),
|
|
123
123
|
premise = new Premise(metastatementNode);
|
|
124
124
|
|
|
125
125
|
return premise;
|
package/src/rule.js
CHANGED
|
@@ -134,7 +134,7 @@ export default class Rule {
|
|
|
134
134
|
return json;
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
static fromJSON(json,
|
|
137
|
+
static fromJSON(json, lexer, parser) {
|
|
138
138
|
let rule;
|
|
139
139
|
|
|
140
140
|
let { labels } = json;
|
|
@@ -143,7 +143,7 @@ export default class Rule {
|
|
|
143
143
|
|
|
144
144
|
labels = labelsJSON.map((labelJSON) => {
|
|
145
145
|
const json = labelJSON, ///
|
|
146
|
-
label = Label.fromJSON(json,
|
|
146
|
+
label = Label.fromJSON(json, lexer, parser);
|
|
147
147
|
|
|
148
148
|
return label;
|
|
149
149
|
});
|
|
@@ -154,7 +154,7 @@ export default class Rule {
|
|
|
154
154
|
|
|
155
155
|
premises = premisesJSON.map((premiseJSON) => {
|
|
156
156
|
const json = premiseJSON, ///
|
|
157
|
-
premise = Premise.fromJSON(json,
|
|
157
|
+
premise = Premise.fromJSON(json, lexer, parser);
|
|
158
158
|
|
|
159
159
|
return premise;
|
|
160
160
|
});
|
|
@@ -165,7 +165,7 @@ export default class Rule {
|
|
|
165
165
|
|
|
166
166
|
json = conclusionJSON; ///
|
|
167
167
|
|
|
168
|
-
conclusion = Conclusion.fromJSON(json,
|
|
168
|
+
conclusion = Conclusion.fromJSON(json, lexer, parser);
|
|
169
169
|
|
|
170
170
|
rule = new Rule(labels, premises, conclusion);
|
|
171
171
|
|
package/src/ruleNames.js
CHANGED
|
@@ -5,9 +5,7 @@ export const TYPE_RULE_NAME = "type";
|
|
|
5
5
|
export const LABEL_RULE_NAME = "label";
|
|
6
6
|
export const ARGUMENT_RULE_NAME = "argument";
|
|
7
7
|
export const SUBPROOF_RULE_NAME = "subproof";
|
|
8
|
-
export const VARIABLE_RULE_NAME = "variable";
|
|
9
8
|
export const STATEMENT_RULE_NAME = "statement";
|
|
10
|
-
export const METAVARIABLE_RULE_NAME = "metavariable";
|
|
11
9
|
export const METASTATEMENT_RULE_NAME = "metastatement";
|
|
12
10
|
export const RULE_SUBPROOF_RULE_NAME = "ruleSubproof";
|
|
13
11
|
export const META_ARGUMENT_RULE_NAME = "metaArgument";
|
package/src/step/metaproof.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { first, second } from "../utilities/array";
|
|
4
4
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
5
|
-
import {
|
|
5
|
+
import { matchMetastatementModuloBrackets } from "../utilities/metaproof";
|
|
6
6
|
|
|
7
7
|
const metastatementNodesQuery = nodesQuery("/ruleSubproofAssertion/metastatement"),
|
|
8
8
|
ruleSubproofAssertionNodeQuery = nodeQuery("/metastatement/ruleSubproofAssertion"),
|
|
@@ -22,41 +22,44 @@ export default class MetaproofStep {
|
|
|
22
22
|
return this.metastatementNode;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
let
|
|
25
|
+
match(metastatementNode) {
|
|
26
|
+
let matches = false;
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
if (!matches) {
|
|
29
|
+
const ruleSubproofAssertionNode = ruleSubproofAssertionNodeQuery(metastatementNode);
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
if (ruleSubproofAssertionNode !== null) {
|
|
32
|
+
const matchesRuleSubproofAssertion = this.matchRuleSubproofAssertion(ruleSubproofAssertionNode);
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
matches = matchesRuleSubproofAssertion; ///
|
|
35
|
+
}
|
|
36
|
+
}
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
if (!matches) {
|
|
39
|
+
const matchesMetastatement = this.matchMetastatement(metastatementNode);
|
|
40
|
+
|
|
41
|
+
matches = matchesMetastatement; ///
|
|
38
42
|
}
|
|
39
43
|
|
|
40
|
-
return
|
|
44
|
+
return matches;
|
|
41
45
|
}
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
let
|
|
47
|
+
matchMetastatement(metastatementNode) {
|
|
48
|
+
let matchesMetastatement = false;
|
|
45
49
|
|
|
46
50
|
if (this.metastatementNode !== null) {
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
metastatementNodeMatches = bracketedNodeMatches; ///
|
|
51
|
+
const metastatementNodeA = metastatementNode, ///
|
|
52
|
+
metastatementNodeB = this.metastatementNode, ///
|
|
53
|
+
metastatementMatchesModuloBrackets = matchMetastatementModuloBrackets(metastatementNodeA, metastatementNodeB);
|
|
51
54
|
|
|
52
|
-
|
|
55
|
+
matchesMetastatement = metastatementMatchesModuloBrackets; ///
|
|
53
56
|
}
|
|
54
57
|
|
|
55
|
-
return
|
|
58
|
+
return matchesMetastatement;
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
matchRuleSubproofAssertion(ruleSubproofAssertionNode) {
|
|
59
|
-
let
|
|
62
|
+
let matchesRuleSubproofAssertion = false;
|
|
60
63
|
|
|
61
64
|
if (this.ruleSubproofNode !== null) {
|
|
62
65
|
const ruleSubproofAssertionMetastatementNodes = metastatementNodesQuery(ruleSubproofAssertionNode),
|
|
@@ -64,23 +67,23 @@ export default class MetaproofStep {
|
|
|
64
67
|
qualifiedOrUnqualifiedMetastatementMetastatementNodes = qualifiedOrUnqualifiedMetastatementMetastatementNodesQuery(this.ruleSubproofNode),
|
|
65
68
|
firstQualifiedOrUnqualifiedMetastatementMetastatementNode = first(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
|
|
66
69
|
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
const metastatementNodeA = firstRuleSubproofAssertionMetastatementNode, ///
|
|
71
|
+
metastatementNodeB = firstQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
|
|
72
|
+
metastatementMatchesModuloBrackets = matchMetastatementModuloBrackets(metastatementNodeA, metastatementNodeB);
|
|
70
73
|
|
|
71
|
-
if (
|
|
74
|
+
if (metastatementMatchesModuloBrackets) {
|
|
72
75
|
const secondRuleSubproofAssertionMetastatementNode = second(ruleSubproofAssertionMetastatementNodes),
|
|
73
76
|
secondQualifiedOrUnqualifiedMetastatementMetastatementNode = second(qualifiedOrUnqualifiedMetastatementMetastatementNodes);
|
|
74
77
|
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
const metastatementNodeA = secondRuleSubproofAssertionMetastatementNode, ///
|
|
79
|
+
metastatementNodeB = secondQualifiedOrUnqualifiedMetastatementMetastatementNode, ///
|
|
80
|
+
metastatementMatchesModuloBrackets = matchMetastatementModuloBrackets(metastatementNodeA, metastatementNodeB);
|
|
78
81
|
|
|
79
|
-
|
|
82
|
+
matchesRuleSubproofAssertion = metastatementMatchesModuloBrackets; ///
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
|
|
83
|
-
return
|
|
86
|
+
return matchesRuleSubproofAssertion;
|
|
84
87
|
}
|
|
85
88
|
|
|
86
89
|
static fromRuleSubproofNode(ruleSubproofNode) {
|
package/src/step/proof.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { META_ARGUMENT_RULE_NAME } from "../ruleNames";
|
|
4
|
+
import { matchStatementModuloBrackets } from "../utilities/proof";
|
|
5
|
+
|
|
3
6
|
export default class ProofStep {
|
|
4
7
|
constructor(subproofNode, statementNode) {
|
|
5
8
|
this.subproofNode = subproofNode;
|
|
@@ -14,6 +17,31 @@ export default class ProofStep {
|
|
|
14
17
|
return this.statementNode;
|
|
15
18
|
}
|
|
16
19
|
|
|
20
|
+
match(statementNode) {
|
|
21
|
+
let matches;
|
|
22
|
+
|
|
23
|
+
const matchesStatement = this.matchStatement(statementNode);
|
|
24
|
+
|
|
25
|
+
matches = matchesStatement; //
|
|
26
|
+
|
|
27
|
+
return matches;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
matchStatement(statementNode) {
|
|
31
|
+
let matchesStatement = false;
|
|
32
|
+
|
|
33
|
+
if (this.statementNode !== null) {
|
|
34
|
+
const ruleName = META_ARGUMENT_RULE_NAME,
|
|
35
|
+
statementNodeA = statementNode, ///
|
|
36
|
+
statementNodeB = this.statementNode, ///
|
|
37
|
+
statementMatchesModuloBrackets = matchStatementModuloBrackets(statementNodeA, statementNodeB, ruleName);
|
|
38
|
+
|
|
39
|
+
matchesStatement = statementMatchesModuloBrackets; ///
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return matchesStatement;
|
|
43
|
+
}
|
|
44
|
+
|
|
17
45
|
static fromSubproofNode(subproofNode) {
|
|
18
46
|
const statementNode = null,
|
|
19
47
|
metaProofStep = new ProofStep(subproofNode, statementNode);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import {
|
|
3
|
+
import matcher from "../matcher";
|
|
4
|
+
|
|
5
|
+
import { bracketedMetastatementChildNodeFromMetastatementNode } from "../utilities/metaproof";
|
|
6
6
|
|
|
7
7
|
export default class MetastatementForMetavariableSubstitution {
|
|
8
8
|
constructor(metavariableName, metastatementNode) {
|
|
@@ -28,14 +28,11 @@ export default class MetastatementForMetavariableSubstitution {
|
|
|
28
28
|
matchesMetastatementNode = nodeMatches; ///
|
|
29
29
|
|
|
30
30
|
if (!matchesMetastatementNode) {
|
|
31
|
-
const
|
|
32
|
-
childNodes = nonTerminalNode.getChildNodes(), ///
|
|
33
|
-
ruleName = METASTATEMENT_RULE_NAME;
|
|
34
|
-
|
|
35
|
-
metastatementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
|
|
31
|
+
const bracketedMetastatementChildNode = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNode);
|
|
36
32
|
|
|
37
|
-
if (
|
|
38
|
-
const
|
|
33
|
+
if (bracketedMetastatementChildNode !== null) {
|
|
34
|
+
const metastatementNode = bracketedMetastatementChildNode, ///
|
|
35
|
+
nodeA = this.metastatementNode, ///
|
|
39
36
|
nodeB = metastatementNode,
|
|
40
37
|
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
41
38
|
|
|
@@ -49,13 +46,11 @@ export default class MetastatementForMetavariableSubstitution {
|
|
|
49
46
|
static fromMetavariableNameAndMetastatementNode(metavariableName, metastatementNode) {
|
|
50
47
|
let metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableName, metastatementNode);
|
|
51
48
|
|
|
52
|
-
const
|
|
53
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
54
|
-
ruleName = METASTATEMENT_RULE_NAME;
|
|
49
|
+
const bracketedMetastatementChildNode = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNode);
|
|
55
50
|
|
|
56
|
-
|
|
51
|
+
if (bracketedMetastatementChildNode !== null) {
|
|
52
|
+
const metastatementNode = bracketedMetastatementChildNode; ///
|
|
57
53
|
|
|
58
|
-
if (metastatementNode !== null) {
|
|
59
54
|
metastatementForMetavariableSubstitution = new MetastatementForMetavariableSubstitution(metavariableName, metastatementNode);
|
|
60
55
|
}
|
|
61
56
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
import {
|
|
3
|
+
import matcher from "../matcher";
|
|
4
|
+
|
|
5
|
+
import { bracketedStatementChildNodeFromStatementNode } from "../utilities/proof";
|
|
6
6
|
|
|
7
7
|
export default class StatementForMetavariableSubstitution {
|
|
8
8
|
constructor(metavariableName, statementNode) {
|
|
@@ -28,16 +28,13 @@ export default class StatementForMetavariableSubstitution {
|
|
|
28
28
|
matchesStatementNode = nodeMatches; ///
|
|
29
29
|
|
|
30
30
|
if (!matchesStatementNode) {
|
|
31
|
-
const
|
|
32
|
-
childNodes = nonTerminalNode.getChildNodes(), ///
|
|
33
|
-
ruleName = STATEMENT_RULE_NAME;
|
|
34
|
-
|
|
35
|
-
statementNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
|
|
31
|
+
const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
|
|
36
32
|
|
|
37
|
-
if (
|
|
38
|
-
const
|
|
33
|
+
if (bracketedStatementChildNode !== null) {
|
|
34
|
+
const statementNode = bracketedStatementChildNode, ///
|
|
35
|
+
nodeA = this.statementNode, ///
|
|
39
36
|
nodeB = statementNode,
|
|
40
|
-
nodeMatches = matchNode(nodeA, nodeB);
|
|
37
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
41
38
|
|
|
42
39
|
matchesStatementNode = nodeMatches; ///
|
|
43
40
|
}
|
|
@@ -49,13 +46,11 @@ export default class StatementForMetavariableSubstitution {
|
|
|
49
46
|
static fromMetavariableNameAndStatementNode(metavariableName, statementNode) {
|
|
50
47
|
let statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
|
|
51
48
|
|
|
52
|
-
const
|
|
53
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
54
|
-
ruleName = STATEMENT_RULE_NAME;
|
|
49
|
+
const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
|
|
55
50
|
|
|
56
|
-
|
|
51
|
+
if (bracketedStatementChildNode !== null) {
|
|
52
|
+
const statementNode = bracketedStatementChildNode; ///
|
|
57
53
|
|
|
58
|
-
if (statementNode !== null) {
|
|
59
54
|
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
|
|
60
55
|
}
|
|
61
56
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import matcher from "../matcher";
|
|
4
|
+
|
|
5
|
+
export default class TermForVariableSubstitution {
|
|
6
|
+
constructor(variableName, termNode) {
|
|
7
|
+
this.variableName = variableName;
|
|
8
|
+
this.termNode = termNode;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
getVariableName() {
|
|
12
|
+
return this.variableName;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getTermNode() {
|
|
16
|
+
return this.termNode;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
matchTermNode(termNode) {
|
|
20
|
+
let matchesTermNode;
|
|
21
|
+
|
|
22
|
+
const nodeA = this.termNode, ///
|
|
23
|
+
nodeB = termNode,
|
|
24
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
25
|
+
|
|
26
|
+
matchesTermNode = nodeMatches; ///
|
|
27
|
+
|
|
28
|
+
return matchesTermNode;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static fromVariableNameAndTermNode(variableName, termNode) {
|
|
32
|
+
const termForVariableSubstitution = new TermForVariableSubstitution(variableName, termNode);
|
|
33
|
+
|
|
34
|
+
return termForVariableSubstitution;
|
|
35
|
+
}
|
|
36
|
+
}
|
package/src/supposition.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { nodeAsString } from "./utilities/string";
|
|
4
4
|
import { nodeQuery, nodesQuery } from "./utilities/query";
|
|
5
|
-
import { statementNodeFromStatementString } from "./utilities/
|
|
6
|
-
import {
|
|
5
|
+
import { statementNodeFromStatementString } from "./utilities/node";
|
|
6
|
+
import { suppositionTermForVariableVerifier } from "./verifier/termForVariable/supposition";
|
|
7
7
|
|
|
8
8
|
const subproofAssertionNodeQuery = nodeQuery("/statement/subproofAssertion!"),
|
|
9
9
|
subproofAssertionStatementNodesQuery = nodesQuery("/subproofAssertion/statement"),
|
|
@@ -40,7 +40,7 @@ export default class Supposition {
|
|
|
40
40
|
const subproofStatementNode = subproofStatementNodes[index],
|
|
41
41
|
nonTerminalNodeA = subproofAssertionStatementNode, ///
|
|
42
42
|
nonTerminalNodeB = subproofStatementNode, ///
|
|
43
|
-
nonTerminalNodeMatches =
|
|
43
|
+
nonTerminalNodeMatches = suppositionTermForVariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions);
|
|
44
44
|
|
|
45
45
|
if (nonTerminalNodeMatches) {
|
|
46
46
|
return true;
|
|
@@ -55,7 +55,7 @@ export default class Supposition {
|
|
|
55
55
|
matchStatementNode(statementNode, substitutions) {
|
|
56
56
|
const nonTerminalNodeA = this.statementNode, ///
|
|
57
57
|
nonTerminalNodeB = statementNode, ///
|
|
58
|
-
nonTerminalNodeMatches =
|
|
58
|
+
nonTerminalNodeMatches = suppositionTermForVariableVerifier.matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions),
|
|
59
59
|
statementNodeMatches = nonTerminalNodeMatches; ///
|
|
60
60
|
|
|
61
61
|
return statementNodeMatches;
|
|
@@ -71,10 +71,10 @@ export default class Supposition {
|
|
|
71
71
|
return json;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
static fromJSON(json,
|
|
74
|
+
static fromJSON(json, lexer, parser) {
|
|
75
75
|
const { statement } = json,
|
|
76
76
|
statementString = statement, ///
|
|
77
|
-
statementNode = statementNodeFromStatementString(statementString,
|
|
77
|
+
statementNode = statementNodeFromStatementString(statementString, lexer, parser),
|
|
78
78
|
supposition = new Supposition(statementNode);
|
|
79
79
|
|
|
80
80
|
return supposition;
|
package/src/theorem.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import AxiomLemmaTheoremConjecture from "./axiomLemmaTheoremConjecture";
|
|
4
4
|
|
|
5
5
|
import { THEOREM_KIND } from "./kinds";
|
|
6
6
|
|
|
7
|
-
export default class Theorem extends
|
|
7
|
+
export default class Theorem extends AxiomLemmaTheoremConjecture {
|
|
8
8
|
static kind = THEOREM_KIND;
|
|
9
9
|
|
|
10
|
-
static fromJSON(json,
|
|
10
|
+
static fromJSON(json, lexer, parser) { return AxiomLemmaTheoremConjecture.fromJSON(Theorem, json, lexer, parser); }
|
|
11
11
|
|
|
12
|
-
static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return
|
|
12
|
+
static fromLabelsSuppositionsAndConsequence(labels, suppositions, consequence) { return AxiomLemmaTheoremConjecture.fromLabelsSuppositionsAndConsequence(Theorem, labels, suppositions, consequence); }
|
|
13
13
|
}
|
package/src/type.js
CHANGED
|
@@ -124,14 +124,14 @@ export default class Type {
|
|
|
124
124
|
return json;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
static fromJSON(json,
|
|
127
|
+
static fromJSON(json, lexer, parser) {
|
|
128
128
|
let type;
|
|
129
129
|
|
|
130
130
|
let { superType } = json;
|
|
131
131
|
|
|
132
132
|
const superTypeJSON = superType; ///
|
|
133
133
|
|
|
134
|
-
superType = superTypeFromSuperTypeJSON(superTypeJSON,
|
|
134
|
+
superType = superTypeFromSuperTypeJSON(superTypeJSON, lexer, parser);
|
|
135
135
|
|
|
136
136
|
const { name } = json;
|
|
137
137
|
|
|
@@ -181,12 +181,22 @@ class ObjectType extends Type {
|
|
|
181
181
|
|
|
182
182
|
export const objectType = ObjectType.fromNothing();
|
|
183
183
|
|
|
184
|
-
function superTypeFromSuperTypeJSON(superTypeJSON,
|
|
184
|
+
function superTypeFromSuperTypeJSON(superTypeJSON, lexer, parser) {
|
|
185
|
+
let superType;
|
|
186
|
+
|
|
185
187
|
const json = superTypeJSON, ///
|
|
186
|
-
{ name } = json
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
188
|
+
{ name } = json;
|
|
189
|
+
|
|
190
|
+
if (name === OBJECT_TYPE_NAME) {
|
|
191
|
+
superType = objectType; ///
|
|
192
|
+
} else {
|
|
193
|
+
const typeName = name, ///
|
|
194
|
+
type = releaseContext.findTypeByTypeName(typeName);
|
|
195
|
+
|
|
196
|
+
superType = (type !== null) ?
|
|
197
|
+
type : ///
|
|
198
|
+
Type.fromJSON(json, lexer, parser); ///
|
|
199
|
+
}
|
|
190
200
|
|
|
191
201
|
return superType;
|
|
192
202
|
}
|