occam-verify-cli 0.0.869 → 0.0.871
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/axiomLemmaTheoremConjecture.js +13 -13
- package/lib/conclusion.js +3 -3
- package/lib/context/file.js +77 -73
- package/lib/equality.js +2 -4
- package/lib/equivalence.js +1 -1
- package/lib/label.js +5 -6
- package/lib/metaLemmaMetatheorem.js +13 -13
- package/lib/mixins/context.js +28 -28
- package/lib/premise.js +4 -4
- package/lib/rule.js +13 -13
- package/lib/ruleNames.js +1 -29
- package/lib/substitution/metastatementForMetavariable.js +3 -2
- package/lib/substitution/statementForMetavariable.js +27 -64
- package/lib/substitution/termForVariable.js +5 -5
- package/lib/utilities/name.js +8 -8
- package/lib/utilities/node.js +14 -14
- package/lib/utilities/query.js +4 -9
- package/lib/utilities/tokens.js +6 -6
- package/lib/utilities/verifier.js +86 -0
- package/lib/verifier/node/metastatement.js +41 -28
- package/lib/verifier/node/statementAsCombinator.js +41 -28
- package/lib/verifier/node/termAsConstructor.js +30 -22
- package/lib/verifier/nodes/equality.js +27 -32
- package/lib/verifier/nodes/intrinsicLevel.js +25 -34
- package/lib/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +270 -0
- package/lib/verifier/nodes/metaLevel.js +25 -34
- package/lib/verifier/nodes/statementAgainstCombinator.js +45 -49
- package/lib/verifier/nodes/termAgainstConstructor.js +24 -51
- package/lib/verify/argumentAgainstArgument.js +24 -0
- package/lib/verify/axiom.js +4 -4
- package/lib/verify/conjecture.js +4 -4
- package/lib/verify/containment.js +5 -5
- package/lib/verify/equality.js +9 -9
- package/lib/verify/label.js +8 -9
- package/lib/verify/labels.js +15 -8
- package/lib/verify/lemma.js +4 -4
- package/lib/verify/metaDerivation.js +19 -19
- package/lib/verify/metaLemma.js +4 -4
- package/lib/verify/metaproof.js +4 -6
- package/lib/verify/metastatement/qualified.js +3 -3
- package/lib/verify/metatheorem.js +4 -4
- package/lib/verify/metavariable.js +7 -5
- package/lib/verify/metavariableAgainstMetastatement.js +44 -0
- package/lib/verify/metavariableAgainstStatement.js +65 -0
- package/lib/verify/rule.js +4 -4
- package/lib/verify/statement/qualified.js +29 -29
- package/lib/verify/statement.js +4 -4
- package/lib/verify/statementAgainstMetaType.js +24 -0
- package/lib/verify/statementAtainstStatement.js +52 -0
- package/lib/verify/term.js +7 -8
- package/lib/verify/termAgainstTerm.js +22 -0
- package/lib/verify/termAgainstType.js +26 -0
- package/lib/verify/terms.js +2 -3
- package/lib/verify/theorem.js +4 -4
- package/lib/verify/type.js +7 -5
- package/lib/verify/typeAssertion.js +45 -40
- package/lib/verify/variable.js +7 -5
- package/lib/verify/variableAgainstTerm.js +70 -0
- package/package.json +4 -4
- package/src/axiomLemmaTheoremConjecture.js +13 -13
- package/src/conclusion.js +2 -2
- package/src/context/file.js +79 -73
- package/src/equality.js +3 -9
- package/src/equivalence.js +1 -1
- package/src/label.js +6 -7
- package/src/metaLemmaMetatheorem.js +13 -13
- package/src/mixins/context.js +17 -17
- package/src/premise.js +3 -3
- package/src/rule.js +13 -13
- package/src/ruleNames.js +0 -7
- package/src/substitution/metastatementForMetavariable.js +3 -1
- package/src/substitution/statementForMetavariable.js +32 -74
- package/src/substitution/termForVariable.js +3 -3
- package/src/utilities/name.js +7 -7
- package/src/utilities/node.js +13 -13
- package/src/utilities/query.js +3 -9
- package/src/utilities/tokens.js +4 -4
- package/src/utilities/verifier.js +46 -0
- package/src/verifier/node/metastatement.js +41 -34
- package/src/verifier/node/statementAsCombinator.js +39 -32
- package/src/verifier/node/termAsConstructor.js +30 -25
- package/src/verifier/nodes/equality.js +31 -36
- package/src/verifier/nodes/intrinsicLevel.js +30 -38
- package/src/verifier/nodes/intrinsicLevelAgainstMetaLevel.js +222 -0
- package/src/verifier/nodes/metaLevel.js +30 -38
- package/src/verifier/nodes/statementAgainstCombinator.js +52 -55
- package/src/verifier/nodes/termAgainstConstructor.js +30 -71
- package/src/verify/argumentAgainstArgument.js +15 -0
- package/src/verify/axiom.js +4 -4
- package/src/verify/conjecture.js +4 -4
- package/src/verify/containment.js +4 -4
- package/src/verify/equality.js +8 -8
- package/src/verify/label.js +8 -9
- package/src/verify/labels.js +17 -7
- package/src/verify/lemma.js +4 -4
- package/src/verify/metaDerivation.js +18 -18
- package/src/verify/metaLemma.js +6 -6
- package/src/verify/metaproof.js +3 -6
- package/src/verify/metastatement/qualified.js +5 -4
- package/src/verify/metatheorem.js +4 -4
- package/src/verify/metavariable.js +7 -5
- package/src/verify/metavariableAgainstMetastatement.js +42 -0
- package/src/verify/metavariableAgainstStatement.js +77 -0
- package/src/verify/rule.js +4 -4
- package/src/verify/statement/qualified.js +35 -30
- package/src/verify/statement.js +5 -5
- package/src/verify/statementAgainstMetaType.js +21 -0
- package/src/verify/statementAtainstStatement.js +60 -0
- package/src/verify/term.js +13 -17
- package/src/verify/termAgainstTerm.js +20 -0
- package/src/verify/termAgainstType.js +28 -0
- package/src/verify/terms.js +1 -3
- package/src/verify/theorem.js +4 -4
- package/src/verify/type.js +7 -5
- package/src/verify/typeAssertion.js +56 -55
- package/src/verify/variable.js +7 -5
- package/src/verify/variableAgainstTerm.js +86 -0
- package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -327
- package/lib/verifier/nodes/substitution.js +0 -223
- package/lib/verify/givenMetavariable.js +0 -31
- package/lib/verify/givenType.js +0 -31
- package/lib/verify/givenVariable.js +0 -31
- package/lib/verify/termAndGivenType.js +0 -39
- package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +0 -219
- package/src/verifier/nodes/substitution.js +0 -125
- package/src/verify/givenMetavariable.js +0 -31
- package/src/verify/givenType.js +0 -31
- package/src/verify/givenVariable.js +0 -31
- package/src/verify/termAndGivenType.js +0 -37
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Variable from "../variable";
|
|
4
|
+
import verifyTerm from "../verify/term";
|
|
4
5
|
import VariableAssignment from "../assignment/variable";
|
|
5
|
-
import verifyTermAndGivenType from "../verify/termAndGivenType";
|
|
6
6
|
|
|
7
7
|
import { first } from "../utilities/array";
|
|
8
8
|
import { nodeQuery } from "../utilities/query";
|
|
9
|
-
import { verifyTermAsGivenVariable } from "./term";
|
|
10
9
|
|
|
11
10
|
const termNodeQuery = nodeQuery("/typeAssertion/term!"),
|
|
12
11
|
typeNodeQuery = nodeQuery("/typeAssertion/type!"),
|
|
@@ -21,7 +20,7 @@ export default function verifyTypeAssertion(typeAssertionNode, assignments, deri
|
|
|
21
20
|
|
|
22
21
|
const verifyTypeAssertionFunctions = [
|
|
23
22
|
verifyDerivedTypeAssertion,
|
|
24
|
-
|
|
23
|
+
verifyStatedTypeAssertion
|
|
25
24
|
];
|
|
26
25
|
|
|
27
26
|
typeAssertionVerified = verifyTypeAssertionFunctions.some((verifyTypeAssertionFunction) => {
|
|
@@ -48,38 +47,39 @@ function verifyDerivedTypeAssertion(typeAssertionNode, assignments, derived, loc
|
|
|
48
47
|
localContext.trace(`Verifying the '${typeAssertionString}' derived type assertion...`, typeAssertionNode);
|
|
49
48
|
|
|
50
49
|
const terms = [],
|
|
51
|
-
types = [],
|
|
52
50
|
termNode = termNodeQuery(typeAssertionNode),
|
|
53
|
-
|
|
54
|
-
termAndGivenTypeVerified = verifyTermAndGivenType(termNode, typeNode, terms, types, localContext, () => {
|
|
51
|
+
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
55
52
|
let verifiedAhead = false;
|
|
56
53
|
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
term = firstTerm, ///
|
|
60
|
-
type = firstType, ///
|
|
61
|
-
termType = localContext.getTermType(term),
|
|
62
|
-
typeEqualToOrSuperTypeOfTermType = type.isEqualToOrSuperTypeOf(termType);
|
|
54
|
+
const typeNode = typeNodeQuery(typeAssertionNode),
|
|
55
|
+
type = localContext.findTypeByTypeNode(typeNode);
|
|
63
56
|
|
|
64
|
-
if (
|
|
65
|
-
const
|
|
57
|
+
if (type !== null) {
|
|
58
|
+
const firstTerm = first(terms),
|
|
59
|
+
term = firstTerm, ///
|
|
60
|
+
termType = localContext.getTermType(term),
|
|
61
|
+
typeEqualToOrSuperTypeOfTermType = type.isEqualToOrSuperTypeOf(termType);
|
|
66
62
|
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
} else {
|
|
70
|
-
let variable = localContext.findVariableByVariableNode(variableNode);
|
|
63
|
+
if (typeEqualToOrSuperTypeOfTermType) {
|
|
64
|
+
const variableNode = variableNodeQuery(termNode);
|
|
71
65
|
|
|
72
|
-
|
|
66
|
+
if (variableNode === null) {
|
|
67
|
+
verifiedAhead = verifyAhead();
|
|
68
|
+
} else {
|
|
69
|
+
let variable = localContext.findVariableByVariableNode(variableNode);
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
assignment = variableAssignment; ///
|
|
71
|
+
variable = Variable.fromVariableAndType(variable, type);
|
|
76
72
|
|
|
77
|
-
|
|
73
|
+
const variableAssignment = VariableAssignment.fromVariable(variable),
|
|
74
|
+
assignment = variableAssignment; ///
|
|
78
75
|
|
|
79
|
-
|
|
76
|
+
assignments.push(assignment);
|
|
80
77
|
|
|
81
|
-
|
|
82
|
-
|
|
78
|
+
verifiedAhead = verifyAhead();
|
|
79
|
+
|
|
80
|
+
if (!verifiedAhead) {
|
|
81
|
+
assignments.pop();
|
|
82
|
+
}
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -87,7 +87,7 @@ function verifyDerivedTypeAssertion(typeAssertionNode, assignments, derived, loc
|
|
|
87
87
|
return verifiedAhead;
|
|
88
88
|
});
|
|
89
89
|
|
|
90
|
-
derivedTypeAssertionVerified =
|
|
90
|
+
derivedTypeAssertionVerified = termVerified; ///
|
|
91
91
|
|
|
92
92
|
if (derivedTypeAssertionVerified) {
|
|
93
93
|
localContext.trace(`...verified the '${typeAssertionString}' derived type assertion.`, typeAssertionNode);
|
|
@@ -97,47 +97,48 @@ function verifyDerivedTypeAssertion(typeAssertionNode, assignments, derived, loc
|
|
|
97
97
|
return derivedTypeAssertionVerified;
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
function
|
|
101
|
-
let
|
|
100
|
+
function verifyStatedTypeAssertion(typeAssertionNode, assignments, derived, localContext, verifyAhead) {
|
|
101
|
+
let statedTypeAssertionVerified = false;
|
|
102
102
|
|
|
103
103
|
if (!derived) {
|
|
104
104
|
const typeAssertionString = localContext.nodeAsString(typeAssertionNode);
|
|
105
105
|
|
|
106
|
-
localContext.trace(`Verifying the '${typeAssertionString}'
|
|
106
|
+
localContext.trace(`Verifying the '${typeAssertionString}' stated type assertion...`, typeAssertionNode);
|
|
107
107
|
|
|
108
108
|
const terms = [],
|
|
109
|
-
types = [],
|
|
110
109
|
termNode = termNodeQuery(typeAssertionNode),
|
|
111
|
-
|
|
112
|
-
termAndGivenTypeVerified = verifyTermAndGivenType(termNode, typeNode, terms, types, localContext, () => {
|
|
110
|
+
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
113
111
|
let verifiedAhead = false;
|
|
114
112
|
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
113
|
+
const typeNode = typeNodeQuery(typeAssertionNode),
|
|
114
|
+
type = localContext.findTypeByTypeNode(typeNode);
|
|
115
|
+
|
|
116
|
+
if (type !== null) {
|
|
117
|
+
const firstTerm = first(terms),
|
|
118
|
+
term = firstTerm, ///
|
|
119
|
+
termType = term.getType(),
|
|
120
|
+
typeEqualToOrSubTypeOfTermType = type.isEqualToOrSubTypeOf(termType);
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
if (typeEqualToOrSubTypeOfTermType) {
|
|
123
|
+
const variableNode = variableNodeQuery(termNode);
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
125
|
+
if (variableNode === null) {
|
|
126
|
+
verifiedAhead = verifyAhead();
|
|
127
|
+
} else {
|
|
128
|
+
let variable = localContext.findVariableByVariableNode(variableNode);
|
|
129
129
|
|
|
130
|
-
|
|
130
|
+
variable = Variable.fromVariableAndType(variable, type);
|
|
131
131
|
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
const variableAssignment = VariableAssignment.fromVariable(variable),
|
|
133
|
+
assignment = variableAssignment; ///
|
|
134
134
|
|
|
135
|
-
|
|
135
|
+
assignments.push(assignment);
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
verifiedAhead = verifyAhead();
|
|
138
138
|
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
if (!verifiedAhead) {
|
|
140
|
+
assignments.pop();
|
|
141
|
+
}
|
|
141
142
|
}
|
|
142
143
|
}
|
|
143
144
|
}
|
|
@@ -145,12 +146,12 @@ function verifyGivenTypeAssertion(typeAssertionNode, assignments, derived, local
|
|
|
145
146
|
return verifiedAhead;
|
|
146
147
|
});
|
|
147
148
|
|
|
148
|
-
|
|
149
|
+
statedTypeAssertionVerified = termVerified; ///
|
|
149
150
|
|
|
150
|
-
if (
|
|
151
|
-
localContext.trace(`...verified the '${typeAssertionString}'
|
|
151
|
+
if (statedTypeAssertionVerified) {
|
|
152
|
+
localContext.trace(`...verified the '${typeAssertionString}' stated type assertion.`, typeAssertionNode);
|
|
152
153
|
}
|
|
153
154
|
}
|
|
154
155
|
|
|
155
|
-
return
|
|
156
|
+
return statedTypeAssertionVerified;
|
|
156
157
|
}
|
package/src/verify/variable.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import Variable from "../variable";
|
|
4
4
|
import VariableAssignment from "../assignment/variable";
|
|
5
|
-
import verifyGivenVariable from "../verify/givenVariable";
|
|
6
5
|
|
|
7
6
|
import { objectType } from "../type";
|
|
8
7
|
|
|
@@ -54,16 +53,19 @@ export default function verifyVariable(variableNode, typeNode, fileContext) {
|
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
export function verifyStandaloneVariable(variableNode, localContext, verifyAhead) {
|
|
57
|
-
let standaloneVariableVerified;
|
|
56
|
+
let standaloneVariableVerified = false;
|
|
58
57
|
|
|
59
58
|
const variableString = localContext.nodeAsString(variableNode);
|
|
60
59
|
|
|
61
60
|
localContext.trace(`Verifying the '${variableString}' standalone variable...`, variableNode);
|
|
62
61
|
|
|
63
|
-
const
|
|
64
|
-
givenVariableVerified = verifyGivenVariable(variableNode, variables, localContext, verifyAhead);
|
|
62
|
+
const variablePresent = localContext.isVariablePresentByVariableNode(variableNode);
|
|
65
63
|
|
|
66
|
-
|
|
64
|
+
if (variablePresent) {
|
|
65
|
+
const verifiedAhead = verifyAhead();
|
|
66
|
+
|
|
67
|
+
standaloneVariableVerified = verifiedAhead; ///
|
|
68
|
+
}
|
|
67
69
|
|
|
68
70
|
if (standaloneVariableVerified) {
|
|
69
71
|
localContext.debug(`...verified the '${variableString}' standalone variable.`, variableNode);
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import verifyTerm from "../verify/term";
|
|
4
|
+
import TermForVariableSubstitution from "../substitution/termForVariable";
|
|
5
|
+
|
|
6
|
+
import { first } from "../utilities/array";
|
|
7
|
+
import { nodeQuery } from "../utilities/query";
|
|
8
|
+
|
|
9
|
+
const variableNodeQuery = nodeQuery("/term/variable");
|
|
10
|
+
|
|
11
|
+
export default function verifyVariableAgainstTerm(variableNode, termNode, substitutions, localContextA, localContextB, verifyAhead) {
|
|
12
|
+
let variableVerifiedAgainstTerm = false;
|
|
13
|
+
|
|
14
|
+
const substitution = substitutions.find((substitution) => {
|
|
15
|
+
const substitutionMatchesVariableNodeA = substitution.matchVariableNode(variableNode);
|
|
16
|
+
|
|
17
|
+
if (substitutionMatchesVariableNodeA) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
}) || null;
|
|
21
|
+
|
|
22
|
+
if (substitution !== null) {
|
|
23
|
+
const termNodeMatches = substitution.matchTermNode(termNode);
|
|
24
|
+
|
|
25
|
+
if (termNodeMatches) {
|
|
26
|
+
const verifiedAhead = verifyAhead();
|
|
27
|
+
|
|
28
|
+
variableVerifiedAgainstTerm = verifiedAhead; ///
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
const variableA = localContextA.findVariableByVariableNode(variableNode);
|
|
32
|
+
|
|
33
|
+
if (variableA !== null) {
|
|
34
|
+
const terms = [],
|
|
35
|
+
termVerified = verifyTerm(termNode, terms, localContextB, () => {
|
|
36
|
+
let verifiedAhead = false;
|
|
37
|
+
|
|
38
|
+
const firstTerm = first(terms),
|
|
39
|
+
termB = firstTerm, ///
|
|
40
|
+
variableB = variableFromTerm(termB, localContextB);
|
|
41
|
+
|
|
42
|
+
if (variableA === variableB) {
|
|
43
|
+
verifiedAhead = verifyAhead();
|
|
44
|
+
} else {
|
|
45
|
+
const term = termB, ///
|
|
46
|
+
variable = variableA, ///
|
|
47
|
+
termType = term.getType(),
|
|
48
|
+
variableType = variable.getType(),
|
|
49
|
+
variableTypeEqualToOrSuperTypeOfTermType = variableType.isEqualToOrSuperTypeOf(termType);
|
|
50
|
+
|
|
51
|
+
if (variableTypeEqualToOrSuperTypeOfTermType) {
|
|
52
|
+
const termForVariableSubstitution = TermForVariableSubstitution.fromVariableNodeAndTermNode(variableNode, termNode),
|
|
53
|
+
substitution = termForVariableSubstitution; ///
|
|
54
|
+
|
|
55
|
+
substitutions.push(substitution);
|
|
56
|
+
|
|
57
|
+
verifiedAhead = verifyAhead();
|
|
58
|
+
|
|
59
|
+
if (!verifiedAhead) {
|
|
60
|
+
substitutions.pop();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return verifiedAhead;
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
variableVerifiedAgainstTerm = termVerified; ///
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return variableVerifiedAgainstTerm;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function variableFromTerm(term, localContext) {
|
|
76
|
+
let variable = null;
|
|
77
|
+
|
|
78
|
+
const termNode = term.getNode(),
|
|
79
|
+
variableNode = variableNodeQuery(termNode);
|
|
80
|
+
|
|
81
|
+
if (variableNode !== null) {
|
|
82
|
+
variable = localContext.findVariableByVariableNode(variableNode);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return variable;
|
|
86
|
+
}
|