occam-verify-cli 0.0.965 → 0.0.967
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/unify/termWithTerm.js +10 -4
- package/lib/utilities/equivalences.js +20 -28
- package/lib/variable.js +1 -9
- package/lib/verifier/statementAsCombinator.js +2 -2
- package/lib/verify/assertion/type.js +2 -5
- package/lib/verify/equality.js +3 -1
- package/lib/verify/proofStep.js +14 -8
- package/lib/verify/statement/qualified.js +13 -38
- package/lib/verify/statement/unqualified.js +55 -14
- package/lib/verify/statement.js +25 -4
- package/package.json +1 -1
- package/src/unify/termWithTerm.js +14 -6
- package/src/utilities/equivalences.js +14 -32
- package/src/variable.js +0 -8
- package/src/verifier/statementAsCombinator.js +1 -1
- package/src/verify/assertion/type.js +2 -7
- package/src/verify/equality.js +5 -0
- package/src/verify/proofStep.js +19 -9
- package/src/verify/statement/qualified.js +12 -54
- package/src/verify/statement/unqualified.js +16 -9
- package/src/verify/statement.js +24 -0
|
@@ -112,13 +112,8 @@ function verifyStatedTypeAssertion(typeAssertionNode, assignments, derived, loca
|
|
|
112
112
|
const variableNode = variableNodeQuery(termNode);
|
|
113
113
|
|
|
114
114
|
if (variableNode !== null) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
variable = localContext.findVariableByVariableNode(variableNode);
|
|
118
|
-
|
|
119
|
-
variable = Variable.fromVariableAndType(variable, type); ///
|
|
120
|
-
|
|
121
|
-
const variableAssignment = VariableAssignment.fromVariable(variable),
|
|
115
|
+
const variable = Variable.fromVariableNodeAndType(variableNode, type),
|
|
116
|
+
variableAssignment = VariableAssignment.fromVariable(variable),
|
|
122
117
|
assignment = variableAssignment; ///
|
|
123
118
|
|
|
124
119
|
assignments.push(assignment);
|
package/src/verify/equality.js
CHANGED
|
@@ -54,6 +54,11 @@ function verifyDerivedEquality(equalityNode, assignments, derived, localContext)
|
|
|
54
54
|
const equalityEqual = equality.isEqual(localContext);
|
|
55
55
|
|
|
56
56
|
if (equalityEqual) {
|
|
57
|
+
const equalityAssignment = EqualityAssignment.fromEquality(equality),
|
|
58
|
+
assignment = equalityAssignment; ///
|
|
59
|
+
|
|
60
|
+
assignments.push(assignment);
|
|
61
|
+
|
|
57
62
|
verifiedAhead = true;
|
|
58
63
|
}
|
|
59
64
|
}
|
package/src/verify/proofStep.js
CHANGED
|
@@ -7,6 +7,7 @@ import verifyQualifiedStatement from "../verify/statement/qualified";
|
|
|
7
7
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
8
8
|
|
|
9
9
|
import { nodeQuery } from "../utilities/query";
|
|
10
|
+
import { assignAssignments } from "../utilities/assignments";
|
|
10
11
|
|
|
11
12
|
const subproofNodeQuery = nodeQuery("/proofStep|lastProofStep/subproof!"),
|
|
12
13
|
statementNodeQuery = nodeQuery("/qualifiedStatement|unqualifiedStatement/statement!"),
|
|
@@ -31,26 +32,35 @@ export default function verifyProofStep(proofStepNode, substitutions, localConte
|
|
|
31
32
|
proofStep = ProofStep.fromSubproofNode(subproofNode);
|
|
32
33
|
}
|
|
33
34
|
} else {
|
|
34
|
-
const derived = true,
|
|
35
|
-
assignments = null;
|
|
36
|
-
|
|
37
35
|
if (qualifiedStatementNode !== null) {
|
|
38
|
-
const
|
|
36
|
+
const derived = false, ///
|
|
37
|
+
assignments = [],
|
|
38
|
+
qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, derived, localContext);
|
|
39
39
|
|
|
40
40
|
if (qualifiedStatementVerified) {
|
|
41
|
-
const
|
|
41
|
+
const assignmentsAssigned = assignAssignments(assignments, localContext);
|
|
42
|
+
|
|
43
|
+
if (assignmentsAssigned) {
|
|
44
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode);
|
|
42
45
|
|
|
43
|
-
|
|
46
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
47
|
+
}
|
|
44
48
|
}
|
|
45
49
|
}
|
|
46
50
|
|
|
47
51
|
if (unqualifiedStatementNode !== null) {
|
|
48
|
-
const
|
|
52
|
+
const derived = true,
|
|
53
|
+
assignments = [],
|
|
54
|
+
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
49
55
|
|
|
50
56
|
if (unqualifiedStatementVerified) {
|
|
51
|
-
const
|
|
57
|
+
const assignmentsAssigned = assignAssignments(assignments, localContext);
|
|
58
|
+
|
|
59
|
+
if (assignmentsAssigned) {
|
|
60
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode);
|
|
52
61
|
|
|
53
|
-
|
|
62
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
63
|
+
}
|
|
54
64
|
}
|
|
55
65
|
}
|
|
56
66
|
}
|
|
@@ -7,12 +7,6 @@ import { nodeQuery } from "../../utilities/query";
|
|
|
7
7
|
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
8
8
|
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference/metavariable!");
|
|
9
9
|
|
|
10
|
-
const equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
11
|
-
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
12
|
-
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
|
|
13
|
-
definedAssertionNodeQuery = nodeQuery("/statement/definedAssertion!"),
|
|
14
|
-
containedAssertionNodeQuery = nodeQuery("/statement/containedAssertion!");
|
|
15
|
-
|
|
16
10
|
const unifyDerivedQualifiedStatementFunctions = [
|
|
17
11
|
unifyDerivedQualifiedStatementAWithRule,
|
|
18
12
|
unifyDerivedQualifiedStatementAWithAxiom,
|
|
@@ -33,13 +27,9 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
|
|
|
33
27
|
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
34
28
|
|
|
35
29
|
if (statementVerified) {
|
|
36
|
-
|
|
37
|
-
const derivedQualifiedStatementVerified = verifyDerivedQualifiedStatement(qualifiedStatementNode, substitutions, localContext);
|
|
30
|
+
const derivedQualifiedStatementUnified = unifyDerivedQualifiedStatement(qualifiedStatementNode, substitutions, localContext);
|
|
38
31
|
|
|
39
|
-
|
|
40
|
-
} else {
|
|
41
|
-
qualifiedStatementVerified = true;
|
|
42
|
-
}
|
|
32
|
+
qualifiedStatementVerified = derivedQualifiedStatementUnified; ///
|
|
43
33
|
}
|
|
44
34
|
|
|
45
35
|
if (qualifiedStatementVerified) {
|
|
@@ -49,56 +39,24 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
|
|
|
49
39
|
return qualifiedStatementVerified;
|
|
50
40
|
}
|
|
51
41
|
|
|
52
|
-
function
|
|
53
|
-
let
|
|
42
|
+
function unifyDerivedQualifiedStatement(qualifiedStatementNode, substitutions, localContext) {
|
|
43
|
+
let derivedQualifiedStatementUnified;
|
|
54
44
|
|
|
55
45
|
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
56
46
|
|
|
57
|
-
localContext.trace(`
|
|
58
|
-
|
|
59
|
-
if (!derivedQualifiedStatementVerified) {
|
|
60
|
-
const derivedQualifiedStatementVerifiedTrivially = verifyDerivedQualifiedStatementATrivially(qualifiedStatementNode, substitutions, localContext);
|
|
61
|
-
|
|
62
|
-
derivedQualifiedStatementVerified = derivedQualifiedStatementVerifiedTrivially; ///
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (!derivedQualifiedStatementVerified) {
|
|
66
|
-
const derivedQualifiedStatementUnified = unifyDerivedQualifiedStatementFunctions.some((unifyDerivedQualifiedStatementFunction) => {
|
|
67
|
-
const derivedQualifiedStatementUnified = unifyDerivedQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
|
|
47
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement...`, qualifiedStatementNode);
|
|
68
48
|
|
|
69
|
-
|
|
70
|
-
|
|
49
|
+
derivedQualifiedStatementUnified = unifyDerivedQualifiedStatementFunctions.some((unifyDerivedQualifiedStatementFunction) => {
|
|
50
|
+
const derivedQualifiedStatementUnified = unifyDerivedQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
|
|
71
51
|
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (derivedQualifiedStatementVerified) {
|
|
76
|
-
localContext.debug(`...verified the '${qualifiedStatementString}' derived qualified statement.`, qualifiedStatementNode);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return derivedQualifiedStatementVerified;
|
|
80
|
-
}
|
|
52
|
+
return derivedQualifiedStatementUnified;
|
|
53
|
+
});
|
|
81
54
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode);
|
|
86
|
-
|
|
87
|
-
if (metavariableNode === null) {
|
|
88
|
-
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
89
|
-
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
90
|
-
|
|
91
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement trivially...`, qualifiedStatementNode);
|
|
92
|
-
|
|
93
|
-
debugger
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (derivedQualifiedStatementVerifiedTrivially) {
|
|
97
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement trivially.`, qualifiedStatementNode);
|
|
98
|
-
}
|
|
55
|
+
if (derivedQualifiedStatementUnified) {
|
|
56
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement.`, qualifiedStatementNode);
|
|
99
57
|
}
|
|
100
58
|
|
|
101
|
-
return
|
|
59
|
+
return derivedQualifiedStatementUnified;
|
|
102
60
|
}
|
|
103
61
|
|
|
104
62
|
function unifyDerivedQualifiedStatementAWithRule(qualifiedStatementNode, substitutions, localContext) {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import verifyStatement from "../../verify/statement";
|
|
4
4
|
|
|
5
5
|
import { nodeQuery } from "../../utilities/query";
|
|
6
|
+
import { verifyStatementTrivially } from "../../verify/statement";
|
|
6
7
|
|
|
7
8
|
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
|
|
8
9
|
|
|
@@ -18,9 +19,15 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
|
|
|
18
19
|
|
|
19
20
|
if (statementVerified) {
|
|
20
21
|
if (derived) {
|
|
21
|
-
const
|
|
22
|
+
const statementVerifiedTrivially = verifyStatementTrivially(statementNode, localContext);
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
if (statementVerifiedTrivially) {
|
|
25
|
+
unqualifiedStatementVerified = true;
|
|
26
|
+
} else {
|
|
27
|
+
const derivedUnqualifiedStatementUnified = unifyDerivedUnqualifiedStatement(unqualifiedStatementNode, localContext);
|
|
28
|
+
|
|
29
|
+
unqualifiedStatementVerified = derivedUnqualifiedStatementUnified; ///
|
|
30
|
+
}
|
|
24
31
|
} else {
|
|
25
32
|
unqualifiedStatementVerified = true;
|
|
26
33
|
}
|
|
@@ -33,21 +40,21 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
|
|
|
33
40
|
return unqualifiedStatementVerified;
|
|
34
41
|
}
|
|
35
42
|
|
|
36
|
-
function
|
|
37
|
-
let
|
|
43
|
+
function unifyDerivedUnqualifiedStatement(unqualifiedStatementNode, localContext) {
|
|
44
|
+
let derivedUnqualifiedStatementUnified;
|
|
38
45
|
|
|
39
46
|
const unqualifiedStatementString = localContext.nodeAsString(unqualifiedStatementNode);
|
|
40
47
|
|
|
41
|
-
localContext.trace(`
|
|
48
|
+
localContext.trace(`Unifying the '${unqualifiedStatementString}' derived unqualified statement...`, unqualifiedStatementNode);
|
|
42
49
|
|
|
43
50
|
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
44
51
|
statementUnified = localContext.unifyStatement(statementNode, localContext);
|
|
45
52
|
|
|
46
|
-
|
|
53
|
+
derivedUnqualifiedStatementUnified = statementUnified; ///
|
|
47
54
|
|
|
48
|
-
if (
|
|
49
|
-
localContext.debug(`...
|
|
55
|
+
if (derivedUnqualifiedStatementUnified) {
|
|
56
|
+
localContext.debug(`...unified the '${unqualifiedStatementString}' derived unqualified statement.`, unqualifiedStatementNode);
|
|
50
57
|
}
|
|
51
58
|
|
|
52
|
-
return
|
|
59
|
+
return derivedUnqualifiedStatementUnified;
|
|
53
60
|
}
|
package/src/verify/statement.js
CHANGED
|
@@ -89,6 +89,30 @@ Object.assign(shim, {
|
|
|
89
89
|
|
|
90
90
|
export default verifyStatement;
|
|
91
91
|
|
|
92
|
+
export function verifyStatementTrivially(statementNode, localContext) {
|
|
93
|
+
let statementVerifiedTrivially = false;
|
|
94
|
+
|
|
95
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
96
|
+
|
|
97
|
+
localContext.trace(`Verifying the '${statementString}' statement trivially...`, statementNode);
|
|
98
|
+
|
|
99
|
+
const equalityNode = equalityNodeQuery(statementNode),
|
|
100
|
+
judgementNode = judgementNodeQuery(statementNode),
|
|
101
|
+
typeAssertionNode = typeAssertionNodeQuery(statementNode),
|
|
102
|
+
definedAssertionNode = definedAssertionNodeQuery(statementNode),
|
|
103
|
+
containedAssertionNode = containedAssertionNodeQuery(statementNode);
|
|
104
|
+
|
|
105
|
+
if ((equalityNode !== null) || (judgementNode !== null) || (typeAssertionNode !== null) || (definedAssertionNode !== null) || (containedAssertionNode !== null)) {
|
|
106
|
+
statementVerifiedTrivially = true;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (statementVerifiedTrivially) {
|
|
110
|
+
localContext.debug(`...verified the '${statementString}' statement trivially.`, statementNode);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return statementVerifiedTrivially;
|
|
114
|
+
}
|
|
115
|
+
|
|
92
116
|
function verifyStatementAsMetavariable(statementNode, assignments, derived, localContext) {
|
|
93
117
|
let statementVerifiedAsMetavariable = false;
|
|
94
118
|
|