occam-verify-cli 1.0.185 → 1.0.198
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/constants.js +5 -1
- package/lib/context/file.js +3 -3
- package/lib/dom/assertion/contained.js +12 -24
- package/lib/dom/assertion/defined.js +9 -21
- package/lib/dom/assertion/property.js +8 -10
- package/lib/dom/assertion/satisfies.js +6 -8
- package/lib/dom/assertion/subproof.js +3 -5
- package/lib/dom/assertion/type.js +6 -8
- package/lib/dom/axiom.js +15 -100
- package/lib/dom/conjecture.js +5 -4
- package/lib/dom/constructor/bracketed.js +6 -7
- package/lib/dom/declaration/complexType.js +6 -6
- package/lib/dom/declaration/constructor.js +6 -6
- package/lib/dom/declaration/metavariable.js +3 -5
- package/lib/dom/declaration/type.js +2 -2
- package/lib/dom/declaration/variable.js +6 -6
- package/lib/dom/declaration.js +14 -16
- package/lib/dom/derivation.js +2 -4
- package/lib/dom/equality.js +9 -11
- package/lib/dom/frame.js +14 -18
- package/lib/dom/judgement.js +8 -10
- package/lib/dom/lemma.js +5 -4
- package/lib/dom/metaLemma.js +5 -4
- package/lib/dom/metaType.js +2 -4
- package/lib/dom/metatheorem.js +5 -4
- package/lib/dom/metavariable.js +12 -15
- package/lib/dom/parameter.js +2 -4
- package/lib/dom/procedureCall.js +6 -10
- package/lib/dom/proof.js +2 -4
- package/lib/dom/property.js +16 -51
- package/lib/dom/propertyRelation.js +14 -16
- package/lib/dom/reference.js +7 -11
- package/lib/dom/rule.js +6 -8
- package/lib/dom/statement.js +27 -31
- package/lib/dom/step.js +4 -6
- package/lib/dom/subDerivation.js +2 -4
- package/lib/dom/subproof.js +6 -8
- package/lib/dom/term.js +12 -20
- package/lib/dom/theorem.js +5 -4
- package/lib/dom/topLevelAssertion.js +30 -24
- package/lib/dom/topLevelMetaAssertion.js +76 -140
- package/lib/dom/type.js +8 -25
- package/lib/dom/variable.js +5 -11
- package/lib/equivalence.js +4 -6
- package/lib/mixins/term/verify.js +4 -8
- package/lib/node/argument.js +116 -0
- package/lib/node/assertion/contained.js +48 -53
- package/lib/node/assertion/defined.js +41 -53
- package/lib/node/assertion/property.js +23 -53
- package/lib/node/assertion/satisfies.js +23 -53
- package/lib/node/assertion/subproof.js +16 -53
- package/lib/node/assertion/type.js +23 -53
- package/lib/node/axiom.js +6 -52
- package/lib/node/combinator.js +6 -52
- package/lib/node/conclusion.js +16 -53
- package/lib/node/conjecture.js +6 -52
- package/lib/node/constructor.js +6 -52
- package/lib/node/declaration/combinator.js +8 -56
- package/lib/node/declaration/complexType.js +42 -86
- package/lib/node/declaration/constructor.js +26 -77
- package/lib/node/declaration/metavariable.js +30 -53
- package/lib/node/declaration/property.js +19 -69
- package/lib/node/declaration/type.js +45 -78
- package/lib/node/declaration/variable.js +21 -81
- package/lib/node/declaration.js +23 -53
- package/lib/node/deduction.js +16 -53
- package/lib/node/derivation.js +42 -51
- package/lib/node/equality.js +32 -53
- package/lib/node/error.js +6 -52
- package/lib/node/frame.js +30 -53
- package/lib/node/judgement.js +23 -53
- package/lib/node/label.js +16 -53
- package/lib/node/labels.js +116 -0
- package/lib/node/lemma.js +6 -52
- package/lib/node/metaArgument.js +116 -0
- package/lib/node/metaLemma.js +6 -52
- package/lib/node/metaType.js +14 -55
- package/lib/node/metatheorem.js +6 -52
- package/lib/node/metavariable.js +30 -56
- package/lib/node/nonTerminal.js +200 -0
- package/lib/node/parameter.js +22 -53
- package/lib/node/parenthesisedLabel.js +116 -0
- package/lib/node/parenthesisedLabels.js +123 -0
- package/lib/node/premise.js +23 -53
- package/lib/node/procedureCall.js +23 -53
- package/lib/node/proof.js +16 -53
- package/lib/node/property.js +18 -57
- package/lib/node/propertyRelation.js +30 -53
- package/lib/node/reference.js +16 -53
- package/lib/node/rule.js +44 -53
- package/lib/node/statement.js +139 -53
- package/lib/node/step.js +37 -53
- package/lib/node/subDerivation.js +49 -51
- package/lib/node/subproof.js +44 -53
- package/lib/node/substitution/frame.js +123 -0
- package/lib/node/substitution/reference.js +123 -0
- package/lib/node/substitution/statement.js +123 -0
- package/lib/node/substitution/term.js +123 -0
- package/lib/node/supposition.js +23 -53
- package/lib/node/term.js +41 -53
- package/lib/node/theorem.js +6 -52
- package/lib/node/topLevelAssertion.js +66 -54
- package/lib/node/topLevelMetaAssertion.js +45 -54
- package/lib/node/type.js +14 -55
- package/lib/{node.js → node/types.js} +22 -24
- package/lib/node/variable.js +14 -55
- package/lib/nominal/parser.js +3 -3
- package/lib/nonTerminalNodeMap.js +14 -4
- package/lib/ruleNames.js +42 -2
- package/lib/substitution/frame.js +5 -7
- package/lib/substitution/reference.js +5 -7
- package/lib/substitution/term.js +5 -7
- package/lib/unifier/metaLevel.js +4 -4
- package/lib/utilities/brackets.js +5 -5
- package/lib/utilities/json.js +18 -1
- package/lib/utilities/node.js +1 -37
- package/lib/utilities/subproof.js +13 -4
- package/lib/utilities/type.js +16 -4
- package/lib/verifier/topLevel.js +6 -6
- package/package.json +2 -2
- package/src/constants.js +1 -0
- package/src/context/file.js +2 -2
- package/src/dom/assertion/contained.js +12 -34
- package/src/dom/assertion/defined.js +9 -30
- package/src/dom/assertion/property.js +7 -12
- package/src/dom/assertion/satisfies.js +5 -10
- package/src/dom/assertion/subproof.js +2 -6
- package/src/dom/assertion/type.js +7 -10
- package/src/dom/axiom.js +7 -77
- package/src/dom/conjecture.js +6 -1
- package/src/dom/constructor/bracketed.js +6 -8
- package/src/dom/declaration/complexType.js +8 -7
- package/src/dom/declaration/constructor.js +6 -7
- package/src/dom/declaration/metavariable.js +2 -6
- package/src/dom/declaration/type.js +4 -2
- package/src/dom/declaration/variable.js +6 -7
- package/src/dom/declaration.js +12 -20
- package/src/dom/derivation.js +1 -4
- package/src/dom/equality.js +13 -17
- package/src/dom/frame.js +11 -25
- package/src/dom/judgement.js +7 -12
- package/src/dom/lemma.js +6 -1
- package/src/dom/metaLemma.js +6 -1
- package/src/dom/metaType.js +1 -5
- package/src/dom/metatheorem.js +6 -1
- package/src/dom/metavariable.js +11 -25
- package/src/dom/parameter.js +2 -6
- package/src/dom/procedureCall.js +5 -14
- package/src/dom/proof.js +1 -4
- package/src/dom/property.js +21 -78
- package/src/dom/propertyRelation.js +16 -22
- package/src/dom/reference.js +6 -18
- package/src/dom/rule.js +6 -12
- package/src/dom/statement.js +26 -46
- package/src/dom/step.js +3 -5
- package/src/dom/subDerivation.js +1 -4
- package/src/dom/subproof.js +8 -12
- package/src/dom/term.js +14 -33
- package/src/dom/theorem.js +6 -1
- package/src/dom/topLevelAssertion.js +30 -25
- package/src/dom/topLevelMetaAssertion.js +87 -55
- package/src/dom/type.js +11 -37
- package/src/dom/variable.js +4 -12
- package/src/equivalence.js +3 -6
- package/src/mixins/term/verify.js +5 -11
- package/src/node/argument.js +16 -0
- package/src/node/assertion/contained.js +49 -3
- package/src/node/assertion/defined.js +42 -3
- package/src/node/assertion/property.js +19 -3
- package/src/node/assertion/satisfies.js +19 -3
- package/src/node/assertion/subproof.js +12 -3
- package/src/node/assertion/type.js +19 -3
- package/src/node/axiom.js +3 -3
- package/src/node/combinator.js +3 -3
- package/src/node/conclusion.js +12 -3
- package/src/node/conjecture.js +3 -3
- package/src/node/constructor.js +3 -3
- package/src/node/declaration/combinator.js +7 -8
- package/src/node/declaration/complexType.js +40 -43
- package/src/node/declaration/constructor.js +25 -30
- package/src/node/declaration/metavariable.js +26 -3
- package/src/node/declaration/property.js +17 -23
- package/src/node/declaration/type.js +43 -32
- package/src/node/declaration/variable.js +19 -37
- package/src/node/declaration.js +19 -3
- package/src/node/deduction.js +12 -3
- package/src/node/derivation.js +15 -3
- package/src/node/equality.js +32 -3
- package/src/node/error.js +3 -3
- package/src/node/frame.js +26 -3
- package/src/node/judgement.js +19 -3
- package/src/node/label.js +12 -3
- package/src/node/labels.js +16 -0
- package/src/node/lemma.js +3 -3
- package/src/node/metaArgument.js +16 -0
- package/src/node/metaLemma.js +3 -3
- package/src/node/metaType.js +15 -8
- package/src/node/metatheorem.js +3 -3
- package/src/node/metavariable.js +32 -9
- package/src/node/nonTerminal.js +112 -0
- package/src/node/parameter.js +20 -3
- package/src/node/parenthesisedLabel.js +16 -0
- package/src/node/parenthesisedLabels.js +23 -0
- package/src/node/premise.js +19 -3
- package/src/node/procedureCall.js +19 -3
- package/src/node/proof.js +12 -3
- package/src/node/property.js +18 -12
- package/src/node/propertyRelation.js +26 -3
- package/src/node/reference.js +12 -3
- package/src/node/rule.js +40 -3
- package/src/node/statement.js +151 -3
- package/src/node/step.js +31 -3
- package/src/node/subDerivation.js +22 -3
- package/src/node/subproof.js +38 -3
- package/src/node/substitution/frame.js +23 -0
- package/src/node/substitution/reference.js +23 -0
- package/src/node/substitution/statement.js +23 -0
- package/src/node/substitution/term.js +23 -0
- package/src/node/supposition.js +19 -3
- package/src/node/term.js +38 -3
- package/src/node/theorem.js +3 -3
- package/src/node/topLevelAssertion.js +69 -3
- package/src/node/topLevelMetaAssertion.js +40 -3
- package/src/node/type.js +15 -8
- package/src/node/types.js +16 -0
- package/src/node/variable.js +15 -8
- package/src/nominal/parser.js +1 -1
- package/src/nonTerminalNodeMap.js +67 -37
- package/src/ruleNames.js +11 -1
- package/src/substitution/frame.js +7 -10
- package/src/substitution/reference.js +7 -10
- package/src/substitution/term.js +7 -9
- package/src/unifier/metaLevel.js +2 -3
- package/src/utilities/brackets.js +8 -8
- package/src/utilities/json.js +19 -0
- package/src/utilities/node.js +0 -27
- package/src/utilities/subproof.js +22 -6
- package/src/utilities/type.js +9 -0
- package/src/verifier/topLevel.js +5 -10
- package/lib/defaultTerminalNode.js +0 -20
- package/lib/mixins/node.js +0 -145
- package/src/defaultTerminalNode.js +0 -7
- package/src/mixins/node.js +0 -201
- package/src/node.js +0 -29
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { arrayUtilities } from "necessary";
|
|
4
|
-
|
|
5
3
|
import dom from "../dom";
|
|
6
4
|
import LocalContext from "../context/local";
|
|
7
5
|
import Substitutions from "../substitutions";
|
|
8
|
-
import TopLevelAssertion from "./topLevelAssertion";
|
|
9
6
|
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
labelsToLabelsJSON,
|
|
7
|
+
import { proofFromProofNode, deductionFromDeductionNode, suppositionsFromSuppositionNodes } from "./topLevelAssertion";
|
|
8
|
+
import { labelFromJSON,
|
|
9
|
+
labelToLabelJSON,
|
|
14
10
|
deductionFromJSON,
|
|
15
11
|
suppositionsFromJSON,
|
|
16
12
|
substitutionsFromJSON,
|
|
@@ -18,29 +14,47 @@ import { labelsFromJSON,
|
|
|
18
14
|
suppositionsToSuppositionsJSON,
|
|
19
15
|
substitutionsToSubstitutionsJSON } from "../utilities/json";
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
export default class TopLevelMetaAssertion {
|
|
18
|
+
constructor(fileContext, string, label, suppositions, deduction, proof, substitutions) {
|
|
19
|
+
this.fileContext = fileContext;
|
|
20
|
+
this.string = string;
|
|
21
|
+
this.label = label;
|
|
22
|
+
this.suppositions = suppositions;
|
|
23
|
+
this.deduction = deduction;
|
|
24
|
+
this.proof = proof;
|
|
25
|
+
this.substitutions = substitutions;
|
|
26
|
+
}
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
getFileContext() {
|
|
29
|
+
return this.fileContext;
|
|
30
|
+
}
|
|
24
31
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
getString() {
|
|
33
|
+
return this.string;
|
|
34
|
+
}
|
|
28
35
|
|
|
29
|
-
|
|
36
|
+
getLabel() {
|
|
37
|
+
return this.label;
|
|
30
38
|
}
|
|
31
39
|
|
|
32
|
-
|
|
33
|
-
return this.
|
|
40
|
+
getSuppositions() {
|
|
41
|
+
return this.suppositions;
|
|
34
42
|
}
|
|
35
43
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
getDeduction() {
|
|
45
|
+
return this.deduction;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
getProof() {
|
|
49
|
+
return this.proof;
|
|
50
|
+
}
|
|
40
51
|
|
|
41
|
-
|
|
52
|
+
getSubstitutions() {
|
|
53
|
+
return this.substitutions;
|
|
42
54
|
}
|
|
43
55
|
|
|
56
|
+
getStatement() { return this.deduction.getStatement(); }
|
|
57
|
+
|
|
44
58
|
matchReference(reference) {
|
|
45
59
|
const label = this.getLabel(),
|
|
46
60
|
referenceMatches = label.matchReference(reference);
|
|
@@ -51,9 +65,9 @@ export default class TopLevelMetaAssertion extends TopLevelAssertion {
|
|
|
51
65
|
verify() {
|
|
52
66
|
let verified = false;
|
|
53
67
|
|
|
54
|
-
const
|
|
68
|
+
const labelVerified = this.verifyLabels();
|
|
55
69
|
|
|
56
|
-
if (
|
|
70
|
+
if (labelVerified) {
|
|
57
71
|
const localContext = LocalContext.fromFileContext(this.fileContext),
|
|
58
72
|
context = localContext, ///
|
|
59
73
|
suppositionsVerified = this.suppositions.every((supposition) => {
|
|
@@ -83,29 +97,23 @@ export default class TopLevelMetaAssertion extends TopLevelAssertion {
|
|
|
83
97
|
}
|
|
84
98
|
|
|
85
99
|
verifyLabels() {
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
labelVerified = label.verify(nameOnly);
|
|
100
|
+
const nameOnly = false,
|
|
101
|
+
labelVerified = this.label.verify(nameOnly);
|
|
89
102
|
|
|
90
|
-
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
return labelsVerified;
|
|
103
|
+
return labelVerified;
|
|
96
104
|
}
|
|
97
105
|
|
|
98
106
|
toJSON() {
|
|
99
|
-
const
|
|
107
|
+
const labelJSON = labelToLabelJSON(this.label),
|
|
100
108
|
deductionJSON = deductionToDeductionJSON(this.deduction),
|
|
101
109
|
suppositionsJSON = suppositionsToSuppositionsJSON(this.suppositions),
|
|
102
110
|
substitutionsJSON = substitutionsToSubstitutionsJSON(this.substitutions),
|
|
103
|
-
|
|
111
|
+
label = labelJSON, ///
|
|
104
112
|
deduction = deductionJSON, ///
|
|
105
113
|
suppositions = suppositionsJSON, ///
|
|
106
114
|
substitutions = substitutionsJSON, ///
|
|
107
115
|
json = {
|
|
108
|
-
|
|
116
|
+
label,
|
|
109
117
|
deduction,
|
|
110
118
|
suppositions,
|
|
111
119
|
substitutions
|
|
@@ -115,37 +123,61 @@ export default class TopLevelMetaAssertion extends TopLevelAssertion {
|
|
|
115
123
|
}
|
|
116
124
|
|
|
117
125
|
static fromJSON(Class, json, fileContext) {
|
|
118
|
-
const
|
|
119
|
-
substitutions = substitutionsFromJSON(json, fileContext),
|
|
120
|
-
suppositions = suppositionsFromJSON(json, fileContext),
|
|
126
|
+
const label = labelFromJSON(json, fileContext),
|
|
121
127
|
deduction = deductionFromJSON(json, fileContext),
|
|
128
|
+
suppositions = suppositionsFromJSON(json, fileContext),
|
|
129
|
+
substitutions = substitutionsFromJSON(json, fileContext),
|
|
122
130
|
proof = null,
|
|
123
|
-
string =
|
|
124
|
-
|
|
131
|
+
string = stringFromLabelAndDeduction(label, deduction),
|
|
132
|
+
topLevelMetaAssertion = new Class(fileContext, string, label, suppositions, deduction, proof, substitutions);
|
|
125
133
|
|
|
126
|
-
return
|
|
134
|
+
return topLevelMetaAssertion;
|
|
127
135
|
}
|
|
128
136
|
|
|
129
137
|
static fromNode(Class, node, fileContext) {
|
|
130
|
-
const
|
|
138
|
+
const topLevelAssertionNode = node, ///
|
|
139
|
+
proofNode = topLevelAssertionNode.getProofNode(),
|
|
140
|
+
labelNode = topLevelAssertionNode.getLabelNode(),
|
|
141
|
+
deductionNode = topLevelAssertionNode.getDeductionNode(),
|
|
142
|
+
suppositionNodes = topLevelAssertionNode.getSuppositionNodes(),
|
|
143
|
+
proof = proofFromProofNode(proofNode, fileContext),
|
|
144
|
+
label = labelFromLabelNode(labelNode, fileContext),
|
|
145
|
+
deduction = deductionFromDeductionNode(deductionNode, fileContext),
|
|
146
|
+
suppositions = suppositionsFromSuppositionNodes(suppositionNodes, fileContext),
|
|
131
147
|
substitutions = Substitutions.fromNothing(),
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
proof = proofFromNode(node, fileContext),
|
|
135
|
-
string = stringFromLabelsAndDeduction(labels, deduction),
|
|
136
|
-
metaLemma = new Class(fileContext, string, labels, suppositions, deduction, proof, substitutions);
|
|
148
|
+
string = stringFromLabelAndDeduction(label, deduction),
|
|
149
|
+
topLevelMetaAssertion = new Class(fileContext, string, label, suppositions, deduction, proof, substitutions);
|
|
137
150
|
|
|
138
|
-
return
|
|
151
|
+
return topLevelMetaAssertion;
|
|
139
152
|
}
|
|
140
153
|
}
|
|
141
154
|
|
|
142
|
-
function
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
155
|
+
function labelFromLabelNode(labelNode, fileContext) {
|
|
156
|
+
let label = null;
|
|
157
|
+
|
|
158
|
+
const { Label } = dom;
|
|
159
|
+
|
|
160
|
+
if (labelNode !== null) {
|
|
161
|
+
label = Label.fromLabelNode(labelNode, fileContext);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return label;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function labelStringFromLabel(label) {
|
|
168
|
+
const labelsString = (label !== null) ?
|
|
169
|
+
label.getString() :
|
|
170
|
+
null;
|
|
171
|
+
|
|
172
|
+
return labelsString;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function stringFromLabelAndDeduction(label, deduction) {
|
|
176
|
+
const deductionString = deduction.getString(),
|
|
177
|
+
labelString = labelStringFromLabel(label),
|
|
178
|
+
string = (labelString === null) ?
|
|
179
|
+
deductionString : ///
|
|
180
|
+
`${labelString} :: ${deductionString}`;
|
|
149
181
|
|
|
150
|
-
return
|
|
182
|
+
return string;
|
|
151
183
|
}
|
package/src/dom/type.js
CHANGED
|
@@ -4,17 +4,14 @@ import { arrayUtilities } from "necessary";
|
|
|
4
4
|
|
|
5
5
|
import dom from "../dom";
|
|
6
6
|
|
|
7
|
-
import { nodeQuery } from "../utilities/query";
|
|
8
7
|
import { domAssigned } from "../dom";
|
|
9
8
|
import { OBJECT_TYPE_NAME } from "../typeNames";
|
|
10
9
|
import { typeFromTypeNode } from "../utilities/node";
|
|
11
|
-
import {
|
|
10
|
+
import { stringFromTypeNameNameAndSuperTypes } from "../utilities/type";
|
|
12
11
|
import { superTypesFromJSON, propertiesFromJSON, superTypesToSuperTypesJSON, propertiesToPropertiesJSON } from "../utilities/json";
|
|
13
12
|
|
|
14
13
|
const { push, first } = arrayUtilities;
|
|
15
14
|
|
|
16
|
-
const typeAssertionTypeNodeQuery = nodeQuery("/typeAssertion/type");
|
|
17
|
-
|
|
18
15
|
class Type {
|
|
19
16
|
constructor(string, name, superTypes, properties, provisional) {
|
|
20
17
|
this.string = string;
|
|
@@ -108,15 +105,7 @@ class Type {
|
|
|
108
105
|
}
|
|
109
106
|
|
|
110
107
|
isEqualTo(type) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (this.type === type) {
|
|
114
|
-
equalTo = true;
|
|
115
|
-
} else {
|
|
116
|
-
if (type.name === null) {
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
}
|
|
108
|
+
const equalTo = (this === type);
|
|
120
109
|
|
|
121
110
|
return equalTo;
|
|
122
111
|
}
|
|
@@ -224,7 +213,8 @@ class Type {
|
|
|
224
213
|
const { name, provisional } = json,
|
|
225
214
|
properties = propertiesFromJSON(json, fileContext),
|
|
226
215
|
superTypes = superTypesFromJSON(json, fileContext),
|
|
227
|
-
|
|
216
|
+
typeName = name, ///
|
|
217
|
+
string = stringFromTypeNameNameAndSuperTypes(typeName, superTypes),
|
|
228
218
|
type = new Type(string, name, superTypes, properties, provisional);
|
|
229
219
|
|
|
230
220
|
return type;
|
|
@@ -237,8 +227,7 @@ class Type {
|
|
|
237
227
|
}
|
|
238
228
|
|
|
239
229
|
static fromTypeAssertionNode(typeAssertionNode, fileContext) {
|
|
240
|
-
const
|
|
241
|
-
typeNode = typeAssertionTypeNode, ///
|
|
230
|
+
const typeNode = typeAssertionNode.getTypeNode(),
|
|
242
231
|
type = typeFromTypeNode(typeNode, fileContext);
|
|
243
232
|
|
|
244
233
|
return type;
|
|
@@ -247,10 +236,11 @@ class Type {
|
|
|
247
236
|
static fromTypeAndProvisional(type, provisional) {
|
|
248
237
|
const name = type.getName(),
|
|
249
238
|
superType = type, ///
|
|
239
|
+
typeName = name, ///
|
|
250
240
|
superTypes = [
|
|
251
241
|
superType
|
|
252
242
|
],
|
|
253
|
-
string =
|
|
243
|
+
string = stringFromTypeNameNameAndSuperTypes(typeName, superTypes),
|
|
254
244
|
properties = type.getProperties();
|
|
255
245
|
|
|
256
246
|
type = new Type(string, name, superTypes, properties, provisional); ///
|
|
@@ -264,7 +254,7 @@ class Type {
|
|
|
264
254
|
typeName = typeDeclarationNode.getTypeName(),
|
|
265
255
|
name = typeName, ///
|
|
266
256
|
superTypes = superTypesFromTypeDeclarationNode(typeDeclarationNode, fileContext),
|
|
267
|
-
string =
|
|
257
|
+
string = stringFromTypeNameNameAndSuperTypes(typeName, superTypes),
|
|
268
258
|
type = new Type(string, name, superTypes, properties, provisional);
|
|
269
259
|
|
|
270
260
|
return type;
|
|
@@ -296,12 +286,12 @@ class Type {
|
|
|
296
286
|
}
|
|
297
287
|
|
|
298
288
|
static fromComplexTypeDeclarationNode(complexTypeDeclarationNode, fileContext) {
|
|
299
|
-
const
|
|
300
|
-
provisional = complexTypeDeclarationNode.isProvisional(),
|
|
289
|
+
const provisional = complexTypeDeclarationNode.isProvisional(),
|
|
301
290
|
typeName = complexTypeDeclarationNode.getTypeName(),
|
|
302
291
|
name = typeName,
|
|
303
292
|
superTypes = superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, fileContext),
|
|
304
|
-
|
|
293
|
+
properties = propertiesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, fileContext),
|
|
294
|
+
string = stringFromTypeNameNameAndSuperTypes(typeName, superTypes),
|
|
305
295
|
type = new Type(string, name, superTypes, properties, provisional);
|
|
306
296
|
|
|
307
297
|
return type;
|
|
@@ -310,22 +300,6 @@ class Type {
|
|
|
310
300
|
|
|
311
301
|
export default domAssigned(Type);
|
|
312
302
|
|
|
313
|
-
function stringFromNameAndSuperTypes(name, superTypes) {
|
|
314
|
-
let string;
|
|
315
|
-
|
|
316
|
-
if (name === null) {
|
|
317
|
-
string = OBJECT_TYPE_NAME; ///
|
|
318
|
-
} else {
|
|
319
|
-
const superTypesString = superTypesStringFromSuperTypes(superTypes);
|
|
320
|
-
|
|
321
|
-
string = (superTypesString !== null) ?
|
|
322
|
-
`${name}:${superTypesString}` :
|
|
323
|
-
name; ///
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
return string;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
303
|
function superTypesFromTypeDeclarationNode(typeDeclarationNode, fileContext) {
|
|
330
304
|
const superTypeNodes = typeDeclarationNode.getSuperTypeNodes(),
|
|
331
305
|
superTypes = superTypeNodes.map((superTypeNode) => {
|
package/src/dom/variable.js
CHANGED
|
@@ -4,16 +4,12 @@ import dom from "../dom";
|
|
|
4
4
|
import LocalContext from "../context/local";
|
|
5
5
|
import TermSubstitution from "../substitution/term";
|
|
6
6
|
|
|
7
|
-
import { nodeQuery } from "../utilities/query";
|
|
8
|
-
import { ObjectType } from "./type";
|
|
9
7
|
import { domAssigned } from "../dom";
|
|
10
8
|
import { EMPTY_STRING } from "../constants";
|
|
11
9
|
import { typeFromTypeNode } from "../utilities/node";
|
|
12
10
|
import { typeFromJSON, typeToTypeJSON } from "../utilities/json";
|
|
13
11
|
import { variableNodeFromVariableString } from "../context/partial/variable";
|
|
14
12
|
|
|
15
|
-
const termVariableNodeQuery = nodeQuery("/term/variable!");
|
|
16
|
-
|
|
17
13
|
export default domAssigned(class Variable {
|
|
18
14
|
constructor(string, node, name, type, propertyRelations) {
|
|
19
15
|
this.string = string;
|
|
@@ -209,10 +205,10 @@ export default domAssigned(class Variable {
|
|
|
209
205
|
static fromTermNode(termNode, context) {
|
|
210
206
|
let variable = null;
|
|
211
207
|
|
|
212
|
-
const
|
|
208
|
+
const singularVariableNode = termNode.getSingularVariableNode();
|
|
213
209
|
|
|
214
|
-
if (
|
|
215
|
-
const variableNode =
|
|
210
|
+
if (singularVariableNode !== null) {
|
|
211
|
+
const variableNode = singularVariableNode, ///
|
|
216
212
|
type = null;
|
|
217
213
|
|
|
218
214
|
variable = variableFromVariableNodeAndType(variableNode, type, context);
|
|
@@ -234,11 +230,7 @@ export default domAssigned(class Variable {
|
|
|
234
230
|
}
|
|
235
231
|
|
|
236
232
|
static fromVariableNodeAndType(variableNode, type, context) {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
if (variableNode !== null) {
|
|
240
|
-
variable = variableFromVariableNodeAndType(variableNode, type, context);
|
|
241
|
-
}
|
|
233
|
+
const variable = variableFromVariableNodeAndType(variableNode, type, context);
|
|
242
234
|
|
|
243
235
|
return variable;
|
|
244
236
|
}
|
package/src/equivalence.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { nodeQuery } from "./utilities/query";
|
|
4
3
|
import { stripBracketsFromTermNode } from "./utilities/brackets";
|
|
5
4
|
|
|
6
|
-
const variableNodeQuery = nodeQuery("/term/variable!");
|
|
7
|
-
|
|
8
5
|
export default class Equivalence {
|
|
9
6
|
constructor(terms) {
|
|
10
7
|
this.terms = terms;
|
|
@@ -100,10 +97,10 @@ export default class Equivalence {
|
|
|
100
97
|
const variableNodeA = variableNode, ///
|
|
101
98
|
variableNodeMatches = this.someTerm((term) => {
|
|
102
99
|
const termNode = term.getNode(),
|
|
103
|
-
|
|
100
|
+
singularVariableNode = termNode.getSingularVariableNode();
|
|
104
101
|
|
|
105
|
-
if (
|
|
106
|
-
const variableNodeB =
|
|
102
|
+
if (singularVariableNode !== null) {
|
|
103
|
+
const variableNodeB = singularVariableNode, ///
|
|
107
104
|
variableNodeAMatchesVariableNodeB = variableNodeA.match(variableNodeB);
|
|
108
105
|
|
|
109
106
|
if (variableNodeAMatchesVariableNodeB) {
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import dom from "../../dom";
|
|
4
4
|
|
|
5
|
-
import { nodeQuery } from "../../utilities/query";
|
|
6
|
-
|
|
7
|
-
const variableNodeQuery = nodeQuery("/term/variable!");
|
|
8
|
-
|
|
9
5
|
function unifyWithBracketedConstructor(term, context, verifyAhead) {
|
|
10
6
|
let unifiedWithBracketedConstructor;
|
|
11
7
|
|
|
@@ -39,14 +35,12 @@ function verifyTermAsVariable(term, localContext, verifyAhead) {
|
|
|
39
35
|
const { Variable } = dom,
|
|
40
36
|
context = localContext, ///
|
|
41
37
|
termNode = term.getNode(),
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
let variable;
|
|
45
|
-
|
|
46
|
-
variable = Variable.fromVariableNode(variableNode, context);
|
|
38
|
+
singularVariableNode = termNode.getSingularVariableNode();
|
|
47
39
|
|
|
48
|
-
if (
|
|
49
|
-
const
|
|
40
|
+
if (singularVariableNode !== null) {
|
|
41
|
+
const variableNode = singularVariableNode,
|
|
42
|
+
variable = Variable.fromVariableNode(variableNode, context),
|
|
43
|
+
termString = term.getString();
|
|
50
44
|
|
|
51
45
|
localContext.trace(`Verifying the '${termString}' term as a variable...`);
|
|
52
46
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NonTerminalNode from "../node/nonTerminal";
|
|
4
|
+
|
|
5
|
+
import { TERM_RULE_NAME } from "../ruleNames";
|
|
6
|
+
|
|
7
|
+
export default class ArgumentNode extends NonTerminalNode {
|
|
8
|
+
getSingularTermNode() {
|
|
9
|
+
const ruleName = TERM_RULE_NAME,
|
|
10
|
+
singularTermNode = this.getSingularTNodeByRuleName(ruleName);
|
|
11
|
+
|
|
12
|
+
return singularTermNode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ArgumentNode, ruleName, childNodes, opacity, precedence); }
|
|
16
|
+
}
|
|
@@ -1,7 +1,53 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../../node/nonTerminal";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { MISSING } from "../../constants";
|
|
6
|
+
import { TERM_RULE_NAME, FRAME_RULE_NAME, STATEMENT_RULE_NAME } from "../../ruleNames";
|
|
7
|
+
|
|
8
|
+
export default class ContainedAssertionNode extends NonTerminalNode {
|
|
9
|
+
isNegated() {
|
|
10
|
+
let negated = false;
|
|
11
|
+
|
|
12
|
+
this.someChildNode((childNode) => {
|
|
13
|
+
const childNodeTerminalNode = childNode.isTerminalNode();
|
|
14
|
+
|
|
15
|
+
if (childNodeTerminalNode) {
|
|
16
|
+
const terminalNode = childNode, ///
|
|
17
|
+
content = terminalNode.getContent(),
|
|
18
|
+
contentMessing = (content === MISSING);
|
|
19
|
+
|
|
20
|
+
if (contentMessing) {
|
|
21
|
+
negated = true;
|
|
22
|
+
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
return negated;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
getTermNode() {
|
|
32
|
+
const ruleName = TERM_RULE_NAME,
|
|
33
|
+
termNode = this.getNodeByRuleName(ruleName);
|
|
34
|
+
|
|
35
|
+
return termNode;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
getFrameNode() {
|
|
39
|
+
const ruleName = FRAME_RULE_NAME,
|
|
40
|
+
frameNode = this.getNodeByRuleName(ruleName);
|
|
41
|
+
|
|
42
|
+
return frameNode;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
getStatementNode() {
|
|
46
|
+
const ruleName = STATEMENT_RULE_NAME,
|
|
47
|
+
statementNode = this.getNodeByRuleName(ruleName);
|
|
48
|
+
|
|
49
|
+
return statementNode;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(ContainedAssertionNode, ruleName, childNodes, opacity, precedence); }
|
|
7
53
|
}
|
|
@@ -1,7 +1,46 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../../node/nonTerminal";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { UNDEFINED } from "../../constants";
|
|
6
|
+
import { FRAME_RULE_NAME, TERM_RULE_NAME } from "../../ruleNames";
|
|
7
|
+
|
|
8
|
+
export default class DefinedAssertionNode extends NonTerminalNode {
|
|
9
|
+
isNegated() {
|
|
10
|
+
let negated = false;
|
|
11
|
+
|
|
12
|
+
this.someChildNode((childNode) => {
|
|
13
|
+
const childNodeTerminalNode = childNode.isTerminalNode();
|
|
14
|
+
|
|
15
|
+
if (childNodeTerminalNode) {
|
|
16
|
+
const terminalNode = childNode, ///
|
|
17
|
+
content = terminalNode.getContent(),
|
|
18
|
+
contentUndefined = (content === UNDEFINED);
|
|
19
|
+
|
|
20
|
+
if (contentUndefined) {
|
|
21
|
+
negated = true;
|
|
22
|
+
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
return negated;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
getTermNode() {
|
|
32
|
+
const ruleName = TERM_RULE_NAME,
|
|
33
|
+
termNode = this.getNodeByRuleName(ruleName);
|
|
34
|
+
|
|
35
|
+
return termNode;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
getFrameNode() {
|
|
39
|
+
const ruleName = FRAME_RULE_NAME,
|
|
40
|
+
frameNode = this.getNodeByRuleName(ruleName);
|
|
41
|
+
|
|
42
|
+
return frameNode;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(DefinedAssertionNode, ruleName, childNodes, opacity, precedence); }
|
|
7
46
|
}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../../node/nonTerminal";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { TERM_RULE_NAME, PROPERTY_RELATION_RULE_NAME } from "../../ruleNames";
|
|
6
|
+
|
|
7
|
+
export default class PropertyAssertionNode extends NonTerminalNode {
|
|
8
|
+
getTermNode() {
|
|
9
|
+
const ruleName = TERM_RULE_NAME,
|
|
10
|
+
termNode = this.getNodeByRuleName(ruleName);
|
|
11
|
+
|
|
12
|
+
return termNode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getFrameNode() {
|
|
16
|
+
const ruleName = PROPERTY_RELATION_RULE_NAME,
|
|
17
|
+
propertyRelationNode = this.getNodeByRuleName(ruleName);
|
|
18
|
+
|
|
19
|
+
return propertyRelationNode;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(PropertyAssertionNode, ruleName, childNodes, opacity, precedence); }
|
|
7
23
|
}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../../node/nonTerminal";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { TERM_RULE_NAME, METAVARIABLE_RULE_NAME } from "../../ruleNames";
|
|
6
|
+
|
|
7
|
+
export default class SatisfiesAssertionNode extends NonTerminalNode {
|
|
8
|
+
getTermNode() {
|
|
9
|
+
const ruleName = TERM_RULE_NAME,
|
|
10
|
+
termNode = this.getNodeByRuleName(ruleName);
|
|
11
|
+
|
|
12
|
+
return termNode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getFrameNode() {
|
|
16
|
+
const ruleName = METAVARIABLE_RULE_NAME,
|
|
17
|
+
metavariableNode = this.getNodeByRuleName(ruleName);
|
|
18
|
+
|
|
19
|
+
return metavariableNode;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(SatisfiesAssertionNode, ruleName, childNodes, opacity, precedence); }
|
|
7
23
|
}
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../../node/nonTerminal";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { STATEMENT_RULE_NAME } from "../../ruleNames";
|
|
6
|
+
|
|
7
|
+
export default class SubproofAssertionNode extends NonTerminalNode {
|
|
8
|
+
getStatementNodes() {
|
|
9
|
+
const ruleName = STATEMENT_RULE_NAME,
|
|
10
|
+
statementNodes = this.getNodesByRuleName(ruleName);
|
|
11
|
+
|
|
12
|
+
return statementNodes;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(SubproofAssertionNode, ruleName, childNodes, opacity, precedence); }
|
|
7
16
|
}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NonTerminalNode from "../../node/nonTerminal";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { TERM_RULE_NAME, TYPE_RULE_NAME } from "../../ruleNames";
|
|
6
|
+
|
|
7
|
+
export default class TypeAssertionNode extends NonTerminalNode {
|
|
8
|
+
getTermNode() {
|
|
9
|
+
const ruleName = TERM_RULE_NAME,
|
|
10
|
+
termNode = this.getNodeByRuleName(ruleName);
|
|
11
|
+
|
|
12
|
+
return termNode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getTypeNode() {
|
|
16
|
+
const ruleName = TYPE_RULE_NAME,
|
|
17
|
+
typeNode = this.getNodeByRuleName(ruleName);
|
|
18
|
+
|
|
19
|
+
return typeNode;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(TypeAssertionNode, ruleName, childNodes, opacity, precedence); }
|
|
7
23
|
}
|
package/src/node/axiom.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import TopLevelAssertionNode from "../node/topLevelAssertion";
|
|
4
4
|
|
|
5
|
-
export default class AxiomNode extends
|
|
6
|
-
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return
|
|
5
|
+
export default class AxiomNode extends TopLevelAssertionNode {
|
|
6
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return TopLevelAssertionNode.fromRuleNameChildNodesOpacityAndPrecedence(AxiomNode, ruleName, childNodes, opacity, precedence); }
|
|
7
7
|
}
|