occam-verify-cli 0.0.527 → 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/axiom.js +3 -3
- package/lib/axiomLemmaTheoremConjecture.js +5 -5
- package/lib/combinator.js +4 -3
- package/lib/conclusion.js +8 -7
- package/lib/conjecture.js +3 -3
- package/lib/consequence.js +6 -5
- package/lib/constants.js +8 -12
- package/lib/constructor.js +5 -4
- package/lib/context/file.js +13 -35
- package/lib/context/metaproof.js +12 -11
- package/lib/context/proof.js +11 -10
- package/lib/context/release/directory.js +6 -6
- package/lib/context/release/file.js +15 -26
- package/lib/context/release.js +32 -51
- package/lib/equality.js +5 -4
- package/lib/index.js +4 -4
- package/lib/label.js +4 -3
- package/lib/lemma.js +3 -3
- package/lib/log.js +146 -0
- package/lib/matcher.js +14 -23
- package/lib/metaTypeNames.js +13 -0
- 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 +10 -9
- package/lib/rule.js +5 -5
- package/lib/step/metaproof.js +28 -25
- package/lib/step/proof.js +15 -14
- package/lib/substitution/metastatementForMetavariable.js +16 -13
- package/lib/substitution/statementForMetavariable.js +17 -18
- package/lib/substitution/termForVariable.js +8 -18
- package/lib/supposition.js +7 -6
- package/lib/theorem.js +3 -3
- package/lib/type.js +5 -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 +1 -32
- 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 → verifier}/termForVariable/consequence.js +12 -12
- package/lib/{matcher → verifier}/termForVariable/supposition.js +12 -12
- package/lib/verifier/termForVariable.js +198 -0
- package/lib/verifier.js +92 -0
- package/lib/verify/assertion/type.js +6 -8
- package/lib/verify/axiom.js +3 -5
- package/lib/verify/conclusion.js +2 -4
- package/lib/verify/conjecture.js +3 -5
- 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 +1 -3
- 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 -5
- package/lib/verify/metastatement/qualified.js +2 -4
- package/lib/verify/metastatement/unqualified.js +2 -4
- 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 -5
- package/lib/verify/ruleDerivation.js +1 -5
- package/lib/verify/ruleProof.js +3 -5
- package/lib/verify/statement/qualified.js +2 -4
- package/lib/verify/statement/unqualified.js +2 -4
- package/lib/verify/statement.js +14 -17
- 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 -5
- package/lib/verify/type.js +5 -9
- package/lib/verify/variable.js +5 -9
- package/package.json +1 -1
- package/src/axiom.js +1 -1
- package/src/axiomLemmaTheoremConjecture.js +4 -4
- package/src/combinator.js +3 -3
- package/src/conclusion.js +7 -7
- package/src/conjecture.js +1 -1
- package/src/consequence.js +5 -5
- package/src/constants.js +2 -3
- package/src/constructor.js +4 -4
- package/src/context/file.js +6 -30
- package/src/context/metaproof.js +13 -10
- package/src/context/proof.js +11 -9
- package/src/context/release/directory.js +7 -7
- package/src/context/release/file.js +17 -32
- package/src/context/release.js +23 -32
- package/src/equality.js +6 -8
- package/src/index.js +2 -1
- package/src/label.js +3 -3
- package/src/lemma.js +1 -1
- package/src/log.js +116 -0
- package/src/matcher.js +11 -9
- package/src/metaTypeNames.js +3 -0
- 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 +9 -9
- package/src/rule.js +4 -4
- package/src/step/metaproof.js +32 -29
- package/src/step/proof.js +15 -14
- package/src/substitution/metastatementForMetavariable.js +10 -15
- package/src/substitution/statementForMetavariable.js +12 -24
- package/src/substitution/termForVariable.js +2 -30
- package/src/supposition.js +6 -6
- package/src/theorem.js +1 -1
- package/src/type.js +4 -4
- 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 +0 -47
- package/src/verifier/metastatementForMetavariable/conclusion.js +9 -0
- package/src/verifier/metastatementForMetavariable/premise.js +9 -0
- package/src/{matcher → verifier}/metastatementForMetavariable.js +2 -2
- package/src/verifier/statementForMetavariable/conclusion.js +9 -0
- package/src/verifier/statementForMetavariable/premise.js +9 -0
- package/src/{matcher → verifier}/statementForMetavariable.js +2 -2
- package/src/verifier/termForVariable/consequence.js +9 -0
- package/src/verifier/termForVariable/supposition.js +9 -0
- package/src/{matcher → verifier}/termForVariable.js +2 -2
- package/src/verifier.js +74 -0
- package/src/verify/assertion/type.js +5 -11
- package/src/verify/axiom.js +2 -8
- package/src/verify/conclusion.js +1 -7
- package/src/verify/conjecture.js +2 -8
- 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 +0 -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 -10
- package/src/verify/metastatement/qualified.js +1 -7
- package/src/verify/metastatement/unqualified.js +1 -7
- 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 -8
- package/src/verify/ruleDerivation.js +0 -12
- package/src/verify/ruleProof.js +1 -7
- package/src/verify/statement/qualified.js +1 -7
- package/src/verify/statement/unqualified.js +1 -7
- package/src/verify/statement.js +24 -34
- 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 -8
- package/src/verify/type.js +4 -13
- package/src/verify/variable.js +4 -13
- package/bin/callbacks.js +0 -48
- package/lib/callbacks.js +0 -75
- package/lib/context/release/combinator.js +0 -64
- package/lib/matcher/metastatementForMetavariable.js +0 -198
- package/lib/matcher/statementForMetavariable.js +0 -203
- package/lib/matcher/termForVariable.js +0 -198
- package/lib/mixins/callbacks.js +0 -27
- package/lib/utilities/substitution.js +0 -60
- package/src/callbacks.js +0 -39
- package/src/context/release/combinator.js +0 -39
- package/src/matcher/metastatementForMetavariable/conclusion.js +0 -9
- package/src/matcher/metastatementForMetavariable/premise.js +0 -9
- package/src/matcher/statementForMetavariable/conclusion.js +0 -9
- package/src/matcher/statementForMetavariable/premise.js +0 -9
- package/src/matcher/termForVariable/consequence.js +0 -9
- package/src/matcher/termForVariable/supposition.js +0 -9
- package/src/mixins/callbacks.js +0 -15
- package/src/utilities/substitution.js +0 -81
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!"),
|
|
@@ -43,7 +43,7 @@ export default class Premise {
|
|
|
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/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,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { META_ARGUMENT_RULE_NAME } from "../ruleNames";
|
|
4
|
+
import { matchStatementModuloBrackets } from "../utilities/proof";
|
|
4
5
|
|
|
5
6
|
export default class ProofStep {
|
|
6
7
|
constructor(subproofNode, statementNode) {
|
|
@@ -16,29 +17,29 @@ export default class ProofStep {
|
|
|
16
17
|
return this.statementNode;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
let
|
|
20
|
+
match(statementNode) {
|
|
21
|
+
let matches;
|
|
21
22
|
|
|
22
|
-
const
|
|
23
|
+
const matchesStatement = this.matchStatement(statementNode);
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
matches = matchesStatement; //
|
|
25
26
|
|
|
26
|
-
return
|
|
27
|
+
return matches;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
let
|
|
30
|
+
matchStatement(statementNode) {
|
|
31
|
+
let matchesStatement = false;
|
|
31
32
|
|
|
32
33
|
if (this.statementNode !== null) {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
const ruleName = META_ARGUMENT_RULE_NAME,
|
|
35
|
+
statementNodeA = statementNode, ///
|
|
36
|
+
statementNodeB = this.statementNode, ///
|
|
37
|
+
statementMatchesModuloBrackets = matchStatementModuloBrackets(statementNodeA, statementNodeB, ruleName);
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
matchesStatement = statementMatchesModuloBrackets; ///
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
return
|
|
42
|
+
return matchesStatement;
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
static fromSubproofNode(subproofNode) {
|
|
@@ -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,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import { nodeQuery } from "../utilities/query";
|
|
5
|
-
import { META_ARGUMENT_RULE_NAME } from "../ruleNames";
|
|
6
|
-
import { bracketedNonTerminalChildNodeFromChildNodes } from "../utilities/substitution";
|
|
3
|
+
import matcher from "../matcher";
|
|
7
4
|
|
|
8
|
-
|
|
5
|
+
import { bracketedStatementChildNodeFromStatementNode } from "../utilities/proof";
|
|
9
6
|
|
|
10
7
|
export default class StatementForMetavariableSubstitution {
|
|
11
8
|
constructor(metavariableName, statementNode) {
|
|
@@ -31,21 +28,15 @@ export default class StatementForMetavariableSubstitution {
|
|
|
31
28
|
matchesStatementNode = nodeMatches; ///
|
|
32
29
|
|
|
33
30
|
if (!matchesStatementNode) {
|
|
34
|
-
const
|
|
35
|
-
childNodes = nonTerminalNode.getChildNodes(), ///
|
|
36
|
-
ruleName = META_ARGUMENT_RULE_NAME,
|
|
37
|
-
metaArgumentNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
|
|
31
|
+
const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
|
|
38
32
|
|
|
39
|
-
if (
|
|
40
|
-
const statementNode =
|
|
33
|
+
if (bracketedStatementChildNode !== null) {
|
|
34
|
+
const statementNode = bracketedStatementChildNode, ///
|
|
35
|
+
nodeA = this.statementNode, ///
|
|
36
|
+
nodeB = statementNode,
|
|
37
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
const nodeA = this.statementNode, ///
|
|
44
|
-
nodeB = statementNode,
|
|
45
|
-
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
46
|
-
|
|
47
|
-
matchesStatementNode = nodeMatches; ///
|
|
48
|
-
}
|
|
39
|
+
matchesStatementNode = nodeMatches; ///
|
|
49
40
|
}
|
|
50
41
|
}
|
|
51
42
|
|
|
@@ -55,14 +46,11 @@ export default class StatementForMetavariableSubstitution {
|
|
|
55
46
|
static fromMetavariableNameAndStatementNode(metavariableName, statementNode) {
|
|
56
47
|
let statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
|
|
57
48
|
|
|
58
|
-
const
|
|
59
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
60
|
-
ruleName = META_ARGUMENT_RULE_NAME,
|
|
61
|
-
metaArgumentNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
|
|
49
|
+
const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
|
|
62
50
|
|
|
63
|
-
|
|
51
|
+
if (bracketedStatementChildNode !== null) {
|
|
52
|
+
const statementNode = bracketedStatementChildNode; ///
|
|
64
53
|
|
|
65
|
-
if (statementNode !== null) {
|
|
66
54
|
statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(metavariableName, statementNode);
|
|
67
55
|
}
|
|
68
56
|
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import { STATEMENT_RULE_NAME } from "../ruleNames";
|
|
5
|
-
import { bracketedNonTerminalChildNodeFromChildNodes } from "../utilities/substitution";
|
|
3
|
+
import matcher from "../matcher";
|
|
6
4
|
|
|
7
5
|
export default class TermForVariableSubstitution {
|
|
8
6
|
constructor(variableName, termNode) {
|
|
@@ -27,37 +25,11 @@ export default class TermForVariableSubstitution {
|
|
|
27
25
|
|
|
28
26
|
matchesTermNode = nodeMatches; ///
|
|
29
27
|
|
|
30
|
-
if (!matchesTermNode) {
|
|
31
|
-
const nonTerminalNode = termNode, ///
|
|
32
|
-
childNodes = nonTerminalNode.getChildNodes(), ///
|
|
33
|
-
ruleName = STATEMENT_RULE_NAME;
|
|
34
|
-
|
|
35
|
-
termNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
|
|
36
|
-
|
|
37
|
-
if (termNode !== null) {
|
|
38
|
-
const nodeA = this.termNode, ///
|
|
39
|
-
nodeB = termNode,
|
|
40
|
-
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
41
|
-
|
|
42
|
-
matchesTermNode = nodeMatches; ///
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
28
|
return matchesTermNode;
|
|
47
29
|
}
|
|
48
30
|
|
|
49
31
|
static fromVariableNameAndTermNode(variableName, termNode) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const nonTerminalNode = termNode, ///
|
|
53
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
54
|
-
ruleName = STATEMENT_RULE_NAME;
|
|
55
|
-
|
|
56
|
-
termNode = bracketedNonTerminalChildNodeFromChildNodes(childNodes, ruleName); ///
|
|
57
|
-
|
|
58
|
-
if (termNode !== null) {
|
|
59
|
-
termForVariableSubstitution = new TermForVariableSubstitution(variableName, termNode);
|
|
60
|
-
}
|
|
32
|
+
const termForVariableSubstitution = new TermForVariableSubstitution(variableName, termNode);
|
|
61
33
|
|
|
62
34
|
return termForVariableSubstitution;
|
|
63
35
|
}
|
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
|
@@ -7,7 +7,7 @@ import { THEOREM_KIND } from "./kinds";
|
|
|
7
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
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,7 +181,7 @@ 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
185
|
let superType;
|
|
186
186
|
|
|
187
187
|
const json = superTypeJSON, ///
|
|
@@ -195,7 +195,7 @@ function superTypeFromSuperTypeJSON(superTypeJSON, releaseContext) {
|
|
|
195
195
|
|
|
196
196
|
superType = (type !== null) ?
|
|
197
197
|
type : ///
|
|
198
|
-
Type.fromJSON(json,
|
|
198
|
+
Type.fromJSON(json, lexer, parser); ///
|
|
199
199
|
}
|
|
200
200
|
|
|
201
201
|
return superType;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import matcher from "../matcher";
|
|
4
|
+
import bracketedMetastatementNode from "../node/metastatement/bracketed";
|
|
5
|
+
|
|
6
|
+
import { nodeQuery } from "../utilities/query";
|
|
7
|
+
import { BRACKETED_METASTATEMENT_DEPTH } from "../constants";
|
|
8
|
+
|
|
9
|
+
const bracketedMetastatementChildNodeQuery = nodeQuery('/metastatement/metastatement!');
|
|
10
|
+
|
|
11
|
+
export function matchMetastatementModuloBrackets(metastatementNodeA, metastatementNodeB) {
|
|
12
|
+
let metastatementMatchesModuloBrackets = false;
|
|
13
|
+
|
|
14
|
+
if (!metastatementMatchesModuloBrackets) {
|
|
15
|
+
const nodeA = metastatementNodeA, ///
|
|
16
|
+
nodeB = metastatementNodeB, ///
|
|
17
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
18
|
+
|
|
19
|
+
metastatementMatchesModuloBrackets = nodeMatches; ///
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (!metastatementMatchesModuloBrackets) {
|
|
23
|
+
const bracketedMetastatementChildNodeA = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNodeA);
|
|
24
|
+
|
|
25
|
+
if (bracketedMetastatementChildNodeA !== null) {
|
|
26
|
+
const nodeA = bracketedMetastatementChildNodeA, ///
|
|
27
|
+
nodeB = metastatementNodeB, ///
|
|
28
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
29
|
+
|
|
30
|
+
metastatementMatchesModuloBrackets = nodeMatches; ///
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (!metastatementMatchesModuloBrackets) {
|
|
35
|
+
const bracketedMetastatementChildNodeB = bracketedMetastatementChildNodeFromMetastatementNode(metastatementNodeB);
|
|
36
|
+
|
|
37
|
+
if (bracketedMetastatementChildNodeB !== null) {
|
|
38
|
+
const nodeA = metastatementNodeA, ///
|
|
39
|
+
nodeB = bracketedMetastatementChildNodeB, ///
|
|
40
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
41
|
+
|
|
42
|
+
metastatementMatchesModuloBrackets = nodeMatches; ///
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return metastatementMatchesModuloBrackets;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function bracketedMetastatementChildNodeFromMetastatementNode(metastatementNode) {
|
|
50
|
+
let bracketedMetastatementChildNode = null;
|
|
51
|
+
|
|
52
|
+
const nodeA = metastatementNode, ///
|
|
53
|
+
nodeB = bracketedMetastatementNode, ///
|
|
54
|
+
depth = BRACKETED_METASTATEMENT_DEPTH,
|
|
55
|
+
nonTerminalNodeMatches = matcher.matchNode(nodeA, nodeB, depth);
|
|
56
|
+
|
|
57
|
+
if (nonTerminalNodeMatches) {
|
|
58
|
+
bracketedMetastatementChildNode = bracketedMetastatementChildNodeQuery(metastatementNode);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return bracketedMetastatementChildNode;
|
|
62
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { rewriteNodes } from "occam-grammar-utilities";
|
|
4
|
+
import { lexersUtilities, parsersUtilities } from "occam-custom-grammars";
|
|
5
|
+
|
|
6
|
+
import { nodeQuery } from "../utilities/query";
|
|
7
|
+
import { LABEL_RULE_NAME, UNQUALIFIED_STATEMENT_RULE_NAME, UNQUALIFIED_METASTATEMENT_RULE_NAME, CONSTRUCTOR_DECLARATIONRULE_NAME } from "../ruleNames";
|
|
8
|
+
|
|
9
|
+
import { combinedCustomGrammarFromNothing } from "./customGrammar";
|
|
10
|
+
|
|
11
|
+
const { florenceLexerFromCombinedCustomGrammar } = lexersUtilities,
|
|
12
|
+
{ florenceParserFromCombinedCustomGrammar } = parsersUtilities;
|
|
13
|
+
|
|
14
|
+
const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
|
|
15
|
+
florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar),
|
|
16
|
+
florenceParser = florenceParserFromCombinedCustomGrammar(combinedCustomGrammar);
|
|
17
|
+
|
|
18
|
+
const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
|
|
19
|
+
statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
|
|
20
|
+
metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
|
|
21
|
+
|
|
22
|
+
export function termNodeFromTermString(termString, lexer, parser) {
|
|
23
|
+
const ruleName = CONSTRUCTOR_DECLARATIONRULE_NAME,
|
|
24
|
+
content = `Constructor ${termString}
|
|
25
|
+
`,
|
|
26
|
+
node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
|
|
27
|
+
constructorDeclarationNode = node, ///
|
|
28
|
+
termNode = termNodeQuery(constructorDeclarationNode);
|
|
29
|
+
|
|
30
|
+
return termNode;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function labelNodeFromLabelString(labelString, lexer, parser) {
|
|
34
|
+
const content = labelString, ///
|
|
35
|
+
ruleName = LABEL_RULE_NAME,
|
|
36
|
+
node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
|
|
37
|
+
labelNode = node; ///
|
|
38
|
+
|
|
39
|
+
return labelNode;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function statementNodeFromStatementString(statementString, lexer, parser) {
|
|
43
|
+
const ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
|
|
44
|
+
content = `${statementString}
|
|
45
|
+
`,
|
|
46
|
+
node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
|
|
47
|
+
unqualifiedStatementNode = node, ///
|
|
48
|
+
statementNode = statementNodeQuery(unqualifiedStatementNode);
|
|
49
|
+
|
|
50
|
+
return statementNode;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function metastatementNodeFromMetastatementString(metastatementString, lexer, parser) {
|
|
54
|
+
const ruleName = UNQUALIFIED_METASTATEMENT_RULE_NAME,
|
|
55
|
+
content = `${metastatementString}
|
|
56
|
+
`,
|
|
57
|
+
node = nodeFromContentAndRuleName(content, ruleName, lexer, parser),
|
|
58
|
+
unqualifiedMetastatementNode = node, ///
|
|
59
|
+
metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
|
|
60
|
+
|
|
61
|
+
return metastatementNode;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function nodeFromContentAndRuleName(content, ruleName, lexer = florenceLexer, parser = florenceParser) {
|
|
65
|
+
const ruleMap = parser.getRuleMap(),
|
|
66
|
+
rule = ruleMap[ruleName],
|
|
67
|
+
tokens = lexer.tokenise(content),
|
|
68
|
+
node = parser.parse(tokens, rule);
|
|
69
|
+
|
|
70
|
+
rewriteNodes(node);
|
|
71
|
+
|
|
72
|
+
return node;
|
|
73
|
+
}
|