occam-verify-cli 0.0.1233 → 0.0.1235
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/dom/frame.js +2 -16
- package/lib/dom/reference.js +3 -8
- package/lib/dom/statement.js +7 -58
- package/lib/dom/term.js +2 -17
- package/lib/index.js +1 -2
- package/lib/mixins/statement/verify.js +1 -16
- package/lib/utilities/assertion.js +4 -4
- package/lib/utilities/verification.js +1 -9
- package/package.json +5 -5
- package/src/dom/frame.js +1 -19
- package/src/dom/reference.js +9 -15
- package/src/dom/statement.js +8 -82
- package/src/dom/term.js +1 -23
- package/src/index.js +0 -1
- package/src/mixins/statement/verify.js +1 -25
- package/src/utilities/assertion.js +4 -4
- package/src/utilities/verification.js +0 -10
- package/lib/dom/assertion/contained.js +0 -287
- package/src/dom/assertion/contained.js +0 -233
|
@@ -7,8 +7,7 @@ import { equalityFromStatement,
|
|
|
7
7
|
metavariableFromStatement,
|
|
8
8
|
typeAssertionFromStatement,
|
|
9
9
|
definedAssertionFromStatement,
|
|
10
|
-
subproofAssertionFromStatement
|
|
11
|
-
containedAssertionFromStatement } from "../../utilities/verification";
|
|
10
|
+
subproofAssertionFromStatement } from "../../utilities/verification";
|
|
12
11
|
|
|
13
12
|
function verifyAsMetavariable(statement, assignments, stated, context) {
|
|
14
13
|
let verifiedAsMetavariable = false;
|
|
@@ -120,28 +119,6 @@ function verifyAsDefinedAssertion(statement, assignments, stated, context) {
|
|
|
120
119
|
return verifiedAsDefinedAssertion;
|
|
121
120
|
}
|
|
122
121
|
|
|
123
|
-
function verifyAsContainedAssertion(statement, assignments, stated, context) {
|
|
124
|
-
let verifiedAsContainedAssertion = false;
|
|
125
|
-
|
|
126
|
-
const containedAssertion = containedAssertionFromStatement(statement, context);
|
|
127
|
-
|
|
128
|
-
if (containedAssertion !== null) {
|
|
129
|
-
const statementString = statement.getString();
|
|
130
|
-
|
|
131
|
-
context.trace(`Verifying the '${statementString}' statement as a contained assertion...`);
|
|
132
|
-
|
|
133
|
-
const containedAssertionVerified = containedAssertion.verify(assignments, stated, context);
|
|
134
|
-
|
|
135
|
-
verifiedAsContainedAssertion = containedAssertionVerified; ///
|
|
136
|
-
|
|
137
|
-
if (verifiedAsContainedAssertion) {
|
|
138
|
-
context.debug(`...verified the '${statementString}' statement as a contained assertion.`);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return verifiedAsContainedAssertion;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
122
|
function verifyAsSubproofAssertion(statement, assignments, stated, context) {
|
|
146
123
|
let verifiedAsSubproofAssertion = false;
|
|
147
124
|
|
|
@@ -199,7 +176,6 @@ const verifyMixins = [
|
|
|
199
176
|
verifyAsTypeAssertion,
|
|
200
177
|
verifyAsDefinedAssertion,
|
|
201
178
|
verifyAsSubproofAssertion,
|
|
202
|
-
verifyAsContainedAssertion,
|
|
203
179
|
unifyWithBracketedCombinator,
|
|
204
180
|
unifyWithCombinators
|
|
205
181
|
];
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
import { NOT } from "../constants";
|
|
4
4
|
import { nodesQuery } from "../utilities/query";
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const terminalNodesQuery = nodesQuery("/*/@*");
|
|
7
7
|
|
|
8
8
|
export function isAssertionNegated(assertionNode) {
|
|
9
|
-
const
|
|
10
|
-
assertionNegated =
|
|
11
|
-
const content =
|
|
9
|
+
const terminalNodes = terminalNodesQuery(assertionNode),
|
|
10
|
+
assertionNegated = terminalNodes.some((terminalNode) => {
|
|
11
|
+
const content = terminalNode.getContent();
|
|
12
12
|
|
|
13
13
|
if (content === NOT) {
|
|
14
14
|
return true;
|
|
@@ -73,16 +73,6 @@ export function subproofAssertionFromStatement(statement, context) {
|
|
|
73
73
|
return subproofAssertion;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
export function containedAssertionFromStatement(statement, context) {
|
|
77
|
-
context = contextFromStatement(statement, context); ///
|
|
78
|
-
|
|
79
|
-
const { ContainedAssertion } = dom,
|
|
80
|
-
statementNode = statement.getNode(),
|
|
81
|
-
containedAssertion = ContainedAssertion.fromStatementNode(statementNode, context);
|
|
82
|
-
|
|
83
|
-
return containedAssertion;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
76
|
function contextFromFrame(frame, context) {
|
|
87
77
|
const frameTokens = frame.getTokens(),
|
|
88
78
|
tokens = frameTokens, ///
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _dom = /*#__PURE__*/ _interop_require_wildcard(require("../../dom"));
|
|
12
|
-
var _local = /*#__PURE__*/ _interop_require_default(require("../../context/local"));
|
|
13
|
-
var _query = require("../../utilities/query");
|
|
14
|
-
var _assertion = require("../../utilities/assertion");
|
|
15
|
-
var _substitutions = require("../../utilities/substitutions");
|
|
16
|
-
function _class_call_check(instance, Constructor) {
|
|
17
|
-
if (!(instance instanceof Constructor)) {
|
|
18
|
-
throw new TypeError("Cannot call a class as a function");
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function _defineProperties(target, props) {
|
|
22
|
-
for(var i = 0; i < props.length; i++){
|
|
23
|
-
var descriptor = props[i];
|
|
24
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
25
|
-
descriptor.configurable = true;
|
|
26
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
27
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
31
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
32
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
33
|
-
return Constructor;
|
|
34
|
-
}
|
|
35
|
-
function _define_property(obj, key, value) {
|
|
36
|
-
if (key in obj) {
|
|
37
|
-
Object.defineProperty(obj, key, {
|
|
38
|
-
value: value,
|
|
39
|
-
enumerable: true,
|
|
40
|
-
configurable: true,
|
|
41
|
-
writable: true
|
|
42
|
-
});
|
|
43
|
-
} else {
|
|
44
|
-
obj[key] = value;
|
|
45
|
-
}
|
|
46
|
-
return obj;
|
|
47
|
-
}
|
|
48
|
-
function _interop_require_default(obj) {
|
|
49
|
-
return obj && obj.__esModule ? obj : {
|
|
50
|
-
default: obj
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
54
|
-
if (typeof WeakMap !== "function") return null;
|
|
55
|
-
var cacheBabelInterop = new WeakMap();
|
|
56
|
-
var cacheNodeInterop = new WeakMap();
|
|
57
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
58
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
59
|
-
})(nodeInterop);
|
|
60
|
-
}
|
|
61
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
62
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
63
|
-
return obj;
|
|
64
|
-
}
|
|
65
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
66
|
-
return {
|
|
67
|
-
default: obj
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
71
|
-
if (cache && cache.has(obj)) {
|
|
72
|
-
return cache.get(obj);
|
|
73
|
-
}
|
|
74
|
-
var newObj = {
|
|
75
|
-
__proto__: null
|
|
76
|
-
};
|
|
77
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
78
|
-
for(var key in obj){
|
|
79
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
80
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
81
|
-
if (desc && (desc.get || desc.set)) {
|
|
82
|
-
Object.defineProperty(newObj, key, desc);
|
|
83
|
-
} else {
|
|
84
|
-
newObj[key] = obj[key];
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
newObj.default = obj;
|
|
89
|
-
if (cache) {
|
|
90
|
-
cache.set(obj, newObj);
|
|
91
|
-
}
|
|
92
|
-
return newObj;
|
|
93
|
-
}
|
|
94
|
-
var _ContainedAssertion;
|
|
95
|
-
var containedAssertionNodeQuery = (0, _query.nodeQuery)("/statement/containedAssertion");
|
|
96
|
-
var _default = (0, _dom.domAssigned)((_ContainedAssertion = /*#__PURE__*/ function() {
|
|
97
|
-
function ContainedAssertion(string, node, tokens, term, frame, negated, statement) {
|
|
98
|
-
_class_call_check(this, ContainedAssertion);
|
|
99
|
-
this.string = string;
|
|
100
|
-
this.node = node;
|
|
101
|
-
this.tokens = tokens;
|
|
102
|
-
this.term = term;
|
|
103
|
-
this.frame = frame;
|
|
104
|
-
this.negated = negated;
|
|
105
|
-
this.statement = statement;
|
|
106
|
-
}
|
|
107
|
-
_create_class(ContainedAssertion, [
|
|
108
|
-
{
|
|
109
|
-
key: "getString",
|
|
110
|
-
value: function getString() {
|
|
111
|
-
return this.string;
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
{
|
|
115
|
-
key: "getNode",
|
|
116
|
-
value: function getNode() {
|
|
117
|
-
return this.node;
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
key: "getTokens",
|
|
122
|
-
value: function getTokens() {
|
|
123
|
-
return this.tokens;
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
key: "getTerm",
|
|
128
|
-
value: function getTerm() {
|
|
129
|
-
return this.term;
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
key: "getFrame",
|
|
134
|
-
value: function getFrame() {
|
|
135
|
-
return this.frame;
|
|
136
|
-
}
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
key: "isNegated",
|
|
140
|
-
value: function isNegated() {
|
|
141
|
-
return this.negated;
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
key: "getStatement",
|
|
146
|
-
value: function getStatement() {
|
|
147
|
-
return this.statement;
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
key: "verify",
|
|
152
|
-
value: function verify(assignments, stated, context) {
|
|
153
|
-
var verified = false;
|
|
154
|
-
var containedAssertionString = this.string; ///
|
|
155
|
-
context.trace("Verifying the '".concat(containedAssertionString, "' contained assertion..."));
|
|
156
|
-
var termVerified = false, frameVerified = false, statementVerified = false;
|
|
157
|
-
if (this.term !== null) {
|
|
158
|
-
termVerified = this.term.verify(context, function() {
|
|
159
|
-
var verifiedAhead = true;
|
|
160
|
-
return verifiedAhead;
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
if (this.frame !== null) {
|
|
164
|
-
frameVerified = this.verifyFrame(this.frame, assignments, stated, context);
|
|
165
|
-
}
|
|
166
|
-
if (this.statement !== null) {
|
|
167
|
-
statementVerified = this.verifyStatement(this.statement, assignments, stated, context);
|
|
168
|
-
}
|
|
169
|
-
if (termVerified || frameVerified || statementVerified) {
|
|
170
|
-
var verifiedWhenStated = false, verifiedWhenDerived = false;
|
|
171
|
-
if (stated) {
|
|
172
|
-
verifiedWhenStated = this.verifyWhenStated(assignments, context);
|
|
173
|
-
} else {
|
|
174
|
-
verifiedWhenDerived = this.verifyWhenDerived(context);
|
|
175
|
-
}
|
|
176
|
-
if (verifiedWhenStated || verifiedWhenDerived) {
|
|
177
|
-
verified = true;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
if (verified) {
|
|
181
|
-
context.debug("...verified the '".concat(containedAssertionString, "' contained assertion."));
|
|
182
|
-
}
|
|
183
|
-
return verified;
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
key: "verifyFrame",
|
|
188
|
-
value: function verifyFrame(frame, assignments, stated, context) {
|
|
189
|
-
stated = true; ///
|
|
190
|
-
assignments = null; ///
|
|
191
|
-
var frameVerified = frame.verify(assignments, stated, context);
|
|
192
|
-
return frameVerified;
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
key: "verifyStatement",
|
|
197
|
-
value: function verifyStatement(statement, assignments, stated, context) {
|
|
198
|
-
stated = true; ///
|
|
199
|
-
assignments = null; ///
|
|
200
|
-
var statementVerified = statement.verify(assignments, stated, context);
|
|
201
|
-
return statementVerified;
|
|
202
|
-
}
|
|
203
|
-
},
|
|
204
|
-
{
|
|
205
|
-
key: "verifyWhenStated",
|
|
206
|
-
value: function verifyWhenStated(assignments, context) {
|
|
207
|
-
var verifiedWhenStated;
|
|
208
|
-
var containedAssertionString = this.string; ///
|
|
209
|
-
context.trace("Verifying the '".concat(containedAssertionString, "' stated contained assertion..."));
|
|
210
|
-
verifiedWhenStated = true;
|
|
211
|
-
if (verifiedWhenStated) {
|
|
212
|
-
context.debug("...verified the '".concat(containedAssertionString, "' stated contained assertion."));
|
|
213
|
-
}
|
|
214
|
-
return verifiedWhenStated;
|
|
215
|
-
}
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
key: "verifyWhenDerived",
|
|
219
|
-
value: function verifyWhenDerived1(context) {
|
|
220
|
-
var verifiedWhenDerived;
|
|
221
|
-
var containedAssertionString = this.string; ///
|
|
222
|
-
context.trace("Verifying the '".concat(containedAssertionString, "' derived contained assertion..."));
|
|
223
|
-
verifiedWhenDerived = verifyWhenDerived(this.term, this.frame, this.statement, this.negated, context);
|
|
224
|
-
if (verifiedWhenDerived) {
|
|
225
|
-
context.debug("...verified the '".concat(containedAssertionString, "' derived contained assertion."));
|
|
226
|
-
}
|
|
227
|
-
return verifiedWhenDerived;
|
|
228
|
-
}
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
key: "unifyIndependently",
|
|
232
|
-
value: function unifyIndependently(substitutions, context) {
|
|
233
|
-
var unifiedIndependently;
|
|
234
|
-
var containedAssertionString = this.string; ///
|
|
235
|
-
context.trace("Unifying the '".concat(containedAssertionString, "' contained assertion independently..."));
|
|
236
|
-
var localContext = _local.default.fromContextAndTokens(context, this.tokens);
|
|
237
|
-
context = localContext; ///
|
|
238
|
-
var term = (0, _substitutions.termFromTermAndSubstitutions)(this.term, substitutions, context), frame = (0, _substitutions.frameFromFrameAndSubstitutions)(this.frame, substitutions, context), statement = (0, _substitutions.statementFromStatementAndSubstitutions)(this.statement, substitutions, context), verifiedWhenDerived = verifyWhenDerived(term, frame, statement, this.negated, context);
|
|
239
|
-
unifiedIndependently = verifiedWhenDerived; ///
|
|
240
|
-
if (unifiedIndependently) {
|
|
241
|
-
context.debug("...unified the '".concat(containedAssertionString, "' contained assertion independently."));
|
|
242
|
-
}
|
|
243
|
-
return unifiedIndependently;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
], [
|
|
247
|
-
{
|
|
248
|
-
key: "fromStatementNode",
|
|
249
|
-
value: function fromStatementNode(statementNode, context) {
|
|
250
|
-
var containedAssertion = null;
|
|
251
|
-
var containedAssertionNode = containedAssertionNodeQuery(statementNode);
|
|
252
|
-
if (containedAssertionNode !== null) {
|
|
253
|
-
var Term = _dom.default.Term, Frame = _dom.default.Frame, Statement = _dom.default.Statement, node = containedAssertionNode, string = context.nodeAsString(node), tokens = context.nodeAsTokens(node), term = Term.fromContainedAssertionNode(containedAssertionNode, context), frame = Frame.fromContainedAssertionNode(containedAssertionNode, context), statement = Statement.fromContainedAssertionNode(containedAssertionNode, context), containedAssertionNegated = (0, _assertion.isAssertionNegated)(containedAssertionNode), negated = containedAssertionNegated; ///
|
|
254
|
-
containedAssertion = new ContainedAssertion(string, node, tokens, term, frame, negated, statement);
|
|
255
|
-
}
|
|
256
|
-
return containedAssertion;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
]);
|
|
260
|
-
return ContainedAssertion;
|
|
261
|
-
}(), _define_property(_ContainedAssertion, "name", "ContainedAssertion"), _ContainedAssertion));
|
|
262
|
-
function verifyWhenDerived(term, frame, statement, negated, context) {
|
|
263
|
-
var verifiedWhenDerived = false;
|
|
264
|
-
if (statement !== null) {
|
|
265
|
-
if (term !== null) {
|
|
266
|
-
var termContained = statement.isTermContained(term, context);
|
|
267
|
-
if (!negated && termContained) {
|
|
268
|
-
verifiedWhenDerived = true;
|
|
269
|
-
}
|
|
270
|
-
if (negated && !termContained) {
|
|
271
|
-
verifiedWhenDerived = true;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
if (frame !== null) {
|
|
275
|
-
var frameContained = statement.isFrameContained(frame, context);
|
|
276
|
-
if (!negated && frameContained) {
|
|
277
|
-
verifiedWhenDerived = true;
|
|
278
|
-
}
|
|
279
|
-
if (negated && !frameContained) {
|
|
280
|
-
verifiedWhenDerived = true;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
return verifiedWhenDerived;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb20vYXNzZXJ0aW9uL2NvbnRhaW5lZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGRvbSBmcm9tIFwiLi4vLi4vZG9tXCI7XG5pbXBvcnQgTG9jYWxDb250ZXh0IGZyb20gXCIuLi8uLi9jb250ZXh0L2xvY2FsXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IGRvbUFzc2lnbmVkIH0gZnJvbSBcIi4uLy4uL2RvbVwiO1xuaW1wb3J0IHsgaXNBc3NlcnRpb25OZWdhdGVkIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9hc3NlcnRpb25cIjtcbmltcG9ydCB7IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnMsIGZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucywgc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N0YXRlbWVudC9jb250YWluZWRBc3NlcnRpb25cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGRvbUFzc2lnbmVkKGNsYXNzIENvbnRhaW5lZEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZywgbm9kZSwgdG9rZW5zLCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfVxuXG4gIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBnZXRGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZTtcbiAgfVxuXG4gIGlzTmVnYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5uZWdhdGVkO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIHZlcmlmeShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGxldCB0ZXJtVmVyaWZpZWQgPSBmYWxzZSxcbiAgICAgICAgZnJhbWVWZXJpZmllZCA9IGZhbHNlLFxuICAgICAgICBzdGF0ZW1lbnRWZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudGVybSAhPT0gbnVsbCkge1xuICAgICAgdGVybVZlcmlmaWVkID0gdGhpcy50ZXJtLnZlcmlmeShjb250ZXh0LCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWVkQWhlYWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB2ZXJpZmllZEFoZWFkO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZnJhbWUgIT09IG51bGwpIHtcbiAgICAgIGZyYW1lVmVyaWZpZWQgPSB0aGlzLnZlcmlmeUZyYW1lKHRoaXMuZnJhbWUsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmVyaWZpZWQgPSB0aGlzLnZlcmlmeVN0YXRlbWVudCh0aGlzLnN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WZXJpZmllZCB8fCBmcmFtZVZlcmlmaWVkIHx8IHN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICBsZXQgdmVyaWZpZWRXaGVuU3RhdGVkID0gZmFsc2UsXG4gICAgICAgICAgdmVyaWZpZWRXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoc3RhdGVkKSB7XG4gICAgICAgIHZlcmlmaWVkV2hlblN0YXRlZCA9IHRoaXMudmVyaWZ5V2hlblN0YXRlZChhc3NpZ25tZW50cywgY29udGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ZXJpZmllZFdoZW5EZXJpdmVkID0gdGhpcy52ZXJpZnlXaGVuRGVyaXZlZChjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcmlmaWVkV2hlblN0YXRlZCB8fCB2ZXJpZmllZFdoZW5EZXJpdmVkKSB7XG4gICAgICAgIHZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZDtcbiAgfVxuXG4gIHZlcmlmeUZyYW1lKGZyYW1lLCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gICAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gICAgYXNzaWdubWVudHMgPSBudWxsOyAvLy9cblxuICAgIGNvbnN0IGZyYW1lVmVyaWZpZWQgPSBmcmFtZS52ZXJpZnkoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZnJhbWVWZXJpZmllZDtcbiAgfVxuXG4gIHZlcmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VmVyaWZpZWQgPSBzdGF0ZW1lbnQudmVyaWZ5KGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5V2hlblN0YXRlZChhc3NpZ25tZW50cywgY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZFdoZW5TdGF0ZWQ7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIHN0YXRlZCBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICB2ZXJpZmllZFdoZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZlcmlmaWVkV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIHN0YXRlZCBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZFdoZW5TdGF0ZWQ7XG4gIH1cblxuICB2ZXJpZnlXaGVuRGVyaXZlZChjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLnN0cmluZzsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgdmVyaWZpZWRXaGVuRGVyaXZlZCA9IHZlcmlmeVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5mcmFtZSwgdGhpcy5zdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgY29udGV4dCk7XG5cbiAgICBpZiAodmVyaWZpZWRXaGVuRGVyaXZlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShzdWJzdGl0dXRpb25zLCBjb250ZXh0KSB7XG4gICAgbGV0IHVuaWZpZWRJbmRlcGVuZGVudGx5O1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgY29uc3QgbG9jYWxDb250ZXh0ID0gTG9jYWxDb250ZXh0LmZyb21Db250ZXh0QW5kVG9rZW5zKGNvbnRleHQsIHRoaXMudG9rZW5zKTtcblxuICAgIGNvbnRleHQgPSBsb2NhbENvbnRleHQ7IC8vL1xuXG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnModGhpcy50ZXJtLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KSxcbiAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUZyYW1lQW5kU3Vic3RpdHV0aW9ucyh0aGlzLmZyYW1lLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KSxcbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50QW5kU3Vic3RpdHV0aW9ucyh0aGlzLnN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgY29udGV4dCksXG4gICAgICAgICAgdmVyaWZpZWRXaGVuRGVyaXZlZCA9IHZlcmlmeVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCBzdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgY29udGV4dCk7XG5cbiAgICB1bmlmaWVkSW5kZXBlbmRlbnRseSA9IHZlcmlmaWVkV2hlbkRlcml2ZWQ7IC8vL1xuXG4gICAgaWYgKHVuaWZpZWRJbmRlcGVuZGVudGx5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZWRJbmRlcGVuZGVudGx5O1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbnRhaW5lZEFzc2VydGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gICAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgVGVybSwgRnJhbWUsIFN0YXRlbWVudCB9ID0gZG9tLFxuICAgICAgICAgICAgbm9kZSA9IGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIHN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5ub2RlQXNUb2tlbnMobm9kZSksXG4gICAgICAgICAgICB0ZXJtID0gVGVybS5mcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgIGZyYW1lID0gRnJhbWUuZnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBzdGF0ZW1lbnQgPSBTdGF0ZW1lbnQuZnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25OZWdhdGVkID0gaXNBc3NlcnRpb25OZWdhdGVkKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgICAgbmVnYXRlZCA9IGNvbnRhaW5lZEFzc2VydGlvbk5lZ2F0ZWQ7ICAvLy9cblxuICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihzdHJpbmcsIG5vZGUsIHRva2VucywgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHZlcmlmeVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCBzdGF0ZW1lbnQsIG5lZ2F0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZlcmlmaWVkV2hlbkRlcml2ZWQgPSBmYWxzZTtcblxuICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1Db250YWluZWQgPSBzdGF0ZW1lbnQuaXNUZXJtQ29udGFpbmVkKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIW5lZ2F0ZWQgJiYgdGVybUNvbnRhaW5lZCkge1xuICAgICAgICB2ZXJpZmllZFdoZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZ2F0ZWQgJiYgIXRlcm1Db250YWluZWQpIHtcbiAgICAgICAgdmVyaWZpZWRXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmcmFtZUNvbnRhaW5lZCA9IHN0YXRlbWVudC5pc0ZyYW1lQ29udGFpbmVkKGZyYW1lLCBjb250ZXh0KTtcblxuICAgICAgaWYgKCFuZWdhdGVkICYmIGZyYW1lQ29udGFpbmVkKSB7XG4gICAgICAgIHZlcmlmaWVkV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVnYXRlZCAmJiAhZnJhbWVDb250YWluZWQpIHtcbiAgICAgICAgdmVyaWZpZWRXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZlcmlmaWVkV2hlbkRlcml2ZWQ7XG59XG4iXSwibmFtZXMiOlsiY29udGFpbmVkQXNzZXJ0aW9uTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiZG9tQXNzaWduZWQiLCJDb250YWluZWRBc3NlcnRpb24iLCJzdHJpbmciLCJub2RlIiwidG9rZW5zIiwidGVybSIsImZyYW1lIiwibmVnYXRlZCIsInN0YXRlbWVudCIsImdldFN0cmluZyIsImdldE5vZGUiLCJnZXRUb2tlbnMiLCJnZXRUZXJtIiwiZ2V0RnJhbWUiLCJpc05lZ2F0ZWQiLCJnZXRTdGF0ZW1lbnQiLCJ2ZXJpZnkiLCJhc3NpZ25tZW50cyIsInN0YXRlZCIsImNvbnRleHQiLCJ2ZXJpZmllZCIsImNvbnRhaW5lZEFzc2VydGlvblN0cmluZyIsInRyYWNlIiwidGVybVZlcmlmaWVkIiwiZnJhbWVWZXJpZmllZCIsInN0YXRlbWVudFZlcmlmaWVkIiwidmVyaWZpZWRBaGVhZCIsInZlcmlmeUZyYW1lIiwidmVyaWZ5U3RhdGVtZW50IiwidmVyaWZpZWRXaGVuU3RhdGVkIiwidmVyaWZpZWRXaGVuRGVyaXZlZCIsInZlcmlmeVdoZW5TdGF0ZWQiLCJ2ZXJpZnlXaGVuRGVyaXZlZCIsImRlYnVnIiwidW5pZnlJbmRlcGVuZGVudGx5Iiwic3Vic3RpdHV0aW9ucyIsInVuaWZpZWRJbmRlcGVuZGVudGx5IiwibG9jYWxDb250ZXh0IiwiTG9jYWxDb250ZXh0IiwiZnJvbUNvbnRleHRBbmRUb2tlbnMiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJmcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJjb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwiVGVybSIsImRvbSIsIkZyYW1lIiwiU3RhdGVtZW50Iiwibm9kZUFzU3RyaW5nIiwibm9kZUFzVG9rZW5zIiwiZnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJjb250YWluZWRBc3NlcnRpb25OZWdhdGVkIiwiaXNBc3NlcnRpb25OZWdhdGVkIiwibmFtZSIsInRlcm1Db250YWluZWQiLCJpc1Rlcm1Db250YWluZWQiLCJmcmFtZUNvbnRhaW5lZCIsImlzRnJhbWVDb250YWluZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVlBOzs7ZUFBQTs7OzJEQVZnQjs0REFDUztxQkFFQzt5QkFFUzs2QkFDa0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXJILElBQU1BLDhCQUE4QkMsSUFBQUEsZ0JBQVMsRUFBQztJQUU5QyxXQUFlQyxJQUFBQSxnQkFBVyx1Q0FBQzthQUFNQyxtQkFDbkJDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLFNBQVM7Z0NB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
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import dom from "../../dom";
|
|
4
|
-
import LocalContext from "../../context/local";
|
|
5
|
-
|
|
6
|
-
import { nodeQuery } from "../../utilities/query";
|
|
7
|
-
import { domAssigned } from "../../dom";
|
|
8
|
-
import { isAssertionNegated } from "../../utilities/assertion";
|
|
9
|
-
import { termFromTermAndSubstitutions, frameFromFrameAndSubstitutions, statementFromStatementAndSubstitutions } from "../../utilities/substitutions";
|
|
10
|
-
|
|
11
|
-
const containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion");
|
|
12
|
-
|
|
13
|
-
export default domAssigned(class ContainedAssertion {
|
|
14
|
-
constructor(string, node, tokens, term, frame, negated, statement) {
|
|
15
|
-
this.string = string;
|
|
16
|
-
this.node = node;
|
|
17
|
-
this.tokens = tokens;
|
|
18
|
-
this.term = term;
|
|
19
|
-
this.frame = frame;
|
|
20
|
-
this.negated = negated;
|
|
21
|
-
this.statement = statement;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
getString() {
|
|
25
|
-
return this.string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
getNode() {
|
|
29
|
-
return this.node;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
getTokens() {
|
|
33
|
-
return this.tokens;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
getTerm() {
|
|
37
|
-
return this.term;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
getFrame() {
|
|
41
|
-
return this.frame;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
isNegated() {
|
|
45
|
-
return this.negated;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
getStatement() {
|
|
49
|
-
return this.statement;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
verify(assignments, stated, context) {
|
|
53
|
-
let verified = false;
|
|
54
|
-
|
|
55
|
-
const containedAssertionString = this.string; ///
|
|
56
|
-
|
|
57
|
-
context.trace(`Verifying the '${containedAssertionString}' contained assertion...`);
|
|
58
|
-
|
|
59
|
-
let termVerified = false,
|
|
60
|
-
frameVerified = false,
|
|
61
|
-
statementVerified = false;
|
|
62
|
-
|
|
63
|
-
if (this.term !== null) {
|
|
64
|
-
termVerified = this.term.verify(context, () => {
|
|
65
|
-
const verifiedAhead = true;
|
|
66
|
-
|
|
67
|
-
return verifiedAhead;
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (this.frame !== null) {
|
|
72
|
-
frameVerified = this.verifyFrame(this.frame, assignments, stated, context);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (this.statement !== null) {
|
|
76
|
-
statementVerified = this.verifyStatement(this.statement, assignments, stated, context);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (termVerified || frameVerified || statementVerified) {
|
|
80
|
-
let verifiedWhenStated = false,
|
|
81
|
-
verifiedWhenDerived = false;
|
|
82
|
-
|
|
83
|
-
if (stated) {
|
|
84
|
-
verifiedWhenStated = this.verifyWhenStated(assignments, context);
|
|
85
|
-
} else {
|
|
86
|
-
verifiedWhenDerived = this.verifyWhenDerived(context);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (verifiedWhenStated || verifiedWhenDerived) {
|
|
90
|
-
verified = true;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (verified) {
|
|
95
|
-
context.debug(`...verified the '${containedAssertionString}' contained assertion.`);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return verified;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
verifyFrame(frame, assignments, stated, context) {
|
|
102
|
-
stated = true; ///
|
|
103
|
-
|
|
104
|
-
assignments = null; ///
|
|
105
|
-
|
|
106
|
-
const frameVerified = frame.verify(assignments, stated, context);
|
|
107
|
-
|
|
108
|
-
return frameVerified;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
verifyStatement(statement, assignments, stated, context) {
|
|
112
|
-
stated = true; ///
|
|
113
|
-
|
|
114
|
-
assignments = null; ///
|
|
115
|
-
|
|
116
|
-
const statementVerified = statement.verify(assignments, stated, context);
|
|
117
|
-
|
|
118
|
-
return statementVerified;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
verifyWhenStated(assignments, context) {
|
|
122
|
-
let verifiedWhenStated;
|
|
123
|
-
|
|
124
|
-
const containedAssertionString = this.string; ///
|
|
125
|
-
|
|
126
|
-
context.trace(`Verifying the '${containedAssertionString}' stated contained assertion...`);
|
|
127
|
-
|
|
128
|
-
verifiedWhenStated = true;
|
|
129
|
-
|
|
130
|
-
if (verifiedWhenStated) {
|
|
131
|
-
context.debug(`...verified the '${containedAssertionString}' stated contained assertion.`);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return verifiedWhenStated;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
verifyWhenDerived(context) {
|
|
138
|
-
let verifiedWhenDerived;
|
|
139
|
-
|
|
140
|
-
const containedAssertionString = this.string; ///
|
|
141
|
-
|
|
142
|
-
context.trace(`Verifying the '${containedAssertionString}' derived contained assertion...`);
|
|
143
|
-
|
|
144
|
-
verifiedWhenDerived = verifyWhenDerived(this.term, this.frame, this.statement, this.negated, context);
|
|
145
|
-
|
|
146
|
-
if (verifiedWhenDerived) {
|
|
147
|
-
context.debug(`...verified the '${containedAssertionString}' derived contained assertion.`);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return verifiedWhenDerived;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
unifyIndependently(substitutions, context) {
|
|
154
|
-
let unifiedIndependently;
|
|
155
|
-
|
|
156
|
-
const containedAssertionString = this.string; ///
|
|
157
|
-
|
|
158
|
-
context.trace(`Unifying the '${containedAssertionString}' contained assertion independently...`);
|
|
159
|
-
|
|
160
|
-
const localContext = LocalContext.fromContextAndTokens(context, this.tokens);
|
|
161
|
-
|
|
162
|
-
context = localContext; ///
|
|
163
|
-
|
|
164
|
-
const term = termFromTermAndSubstitutions(this.term, substitutions, context),
|
|
165
|
-
frame = frameFromFrameAndSubstitutions(this.frame, substitutions, context),
|
|
166
|
-
statement = statementFromStatementAndSubstitutions(this.statement, substitutions, context),
|
|
167
|
-
verifiedWhenDerived = verifyWhenDerived(term, frame, statement, this.negated, context);
|
|
168
|
-
|
|
169
|
-
unifiedIndependently = verifiedWhenDerived; ///
|
|
170
|
-
|
|
171
|
-
if (unifiedIndependently) {
|
|
172
|
-
context.debug(`...unified the '${containedAssertionString}' contained assertion independently.`);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return unifiedIndependently;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
static name = "ContainedAssertion";
|
|
179
|
-
|
|
180
|
-
static fromStatementNode(statementNode, context) {
|
|
181
|
-
let containedAssertion = null;
|
|
182
|
-
|
|
183
|
-
const containedAssertionNode = containedAssertionNodeQuery(statementNode);
|
|
184
|
-
|
|
185
|
-
if (containedAssertionNode !== null) {
|
|
186
|
-
const { Term, Frame, Statement } = dom,
|
|
187
|
-
node = containedAssertionNode, ///
|
|
188
|
-
string = context.nodeAsString(node),
|
|
189
|
-
tokens = context.nodeAsTokens(node),
|
|
190
|
-
term = Term.fromContainedAssertionNode(containedAssertionNode, context),
|
|
191
|
-
frame = Frame.fromContainedAssertionNode(containedAssertionNode, context),
|
|
192
|
-
statement = Statement.fromContainedAssertionNode(containedAssertionNode, context),
|
|
193
|
-
containedAssertionNegated = isAssertionNegated(containedAssertionNode),
|
|
194
|
-
negated = containedAssertionNegated; ///
|
|
195
|
-
|
|
196
|
-
containedAssertion = new ContainedAssertion(string, node, tokens, term, frame, negated, statement);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
return containedAssertion;
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
function verifyWhenDerived(term, frame, statement, negated, context) {
|
|
204
|
-
let verifiedWhenDerived = false;
|
|
205
|
-
|
|
206
|
-
if (statement !== null) {
|
|
207
|
-
if (term !== null) {
|
|
208
|
-
const termContained = statement.isTermContained(term, context);
|
|
209
|
-
|
|
210
|
-
if (!negated && termContained) {
|
|
211
|
-
verifiedWhenDerived = true;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
if (negated && !termContained) {
|
|
215
|
-
verifiedWhenDerived = true;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
if (frame !== null) {
|
|
220
|
-
const frameContained = statement.isFrameContained(frame, context);
|
|
221
|
-
|
|
222
|
-
if (!negated && frameContained) {
|
|
223
|
-
verifiedWhenDerived = true;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
if (negated && !frameContained) {
|
|
227
|
-
verifiedWhenDerived = true;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
return verifiedWhenDerived;
|
|
233
|
-
}
|