occam-verify-cli 0.0.1059 → 0.0.1063

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 (45) hide show
  1. package/lib/assertion/contained.js +185 -0
  2. package/lib/assertion/defined.js +187 -0
  3. package/lib/assertion/subproof.js +3 -3
  4. package/lib/assertion/type.js +13 -6
  5. package/lib/context/release.js +5 -5
  6. package/lib/declaration.js +6 -50
  7. package/lib/equality.js +6 -7
  8. package/lib/equivalence.js +3 -2
  9. package/lib/frame.js +160 -64
  10. package/lib/metavariable.js +20 -7
  11. package/lib/mixins/statement/verify.js +24 -32
  12. package/lib/statement.js +58 -4
  13. package/lib/substitution/statement.js +17 -2
  14. package/lib/term.js +46 -3
  15. package/lib/variable.js +6 -2
  16. package/lib/verifier/intrinsicLevel.js +4 -4
  17. package/lib/verifier/metaLevel.js +4 -4
  18. package/lib/verifier/substitution.js +161 -0
  19. package/lib/verifier/topLevel.js +4 -4
  20. package/package.json +3 -3
  21. package/src/assertion/contained.js +172 -0
  22. package/src/assertion/defined.js +188 -0
  23. package/src/assertion/subproof.js +3 -2
  24. package/src/assertion/type.js +18 -7
  25. package/src/context/release.js +5 -7
  26. package/src/declaration.js +49 -49
  27. package/src/equality.js +7 -8
  28. package/src/equivalence.js +3 -1
  29. package/src/frame.js +204 -59
  30. package/src/metavariable.js +35 -11
  31. package/src/mixins/statement/verify.js +30 -42
  32. package/src/statement.js +85 -4
  33. package/src/substitution/statement.js +22 -2
  34. package/src/term.js +61 -3
  35. package/src/variable.js +7 -2
  36. package/src/verifier/intrinsicLevel.js +3 -3
  37. package/src/verifier/metaLevel.js +3 -3
  38. package/src/verifier/substitution.js +75 -0
  39. package/src/verifier/topLevel.js +3 -3
  40. package/lib/verify/assertion/contained.js +0 -107
  41. package/lib/verify/assertion/defined.js +0 -98
  42. package/lib/verify/assertion/subproof.js +0 -16
  43. package/src/verify/assertion/contained.js +0 -134
  44. package/src/verify/assertion/defined.js +0 -120
  45. package/src/verify/assertion/subproof.js +0 -9
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+
3
+ import shim from "../shim";
4
+
5
+ import { isAssertionNegated } from "../utilities/assertion";
6
+ import { variableNameFromVariableNode, metavariableNameFromMetavariableNode } from "../utilities/name";
7
+
8
+ export default class DefinedAssertion {
9
+ constructor(string, node, term, frame) {
10
+ this.string = string;
11
+ this.node = node;
12
+ this.term = term;
13
+ this.frame= frame
14
+ }
15
+
16
+ getString() {
17
+ return this.string;
18
+ }
19
+
20
+ getNode() {
21
+ return this.node;
22
+ }
23
+
24
+ getTerm() {
25
+ return this.term;
26
+ }
27
+
28
+ getStatement() {
29
+ return this.frame;
30
+ }
31
+
32
+ verify(assignments, stated, localContext) {
33
+ let verified = false;
34
+
35
+ const definedAssertionString = this.string; ///
36
+
37
+ localContext.trace(`Verifying the '${definedAssertionString}' defined assertion...`);
38
+
39
+ let termVerified = true, ///
40
+ frameVerified = true; ///
41
+
42
+ if (this.term !== null) {
43
+ termVerified = this.term.verify(localContext, () => {
44
+ const verifiedAhead = true;
45
+
46
+ return verifiedAhead;
47
+ });
48
+ }
49
+
50
+ if (this.frame!== null) {
51
+ frameVerified = this.frame.verify(localContext);
52
+ }
53
+
54
+ if (termVerified && frameVerified) {
55
+ let verifiedWhenStated = false,
56
+ verifiedWhenDerived = false;
57
+
58
+ if (stated) {
59
+ verifiedWhenStated = this.verifyWhenStated(localContext);
60
+ } else {
61
+ verifiedWhenDerived = this.verifyWhenDerived(localContext);
62
+ }
63
+
64
+ if (verifiedWhenStated || verifiedWhenDerived) {
65
+ verified = true;
66
+ }
67
+ }
68
+
69
+ if (verified) {
70
+ localContext.debug(`...verified the '${definedAssertionString}' defined assertion.`);
71
+ }
72
+
73
+ return verified;
74
+ }
75
+
76
+ verifyWhenStated(localContext) {
77
+ let verifiedWhenStated;
78
+
79
+ const definedAssertionString = this.string; ///
80
+
81
+ localContext.trace(`Verifying the '${definedAssertionString}' stated defined assertion...`);
82
+
83
+ verifiedWhenStated = true;
84
+
85
+ if (verifiedWhenStated) {
86
+ localContext.debug(`...verified the '${definedAssertionString}' stated defined assertion.`);
87
+ }
88
+
89
+ return verifiedWhenStated;
90
+ }
91
+
92
+ verifyWhenDerived(localContext) {
93
+ let verifiedWhenDerived = false;
94
+
95
+ const definedAssertionString = this.string; ///
96
+
97
+ localContext.trace(`Verifying the '${definedAssertionString}' derived defined assertion...`);
98
+
99
+ debugger
100
+
101
+ if (this.term !== null) {
102
+
103
+ }
104
+
105
+ if (this.frame!== null) {
106
+
107
+ }
108
+
109
+ if (verifiedWhenDerived) {
110
+ localContext.debug(`...verified the '${definedAssertionString}' derived defined assertion.`);
111
+ }
112
+
113
+ return verifiedWhenDerived;
114
+ }
115
+
116
+ static fromDefinedAssertionNode(definedAssertionNode, localContext) {
117
+ let definedAssertion = null;
118
+
119
+ if (definedAssertionNode !== null) {
120
+ const { Term, Frame } = shim,
121
+ node = definedAssertionNode, ///
122
+ string = localContext.nodeAsString(node),
123
+ term = Term.fromDefinedAssertionNode(definedAssertionNode, localContext),
124
+ frame = Frame.fromDefinedAssertionNode(definedAssertionNode, localContext),
125
+ definedAssertionNegated = isAssertionNegated(definedAssertionNode),
126
+ negated = definedAssertionNegated; ///
127
+
128
+ definedAssertion = new DefinedAssertion(string, node, term, frame, negated);
129
+ }
130
+
131
+ return definedAssertion;
132
+ }
133
+ }
134
+
135
+ function verifyDerivedDefinedAssertion(definedAssertionNode, assignments, stated, localContext) {
136
+ let derivedDefinedAssertionVerified = false;
137
+
138
+ if (!stated) {
139
+ const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
140
+
141
+ localContext.trace(`Verifying the '${definedAssertionString}' derived defined assertion...`, definedAssertionNode);
142
+
143
+ const assertionNegated = isAssertionNegated(definedAssertionNode),
144
+ metavariableNode = metavariableNodeQuery(definedAssertionNode),
145
+ variableNode = variableNodeQuery(definedAssertionNode);
146
+
147
+ if (false) {
148
+ ///
149
+ } else if (metavariableNode !== null) {
150
+ const metavariableName = metavariableNameFromMetavariableNode(metavariableNode),
151
+ metavariableDefinedByMetavariableName = localContext.isMetavariableDefinedByMetavariableName(metavariableName);
152
+
153
+ if (!assertionNegated) {
154
+ if (metavariableDefinedByMetavariableName) {
155
+ derivedDefinedAssertionVerified = true;
156
+ }
157
+ }
158
+
159
+ if (assertionNegated) {
160
+ if (!metavariableDefinedByMetavariableName) {
161
+ derivedDefinedAssertionVerified = true;
162
+ }
163
+ }
164
+ } else if (variableNode !== null) {
165
+ const variableName = variableNameFromVariableNode(variableNode),
166
+ variable = localContext.findVariableByVariableName(variableName),
167
+ variableDefined = localContext.isVariableDefined(variable);
168
+
169
+ if (!assertionNegated) {
170
+ if (variableDefined) {
171
+ derivedDefinedAssertionVerified = true;
172
+ }
173
+ }
174
+
175
+ if (assertionNegated) {
176
+ if (!variableDefined) {
177
+ derivedDefinedAssertionVerified = true;
178
+ }
179
+ }
180
+ }
181
+
182
+ if (derivedDefinedAssertionVerified) {
183
+ localContext.debug(`...verified the '${definedAssertionString}' derived defined assertion.`, definedAssertionNode);
184
+ }
185
+ }
186
+
187
+ return derivedDefinedAssertionVerified;
188
+ }
@@ -54,9 +54,10 @@ export default class SubproofAssertion {
54
54
 
55
55
  stated = true; ///
56
56
 
57
- const subproofAssertionNode = this.node; ///
57
+ const subproofAssertionNode = this.node, ///
58
+ verifiedAtMetaLevel = metaLevelVerifier.verify(subproofAssertionNode, assignments, stated, localContext);
58
59
 
59
- verified = metaLevelVerifier.verify(subproofAssertionNode, assignments, stated, localContext);
60
+ verified = verifiedAtMetaLevel; ///
60
61
  }
