occam-verify-cli 1.0.587 → 1.0.602
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/context/ephemeral.js +74 -2
- package/lib/context/file/nominal.js +11 -9
- package/lib/context/liminal.js +161 -24
- package/lib/context/literal.js +8 -2
- package/lib/context/scoped.js +4 -28
- package/lib/context/synthetic.js +146 -0
- package/lib/context.js +170 -1
- package/lib/element/assertion/contained.js +21 -15
- package/lib/element/assertion/defined.js +45 -65
- package/lib/element/assertion/property.js +25 -19
- package/lib/element/assertion/satisfies.js +14 -8
- package/lib/element/assertion/subproof.js +12 -6
- package/lib/element/assertion.js +47 -1
- package/lib/element/assumption.js +12 -12
- package/lib/element/conclusion.js +2 -2
- package/lib/element/deduction.js +2 -2
- package/lib/element/frame.js +61 -29
- package/lib/element/judgement.js +7 -1
- package/lib/element/label.js +8 -8
- package/lib/element/metavariable.js +71 -59
- package/lib/element/procedureCall.js +24 -8
- package/lib/element/proof.js +43 -35
- package/lib/element/proofAssertion/premise.js +122 -97
- package/lib/element/proofAssertion/step.js +161 -115
- package/lib/element/proofAssertion/supposition.js +157 -118
- package/lib/element/proofAssertion.js +3 -3
- package/lib/element/reference.js +40 -7
- package/lib/element/rule.js +227 -95
- package/lib/element/signature.js +2 -1
- package/lib/element/statement.js +67 -34
- package/lib/element/substitution/frame.js +36 -16
- package/lib/element/substitution/reference.js +36 -16
- package/lib/element/substitution/statement.js +94 -55
- package/lib/element/substitution/term.js +36 -16
- package/lib/element/substitution.js +54 -17
- package/lib/element/substitutions.js +4 -276
- package/lib/element/term.js +60 -31
- package/lib/element/topLevelAssertion/axiom.js +13 -4
- package/lib/element/topLevelAssertion/conjecture.js +7 -2
- package/lib/element/topLevelAssertion/theorem.js +7 -2
- package/lib/element/topLevelAssertion.js +201 -134
- package/lib/element/topLevelMetaAssertion.js +310 -51
- package/lib/element/variable.js +15 -6
- package/lib/node/substitution/statement.js +33 -1
- package/lib/process/unify.js +6 -6
- package/lib/utilities/context.js +10 -25
- package/lib/utilities/element.js +34 -9
- package/lib/utilities/statement.js +1 -8
- package/lib/utilities/string.js +12 -1
- package/lib/utilities/substitutions.js +42 -16
- package/lib/utilities/unification.js +3 -1
- package/lib/utilities/validation.js +2 -2
- package/package.json +4 -4
- package/src/context/ephemeral.js +73 -1
- package/src/context/file/nominal.js +14 -11
- package/src/context/liminal.js +180 -25
- package/src/context/literal.js +3 -1
- package/src/context/scoped.js +3 -35
- package/src/context/synthetic.js +49 -0
- package/src/context.js +163 -1
- package/src/element/assertion/contained.js +28 -20
- package/src/element/assertion/defined.js +62 -34
- package/src/element/assertion/property.js +27 -19
- package/src/element/assertion/satisfies.js +15 -7
- package/src/element/assertion/subproof.js +13 -5
- package/src/element/assertion.js +35 -0
- package/src/element/assumption.js +5 -5
- package/src/element/conclusion.js +2 -4
- package/src/element/deduction.js +2 -4
- package/src/element/frame.js +71 -39
- package/src/element/judgement.js +2 -0
- package/src/element/label.js +4 -4
- package/src/element/metavariable.js +94 -75
- package/src/element/procedureCall.js +6 -6
- package/src/element/proof.js +6 -6
- package/src/element/proofAssertion/premise.js +101 -69
- package/src/element/proofAssertion/step.js +78 -39
- package/src/element/proofAssertion/supposition.js +141 -115
- package/src/element/proofAssertion.js +3 -2
- package/src/element/reference.js +52 -10
- package/src/element/rule.js +138 -76
- package/src/element/signature.js +2 -0
- package/src/element/statement.js +76 -45
- package/src/element/substitution/frame.js +44 -15
- package/src/element/substitution/reference.js +44 -15
- package/src/element/substitution/statement.js +124 -72
- package/src/element/substitution/term.js +43 -15
- package/src/element/substitution.js +55 -18
- package/src/element/substitutions.js +1 -258
- package/src/element/term.js +65 -34
- package/src/element/topLevelAssertion/axiom.js +1 -1
- package/src/element/topLevelAssertion/conjecture.js +1 -1
- package/src/element/topLevelAssertion/theorem.js +1 -1
- package/src/element/topLevelAssertion.js +128 -48
- package/src/element/topLevelMetaAssertion.js +86 -32
- package/src/element/variable.js +15 -5
- package/src/node/substitution/statement.js +33 -0
- package/src/process/unify.js +6 -8
- package/src/utilities/context.js +9 -8
- package/src/utilities/element.js +37 -10
- package/src/utilities/statement.js +0 -7
- package/src/utilities/string.js +14 -0
- package/src/utilities/substitutions.js +59 -17
- package/src/utilities/unification.js +4 -0
- package/src/utilities/validation.js +3 -1
package/src/element/assertion.js
CHANGED
|
@@ -6,4 +6,39 @@ export default class Assertion extends Element {
|
|
|
6
6
|
constructor(context, string, node) {
|
|
7
7
|
super(context, string, node);
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
getAssertionNode() {
|
|
11
|
+
const node = this.getNode(),
|
|
12
|
+
assertionNode = node; ///
|
|
13
|
+
|
|
14
|
+
return assertionNode;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
matchAssertionNode(assertionNode) {
|
|
18
|
+
const assertionNodeA = assertionNode; ///
|
|
19
|
+
|
|
20
|
+
assertionNode = this.getAssertionNode();
|
|
21
|
+
|
|
22
|
+
const assertionNodeB = assertionNode, ///
|
|
23
|
+
assertionNodeAAMatchesAssertionBNodeB = assertionNodeA.match(assertionNodeB),
|
|
24
|
+
equalTo = assertionNodeAAMatchesAssertionBNodeB; ///
|
|
25
|
+
|
|
26
|
+
return equalTo;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
isValid(context) {
|
|
30
|
+
const assertionNode = this.getAssertionNode(),
|
|
31
|
+
assertionPresent = context.isAssertionPresentByAssertionNode(assertionNode),
|
|
32
|
+
valid = assertionPresent; ///
|
|
33
|
+
|
|
34
|
+
return valid;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
isEqualTo(assertion) {
|
|
38
|
+
const assertionNode = assertion.getNode(),
|
|
39
|
+
assertionNodeMatches = this.matchAssertionNode(assertionNode),
|
|
40
|
+
equalTo = assertionNodeMatches; ///
|
|
41
|
+
|
|
42
|
+
return equalTo;
|
|
43
|
+
}
|
|
9
44
|
}
|
|
@@ -33,11 +33,11 @@ export default define(class Assumption extends Element {
|
|
|
33
33
|
context.trace(`Comparing the '${assumptionString}' assumption to the '${substitutionString}' substitution...`);
|
|
34
34
|
|
|
35
35
|
const statement = substitution.getStatement(),
|
|
36
|
-
metavariable = substitution.getMetavariable(),
|
|
36
|
+
metavariable = substitution.getMetavariable(generalContext, specificContext),
|
|
37
37
|
statementEqualToStatement = this.statement.isEqualTo(statement),
|
|
38
|
-
|
|
38
|
+
referenceMetavariableComparesToMetavariable = this.reference.compareMetavariable(metavariable);
|
|
39
39
|
|
|
40
|
-
if (statementEqualToStatement &&
|
|
40
|
+
if (statementEqualToStatement && referenceMetavariableComparesToMetavariable) {
|
|
41
41
|
comparesToSubstituion = true;
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -86,7 +86,7 @@ export default define(class Assumption extends Element {
|
|
|
86
86
|
validateReference(assignments, stated, context) {
|
|
87
87
|
let referenceValidates;
|
|
88
88
|
|
|
89
|
-
const assumptionString = this.getString(),
|
|
89
|
+
const assumptionString = this.getString(), ///
|
|
90
90
|
referenceString = this.reference.getString();
|
|
91
91
|
|
|
92
92
|
context.trace(`Validating the '${assumptionString}' assumption's '${referenceString}' reference...`);
|
|
@@ -103,7 +103,7 @@ export default define(class Assumption extends Element {
|
|
|
103
103
|
validateStatement(assignments, stated, context) {
|
|
104
104
|
let statementValidates;
|
|
105
105
|
|
|
106
|
-
const assumptionString = this.getString(),
|
|
106
|
+
const assumptionString = this.getString(), ///
|
|
107
107
|
statementString = this.statement.getString();
|
|
108
108
|
|
|
109
109
|
context.trace(`Validating the '${assumptionString}' assumption's '${statementString}' statement...`);
|
|
@@ -4,7 +4,7 @@ import { Element } from "occam-languages";
|
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
6
|
import { attempt } from "../utilities/context";
|
|
7
|
-
import {
|
|
7
|
+
import { statementFromJSON, termsToTermsJSON, framesToFramesJSON, statementToStatementJSON } from "../utilities/json";
|
|
8
8
|
|
|
9
9
|
export default define(class Conclusion extends Element {
|
|
10
10
|
constructor(context, string, node, statement) {
|
|
@@ -101,9 +101,7 @@ export default define(class Conclusion extends Element {
|
|
|
101
101
|
static name = "Conclusion";
|
|
102
102
|
|
|
103
103
|
static fromJSON(json, context) {
|
|
104
|
-
const
|
|
105
|
-
frames = framesFromJSON(json, context),
|
|
106
|
-
statement = statementFromJSON(json, context),
|
|
104
|
+
const statement = statementFromJSON(json, context),
|
|
107
105
|
node = null,
|
|
108
106
|
string = statement.getString();
|
|
109
107
|
|
package/src/element/deduction.js
CHANGED
|
@@ -4,7 +4,7 @@ import { Element } from "occam-languages";
|
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
6
|
import { attempt } from "../utilities/context";
|
|
7
|
-
import {
|
|
7
|
+
import { statementFromJSON, termsToTermsJSON, framesToFramesJSON, statementToStatementJSON } from "../utilities/json";
|
|
8
8
|
|
|
9
9
|
export default define(class Deduction extends Element {
|
|
10
10
|
constructor(context, string, node, statement) {
|
|
@@ -126,9 +126,7 @@ export default define(class Deduction extends Element {
|
|
|
126
126
|
static name = "Deduction";
|
|
127
127
|
|
|
128
128
|
static fromJSON(json, context) {
|
|
129
|
-
const
|
|
130
|
-
frames = framesFromJSON(json, context),
|
|
131
|
-
statement = statementFromJSON(json, context),
|
|
129
|
+
const statement = statementFromJSON(json, context),
|
|
132
130
|
string = statement.getString();
|
|
133
131
|
|
|
134
132
|
const deduction = new Deduction(context, string, statement);
|
package/src/element/frame.js
CHANGED
|
@@ -30,47 +30,71 @@ export default define(class Frame extends Element {
|
|
|
30
30
|
return metavariableName;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
getFrameNode() {
|
|
34
34
|
const node = this.getNode(),
|
|
35
|
-
frameNode = node
|
|
36
|
-
singular = frameNode.isSingular();
|
|
35
|
+
frameNode = node; ///
|
|
37
36
|
|
|
38
|
-
return
|
|
37
|
+
return frameNode;
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
let
|
|
40
|
+
compareMetavariable(metavariable) {
|
|
41
|
+
let metavaraibleComparseTo = false;
|
|
43
42
|
|
|
44
43
|
const singular = this.isSingular();
|
|
45
44
|
|
|
46
45
|
if (singular) {
|
|
47
|
-
|
|
48
|
-
metavariableA = metavariable, ///
|
|
49
|
-
singularMetavariableNode = node.getSingularMetavariableNode(),
|
|
50
|
-
metavariableName = singularMetavariableNode.getMetavariableName();
|
|
46
|
+
let metavariableName;
|
|
51
47
|
|
|
52
|
-
|
|
48
|
+
metavariableName = this.metavariable.getName();
|
|
53
49
|
|
|
54
|
-
const
|
|
55
|
-
equalTo = metavariableA.isEqualTo(metavariableB);
|
|
50
|
+
const metavariableNameA = metavariableName ///
|
|
56
51
|
|
|
57
|
-
|
|
52
|
+
metavariableName = metavariable.getName();
|
|
53
|
+
|
|
54
|
+
const metavariableNameB = metavariableName; ///
|
|
55
|
+
|
|
56
|
+
metavaraibleComparseTo = (metavariableNameA === metavariableNameB);
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
return
|
|
59
|
+
return metavaraibleComparseTo;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
matchFrameNode(frameNode) {
|
|
63
|
+
const frameNodeA = frameNode; ///
|
|
64
|
+
|
|
65
|
+
frameNode = this.getFrameNode();
|
|
66
|
+
|
|
67
|
+
const frameNodeB = frameNode, ///
|
|
68
|
+
frameNodeAAMatchesFrameBNodeB = frameNodeA.match(frameNodeB),
|
|
69
|
+
equalTo = frameNodeAAMatchesFrameBNodeB; ///
|
|
70
|
+
|
|
71
|
+
return equalTo;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
isValid(context) {
|
|
75
|
+
const frameNode = this.getFrameNode(),
|
|
76
|
+
framePresent = context.isFramePresentByFrameNode(frameNode),
|
|
77
|
+
valid = framePresent; ///
|
|
78
|
+
|
|
79
|
+
return valid;
|
|
61
80
|
}
|
|
62
81
|
|
|
63
82
|
isEqualTo(frame) {
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
frameBNode = frameB.getNode(),
|
|
68
|
-
frameANodeMatchesFrameBNode = frameANode.match(frameBNode),
|
|
69
|
-
equalTo = frameANodeMatchesFrameBNode; ///
|
|
83
|
+
const frameNode = frame.getNode(),
|
|
84
|
+
frameNodeMatches = this.matchFrameNode(frameNode),
|
|
85
|
+
equalTo = frameNodeMatches; ///
|
|
70
86
|
|
|
71
87
|
return equalTo;
|
|
72
88
|
}
|
|
73
89
|
|
|
90
|
+
isSingular() {
|
|
91
|
+
const node = this.getNode(),
|
|
92
|
+
frameNode = node, ///
|
|
93
|
+
singular = frameNode.isSingular();
|
|
94
|
+
|
|
95
|
+
return singular;
|
|
96
|
+
}
|
|
97
|
+
|
|
74
98
|
compareParameter(parameter) {
|
|
75
99
|
let comparesToParamter = false;
|
|
76
100
|
|
|
@@ -124,7 +148,7 @@ export default define(class Frame extends Element {
|
|
|
124
148
|
|
|
125
149
|
context.trace(`Comparing the '${frameString}' frame to the '${substitutionsString}' substitutions...`);
|
|
126
150
|
|
|
127
|
-
comparesToSubstitutions = substitutions.
|
|
151
|
+
comparesToSubstitutions = substitutions.every((substitution) => {
|
|
128
152
|
const compaaresToSubstitution = this.compareSubstitution(substitution, context);
|
|
129
153
|
|
|
130
154
|
if (compaaresToSubstitution) {
|
|
@@ -146,30 +170,38 @@ export default define(class Frame extends Element {
|
|
|
146
170
|
|
|
147
171
|
context.trace(`Validating the '${frameString}' frame...`);
|
|
148
172
|
|
|
149
|
-
const
|
|
150
|
-
metavariablevalidates = this.validateMetavariable(assignments, stated, context);
|
|
173
|
+
const valid = this.isValid(context);
|
|
151
174
|
|
|
152
|
-
if (
|
|
153
|
-
|
|
154
|
-
validatesWhenDerived = false;
|
|
175
|
+
if (valid) {
|
|
176
|
+
validates = true;
|
|
155
177
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
178
|
+
context.debug(`...the '${frameString}' frame is already valid.`);
|
|
179
|
+
} else {
|
|
180
|
+
const assumptionsValidate = this.validateAssumptions(assignments, stated, context),
|
|
181
|
+
metavariablevalidates = this.validateMetavariable(assignments, stated, context);
|
|
182
|
+
|
|
183
|
+
if (assumptionsValidate && metavariablevalidates) {
|
|
184
|
+
let validatesWhenStated = false,
|
|
185
|
+
validatesWhenDerived = false;
|
|
186
|
+
|
|
187
|
+
if (stated) {
|
|
188
|
+
validatesWhenStated = this.validateWhenStated(assignments, context);
|
|
189
|
+
} else {
|
|
190
|
+
validatesWhenDerived = this.validateWhenDerived(context);
|
|
191
|
+
}
|
|
161
192
|
|
|
162
|
-
|
|
163
|
-
|
|
193
|
+
if (validatesWhenStated || validatesWhenDerived) {
|
|
194
|
+
validates = true;
|
|
195
|
+
}
|
|
164
196
|
}
|
|
165
|
-
}
|
|
166
197
|
|
|
167
|
-
|
|
168
|
-
|
|
198
|
+
if (validates) {
|
|
199
|
+
const frame = this; ///
|
|
169
200
|
|
|
170
|
-
|
|
201
|
+
context.addFrame(frame);
|
|
171
202
|
|
|
172
|
-
|
|
203
|
+
context.debug(`...validated the '${frameString}' frame.`);
|
|
204
|
+
}
|
|
173
205
|
}
|
|
174
206
|
|
|
175
207
|
return validates;
|
package/src/element/judgement.js
CHANGED
|
@@ -31,6 +31,8 @@ export default define(class Judgement extends Element {
|
|
|
31
31
|
|
|
32
32
|
getMetavariable() { return this.frame.getMetavariable(); }
|
|
33
33
|
|
|
34
|
+
compareMetavariable(metavariable) { return this.frame.compareMetavariable(metavariable); }
|
|
35
|
+
|
|
34
36
|
validate(assignments, stated, context) {
|
|
35
37
|
let validates = false;
|
|
36
38
|
|
package/src/element/label.js
CHANGED
|
@@ -20,14 +20,14 @@ export default define(class Label extends Element {
|
|
|
20
20
|
|
|
21
21
|
getMetavariableNode() { return this.metavariable.getNode(); }
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
compareMetavariable(metavariable) { return this.metavariable.compare(metavariable); }
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
compareMetavariableName(metavariableName) { return this.metavariable.compareMetavariableName(metavariableName); }
|
|
26
26
|
|
|
27
27
|
compareReference(reference) {
|
|
28
28
|
const metavariable = reference.getMetavariable(),
|
|
29
|
-
|
|
30
|
-
comparesToReference =
|
|
29
|
+
metavariableComparesToMetavariable = this.compareMetavariable(metavariable),
|
|
30
|
+
comparesToReference = metavariableComparesToMetavariable; ///
|
|
31
31
|
|
|
32
32
|
return comparesToReference;
|
|
33
33
|
}
|
|
@@ -9,6 +9,7 @@ import { EMPTY_STRING } from "../constants";
|
|
|
9
9
|
import { typeToTypeJSON } from "../utilities/json";
|
|
10
10
|
import { metaTypeToMetaTypeJSON } from "../utilities/json";
|
|
11
11
|
import { unifyMetavariable, unifyMetavariableIntrinsically } from "../process/unify";
|
|
12
|
+
import {get} from "necessary/lib/utilities/ajax";
|
|
12
13
|
|
|
13
14
|
export default define(class Metavariable extends Element {
|
|
14
15
|
constructor(context, string, node, name, type, metaType) {
|
|
@@ -39,10 +40,11 @@ export default define(class Metavariable extends Element {
|
|
|
39
40
|
this.metaType = metaType;
|
|
40
41
|
}
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
const
|
|
43
|
+
compare(metavariable) {
|
|
44
|
+
const name = metavariable.getName(),
|
|
45
|
+
comparesToMetavariable = (this.name === name);
|
|
44
46
|
|
|
45
|
-
return
|
|
47
|
+
return comparesToMetavariable;
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
isMetaTypeEqualTo(metaType) { return this.metaType.isEqualTo(metaType); }
|
|
@@ -129,11 +131,15 @@ export default define(class Metavariable extends Element {
|
|
|
129
131
|
} else {
|
|
130
132
|
const { FrameSubstitution } = elements,
|
|
131
133
|
frameSubstitution = FrameSubstitution.fromFrameAndMetavariable(frame, metavariable, context),
|
|
132
|
-
|
|
134
|
+
framesubstitutionValidates = frameSubstitution.validate(generalContext, specificContext);
|
|
133
135
|
|
|
134
|
-
|
|
136
|
+
if (framesubstitutionValidates) {
|
|
137
|
+
const substitution = frameSubstitution; ///
|
|
138
|
+
|
|
139
|
+
context.addSubstitution(substitution);
|
|
135
140
|
|
|
136
|
-
|
|
141
|
+
frameUnifies = true;
|
|
142
|
+
}
|
|
137
143
|
}
|
|
138
144
|
}
|
|
139
145
|
|
|
@@ -154,6 +160,8 @@ export default define(class Metavariable extends Element {
|
|
|
154
160
|
substitution.getString() :
|
|
155
161
|
EMPTY_STRING;
|
|
156
162
|
|
|
163
|
+
|
|
164
|
+
|
|
157
165
|
context.trace(`Unifying the '${statementString}' statement with the '${metavariableString}${substitutionString}' metavariable...`);
|
|
158
166
|
|
|
159
167
|
const metavariable = this, ///
|
|
@@ -162,11 +170,10 @@ export default define(class Metavariable extends Element {
|
|
|
162
170
|
if (statementMetavariableUnifies) {
|
|
163
171
|
statementUnifies = true;
|
|
164
172
|
} else {
|
|
165
|
-
const
|
|
166
|
-
substitutionPresent = context.isSubstitutionPresentByMetavariableAndSubstitution(metavariable, substitution);
|
|
173
|
+
const substitutionPresent = context.isSubstitutionPresentByMetavariableAndSubstitution(metavariable, substitution);
|
|
167
174
|
|
|
168
175
|
if (substitutionPresent) {
|
|
169
|
-
substitution = context.findSubstitutionByMetavariableAndSubstitution(metavariable, substitution); ///
|
|
176
|
+
substitution = context.findSubstitutionByMetavariableAndSubstitution(metavariable, substitution, generalContet, specificContext); ///
|
|
170
177
|
|
|
171
178
|
const substitutionComparesToStatement = substitution.compareStatement(statement, context);
|
|
172
179
|
|
|
@@ -179,11 +186,23 @@ export default define(class Metavariable extends Element {
|
|
|
179
186
|
StatementSubstitution.fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, context) :
|
|
180
187
|
StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context);
|
|
181
188
|
|
|
182
|
-
substitution
|
|
189
|
+
if (substitution !== null) {
|
|
190
|
+
const context = generalContext; ///
|
|
183
191
|
|
|
184
|
-
|
|
192
|
+
substitution = statementSubstitution.getSubstitution();
|
|
193
|
+
|
|
194
|
+
substitution.setContext(context);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const statementSubstitutionValidates = statementSubstitution.validate(generalContext, specificContext);
|
|
185
198
|
|
|
186
|
-
|
|
199
|
+
if (statementSubstitutionValidates) {
|
|
200
|
+
const substitution = statementSubstitution; ///
|
|
201
|
+
|
|
202
|
+
context.addSubstitution(substitution);
|
|
203
|
+
|
|
204
|
+
statementUnifies = true;
|
|
205
|
+
}
|
|
187
206
|
}
|
|
188
207
|
}
|
|
189
208
|
|
|
@@ -194,7 +213,7 @@ export default define(class Metavariable extends Element {
|
|
|
194
213
|
return statementUnifies;
|
|
195
214
|
}
|
|
196
215
|
|
|
197
|
-
unifyReference(reference,
|
|
216
|
+
unifyReference(reference, generalContext, specificContext) {
|
|
198
217
|
let referenceUnifies = false;
|
|
199
218
|
|
|
200
219
|
const context = specificContext, ///
|
|
@@ -204,15 +223,15 @@ export default define(class Metavariable extends Element {
|
|
|
204
223
|
context.trace(`Unifying the '${referenceString}' reference with the '${metavariableString}' metavariable...`);
|
|
205
224
|
|
|
206
225
|
const metavariable = this, ///
|
|
207
|
-
referenceMetavariableUnifies = this.unifyReferenceMetavariable(reference,
|
|
226
|
+
referenceMetavariableUnifies = this.unifyReferenceMetavariable(reference, generalContext, specificContext);
|
|
208
227
|
|
|
209
228
|
if (referenceMetavariableUnifies) {
|
|
210
229
|
referenceUnifies = true;
|
|
211
230
|
} else {
|
|
212
|
-
const simpleSubstitutionPresent =
|
|
231
|
+
const simpleSubstitutionPresent = context.isSimpleSubstitutionPresentByMetavariable(metavariable);
|
|
213
232
|
|
|
214
233
|
if (simpleSubstitutionPresent) {
|
|
215
|
-
const simpleSubstitution =
|
|
234
|
+
const simpleSubstitution = context.findSimpleSubstitutionByMetavariable(metavariable),
|
|
216
235
|
substitution = simpleSubstitution, ///
|
|
217
236
|
substitutionReferenceEqualToReference = substitution.isReferenceEqualToReference(reference);
|
|
218
237
|
|
|
@@ -268,15 +287,19 @@ export default define(class Metavariable extends Element {
|
|
|
268
287
|
let frameMetavariableUnifies = false;
|
|
269
288
|
|
|
270
289
|
const context = specificContext, ///
|
|
271
|
-
|
|
290
|
+
frameString = frame.getString(),
|
|
291
|
+
metavariableString = this.getString(); ///
|
|
292
|
+
|
|
293
|
+
context.trace(`Unifying the '${frameString}' frame's metavariable with the '${metavariableString}' metavariable...`);
|
|
294
|
+
|
|
295
|
+
const generalContextFilePath = generalContext.getFilePath(),
|
|
272
296
|
specificContextFilePath = specificContext.getFilePath();
|
|
273
297
|
|
|
274
298
|
if (generalContextFilePath === specificContextFilePath) {
|
|
275
299
|
const metavariable = this, ///
|
|
276
|
-
|
|
277
|
-
frameMetavariableEqualToMetvariable = frame.isMetavariableEqualToMetavariable(metavariable, context);
|
|
300
|
+
frameMetavariableComparesToMetvariable = frame.compareMetavariable(metavariable);
|
|
278
301
|
|
|
279
|
-
if (
|
|
302
|
+
if (frameMetavariableComparesToMetvariable) {
|
|
280
303
|
frameMetavariableUnifies = true;
|
|
281
304
|
} else {
|
|
282
305
|
const frameSingular = frame.isSingular();
|
|
@@ -284,99 +307,95 @@ export default define(class Metavariable extends Element {
|
|
|
284
307
|
if (frameSingular) {
|
|
285
308
|
const frameMetavariableName = frame.getMetavariableName(),
|
|
286
309
|
frameMetavariable = context.findMetavariableByMetavariableName(frameMetavariableName),
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
context.trace(`Unifying the frame's '${frameMetavariableString}' metavariable with the '${metavariableString}' metavariable...`);
|
|
290
|
-
|
|
291
|
-
const generalMetavariable = this, ///
|
|
310
|
+
generalMetavariable = this, ///
|
|
292
311
|
specificMetavariable = frameMetavariable, ///
|
|
293
|
-
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable,
|
|
312
|
+
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
|
|
294
313
|
|
|
295
314
|
frameMetavariableUnifies = metavariableUnifiesIntrinsically; ///
|
|
296
|
-
|
|
297
|
-
if (frameMetavariableUnifies) {
|
|
298
|
-
context.debug(`...unified the frame's '${frameMetavariableString}' metavariable with the '${metavariableString}' metavariable.`);
|
|
299
|
-
}
|
|
300
315
|
}
|
|
301
316
|
}
|
|
302
317
|
}
|
|
303
318
|
|
|
319
|
+
if (frameMetavariableUnifies) {
|
|
320
|
+
context.debug(`...unified the '${frameString}' frame's metavariable with the '${metavariableString}' metavariable.`);
|
|
321
|
+
}
|
|
322
|
+
|
|
304
323
|
return frameMetavariableUnifies;
|
|
305
324
|
}
|
|
306
325
|
|
|
307
|
-
|
|
308
|
-
let
|
|
326
|
+
unifyReferenceMetavariable(reference, generalContext, specificContext) {
|
|
327
|
+
let referenceMetavariableUnifies = false;
|
|
309
328
|
|
|
310
329
|
const context = specificContext, ///
|
|
311
|
-
|
|
330
|
+
referenceString = reference.getString(),
|
|
331
|
+
metavariableString = this.getString();
|
|
332
|
+
|
|
333
|
+
context.trace(`Unifying the '${referenceString}' reference's metavariable with the '${metavariableString}' metavariable...`);
|
|
334
|
+
|
|
335
|
+
const generalContextFilePath = generalContext.getFilePath(),
|
|
312
336
|
specificContextFilePath = specificContext.getFilePath();
|
|
313
337
|
|
|
314
338
|
if (generalContextFilePath === specificContextFilePath) {
|
|
315
339
|
const metavariable = this, ///
|
|
316
|
-
|
|
317
|
-
statementMetavariableEqualToMetvariable = statement.isMetavariableEqualToMetavariable(metavariable, context);
|
|
340
|
+
referenceMetavariableComparesToMetvariable = reference.compareMetavariable(metavariable);
|
|
318
341
|
|
|
319
|
-
if (
|
|
320
|
-
|
|
342
|
+
if (referenceMetavariableComparesToMetvariable) {
|
|
343
|
+
referenceMetavariableUnifies = true;
|
|
321
344
|
} else {
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
statementMetavariable = context.findMetavariableByMetavariableName(statementMetavariableName),
|
|
327
|
-
statementMetavariableString = statementMetavariable.getString();
|
|
328
|
-
|
|
329
|
-
context.trace(`Unifying the statement's ${statementMetavariableString}' metavariable with the '${metavariableString}' metavariable...`);
|
|
330
|
-
|
|
331
|
-
const generalMetavariable = this, ///
|
|
332
|
-
specificMetavariable = statementMetavariable, ///
|
|
333
|
-
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
|
|
334
|
-
|
|
335
|
-
statementMetavariableUnifies = metavariableUnifiesIntrinsically; ///
|
|
345
|
+
const referenceMetavariable = reference.getMetavariable(),
|
|
346
|
+
generalMetavariable = this, ///
|
|
347
|
+
specificMetavariable = referenceMetavariable, ///
|
|
348
|
+
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
|
|
336
349
|
|
|
337
|
-
|
|
338
|
-
context.debug(`...unified the statement's '${statementMetavariableString}' metavariable with the '${metavariableString}' metavariable.`);
|
|
339
|
-
}
|
|
340
|
-
}
|
|
350
|
+
referenceMetavariableUnifies = metavariableUnifiesIntrinsically; ///
|
|
341
351
|
}
|
|
342
352
|
}
|
|
343
353
|
|
|
344
|
-
|
|
354
|
+
if (referenceMetavariableUnifies) {
|
|
355
|
+
context.trace(`...unified the '${referenceString}' reference's metavariable with the '${metavariableString}' metavariable.`);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
return referenceMetavariableUnifies;
|
|
345
359
|
}
|
|
346
360
|
|
|
347
|
-
|
|
348
|
-
let
|
|
361
|
+
unifyStatementMetavariable(statement, generalContext, specificContext) {
|
|
362
|
+
let statementMetavariableUnifies = false;
|
|
349
363
|
|
|
350
364
|
const context = specificContext, ///
|
|
351
|
-
|
|
365
|
+
statementString = statement.getString(),
|
|
366
|
+
metavariableString = this.getString(); ///
|
|
367
|
+
|
|
368
|
+
context.trace(`Unifying the '${statementString}' statement's metavariable with the '${metavariableString}' metavariable...`);
|
|
369
|
+
|
|
370
|
+
const generalContextFilePath = generalContext.getFilePath(),
|
|
352
371
|
specificContextFilePath = specificContext.getFilePath();
|
|
353
372
|
|
|
354
373
|
if (generalContextFilePath === specificContextFilePath) {
|
|
355
374
|
const metavariable = this, ///
|
|
356
|
-
|
|
357
|
-
referenceMetavariableEqualToMetvariable = reference.isMetavariableEqualToMetavariable(metavariable);
|
|
375
|
+
statementMetavariableComparesToMetvariable = statement.compareMetavariable(metavariable);
|
|
358
376
|
|
|
359
|
-
if (
|
|
360
|
-
|
|
377
|
+
if (statementMetavariableComparesToMetvariable) {
|
|
378
|
+
statementMetavariableUnifies = true;
|
|
361
379
|
} else {
|
|
362
|
-
const
|
|
363
|
-
referenceMetavariableString = referenceMetavariable.getString();
|
|
364
|
-
|
|
365
|
-
context.trace(`Unifying the reference's ${referenceMetavariableString}' metavariable with the '${metavariableString}' metavariable...`);
|
|
366
|
-
|
|
367
|
-
const generalMetavariable = this, ///
|
|
368
|
-
specificMetavariable = referenceMetavariable, ///
|
|
369
|
-
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, substitutions, generalContext, specificContext);
|
|
380
|
+
const statementSingular = statement.isSingular();
|
|
370
381
|
|
|
371
|
-
|
|
382
|
+
if (statementSingular) {
|
|
383
|
+
const statementMetavariableName = statement.getMetavariableName(),
|
|
384
|
+
statementMetavariable = context.findMetavariableByMetavariableName(statementMetavariableName),
|
|
385
|
+
generalMetavariable = this, ///
|
|
386
|
+
specificMetavariable = statementMetavariable, ///
|
|
387
|
+
metavariableUnifiesIntrinsically = unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, generalContext, specificContext);
|
|
372
388
|
|
|
373
|
-
|
|
374
|
-
context.debug(`...unified the reference's '${referenceMetavariableString}' metavariable with the '${metavariableString}' metavariable.`);
|
|
389
|
+
statementMetavariableUnifies = metavariableUnifiesIntrinsically; ///
|
|
375
390
|
}
|
|
376
391
|
}
|
|
377
392
|
}
|
|
378
393
|
|
|
379
|
-
|
|
394
|
+
if (statementMetavariableUnifies) {
|
|
395
|
+
context.debug(`...unified the '${statementString}' statement's metavariable with the '${metavariableString}' metavariable.`);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
return statementMetavariableUnifies;
|
|
380
399
|
}
|
|
381
400
|
|
|
382
401
|
toJSON() {
|
|
@@ -78,7 +78,7 @@ export default define(class ProcedureCall extends Element {
|
|
|
78
78
|
terms = termsFromPrimitives(primitives),
|
|
79
79
|
procedure = context.findProcedureByName(name);
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
try {
|
|
82
82
|
const term = await procedure.call(terms, context),
|
|
83
83
|
boolean = term.isBoolean();
|
|
84
84
|
|
|
@@ -91,11 +91,11 @@ export default define(class ProcedureCall extends Element {
|
|
|
91
91
|
unifiesIndependently = true;
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
} catch (exception) {
|
|
95
|
+
const message = exception.getMessage();
|
|
96
|
+
|
|
97
|
+
context.info(message);
|
|
98
|
+
}
|
|
99
99
|
|
|
100
100
|
if (unifiesIndependently) {
|
|
101
101
|
context.debug(`...unified the '${procedureCallString}' procedure call independently.`);
|
package/src/element/proof.js
CHANGED
|
@@ -26,21 +26,21 @@ export default define(class Proof extends Element {
|
|
|
26
26
|
return statement;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
async verify(
|
|
29
|
+
async verify(statement, context) {
|
|
30
30
|
let verifies = false;
|
|
31
31
|
|
|
32
|
-
asyncScope(async (context) => {
|
|
32
|
+
await asyncScope(async (context) => {
|
|
33
33
|
const derivationVerifies = await this.derivation.verify(context);
|
|
34
34
|
|
|
35
35
|
if (derivationVerifies) {
|
|
36
36
|
const lastProofAssertion = context.getLastProofAssertion();
|
|
37
37
|
|
|
38
38
|
if (lastProofAssertion !== null) {
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
const proof = this, ///
|
|
40
|
+
proofStatement = proof.getStatement(),
|
|
41
|
+
proofStatementEqualToStatement = proofStatement.isEqualTo(statement);
|
|
42
42
|
|
|
43
|
-
if (
|
|
43
|
+
if (proofStatementEqualToStatement) {
|
|
44
44
|
verifies = true;
|
|
45
45
|
}
|
|
46
46
|
}
|