occam-verify-cli 0.0.1068 → 0.0.1069

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.
Files changed (115) hide show
  1. package/bin/action/verify.js +3 -2
  2. package/lib/assertion/subproof.js +3 -3
  3. package/lib/axiom.js +11 -6
  4. package/lib/combinator.js +9 -9
  5. package/lib/conclusion.js +10 -7
  6. package/lib/conjecture.js +11 -6
  7. package/lib/consequent.js +10 -7
  8. package/lib/constructor.js +9 -9
  9. package/lib/context/file.js +34 -126
  10. package/lib/context/local.js +16 -5
  11. package/lib/context/release.js +2 -3
  12. package/lib/declaration.js +50 -43
  13. package/lib/equivalence.js +2 -2
  14. package/lib/frame.js +100 -80
  15. package/lib/index.js +22 -6
  16. package/lib/judgement.js +3 -3
  17. package/lib/label.js +12 -8
  18. package/lib/lemma.js +12 -12
  19. package/lib/metaLemma.js +120 -8
  20. package/lib/metatheorem.js +145 -9
  21. package/lib/metavariable.js +39 -22
  22. package/lib/mixins/statement/qualified/unify.js +6 -10
  23. package/lib/mixins/statement/unify.js +3 -3
  24. package/lib/mixins/term/unify.js +2 -2
  25. package/lib/premise.js +12 -8
  26. package/lib/reference.js +7 -9
  27. package/lib/rule.js +24 -39
  28. package/lib/ruleNames.js +1 -5
  29. package/lib/statement/unqualified.js +9 -8
  30. package/lib/statement.js +4 -4
  31. package/lib/substitution/frameForMetavariable.js +30 -26
  32. package/lib/substitution/statementForMetavariable.js +44 -26
  33. package/lib/substitution/termForVariable.js +33 -37
  34. package/lib/substitution.js +24 -21
  35. package/lib/substitutions.js +7 -1
  36. package/lib/supposition.js +12 -8
  37. package/lib/term.js +6 -11
  38. package/lib/theorem.js +11 -6
  39. package/lib/topLevelAssertion.js +24 -42
  40. package/lib/type.js +5 -12
  41. package/lib/unifier/metaLevel.js +3 -3
  42. package/lib/unifier/metavariable.js +6 -6
  43. package/lib/unifier/statementWithCombinator.js +16 -16
  44. package/lib/unifier/termWithConstructor.js +7 -7
  45. package/lib/utilities/brackets.js +10 -10
  46. package/lib/utilities/json.js +493 -0
  47. package/lib/utilities/node.js +15 -22
  48. package/lib/utilities/release.js +53 -0
  49. package/lib/utilities/releaseContext.js +4 -15
  50. package/lib/utilities/tokens.js +7 -7
  51. package/lib/variable.js +6 -11
  52. package/lib/verifier/topLevel.js +5 -5
  53. package/package.json +1 -1
  54. package/src/assertion/subproof.js +2 -3
  55. package/src/axiom.js +14 -6
  56. package/src/combinator.js +12 -13
  57. package/src/conclusion.js +12 -9
  58. package/src/conjecture.js +14 -6
  59. package/src/consequent.js +12 -9
  60. package/src/constructor.js +11 -13
  61. package/src/context/file.js +94 -202
  62. package/src/context/local.js +8 -6
  63. package/src/context/release.js +2 -3
  64. package/src/declaration.js +72 -44
  65. package/src/equivalence.js +2 -2
  66. package/src/frame.js +111 -86
  67. package/src/index.js +17 -1
  68. package/src/judgement.js +2 -2
  69. package/src/label.js +15 -10
  70. package/src/lemma.js +17 -10
  71. package/src/metaLemma.js +102 -1
  72. package/src/metatheorem.js +143 -2
  73. package/src/metavariable.js +50 -30
  74. package/src/mixins/statement/qualified/unify.js +7 -19
  75. package/src/mixins/statement/unify.js +2 -2
  76. package/src/mixins/term/unify.js +1 -1
  77. package/src/premise.js +18 -10
  78. package/src/reference.js +7 -11
  79. package/src/rule.js +33 -57
  80. package/src/ruleNames.js +0 -1
  81. package/src/statement/unqualified.js +10 -10
  82. package/src/statement.js +3 -2
  83. package/src/substitution/frameForMetavariable.js +39 -33
  84. package/src/substitution/statementForMetavariable.js +64 -31
  85. package/src/substitution/termForVariable.js +47 -37
  86. package/src/substitution.js +18 -16
  87. package/src/substitutions.js +2 -0
  88. package/src/supposition.js +18 -10
  89. package/src/term.js +5 -15
  90. package/src/theorem.js +14 -6
  91. package/src/topLevelAssertion.js +38 -64
  92. package/src/type.js +5 -20
  93. package/src/unifier/metaLevel.js +2 -2
  94. package/src/unifier/metavariable.js +5 -5
  95. package/src/unifier/statementWithCombinator.js +18 -18
  96. package/src/unifier/termWithConstructor.js +7 -7
  97. package/src/utilities/brackets.js +5 -5
  98. package/src/utilities/json.js +551 -0
  99. package/src/utilities/node.js +15 -26
  100. package/src/{verify → utilities}/release.js +5 -1
  101. package/src/utilities/releaseContext.js +2 -2
  102. package/src/utilities/tokens.js +10 -7
  103. package/src/variable.js +4 -14
  104. package/src/verifier/topLevel.js +6 -4
  105. package/lib/argument.js +0 -106
  106. package/lib/metaTypes.js +0 -19
  107. package/lib/unify/statementWithSttaemetnGivenEquivalences.js +0 -45
  108. package/lib/verify/metaLemma.js +0 -49
  109. package/lib/verify/metatheorem.js +0 -48
  110. package/lib/verify/release.js +0 -50
  111. package/src/argument.js +0 -79
  112. package/src/metaTypes.js +0 -11
  113. package/src/unify/statementWithSttaemetnGivenEquivalences.js +0 -51
  114. package/src/verify/metaLemma.js +0 -72
  115. package/src/verify/metatheorem.js +0 -67