61
62
 
62
63
  if (verified) {
@@ -5,7 +5,7 @@ import Variable from "../variable";
5
5
  import VariableAssignment from "../assignment/variable";
6
6
 
7
7
  import { nodeQuery } from "../utilities/query";
8
- import {objectType} from "../type";
8
+ import { objectType } from "../type";
9
9
 
10
10
  const termNodeQuery = nodeQuery("/typeAssertion/term"),
11
11
  typeNodeQuery = nodeQuery("/typeAssertion/type"),
@@ -36,16 +36,27 @@ export default class TypeAssertion {
36
36
  }
37
37
 
38
38
  verify(assignments, stated, localContext) {
39
- let verified;
39
+ let verified = false;
40
40
 
41
- if (stated) {
42
- const verifiedWhenStated = this.verifyWhenStated(assignments, localContext);
41
+ let typeAssertionString = this.string; ///
42
+
43
+ localContext.trace(`Verifying the '$${typeAssertionString}' type assertion...`);
43
44
 
44
- verified = verifiedWhenStated; ///
45
+ let verifiedWhenStated = false,
46
+ verifiedWhenDerived = false;
47
+
48
+ if (stated) {
49
+ verifiedWhenStated = this.verifyWhenStated(assignments, localContext);
45
50
  } else {
46
- const verifiedWhenDerived = this.verifyWhenDerived(localContext);
51
+ verifiedWhenDerived = this.verifyWhenDerived(localContext);
52
+ }
53
+
54
+ if (verifiedWhenStated || verifiedWhenDerived) {
55
+ verified = true;
56
+ }
47
57
 
48
- verified = verifiedWhenDerived; ///
58
+ if (verified) {
59
+ localContext.debug(`...verified the '$${typeAssertionString}' type assertion.`);
49
60
  }
50
61
 
51
62
  return verified;
@@ -81,11 +81,7 @@ export default class ReleaseContext {
81
81
  return released;
82
82
  }
83
83
 
84
- findFile(filePath) {
85
- const file = this.entries.getFile(filePath);
86
-
87
- return file;
88
- }
84
+ findFile(filePath) { return this.entries.findFile(filePath); }
89
85
 
90
86
  findFileContext(filePath) {
91
87
  const fileContext = this.fileContexts.find((fileContext) => {
@@ -457,7 +453,7 @@ function fileContextsFromJSONAndEntries(json, entries, fileContexts, releaseCont
457
453
 
458
454
  fileContextsJSON.forEach((fileContextJSON) => {
459
455
  const { filePath } = fileContextJSON,
460
- file = entries.getFile(filePath),
456
+ file = entries.findFile(filePath),
461
457
  fileContext = FileContext.fromFile(file, releaseContext);
462
458
 
463
459
  fileContext.initialise(fileContextJSON);
@@ -516,7 +512,9 @@ function verifyFileContext(fileContext) {
516
512
  if (node !== null) {
517
513
  fileContext.reset();
518
514
 
519
- fileContextVerified = topLevelVerifier.verify(node, fileContext);
515
+ const verifiedAtTopLevel = topLevelVerifier.verify(node, fileContext);
516
+
517
+ fileContextVerified = verifiedAtTopLevel; ///
520
518
  }
521
519
 
522
520
  return fileContextVerified;
@@ -3,60 +3,60 @@
3
3
  import { stripBracketsFromStatement } from "./utilities/brackets";
4
4
 
5
5
  export default class Declaration {
6
- constructor(reference, statementNode) {
6
+ constructor(reference, statement) {
7
7
  this.reference = reference;
8
- this.statementNode = statementNode;
8
+ this.statement = statement;
9
9
  }
10
10
 
11
11
  getReference() {
12
12
  return this.reference;
13
13
  }
14
14
 
15
- getStatementNode() {
16
- return this.statementNode;
17
- }
18
-
19
- getMetavariableNode() { return this.reference.getMetavariableNode(); }
20
-
21
- unifyStatement(statementNode) {
22
- statementNode = stripBracketsFromStatement(statementNode); ///
23
-
24
- const statementNodeMatches = this.statementNode.match(statementNode),
25
- statementUnified = statementNodeMatches; ///
26
-
27
- return statementUnified;
28
- }
29
-
30
- unifySubstitution(substitution) {
31
- const statementNode = substitution.getStatementNode(),
32
- metavariableNode = substitution.getMetavariableNode(),
33
- statementUnified = this.unifyStatement(statementNode),
34
- metavariableUnified = this.unifyMetavariable(metavariableNode),
35
- substitutionUnified = (metavariableUnified && statementUnified);
36
-
37
- return substitutionUnified;
38
- }
39
-
40
- unifyMetavariable(metavariable) {
41
- const metavariableNodeMatches = this.reference.matchMetavariableNode(metavariable);
42
-
43
- return metavariableNodeMatches;
44
- }
45
-
46
- unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem) {
47
- const consequent = metaLemmaMetatheorem.getConsequent(),
48
- statementNode = consequent.getStatementNode(),
49
- statementNodeMatches = this.statementNode.match(statementNode),
50
- metaLemmaOrMetaTheoremUnified = statementNodeMatches; ///
51
-
52
- return metaLemmaOrMetaTheoremUnified;
53
- }
54
-
55
- static fromReferenceAndStatementNode(reference, statementNode) {
56
- statementNode = stripBracketsFromStatement(statementNode); ///
57
-
58
- const declaration = new Declaration(reference, statementNode);
59
-
60
- return declaration;
61
- }
15
+ getStatement() {
16
+ return this.statement;
17
+ }
18
+
19
+ // getMetavariableNode() { return this.reference.getMetavariableNode(); }
20
+ //
21
+ // unifyStatement(statementNode) {
22
+ // statementNode = stripBracketsFromStatement(statementNode); ///
23
+ //
24
+ // const statementNodeMatches = this.statementNode.match(statementNode),
25
+ // statementUnified = statementNodeMatches; ///
26
+ //
27
+ // return statementUnified;
28
+ // }
29
+ //
30
+ // unifySubstitution(substitution) {
31
+ // const statementNode = substitution.getStatementNode(),
32
+ // metavariableNode = substitution.getMetavariableNode(),
33
+ // statementUnified = this.unifyStatement(statementNode),
34
+ // metavariableUnified = this.unifyMetavariable(metavariableNode),
35
+ // substitutionUnified = (metavariableUnified && statementUnified);
36
+ //
37
+ // return substitutionUnified;
38
+ // }
39
+ //
40
+ // unifyMetavariable(metavariable) {
41
+ // const metavariableNodeMatches = this.reference.matchMetavariableNode(metavariable);
42
+ //
43
+ // return metavariableNodeMatches;
44
+ // }
45
+ //
46
+ // unifyMetaLemmaOrMetatheorem(metaLemmaMetatheorem) {
47
+ // const consequent = metaLemmaMetatheorem.getConsequent(),
48
+ // statementNode = consequent.getStatementNode(),
49
+ // statementNodeMatches = this.statementNode.match(statementNode),
50
+ // metaLemmaOrMetaTheoremUnified = statementNodeMatches; ///
51
+ //
52
+ // return metaLemmaOrMetaTheoremUnified;
53
+ // }
54
+ //
55
+ // static fromReferenceAndStatementNode(reference, statementNode) {
56
+ // statementNode = stripBracketsFromStatement(statementNode); ///
57
+ //
58
+ // const declaration = new Declaration(reference, statementNode);
59
+ //
60
+ // return declaration;
61
+ // }
62
62
  }
package/src/equality.js CHANGED
@@ -45,23 +45,22 @@ export default class Equality {
45
45
  }
46
46
 
47
47
  verify(assignments, stated, localContext) {
48
- let verified;
48
+ let verified = false;
49
49
 
50
50
  const equalityString = this.string; ///
51
51
 
52
52
  localContext.trace(`Verifying the '${equalityString}' equality...`);
53
53
 
54
- if (stated) {
55
- const verifiedWhenStated = this.verifyWhenStated(localContext);
54
+ let verifiedWhenStated = false,
55
+ verifiedWhenDerived = false;
56
56
 
57
- verified = verifiedWhenStated; ///
57
+ if (stated) {
58
+ verifiedWhenStated = this.verifyWhenStated(localContext);
58
59
  } else {
59
- const verifiedWhenDerived = this.verifyWhenDerived(localContext);
60
-
61
- verified = verifiedWhenDerived; ///
60
+ verifiedWhenDerived = this.verifyWhenDerived(localContext);
62
61
  }
63
62
 
64
- if (verified) {
63
+ if (verifiedWhenStated || verifiedWhenDerived) {
65
64
  if (assignments !== null) {
66
65
  const equality = this, //
67
66
  equalityAssignment = EqualityAssignment.fromEquality(equality),
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { nodeQuery } from "./utilities/query";
4
4
  import { stripBracketsFromTerm } from "./utilities/brackets";
5
+ import { variableNameFromVariableNode } from "./utilities/name";
5
6
 
6
7
  const variableNodeQuery = nodeQuery("/term/variable!");
7
8
 
@@ -227,7 +228,8 @@ function termTypeFromTerm(term, localContext) {
227
228
  variableNode = variableNodeQuery(termNode);
228
229
 
229
230
  if (variableNode !== null) {
230
- const variable = localContext.findVariableByVariableNode(variableNode),
231
+ const variableName = variableNameFromVariableNode(variableNode),
232
+ variable = localContext.findVariableByVariableName(variableName),
231
233
  variableType = variable.getType();
232
234
 
233
235
  termType = variableType; ///