occam-verify-cli 0.0.941 → 0.0.942
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/frame.js +2 -2
- package/lib/proofStep.js +4 -3
- package/lib/rule.js +10 -3
- package/lib/substitution/termForVariable.js +3 -3
- package/lib/substitutions.js +186 -0
- package/lib/topLevelAssertion.js +13 -12
- package/lib/unify/metavariableAgainstStatement.js +4 -4
- package/lib/unify/variableAgainstTerm.js +4 -4
- package/lib/utilities/array.js +13 -1
- package/lib/verify/axiom.js +3 -2
- package/lib/verify/conjecture.js +5 -3
- package/lib/verify/lemma.js +4 -3
- package/lib/verify/metaLemma.js +3 -2
- package/lib/verify/metatheorem.js +3 -2
- package/lib/verify/rule.js +3 -2
- package/lib/verify/theorem.js +4 -3
- package/package.json +4 -4
- package/src/frame.js +1 -1
- package/src/proofStep.js +3 -2
- package/src/rule.js +19 -3
- package/src/substitution/termForVariable.js +2 -2
- package/src/substitutions.js +103 -0
- package/src/topLevelAssertion.js +22 -15
- package/src/unify/metavariableAgainstStatement.js +3 -3
- package/src/unify/variableAgainstTerm.js +3 -3
- package/src/utilities/array.js +15 -0
- package/src/verify/axiom.js +2 -1
- package/src/verify/conjecture.js +5 -2
- package/src/verify/lemma.js +3 -2
- package/src/verify/metaLemma.js +2 -1
- package/src/verify/metatheorem.js +2 -1
- package/src/verify/rule.js +2 -1
- package/src/verify/theorem.js +3 -2
package/src/rule.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import Label from "./label";
|
|
4
4
|
import Premise from "./premise";
|
|
5
5
|
import Conclusion from "./conclusion";
|
|
6
|
+
import Substitutions from "./substitutions";
|
|
6
7
|
|
|
7
8
|
import { reverse, correlate } from "./utilities/array";
|
|
8
9
|
|
|
@@ -34,7 +35,7 @@ export default class Rule {
|
|
|
34
35
|
let statementUnified = false;
|
|
35
36
|
|
|
36
37
|
const proofSteps = localContext.getProofSteps(),
|
|
37
|
-
substitutions =
|
|
38
|
+
substitutions = Substitutions.fromNothing(),
|
|
38
39
|
premisesUnified = unifyPremises(this.premises, proofSteps, substitutions, this.fileContext, localContext);
|
|
39
40
|
|
|
40
41
|
if (premisesUnified) {
|
|
@@ -133,6 +134,8 @@ function matchPremise(premise, proofStep, substitutions, fileContext, localConte
|
|
|
133
134
|
const subproofNode = proofStep.getSubproofNode(),
|
|
134
135
|
statementNode = proofStep.getStatementNode();
|
|
135
136
|
|
|
137
|
+
substitutions.snapshot();
|
|
138
|
+
|
|
136
139
|
if (subproofNode !== null) {
|
|
137
140
|
const subproofUnified = premise.unifySubproof(subproofNode, substitutions, fileContext, localContext);
|
|
138
141
|
|
|
@@ -145,6 +148,10 @@ function matchPremise(premise, proofStep, substitutions, fileContext, localConte
|
|
|
145
148
|
premiseUnified = statementUnified; ///
|
|
146
149
|
}
|
|
147
150
|
|
|
151
|
+
premiseUnified ?
|
|
152
|
+
substitutions.continue() :
|
|
153
|
+
substitutions.rollback();
|
|
154
|
+
|
|
148
155
|
return premiseUnified;
|
|
149
156
|
}
|
|
150
157
|
|
|
@@ -165,8 +172,17 @@ function unifyPremises(premises, proofSteps, substitutions, fileContext, localCo
|
|
|
165
172
|
}
|
|
166
173
|
|
|
167
174
|
function unifyConclusion(conclusion, statementNode, substitutions, fileContext, localContext) {
|
|
168
|
-
|
|
169
|
-
|
|
175
|
+
let conclusionUnified;
|
|
176
|
+
|
|
177
|
+
substitutions.snapshot();
|
|
178
|
+
|
|
179
|
+
const statementUnified = conclusion.unifyStatement(statementNode, substitutions, fileContext, localContext);
|
|
180
|
+
|
|
181
|
+
conclusionUnified = statementUnified; ///
|
|
182
|
+
|
|
183
|
+
conclusionUnified ?
|
|
184
|
+
substitutions.continue() :
|
|
185
|
+
substitutions.rollback();
|
|
170
186
|
|
|
171
187
|
return conclusionUnified;
|
|
172
188
|
}
|
|
@@ -106,7 +106,7 @@ function substituteTermNode(termNode, substitutions) {
|
|
|
106
106
|
const termVariableNode = variableNodeQuery(termNode);
|
|
107
107
|
|
|
108
108
|
if (termVariableNode !== null) {
|
|
109
|
-
substitutions.
|
|
109
|
+
substitutions.someSubstitution((substitution) => {
|
|
110
110
|
const substitutionMatchesVariableNode = substitution.matchVariableNode(termVariableNode);
|
|
111
111
|
|
|
112
112
|
if (substitutionMatchesVariableNode) {
|
|
@@ -121,7 +121,7 @@ function substituteTermNode(termNode, substitutions) {
|
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
function substituteVariableNode(variableNode, substitutions) {
|
|
124
|
-
substitutions.
|
|
124
|
+
substitutions.someSubstitution((substitution) => {
|
|
125
125
|
const substitutionMatchesVariableNode = substitution.matchVariableNode(variableNode);
|
|
126
126
|
|
|
127
127
|
if (substitutionMatchesVariableNode) {
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import StatementForMetavariableSubstitution from "./substitution/statementForMetavariable";
|
|
4
|
+
|
|
5
|
+
import { prune, compare } from "./utilities/array";
|
|
6
|
+
|
|
7
|
+
export default class Substitutions {
|
|
8
|
+
constructor(array, savedArray) {
|
|
9
|
+
this.array = array;
|
|
10
|
+
this.savedArray = savedArray;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
getArray() {
|
|
14
|
+
return this.array;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getSavedArray() {
|
|
18
|
+
return this.savedArray;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
hasChanged() {
|
|
22
|
+
const compares = compare(this.array, this.savedArray),
|
|
23
|
+
changed = !compares; ///
|
|
24
|
+
|
|
25
|
+
return changed;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
findSubstitution(callback) { return this.array.find(callback); }
|
|
29
|
+
|
|
30
|
+
someSubstitution(callback) { return this.array.some(callback); }
|
|
31
|
+
|
|
32
|
+
everySubstitution(callback) { return this.array.every(callback); }
|
|
33
|
+
|
|
34
|
+
addSubstitution(substitution) { this.array.push(substitution); }
|
|
35
|
+
|
|
36
|
+
removeSubstitution(substitution) {
|
|
37
|
+
const substitutionA = substitution; ///
|
|
38
|
+
|
|
39
|
+
prune(this.array, (substitution) => {
|
|
40
|
+
const substitutionB = substitution; ///
|
|
41
|
+
|
|
42
|
+
if (substitutionA !== substitutionB) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
snapshot() {
|
|
49
|
+
this.savedArray = [
|
|
50
|
+
...this.array
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
rollback() {
|
|
55
|
+
const start = 0,
|
|
56
|
+
end = Infinity;
|
|
57
|
+
|
|
58
|
+
this.array.splice(start, end, ...this.savedArray);
|
|
59
|
+
|
|
60
|
+
this.savedArray = null;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
continue() {
|
|
64
|
+
this.savedArray = null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
transform() {
|
|
68
|
+
///
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
toJSON(tokens) {
|
|
72
|
+
const json = this.array.map((substitution) => {
|
|
73
|
+
const substitutionJSON = substitution.toJSON(tokens);
|
|
74
|
+
|
|
75
|
+
return substitutionJSON;
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
return json;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
static fromNothing() {
|
|
82
|
+
const array = [],
|
|
83
|
+
savedArray = null,
|
|
84
|
+
substitutions = new Substitutions(array, savedArray);
|
|
85
|
+
|
|
86
|
+
return substitutions;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
static fromJSONAndFileContext(json, fileContext) {
|
|
90
|
+
const substitutionsJSON = json, ///
|
|
91
|
+
array = substitutionsJSON.map((substitutionJSON) => {
|
|
92
|
+
const json = substitutionJSON, ///
|
|
93
|
+
statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromJSONAndFileContext(json, fileContext),
|
|
94
|
+
substitution = statementForMetavariableSubstitution; ///
|
|
95
|
+
|
|
96
|
+
return substitution;
|
|
97
|
+
}),
|
|
98
|
+
savedArray = null,
|
|
99
|
+
substitutions = new Substitutions(array, savedArray);
|
|
100
|
+
|
|
101
|
+
return substitutions;
|
|
102
|
+
}
|
|
103
|
+
}
|
package/src/topLevelAssertion.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import Label from "./label";
|
|
4
4
|
import Consequent from "./consequent";
|
|
5
5
|
import Supposition from "./supposition";
|
|
6
|
-
import
|
|
6
|
+
import Substitutions from "./substitutions";
|
|
7
7
|
|
|
8
8
|
import { reverse, correlate } from "./utilities/array";
|
|
9
9
|
|
|
@@ -40,7 +40,7 @@ export default class TopLevelAssertion {
|
|
|
40
40
|
let statementUnified = false;
|
|
41
41
|
|
|
42
42
|
const proofSteps = localContext.getProofSteps(),
|
|
43
|
-
substitutions =
|
|
43
|
+
substitutions = Substitutions.fromNothing(),
|
|
44
44
|
suppositionsUnified = unifySuppositions(this.suppositions, proofSteps, substitutions, this.fileContext, localContext);
|
|
45
45
|
|
|
46
46
|
if (suppositionsUnified) {
|
|
@@ -76,11 +76,7 @@ export default class TopLevelAssertion {
|
|
|
76
76
|
return suppositionJSON;
|
|
77
77
|
}),
|
|
78
78
|
consequentJSON = this.consequent.toJSON(tokens),
|
|
79
|
-
substitutionsJSON = this.substitutions.
|
|
80
|
-
const substitutionJSON = substitution.toJSON();
|
|
81
|
-
|
|
82
|
-
return substitutionJSON;
|
|
83
|
-
}),
|
|
79
|
+
substitutionsJSON = this.substitutions.toJSON(tokens),
|
|
84
80
|
labels = labelsJSON, ///
|
|
85
81
|
suppositions = suppositionsJSON, ///
|
|
86
82
|
consequent = consequentJSON, ///
|
|
@@ -126,13 +122,9 @@ export default class TopLevelAssertion {
|
|
|
126
122
|
|
|
127
123
|
const substitutionsJSON = substitutions; ///
|
|
128
124
|
|
|
129
|
-
|
|
130
|
-
const json = substitutionJSON, ///
|
|
131
|
-
statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromJSONAndFileContext(json, fileContext),
|
|
132
|
-
substitution = statementForMetavariableSubstitution; ///
|
|
125
|
+
json = substitutionsJSON; ///
|
|
133
126
|
|
|
134
|
-
|
|
135
|
-
});
|
|
127
|
+
substitutions = Substitutions.fromJSONAndFileContext(json, fileContext);
|
|
136
128
|
|
|
137
129
|
return new Class(labels, suppositions, consequent, substitutions, fileContext); ///
|
|
138
130
|
}
|
|
@@ -159,6 +151,8 @@ function unifySuppositions(suppositions, proofSteps, substitutions, fileContext,
|
|
|
159
151
|
function unifySupposition(supposition, proofStep, substitutions, fileContext, localContext) {
|
|
160
152
|
let suppositionUnified = false;
|
|
161
153
|
|
|
154
|
+
substitutions.snapshot();
|
|
155
|
+
|
|
162
156
|
const subproofNode = proofStep.getSubproofNode(),
|
|
163
157
|
statementNode = proofStep.getStatementNode();
|
|
164
158
|
|
|
@@ -174,12 +168,25 @@ function unifySupposition(supposition, proofStep, substitutions, fileContext, lo
|
|
|
174
168
|
suppositionUnified = statementUnified; ///
|
|
175
169
|
}
|
|
176
170
|
|
|
171
|
+
suppositionUnified ?
|
|
172
|
+
substitutions.continue() :
|
|
173
|
+
substitutions.rollback();
|
|
174
|
+
|
|
177
175
|
return suppositionUnified;
|
|
178
176
|
}
|
|
179
177
|
|
|
180
178
|
function unifyConsequent(consequent, statementNode, substitutions, fileContext, localContext) {
|
|
181
|
-
|
|
182
|
-
|
|
179
|
+
let consequentUnified;
|
|
180
|
+
|
|
181
|
+
substitutions.snapshot();
|
|
182
|
+
|
|
183
|
+
const statementUnified = consequent.unifyStatement(statementNode, substitutions, fileContext, localContext);
|
|
184
|
+
|
|
185
|
+
consequentUnified = statementUnified; ///
|
|
186
|
+
|
|
187
|
+
consequentUnified ?
|
|
188
|
+
substitutions.continue() :
|
|
189
|
+
substitutions.rollback();
|
|
183
190
|
|
|
184
191
|
return consequentUnified;
|
|
185
192
|
}
|
|
@@ -7,7 +7,7 @@ import StatementForMetavariableSubstitution from "../substitution/statementForMe
|
|
|
7
7
|
export default function unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, unifyAhead) {
|
|
8
8
|
let metavariableUnifiedAgainstStatement = false;
|
|
9
9
|
|
|
10
|
-
const substitution = substitutions.
|
|
10
|
+
const substitution = substitutions.findSubstitution((substitution) => {
|
|
11
11
|
const substitutionMatchesMetavariableNodeA = substitution.matchMetavariableNode(metavariableNodeA);
|
|
12
12
|
|
|
13
13
|
if (substitutionMatchesMetavariableNodeA) {
|
|
@@ -67,12 +67,12 @@ export default function unifyMetavariableAgainstStatement(metavariableNodeA, sta
|
|
|
67
67
|
statementForMetavariableSubstitution = StatementForMetavariableSubstitution.fromMetavariableNodeStatementNodeAndSubstitutionNode(metavariableNode, statementNode, substitutionNode),
|
|
68
68
|
substitution = statementForMetavariableSubstitution; ///
|
|
69
69
|
|
|
70
|
-
substitutions.
|
|
70
|
+
substitutions.addSubstitution(substitution);
|
|
71
71
|
|
|
72
72
|
unifiedAhead = unifyAhead();
|
|
73
73
|
|
|
74
74
|
if (!unifiedAhead) {
|
|
75
|
-
substitutions.
|
|
75
|
+
substitutions.removeSubstitution(substitution);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
metavariableUnifiedAgainstStatement = unifiedAhead; ///
|
|
@@ -11,7 +11,7 @@ const variableNodeQuery = nodeQuery("/term/variable");
|
|
|
11
11
|
export default function unifyVariableAgainstTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
12
12
|
let variableUnifiedAgainstTerm = false;
|
|
13
13
|
|
|
14
|
-
const substitution = substitutions.
|
|
14
|
+
const substitution = substitutions.findSubstitution((substitution) => {
|
|
15
15
|
const substitutionMatchesVariableNodeA = substitution.matchVariableNode(variableNodeA);
|
|
16
16
|
|
|
17
17
|
if (substitutionMatchesVariableNodeA) {
|
|
@@ -54,12 +54,12 @@ export default function unifyVariableAgainstTerm(variableNodeA, termNodeB, subst
|
|
|
54
54
|
termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
|
|
55
55
|
substitution = termForVariableSubstitution; ///
|
|
56
56
|
|
|
57
|
-
substitutions.
|
|
57
|
+
substitutions.addSubstitution(substitution);
|
|
58
58
|
|
|
59
59
|
verifiedAhead = verifyAhead();
|
|
60
60
|
|
|
61
61
|
if (!verifiedAhead) {
|
|
62
|
-
substitutions.
|
|
62
|
+
substitutions.removeSubstitution(substitution);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
}
|
package/src/utilities/array.js
CHANGED
|
@@ -12,6 +12,21 @@ export function reverse(array) {
|
|
|
12
12
|
return array;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
export function compare(arrayA, arrayB) {
|
|
16
|
+
let compares = false;
|
|
17
|
+
|
|
18
|
+
const arrayALength = arrayA.length,
|
|
19
|
+
arrayBLength = arrayB.length;
|
|
20
|
+
|
|
21
|
+
if (arrayALength === arrayBLength) {
|
|
22
|
+
const correlates = correlate(arrayA, arrayB);
|
|
23
|
+
|
|
24
|
+
compares = correlates; ///
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return compares;
|
|
28
|
+
}
|
|
29
|
+
|
|
15
30
|
export function correlate(arrayA, arrayB, callback) {
|
|
16
31
|
arrayB = [ ///
|
|
17
32
|
...arrayB
|
package/src/verify/axiom.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import Axiom from "../axiom";
|
|
4
4
|
import LocalContext from "../context/local";
|
|
5
5
|
import verifyLabels from "../verify/labels";
|
|
6
|
+
import Substitutions from "../substitutions";
|
|
6
7
|
import verifyConsequent from "../verify/consequent";
|
|
7
8
|
import verifySuppositions from "../verify/suppositions";
|
|
8
9
|
|
|
@@ -37,8 +38,8 @@ export default function verifyAxiom(axiomNode, fileContext) {
|
|
|
37
38
|
|
|
38
39
|
if (consequentVerified) {
|
|
39
40
|
const firstConsequent = first(consequents),
|
|
41
|
+
substitutions = Substitutions.fromNothing(),
|
|
40
42
|
consequent = firstConsequent, ///
|
|
41
|
-
substitutions = [],
|
|
42
43
|
axiom = Axiom.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext);
|
|
43
44
|
|
|
44
45
|
fileContext.addAxiom(axiom);
|
package/src/verify/conjecture.js
CHANGED
|
@@ -4,6 +4,7 @@ import Conjecture from "../conjecture";
|
|
|
4
4
|
import verifyProof from "../verify/proof";
|
|
5
5
|
import verifyLabels from "../verify/labels";
|
|
6
6
|
import LocalContext from "../context/local";
|
|
7
|
+
import Substitutions from "../substitutions";
|
|
7
8
|
import verifyConsequent from "../verify/consequent";
|
|
8
9
|
import verifySuppositions from "../verify/suppositions";
|
|
9
10
|
|
|
@@ -43,10 +44,12 @@ export default function verifyConjecture(conjectureNode, fileContext) {
|
|
|
43
44
|
consequent = firstConsequent; ///
|
|
44
45
|
|
|
45
46
|
if (proofNode !== null) {
|
|
46
|
-
|
|
47
|
+
const substitutions = Substitutions.fromNothing();
|
|
48
|
+
|
|
49
|
+
verifyProof(proofNode, consequent, substitutions, localContext);
|
|
47
50
|
}
|
|
48
51
|
|
|
49
|
-
const substitutions =
|
|
52
|
+
const substitutions = Substitutions.fromNothing(),
|
|
50
53
|
conjecture = Conjecture.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext);
|
|
51
54
|
|
|
52
55
|
fileContext.addConjecture(conjecture);
|
package/src/verify/lemma.js
CHANGED
|
@@ -4,6 +4,7 @@ import Lemma from "../lemma";
|
|
|
4
4
|
import verifyProof from "../verify/proof";
|
|
5
5
|
import verifyLabels from "../verify/labels";
|
|
6
6
|
import LocalContext from "../context/local";
|
|
7
|
+
import Substitutions from "../substitutions";
|
|
7
8
|
import verifyConsequent from "../verify/consequent";
|
|
8
9
|
import verifySuppositions from "../verify/suppositions";
|
|
9
10
|
|
|
@@ -45,11 +46,11 @@ export default function verifyLemma(lemmaNode, fileContext) {
|
|
|
45
46
|
firstConsequent = first(consequents),
|
|
46
47
|
consequent = firstConsequent, ///
|
|
47
48
|
statementNode = consequent.getStatementNode(),
|
|
48
|
-
substitutions =
|
|
49
|
+
substitutions = Substitutions.fromNothing(),
|
|
49
50
|
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
50
51
|
|
|
51
52
|
if (proofVerified) {
|
|
52
|
-
const substitutions =
|
|
53
|
+
const substitutions = Substitutions.fromNothing(),
|
|
53
54
|
lemma = Lemma.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext);
|
|
54
55
|
|
|
55
56
|
fileContext.addLemma(lemma);
|
package/src/verify/metaLemma.js
CHANGED
|
@@ -4,6 +4,7 @@ import MetaLemma from "../metaLemma";
|
|
|
4
4
|
import verifyProof from "../verify/proof";
|
|
5
5
|
import LocalContext from "../context/local";
|
|
6
6
|
import verifyLabels from "../verify/labels";
|
|
7
|
+
import Substitutions from "../substitutions";
|
|
7
8
|
import verifyConsequent from "../verify/consequent";
|
|
8
9
|
import verifySuppositions from "../verify/suppositions";
|
|
9
10
|
|
|
@@ -45,7 +46,7 @@ export default function verifyMetaLemma(metaLemmaNode, fileContext) {
|
|
|
45
46
|
firstConsequent = first(consequents),
|
|
46
47
|
consequent = firstConsequent, ///
|
|
47
48
|
statementNode = consequent.getStatementNode(),
|
|
48
|
-
substitutions =
|
|
49
|
+
substitutions = Substitutions.fromNothing(),
|
|
49
50
|
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
50
51
|
|
|
51
52
|
if (proofVerified) {
|
|
@@ -4,6 +4,7 @@ import verifyProof from "../verify/proof";
|
|
|
4
4
|
import Metatheorem from "../metatheorem";
|
|
5
5
|
import verifyLabels from "../verify/labels";
|
|
6
6
|
import LocalContext from "../context/local";
|
|
7
|
+
import Substitutions from "../substitutions";
|
|
7
8
|
import verifyConsequent from "../verify/consequent";
|
|
8
9
|
import verifySuppositions from "../verify/suppositions";
|
|
9
10
|
|
|
@@ -41,7 +42,7 @@ export default function verifyMetatheorem(metatheoremNode, fileContext) {
|
|
|
41
42
|
const proofNode = proofNodeQuery(metatheoremNode),
|
|
42
43
|
firstConsequent = first(consequents),
|
|
43
44
|
consequent = firstConsequent, ///
|
|
44
|
-
substitutions =
|
|
45
|
+
substitutions = Substitutions.fromNothing(),
|
|
45
46
|
statementNode = consequent.getStatementNode(),
|
|
46
47
|
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
47
48
|
|
package/src/verify/rule.js
CHANGED
|
@@ -9,6 +9,7 @@ import verifyConclusion from "../verify/conclusion";
|
|
|
9
9
|
|
|
10
10
|
import { first } from "../utilities/array";
|
|
11
11
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
12
|
+
import Substitutions from "../substitutions";
|
|
12
13
|
|
|
13
14
|
const proofNodeQuery = nodeQuery("/rule/proof!"),
|
|
14
15
|
labelNodesQuery = nodesQuery("/rule/label"),
|
|
@@ -45,7 +46,7 @@ export default function verifyRule(ruleNode, fileContext) {
|
|
|
45
46
|
conclusion = firstConclusion; ///
|
|
46
47
|
|
|
47
48
|
if (proofNode !== null) {
|
|
48
|
-
const substitutions =
|
|
49
|
+
const substitutions = Substitutions.fromNothing(),
|
|
49
50
|
statementNode = conclusion.getStatementNode();
|
|
50
51
|
|
|
51
52
|
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
package/src/verify/theorem.js
CHANGED
|
@@ -4,6 +4,7 @@ import Theorem from "../theorem";
|
|
|
4
4
|
import verifyProof from "../verify/proof";
|
|
5
5
|
import verifyLabels from "../verify/labels";
|
|
6
6
|
import LocalContext from "../context/local";
|
|
7
|
+
import Substitutions from "../substitutions";
|
|
7
8
|
import verifyConsequent from "../verify/consequent";
|
|
8
9
|
import verifySuppositions from "../verify/suppositions";
|
|
9
10
|
|
|
@@ -42,11 +43,11 @@ export default function verifyTheorem(theoremNode, fileContext) {
|
|
|
42
43
|
firstConsequent = first(consequents),
|
|
43
44
|
consequent = firstConsequent, ///
|
|
44
45
|
statementNode = consequent.getStatementNode(),
|
|
45
|
-
substitutions =
|
|
46
|
+
substitutions = Substitutions.fromNothing(),
|
|
46
47
|
proofVerified = verifyProof(proofNode, statementNode, substitutions, localContext);
|
|
47
48
|
|
|
48
49
|
if (proofVerified) {
|
|
49
|
-
const substitutions =
|
|
50
|
+
const substitutions = Substitutions.fromNothing(),
|
|
50
51
|
theorem = Theorem.fromLabelsSuppositionsConsequentSubstitutionsAndFileContext(labels, suppositions, consequent, substitutions, fileContext);
|
|
51
52
|
|
|
52
53
|
fileContext.addTheorem(theorem);
|