@@ -4,31 +4,32 @@ import shim from "../shim";
4
4
  import Substitution from "../substitution";
5
5
 
6
6
  import { nodeQuery } from "../utilities/query";
7
- import { metavariableNameFromMetavariableNode } from "../utilities/name";
8
- import { substitutionNodeFromSubstitutionTokens } from "../utilities/node";
9
- import { substitutionTokensFromSubstitutionString } from "../utilities/tokens";
7
+ import { substitutionNodeFromUnqualifiedStatementNode,
8
+ unqualifiedStatementStringFromSubstitutionString,
9
+ unqualifiedStatementNodeFromUnqualifiedStatementTokens } from "../utilities/node";
10
+ import { unqualifiedStatementTokensFromUnqualifiedStatementString,
11
+ substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode } from "../utilities/tokens";
10
12
 
11
13
  const frameNodeQuery = nodeQuery("/substitution/frame[0]"),
12
14
  metavariableNodeQuery = nodeQuery("/substitution/frame[1]/metavariable!"),
13
- substitutionNodeQuery = nodeQuery("/statement/substitution"),
14
- frameMetavariableNodeQuery = nodeQuery("/frame/metavariable");
15
+ substitutionNodeQuery = nodeQuery("/statement/substitution");
15
16
 
16
17
  export default class FrameForMetavariableSubstitution extends Substitution {
17
- constructor(string, frameNode, metavariableNode, substitutionNode, substitutionTokens) {
18
+ constructor(string, frame, metavariable, substitutionNode, substitutionTokens) {
18
19
  super(string);
19
20
 
20
- this.frameNode = frameNode;
21
- this.metavariableNode = metavariableNode;
21
+ this.frame = frame;
22
+ this.metavariable = metavariable;
22
23
  this.substitutionNode = substitutionNode;
23
24
  this.substitutionTokens = substitutionTokens;
24
25
  }
25
26
 
26
- getFrameNode() {
27
- return this.frameNode;
27
+ getFrame() {
28
+ return this.frame;
28
29
  }
29
30
 
30
- getMetavariableNode() {
31
- return this.metavariableNode;
31
+ getMetavariable() {
32
+ return this.metavariable;
32
33
  }
33
34
 
34
35
  getSubstitutionNode() {
@@ -40,22 +41,33 @@ export default class FrameForMetavariableSubstitution extends Substitution {
40
41
  }
41
42
 
42
43
  getMetavariableName() {
43
- const metavariableName = metavariableNameFromMetavariableNode(this.metavariableNode);
44
+ const metavariableName = this.metavariable.getName();
44
45
 
45
46
  return metavariableName;
46
47
  }
47
48
 
48
- setSubstitutionNode() {
49
- this.substitutionNode = substitutionNodeFromSubstitutionTokens(this.substitutionTokens);
49
+ getSubstitutionString() {
50
+ const frameString = this.frame.getString(),
51
+ metavariableString = this.metavariable.getString(),
52
+ substitutionString = `[[${frameString}] for [${metavariableString}]]`;
53
+
54
+ return substitutionString;
50
55
  }
51
56
 
52
- setSubstitutionTokens() {
53
- const frameMetavariableNode = frameMetavariableNodeQuery(this.frameNode),
54
- frameMetavariableName = metavariableNameFromMetavariableNode(frameMetavariableNode),
55
- metavariableName = metavariableNameFromMetavariableNode(this.metavariableNode),
56
- substitutionString = `[[${frameMetavariableName}] for [${metavariableName}]]`;
57
+ setSubstitutionNodeAndTokens(localContext) {
58
+ const lexer = localContext.getLexer(),
59
+ parser = localContext.getParser(),
60
+ substitutionString = this.getSubstitutionString(),
61
+ unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
62
+ unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
63
+ unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
64
+
65
+ this.substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode);
66
+
67
+ this.substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, this.substitutionNode);
68
+ }
57
69
 
58
- this.substitutionTokens = substitutionTokensFromSubstitutionString(substitutionString);
70
+ setSubstitutionTokens(localContext) {
59
71
  }
60
72
 
61
73
  isEqualTo(substitution) {
@@ -74,18 +86,14 @@ export default class FrameForMetavariableSubstitution extends Substitution {
74
86
  return equalTo;
75
87
  }
76
88
 
77
- matchFrameNode(frameNode) {
78
- const frameNodeMatches = this.frameNode.match(frameNode);
79
-
80
- return frameNodeMatches;
81
- }
89
+ matchFrameNode(frameNode) { return this.frame.matchFrameNode(frameNode); }
82
90
 
83
91
  matchMetavariableName(metavariableName) {
84
92
  let metavariableNameMatches;
85
93
 
86
94
  const metavariableNameA = metavariableName; ///
87
95
 
88
- metavariableName = metavariableNameFromMetavariableNode(this.metavariableNode);
96
+ metavariableName = this.metavariable.getName();
89
97
 
90
98
  const metavariableNameB = metavariableName; ///
91
99
 
@@ -130,11 +138,11 @@ export default class FrameForMetavariableSubstitution extends Substitution {
130
138
  if ((frameNode !== null) && (metavariableNode !== null)) {
131
139
  const { Frame, Metavariable } = shim,
132
140
  frame = Frame.fromFrameNode(frameNode, localContext),
133
- variable = Metavariable.fromMetavariableNode(metavariableNode, localContext),
134
- string = stringFromFrameAndMetavariable(frame, variable, localContext),
141
+ metavariable = Metavariable.fromMetavariableNode(metavariableNode, localContext),
142
+ string = stringFromFrameAndMetavariable(frame, metavariable, localContext),
135
143
  substitutionTokens = localContext.nodeAsTokens(substitutionNode);
136
144
 
137
- frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode, substitutionTokens);
145
+ frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frame, metavariable, substitutionNode, substitutionTokens);
138
146
  }
139
147
  }
140
148
 
@@ -143,11 +151,9 @@ export default class FrameForMetavariableSubstitution extends Substitution {
143
151
 
144
152
  static fromFrameAndMetavariable(frame, metavariable, localContext) {
145
153
  const string = stringFromFrameAndMetavariable(frame, metavariable, localContext),
146
- frameNode = frame.getNode(),
147
- metavariableNode = metavariable.getNode(),
148
154
  substitutionNode = null,
149
155
  substitutionTokens = null,
150
- statementForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode, substitutionTokens);
156
+ statementForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frame, metavariable, substitutionNode, substitutionTokens);
151
157
 
152
158
  return statementForMetavariableSubstitution;
153
159
  }
@@ -6,7 +6,8 @@ import LocalContext from "../context/local";
6
6
  import Substitutions from "../substitutions";
7
7
  import metaLevelUnifier from "../unifier/metaLevel";
8
8
 
9
- import { stripBracketsFromStatement } from "../utilities/brackets";
9
+ import { stripBracketsFromStatementNode } from "../utilities/brackets";
10
+ import { statementFromJSON, statementToStatementJSON, metavariableFromJSON, metavariableToMetavariableJSON } from "../utilities/json";
10
11
 
11
12
  export default class StatementForMetavariableSubstitution extends Substitution {
12
13
  constructor(string, statement, metavariable, substitution) {
@@ -29,18 +30,6 @@ export default class StatementForMetavariableSubstitution extends Substitution {
29
30
  return this.substitution;
30
31
  }
31
32
 
32
- getStatementNode() {
33
- const statementNode = this.statement.getNode();
34
-
35
- return statementNode;
36
- }
37
-
38
- getMetavariableNode() {
39
- const metavariableNode = this.metavariable.getNode();
40
-
41
- return metavariableNode;
42
- }
43
-
44
33
  getMetavariableName() {
45
34
  const metavariableName = this.metavariable.getName();
46
35
 
@@ -84,20 +73,17 @@ export default class StatementForMetavariableSubstitution extends Substitution {
84
73
 
85
74
  localContextB.trace(`Resolving the ${substitutionString} substitution...`);
86
75
 
87
- const substitutionA = substitution; ///
88
-
89
- substitution = this.unifyStatement(statement, localContextA, localContextB);
76
+ const substitutionA = substitution, ///
77
+ substitutionB = this.unifyStatement(statement, localContextB, localContextB); ///
90
78
 
91
- if (substitution !== null) {
92
- substitutions.snapshot();
79
+ if (substitutionB !== null) {
80
+ localContextA = localContextFromLocalContextAndSubstitution(localContextA, substitutionA); ///
93
81
 
94
- const substitutionTokens = substitution.getSubstitutionTokens(),
95
- tokens = substitutionTokens; ///
82
+ localContextB = localContextFromLocalContextAndSubstitution(localContextB, substitutionB); ///
96
83
 
97
- localContextB = LocalContext.fromLocalContextAndTokens(localContextB, tokens); ///
84
+ substitutions.snapshot();
98
85
 
99
- const substitutionB = substitution, ///
100
- nodeA = substitutionA.getSubstitutionNode(), ///
86
+ const nodeA = substitutionA.getSubstitutionNode(), ///
101
87
  nodeB = substitutionB.getSubstitutionNode(), ///
102
88
  unifiedAtMetaLevel = metaLevelUnifier.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
103
89
 
@@ -118,8 +104,6 @@ export default class StatementForMetavariableSubstitution extends Substitution {
118
104
  unifyStatement(statement, localContextA, localContextB) {
119
105
  let substitution = null;
120
106
 
121
- localContextA = localContextB; ///
122
-
123
107
  const substitutions = Substitutions.fromNothing(),
124
108
  statementUnified = this.statement.unifyStatement(statement, substitutions, localContextA, localContextB);
125
109
 
@@ -130,10 +114,6 @@ export default class StatementForMetavariableSubstitution extends Substitution {
130
114
  const firstSubstitution = substitutions.getFirstSubstitution();
131
115
 
132
116
  substitution = firstSubstitution; ///
133
-
134
- substitution.setSubstitutionTokens();
135
-
136
- substitution.setSubstitutionNode();
137
117
  }
138
118
  }
139
119
 
@@ -141,7 +121,7 @@ export default class StatementForMetavariableSubstitution extends Substitution {
141
121
  }
142
122
 
143
123
  matchStatementNode(statementNode) {
144
- statementNode = stripBracketsFromStatement(statementNode); ///
124
+ statementNode = stripBracketsFromStatementNode(statementNode); ///
145
125
 
146
126
  const statementNodeMatches = this.statement.matchStatementNode(statementNode);
147
127
 
@@ -174,10 +154,51 @@ export default class StatementForMetavariableSubstitution extends Substitution {
174
154
  return metavariableNameAndSubstitutionNodeMatches;
175
155
  }
176
156
 
157
+ toJSON() {
158
+ const metavariableJSON = metavariableToMetavariableJSON(this.metavariable),
159
+ statementJSON = statementToStatementJSON(this.statement),
160
+ metavariable = metavariableJSON, ///
161
+ statement = statementJSON, ///
162
+ string = this.string,
163
+ json = {
164
+ string,
165
+ statement,
166
+ metavariable
167
+ };
168
+
169
+ return json;
170
+ }
171
+
172
+ static fromJSON(json, fileContext) {
173
+ const { string } = json,
174
+ statement = statementFromJSON(json, fileContext),
175
+ metavariable = metavariableFromJSON(json, fileContext),
176
+ substitution = null, ///
177
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statement, metavariable, substitution);
178
+
179
+ return statementForMetavariableSubstitution;
180
+ }
181
+
182
+ static fromStatementAndMetavariable(statement, metavariable, localContext) {
183
+ let statementNode = statement.getNode();
184
+
185
+ statementNode = stripBracketsFromStatementNode(statementNode); ///
186
+
187
+ const { Statement } = shim;
188
+
189
+ statement = Statement.fromStatementNode(statementNode, localContext);
190
+
191
+ const substitution = null,
192
+ string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext),
193
+ statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statement, metavariable, substitution);
194
+
195
+ return statementForMetavariableSubstitution;
196
+ }
197
+
177
198
  static fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
178
199
  let statementNode = statement.getNode();
179
200
 
180
- statementNode = stripBracketsFromStatement(statementNode); ///
201
+ statementNode = stripBracketsFromStatementNode(statementNode); ///
181
202
 
182
203
  const { Statement } = shim;
183
204
 
@@ -190,6 +211,18 @@ export default class StatementForMetavariableSubstitution extends Substitution {
190
211
  }
191
212
  }
192
213
 
214
+ function localContextFromLocalContextAndSubstitution(localContext, substitution) {
215
+ substitution.setSubstitutionNodeAndTokens(localContext);
216
+
217
+ const substitutionTokens = substitution.getSubstitutionTokens(),
218
+ context = localContext, ///
219
+ tokens = substitutionTokens; ///
220
+
221
+ localContext = LocalContext.fromContextAndTokens(context, tokens); ///
222
+
223
+ return localContext;
224
+ }
225
+
193
226
  function stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
194
227
  let string;
195
228
 
@@ -4,32 +4,33 @@ import shim from "../shim";
4
4
  import Substitution from "../substitution";
5
5
 
6
6
  import { nodeQuery } from "../utilities/query";
7
- import { stripBracketsFromTerm } from "../utilities/brackets";
8
- import { variableNameFromVariableNode } from "../utilities/name";
9
- import { substitutionNodeFromSubstitutionTokens } from "../utilities/node";
10
- import { substitutionTokensFromSubstitutionString } from "../utilities/tokens";
7
+ import { stripBracketsFromTermNode } from "../utilities/brackets";
8
+ import { substitutionNodeFromUnqualifiedStatementNode,
9
+ unqualifiedStatementStringFromSubstitutionString,
10
+ unqualifiedStatementNodeFromUnqualifiedStatementTokens } from "../utilities/node";
11
+ import { unqualifiedStatementTokensFromUnqualifiedStatementString,
12
+ substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode } from "../utilities/tokens";
11
13
 
12
14
  const termNodeQuery = nodeQuery("/substitution/term[0]"),
13
15
  variableNodeQuery = nodeQuery("/substitution/term[1]/variable!"),
14
- termVariableNodeQuery = nodeQuery("/term/variable"),
15
16
  substitutionNodeQuery = nodeQuery("/statement/substitution");
16
17
 
17
18
  export default class TermForVariableSubstitution extends Substitution {
18
- constructor(string, termNode, variableNode, substitutionNode, substitutionTokens) {
19
+ constructor(string, term, variable, substitutionNode, substitutionTokens) {
19
20
  super(string);
20
21
 
21
- this.termNode = termNode;
22
- this.variableNode = variableNode;
22
+ this.term = term;
23
+ this.variable = variable;
23
24
  this.substitutionNode = substitutionNode;
24
25
  this.substitutionTokens = substitutionTokens;
25
26
  }
26
27
 
27
- getTermNode() {
28
- return this.termNode;
28
+ getTerm() {
29
+ return this.term;
29
30
  }
30
31
 
31
- getVariableNode() {
32
- return this.variableNode;
32
+ getVariable() {
33
+ return this.variable;
33
34
  }
34
35
 
35
36
  getSubstitutionNode() {
@@ -40,33 +41,37 @@ export default class TermForVariableSubstitution extends Substitution {
40
41
  return this.substitutionTokens;
41
42
  }
42
43
 
43
- getVariableName() {
44
- const variableName = variableNameFromVariableNode(this.variableNode);
44
+ getSubstitutionString() {
45
+ const termString = this.term.getString(),
46
+ variableString = this.variable.getString(),
47
+ substitutionString = `[${termString} for ${variableString}]`;
45
48
 
46
- return variableName;
49
+ return substitutionString;
47
50
  }
48
51
 
49
- setSubstitutionNode() {
50
- this.substitutionNode = substitutionNodeFromSubstitutionTokens(this.substitutionTokens);
51
- }
52
+ setSubstitutionNodeAndTokens(localContext) {
53
+ const lexer = localContext.getLexer(),
54
+ parser = localContext.getParser(),
55
+ substitutionString = this.getSubstitutionString(),
56
+ unqualifiedStatementString = unqualifiedStatementStringFromSubstitutionString(substitutionString),
57
+ unqualifiedStatementTokens = unqualifiedStatementTokensFromUnqualifiedStatementString(unqualifiedStatementString, lexer),
58
+ unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
52
59
 
53
- setSubstitutionTokens() {
54
- const termVariableNode = termVariableNodeQuery(this.termNode),
55
- termVariableName = variableNameFromVariableNode(termVariableNode),
56
- variableName = variableNameFromVariableNode(this.variableNode),
57
- substitutionString = `[${termVariableName} for ${variableName}]`;
60
+ this.substitutionNode = substitutionNodeFromUnqualifiedStatementNode(unqualifiedStatementNode);
58
61
 
59
- this.substitutionTokens = substitutionTokensFromSubstitutionString(substitutionString);
62
+ this.substitutionTokens = substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode(unqualifiedStatementTokens, this.substitutionNode);
60
63
  }
61
64
 
62
65
  isEqualTo(substitution) {
63
66
  let equalTo = false;
64
67
 
65
- const termNode = substitution.getTermNode(),
66
- variableNode = substitution.getVariableNode();
68
+ const term = substitution.getTerm(),
69
+ variable = substitution.getVariable();
67
70
 
68
- if ((termNode !== null) && (variableNode !== null)) {
69
- const termNodeMatches = this.matchTermNode(termNode),
71
+ if ((term !== null) && (variable !== null)) {
72
+ const termNode = term.getNode(),
73
+ variableNode = variable.getNode(),
74
+ termNodeMatches = this.matchTermNode(termNode),
70
75
  variableNodeMatches = this.matchVariableNode(variableNode);
71
76
 
72
77
  equalTo = (termNodeMatches && variableNodeMatches);
@@ -76,9 +81,9 @@ export default class TermForVariableSubstitution extends Substitution {
76
81
  }
77
82
 
78
83
  matchTermNode(termNode) {
79
- termNode = stripBracketsFromTerm(termNode); ///
84
+ termNode = stripBracketsFromTermNode(termNode); ///
80
85
 
81
- const termNodeMatches = this.termNode.match(termNode);
86
+ const termNodeMatches = this.term.matchTermNode(termNode);
82
87
 
83
88
  return termNodeMatches;
84
89
  }
@@ -88,7 +93,7 @@ export default class TermForVariableSubstitution extends Substitution {
88
93
 
89
94
  const variableNameA = variableName; ///
90
95
 
91
- variableName = variableNameFromVariableNode(this.variableNode);
96
+ variableName = this.variable.getName();
92
97
 
93
98
  const variableNameB = variableName; ///
94
99
 
@@ -116,10 +121,12 @@ export default class TermForVariableSubstitution extends Substitution {
116
121
  unifyWithEquivalence(equivalence, substitutions, localContextA, localContextB) {
117
122
  let unifiedWithEquivalence;
118
123
 
119
- const equivalenceMatchesTermNode = equivalence.matchTermNode(this.termNode);
124
+ const termNode = this.term.getNode(),
125
+ equivalenceMatchesTermNode = equivalence.matchTermNode(termNode);
120
126
 
121
127
  if (equivalenceMatchesTermNode) {
122
- const equivalenceMatchesVariableNode = equivalence.matchVariableNode(this.variableNode);
128
+ const variableNode = this.variable.getNode(),
129
+ equivalenceMatchesVariableNode = equivalence.matchVariableNode(variableNode);
123
130
 
124
131
  if (equivalenceMatchesVariableNode) {
125
132
  unifiedWithEquivalence = true;
@@ -145,7 +152,7 @@ export default class TermForVariableSubstitution extends Substitution {
145
152
  string = stringFromTermAndVariable(term, variable, localContext),
146
153
  substitutionTokens = localContext.nodeAsTokens(substitutionNode);
147
154
 
148
- termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode, substitutionTokens);
155
+ termForVariableSubstitution = new TermForVariableSubstitution(string, term, variable, substitutionNode, substitutionTokens);
149
156
  }
150
157
  }
151
158
 
@@ -155,13 +162,16 @@ export default class TermForVariableSubstitution extends Substitution {
155
162
  static fromTernAndVariable(term, variable, localContext) {
156
163
  let termNode = term.getNode();
157
164
 
158
- termNode = stripBracketsFromTerm(termNode); ///
165
+ termNode = stripBracketsFromTermNode(termNode); ///
166
+
167
+ const { Term } = shim;
168
+
169
+ term = Term.fromTermNode(termNode, localContext);
159
170
 
160
171
  const string = stringFromTermAndVariable(term, variable, localContext),
161
- variableNode = variable.getNode(),
162
172
  substitutionNode = null,
163
173
  substitutionTokens = null,
164
- termForVariableSubstitution = new TermForVariableSubstitution(string, termNode, variableNode, substitutionNode, substitutionTokens);
174
+ termForVariableSubstitution = new TermForVariableSubstitution(string, term, variable, substitutionNode, substitutionTokens);
165
175
 
166
176
  return termForVariableSubstitution;
167
177
  }
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
 
3
- export default class Substitution {
3
+ import shim from "./shim";
4
+
5
+ class Substitution {
4
6
  constructor(string) {
5
7
  this.string = string;
6
8
  }
@@ -9,22 +11,22 @@ export default class Substitution {
9
11
  return this.string;
10
12
  }
11
13
 
12
- getTermNode() {
13
- const termNode = null;
14
+ getTerm() {
15
+ const term = null;
14
16
 
15
- return termNode;
17
+ return term;
16
18
  }
17
19
 
18
- getFrameNode() {
19
- const frameNode = null;
20
+ getFrame() {
21
+ const frame = null;
20
22
 
21
- return frameNode;
23
+ return frame;
22
24
  }
23
25
 
24
- getStatementNode() {
25
- const statementNode = null;
26
+ getStatement() {
27
+ const statement = null;
26
28
 
27
- return statementNode;
29
+ return statement;
28
30
  }
29
31
 
30
32
  getSubstitutionNode() {
@@ -33,12 +35,6 @@ export default class Substitution {
33
35
  return substitutionNode;
34
36
  }
35
37
 
36
- getVariableName() {
37
- const variableName = null;
38
-
39
- return variableName;
40
- }
41
-
42
38
  getMetavariableName() {
43
39
  const metavariableName = null;
44
40
 
@@ -124,3 +120,9 @@ export default class Substitution {
124
120
  return unifiedWithEquivalences;
125
121
  }
126
122
  }
123
+
124
+ Object.assign(shim, {
125
+ Substitution
126
+ });
127
+
128
+ export default Substitution;
@@ -54,6 +54,8 @@ export default class Substitutions {
54
54
  return metavariableNames;
55
55
  }
56
56
 
57
+ mapSubstitution(callback) { return this.array.map(callback); }
58
+
57
59
  findSubstitution(callback) { return this.array.find(callback) || null; } ///
58
60
 
59
61
  someSubstitution(callback) { return this.array.some(callback); }
@@ -7,10 +7,11 @@ import UnqualifiedStatement from "./statement/unqualified";
7
7
 
8
8
  import { nodeQuery } from "./utilities/query";
9
9
  import { assignAssignments } from "./utilities/assignments";
10
+ import { unqualifiedStatementFromJSON, unqualifiedStatementToUnqualifiedStatementJSON } from "./utilities/json";
10
11
 
11
12
  const unqualifiedStatementNodeQuery = nodeQuery("/supposition/unqualifiedStatement");
12
13
 
13
- export default class Supposition {
14
+ class Supposition {
14
15
  constructor(fileContext, unqualifiedStatement) {
15
16
  this.fileContext = fileContext;
16
17
  this.unqualifiedStatement = unqualifiedStatement;
@@ -71,7 +72,13 @@ export default class Supposition {
71
72
 
72
73
  const statement = this.unqualifiedStatement.getStatement(),
73
74
  statementNode = statement.getNode(),
74
- subproofAssertion = SubproofAssertion.fromStatementNode(statementNode, this.fileContext);
75
+ statementTokens = statement.getTokens(),
76
+ context = this.fileContext, ///
77
+ tokens = statementTokens; ///
78
+
79
+ localContext = LocalContext.fromContextAndTokens(context, tokens); ///
80
+
81
+ const subproofAssertion = SubproofAssertion.fromStatementNode(statementNode, localContext);
75
82
 
76
83
  if (subproofAssertion !== null) {
77
84
  subproofUnified = subproofAssertion.unifySubproof(subproof, substitutions, this.fileContext, localContext);
@@ -131,7 +138,7 @@ export default class Supposition {
131
138
  }
132
139
 
133
140
  toJSON() {
134
- const unqualifiedStatementJSON = this.unqualifiedStatement.toJSON(),
141
+ const unqualifiedStatementJSON = unqualifiedStatementToUnqualifiedStatementJSON(this.unqualifiedStatement),
135
142
  unqualifiedStatement = unqualifiedStatementJSON, ///
136
143
  json = {
137
144
  unqualifiedStatement
@@ -141,13 +148,8 @@ export default class Supposition {
141
148
  }
142
149
 
143
150
  static fromJSON(json, fileContext) {
144
- let { unqualifiedStatement } = json;
145
-
146
- json = unqualifiedStatement; ///
147
-
148
- unqualifiedStatement = UnqualifiedStatement.fromJSON(json, fileContext);
149
-
150
- const supposition = new Supposition(fileContext, unqualifiedStatement);
151
+ const unqualifiedStatement = unqualifiedStatementFromJSON(json, fileContext),
152
+ supposition = new Supposition(fileContext, unqualifiedStatement);
151
153
 
152
154
  return supposition;
153
155
  }
@@ -160,3 +162,9 @@ export default class Supposition {
160
162
  return supposition
161
163
  }
162
164
  }
165
+
166
+ Object.assign(shim, {
167
+ Supposition
168
+ });
169
+
170
+ export default Supposition;
package/src/term.js CHANGED
@@ -11,6 +11,7 @@ import { objectType } from "./type";
11
11
  import { nodeQuery, nodesQuery } from "./utilities/query"
12
12
  import { termNodeFromTermString } from "./utilities/node";
13
13
  import { variableNameFromVariableNode } from "./utilities/name";
14
+ import { typeFromJSON, typeToTypeJSON } from "./utilities/json";
14
15
 
15
16
  const { filter } = arrayUtilities;
16
17
 
@@ -236,12 +237,12 @@ class Term {
236
237
  }
237
238
 
238
239
  toJSON() {
239
- const typeJSON = this.type.toJSON(),
240
+ const typeJSON = typeToTypeJSON(this.type),
240
241
  string = this.string,
241
242
  type = typeJSON, ///
242
243
  json = {
243
- string,
244
- type
244
+ type,
245
+ string
245
246
  };
246
247
 
247
248
  return json;
@@ -249,9 +250,9 @@ class Term {
249
250
 
250
251
  static fromJSON(json, fileContext) {
251
252
  const { string } = json,
252
- termString = string, ///
253
253
  lexer = fileContext.getLexer(),
254
254
  parser = fileContext.getParser(),
255
+ termString = string, ///
255
256
  termNode = termNodeFromTermString(termString, lexer, parser),
256
257
  node = termNode, ///
257
258
  type = typeFromJSON(json, fileContext),
@@ -328,14 +329,3 @@ Object.assign(shim, {
328
329
  });
329
330
 
330
331
  export default Term;
331
-
332
- function typeFromJSON(json, fileContext) {
333
- let { type } = json;
334
-
335
- const { name } = type,
336
- typeName = name; ///
337
-
338
- type = fileContext.findTypeByTypeName(typeName);
339
-
340
- return type;
341
- }