occam-verify-cli 0.0.932 → 0.0.934
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/conclusion.js +4 -4
- package/lib/consequent.js +4 -4
- package/lib/context/local.js +188 -9
- package/lib/declaration.js +2 -2
- package/lib/equality.js +4 -4
- package/lib/equivalence.js +16 -1
- package/lib/metaLemma.js +4 -4
- package/lib/metatheorem.js +4 -4
- package/lib/premise.js +6 -6
- package/lib/proofStep.js +43 -6
- package/lib/shim.js +14 -0
- package/lib/substitution/statementForMetavariable.js +46 -2
- package/lib/substitution/termForVariable.js +15 -1
- package/lib/supposition.js +6 -6
- package/lib/unifier/equality.js +216 -0
- package/lib/unifier/metaLevel.js +235 -0
- package/lib/unifier/statementAgainstCombinator.js +232 -0
- package/lib/unifier/termAgainstConstructor.js +212 -0
- package/lib/unifier.js +201 -0
- package/lib/unify/argumentAgainstArgument.js +24 -0
- package/lib/unify/metavariableAgainstStatement.js +66 -0
- package/lib/unify/statementAgainstMetaType.js +28 -0
- package/lib/unify/statementAtainstStatement.js +52 -0
- package/lib/unify/termAgainstTerm.js +22 -0
- package/lib/unify/termAgainstType.js +26 -0
- package/lib/unify/variableAgainstTerm.js +70 -0
- package/lib/verifier/metaLevel.js +236 -0
- package/lib/verifier/statementAsCombinator.js +236 -0
- package/lib/verifier/termAsConstructor.js +219 -0
- package/lib/verifier.js +182 -0
- package/lib/verify/assertion/contained.js +2 -2
- package/lib/verify/assertion/defined.js +2 -2
- package/lib/verify/declaration.js +18 -18
- package/lib/verify/frame.js +9 -12
- package/lib/verify/proofStep.js +3 -3
- package/lib/verify/statement/qualified.js +61 -10
- package/lib/verify/statement/unqualified.js +62 -50
- package/lib/verify/statement.js +36 -41
- package/lib/verify/statementAsCombinator.js +2 -2
- package/lib/verify/subDerivation.js +8 -2
- package/lib/verify/term.js +8 -7
- package/lib/verify/termAsConstructor.js +2 -2
- package/package.json +2 -2
- package/src/conclusion.js +3 -3
- package/src/consequent.js +3 -3
- package/src/context/local.js +68 -8
- package/src/declaration.js +2 -2
- package/src/equality.js +3 -3
- package/src/equivalence.js +19 -0
- package/src/metaLemma.js +1 -1
- package/src/metatheorem.js +1 -1
- package/src/premise.js +5 -5
- package/src/proofStep.js +57 -4
- package/src/shim.js +5 -0
- package/src/substitution/statementForMetavariable.js +33 -2
- package/src/substitution/termForVariable.js +16 -0
- package/src/supposition.js +5 -5
- package/src/unifier/equality.js +84 -0
- package/src/unifier/metaLevel.js +114 -0
- package/src/unifier/statementAgainstCombinator.js +105 -0
- package/src/unifier/termAgainstConstructor.js +77 -0
- package/src/unifier.js +133 -0
- package/src/unify/argumentAgainstArgument.js +15 -0
- package/src/{verify → unify}/metavariableAgainstStatement.js +18 -18
- package/src/{verify → unify}/statementAgainstMetaType.js +4 -4
- package/src/{verify → unify}/statementAtainstStatement.js +7 -7
- package/src/{verify → unify}/termAgainstTerm.js +5 -5
- package/src/{verify → unify}/termAgainstType.js +7 -7
- package/src/{verify → unify}/variableAgainstTerm.js +6 -6
- package/src/verifier/{node/metaLevel.js → metaLevel.js} +14 -14
- package/src/verifier/{node/statementAsCombinator.js → statementAsCombinator.js} +14 -14
- package/src/verifier/{node/termAsConstructor.js → termAsConstructor.js} +12 -12
- package/src/{verifier/node.js → verifier.js} +19 -1
- package/src/verify/assertion/contained.js +2 -2
- package/src/verify/assertion/defined.js +2 -2
- package/src/verify/declaration.js +20 -23
- package/src/verify/frame.js +10 -13
- package/src/verify/proofStep.js +2 -2
- package/src/verify/statement/qualified.js +95 -10
- package/src/verify/statement/unqualified.js +85 -11
- package/src/verify/statement.js +47 -45
- package/src/verify/statementAsCombinator.js +2 -2
- package/src/verify/subDerivation.js +3 -1
- package/src/verify/term.js +7 -6
- package/src/verify/termAsConstructor.js +2 -2
- package/lib/mixins/context.js +0 -135
- package/lib/mixins/nodesVerifier/intrinsiclevel.js +0 -59
- package/lib/mixins/nodesVerifier/metaLevel.js +0 -40
- package/lib/utilities/verifier.js +0 -80
- package/lib/verifier/node/metaLevel.js +0 -201
- package/lib/verifier/node/statementAsCombinator.js +0 -201
- package/lib/verifier/node/termAsConstructor.js +0 -184
- package/lib/verifier/node.js +0 -157
- package/lib/verifier/nodes/equality.js +0 -176
- package/lib/verifier/nodes/metaLevel.js +0 -191
- package/lib/verifier/nodes/statementAgainstCombinator.js +0 -191
- package/lib/verifier/nodes/termAgainstConstructor.js +0 -171
- package/lib/verifier/nodes.js +0 -175
- package/lib/verify/argumentAgainstArgument.js +0 -24
- package/lib/verify/metavariableAgainstStatement.js +0 -66
- package/lib/verify/statementAgainstMetaType.js +0 -28
- package/lib/verify/statementAtainstStatement.js +0 -52
- package/lib/verify/termAgainstTerm.js +0 -22
- package/lib/verify/termAgainstType.js +0 -26
- package/lib/verify/variableAgainstTerm.js +0 -70
- package/src/mixins/context.js +0 -96
- package/src/mixins/nodesVerifier/intrinsiclevel.js +0 -73
- package/src/mixins/nodesVerifier/metaLevel.js +0 -39
- package/src/utilities/verifier.js +0 -38
- package/src/verifier/nodes/equality.js +0 -84
- package/src/verifier/nodes/metaLevel.js +0 -109
- package/src/verifier/nodes/statementAgainstCombinator.js +0 -105
- package/src/verifier/nodes/termAgainstConstructor.js +0 -76
- package/src/verifier/nodes.js +0 -114
- package/src/verify/argumentAgainstArgument.js +0 -15
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import Verifier from "../verifier";
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { verifyStandaloneType } from "
|
|
8
|
-
import { verifyStandaloneTerm } from "
|
|
9
|
-
import { verifyStandaloneStatement } from "
|
|
5
|
+
import { verify } from "../verifier";
|
|
6
|
+
import { nodeQuery } from "../utilities/query";
|
|
7
|
+
import { verifyStandaloneType } from "../verify/type";
|
|
8
|
+
import { verifyStandaloneTerm } from "../verify/term";
|
|
9
|
+
import { verifyStandaloneStatement } from "../verify/statement";
|
|
10
10
|
|
|
11
11
|
const termNodeQuery = nodeQuery("/term!"),
|
|
12
12
|
typeNodeQuery = nodeQuery("/type!"),
|
|
13
13
|
statementNodeQuery = nodeQuery("/statement!"),
|
|
14
14
|
nonTerminalNodeQuery = nodeQuery("/*");
|
|
15
15
|
|
|
16
|
-
class
|
|
16
|
+
class StatementAsCombinatorVerifier extends Verifier {
|
|
17
17
|
verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
|
|
18
18
|
let nonTerminalNodeVerified;
|
|
19
19
|
|
|
20
20
|
const nodeQueryMaps = [
|
|
21
21
|
{
|
|
22
22
|
nodeQuery: termNodeQuery,
|
|
23
|
-
|
|
23
|
+
verify: (node, localContext, verifyAhead) => {
|
|
24
24
|
let nonTerminalNodeVerified;
|
|
25
25
|
|
|
26
26
|
const termNode = node, ///
|
|
@@ -33,7 +33,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
nodeQuery: typeNodeQuery,
|
|
36
|
-
|
|
36
|
+
verify: (node, localContext, verifyAhead) => {
|
|
37
37
|
let nonTerminalNodeVerified;
|
|
38
38
|
|
|
39
39
|
const typeNode = node, ///
|
|
@@ -46,7 +46,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
nodeQuery: statementNodeQuery,
|
|
49
|
-
|
|
49
|
+
verify: (node, localContext, verifyAhead) => {
|
|
50
50
|
let nonTerminalNodeVerified;
|
|
51
51
|
|
|
52
52
|
const statementNode = node, ///
|
|
@@ -59,7 +59,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
nodeQuery: nonTerminalNodeQuery,
|
|
62
|
-
|
|
62
|
+
verify: (node, localContext, verifyAhead) => {
|
|
63
63
|
let nonTerminalNodeVerified;
|
|
64
64
|
|
|
65
65
|
const nonTerminalNode = node; ///
|
|
@@ -73,7 +73,7 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
73
73
|
}
|
|
74
74
|
];
|
|
75
75
|
|
|
76
|
-
const nodeVerified =
|
|
76
|
+
const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
|
|
77
77
|
|
|
78
78
|
nonTerminalNodeVerified = nodeVerified; ///
|
|
79
79
|
|
|
@@ -102,6 +102,6 @@ class StatementAsCombinatorNodeVerifier extends NodeVerifier {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
const
|
|
105
|
+
const statementAsCombinatorVerifier = new StatementAsCombinatorVerifier();
|
|
106
106
|
|
|
107
|
-
export default
|
|
107
|
+
export default statementAsCombinatorVerifier;
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import Verifier from "../verifier";
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { verifyStandaloneType } from "
|
|
8
|
-
import { verifyStandaloneTerm } from "
|
|
5
|
+
import { verify } from "../verifier";
|
|
6
|
+
import { nodeQuery } from "../utilities/query";
|
|
7
|
+
import { verifyStandaloneType } from "../verify/type";
|
|
8
|
+
import { verifyStandaloneTerm } from "../verify/term";
|
|
9
9
|
|
|
10
10
|
const termNodeQuery = nodeQuery("/term!"),
|
|
11
11
|
typeNodeQuery = nodeQuery("/type!"),
|
|
12
12
|
nonTerminalNodeQuery = nodeQuery("/*");
|
|
13
13
|
|
|
14
|
-
class
|
|
14
|
+
class TermAsConstructorVerifier extends Verifier {
|
|
15
15
|
verifyNonTerminalNode(nonTerminalNode, localContext, verifyAhead) {
|
|
16
16
|
let nonTerminalNodeVerified;
|
|
17
17
|
|
|
18
18
|
const nodeQueryMaps = [
|
|
19
19
|
{
|
|
20
20
|
nodeQuery: termNodeQuery,
|
|
21
|
-
|
|
21
|
+
verify: (node, localContext, verifyAhead) => {
|
|
22
22
|
let nonTerminalNodeVerified;
|
|
23
23
|
|
|
24
24
|
const termNode = node, ///
|
|
@@ -31,7 +31,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
nodeQuery: typeNodeQuery,
|
|
34
|
-
|
|
34
|
+
verify: (node, localContext, verifyAhead) => {
|
|
35
35
|
let nonTerminalNodeVerified;
|
|
36
36
|
|
|
37
37
|
const typeNode = node, ///
|
|
@@ -44,7 +44,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
nodeQuery: nonTerminalNodeQuery,
|
|
47
|
-
|
|
47
|
+
verify: (node, localContext, verifyAhead) => {
|
|
48
48
|
let nonTerminalNodeVerified;
|
|
49
49
|
|
|
50
50
|
const nonTerminalNode = node; ///
|
|
@@ -58,7 +58,7 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
58
58
|
}
|
|
59
59
|
];
|
|
60
60
|
|
|
61
|
-
const nodeVerified =
|
|
61
|
+
const nodeVerified = verify(nodeQueryMaps, nonTerminalNode, localContext, verifyAhead);
|
|
62
62
|
|
|
63
63
|
nonTerminalNodeVerified = nodeVerified; ///
|
|
64
64
|
|
|
@@ -80,6 +80,6 @@ class TermAsConstructorNodeVerifier extends NodeVerifier {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
const
|
|
83
|
+
const termAsConstructorVerifier = new TermAsConstructorVerifier();
|
|
84
84
|
|
|
85
|
-
export default
|
|
85
|
+
export default termAsConstructorVerifier;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export default class
|
|
3
|
+
export default class Verifier {
|
|
4
4
|
verifyNode(node, ...remainingArguments) {
|
|
5
5
|
let nodeVerified;
|
|
6
6
|
|
|
@@ -82,3 +82,21 @@ export default class NodeVerifier {
|
|
|
82
82
|
return childNodesVerify;
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
+
|
|
86
|
+
export function verify(nodeQueryMaps, nonTerminalNode, ...remainingArguments) {
|
|
87
|
+
let nodeVerified = false;
|
|
88
|
+
|
|
89
|
+
nodeVerified = nodeQueryMaps.some((nodeQueryMap) => {
|
|
90
|
+
const { nodeQuery, verifyNode } = nodeQueryMap;
|
|
91
|
+
|
|
92
|
+
const node = nodeQuery(nonTerminalNode);
|
|
93
|
+
|
|
94
|
+
if (node !== null) {
|
|
95
|
+
nodeVerified = verifyNode(node, ...remainingArguments);
|
|
96
|
+
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
return nodeVerified;
|
|
102
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import metaLevelVerifier from "../../verifier/metaLevel";
|
|
4
4
|
|
|
5
5
|
import { isAssertionNegated } from "../../utilities/verify";
|
|
6
6
|
import { nodeQuery, nodesQuery } from "../../utilities/query";
|
|
@@ -84,7 +84,7 @@ function verifyStatedContainedAssertion(containedAssertionNode, assignments, der
|
|
|
84
84
|
localContext.debug(`The '${containedAssertionString}' stated contained assertion cannot be verified.`, containedAssertionNode);
|
|
85
85
|
|
|
86
86
|
const nonTerminalNode = containedAssertionNode, ///
|
|
87
|
-
nonTerminalNodeVerified =
|
|
87
|
+
nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
88
88
|
const verifiedAhead = true;
|
|
89
89
|
|
|
90
90
|
return verifiedAhead;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import verifyTerm from "../../verify/term";
|
|
4
|
-
import
|
|
4
|
+
import metaLevelVerifier from "../../verifier/metaLevel";
|
|
5
5
|
|
|
6
6
|
import { first } from "../../utilities/array";
|
|
7
7
|
import { nodeQuery } from "../../utilities/query";
|
|
@@ -113,7 +113,7 @@ function verifyStatedDefinedAssertion(definedAssertionNode, assignments, derived
|
|
|
113
113
|
localContext.trace(`Verifying the '${definedAssertionString}' stated defined assertion...`, definedAssertionNode);
|
|
114
114
|
|
|
115
115
|
const nonTerminalNode = definedAssertionNode, ///
|
|
116
|
-
nonTerminalNodeVerified =
|
|
116
|
+
nonTerminalNodeVerified = metaLevelVerifier.verifyNonTerminalNode(nonTerminalNode, localContext, () => {
|
|
117
117
|
const verifiedAhead = true;
|
|
118
118
|
|
|
119
119
|
return verifiedAhead;
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
3
4
|
import Declaration from "../declaration"
|
|
4
5
|
import referenceMetaType from "../metaType/reference";
|
|
5
|
-
import metaLevelNodeVerifier from "../verifier/node/metaLevel";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
metavariableNodeQuery = nodeQuery("/reference/metavariable!");
|
|
9
|
+
const statementNodeQuery = nodeQuery("/declaration/statement!"),
|
|
10
|
+
metavariableNodeQuery = nodeQuery("/declaration/metavariable!");
|
|
12
11
|
|
|
13
12
|
export default function verifyDeclaration(declarationNode, declarations, localContext) {
|
|
14
13
|
let declarationVerified = false;
|
|
@@ -17,20 +16,19 @@ export default function verifyDeclaration(declarationNode, declarations, localCo
|
|
|
17
16
|
|
|
18
17
|
localContext.trace(`Verifying the '${declarationString}' declaration...`, declarationNode);
|
|
19
18
|
|
|
20
|
-
const
|
|
21
|
-
|
|
19
|
+
const metavariableNode = metavariableNodeQuery(declarationNode),
|
|
20
|
+
metavariableVerified = verifyMetavariable(metavariableNode, localContext);
|
|
22
21
|
|
|
23
|
-
if (
|
|
22
|
+
if (metavariableVerified) {
|
|
24
23
|
const statementNode = statementNodeQuery(declarationNode);
|
|
25
24
|
|
|
26
|
-
const { verifyStatement } =
|
|
25
|
+
const { verifyStatement } = shim,
|
|
27
26
|
derived = false,
|
|
28
27
|
assignments = [],
|
|
29
28
|
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
30
29
|
|
|
31
30
|
if (statementVerified) {
|
|
32
|
-
const
|
|
33
|
-
declaration = Declaration.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode);
|
|
31
|
+
const declaration = Declaration.fromMetavariableNodeAndStatementNode(metavariableNode, statementNode);
|
|
34
32
|
|
|
35
33
|
declarations.push(declaration);
|
|
36
34
|
|
|
@@ -45,34 +43,33 @@ export default function verifyDeclaration(declarationNode, declarations, localCo
|
|
|
45
43
|
return declarationVerified;
|
|
46
44
|
}
|
|
47
45
|
|
|
48
|
-
function
|
|
49
|
-
let
|
|
46
|
+
function verifyMetavariable(metavariableNode, localContext) {
|
|
47
|
+
let metavariableVerified = false;
|
|
50
48
|
|
|
51
|
-
const
|
|
49
|
+
const metavariableString = localContext.nodeAsString(metavariableNode);
|
|
52
50
|
|
|
53
|
-
localContext.trace(`Verifying the '${
|
|
51
|
+
localContext.trace(`Verifying the '${metavariableString}' metavariable...`, metavariableNode);
|
|
54
52
|
|
|
55
|
-
const
|
|
56
|
-
metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
|
|
53
|
+
const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
|
|
57
54
|
|
|
58
55
|
if (metavariable !== null) {
|
|
59
56
|
const metaType = metavariable.getMetaType();
|
|
60
57
|
|
|
61
58
|
if (metaType === referenceMetaType) {
|
|
62
|
-
|
|
59
|
+
metavariableVerified = true;
|
|
63
60
|
} else {
|
|
64
61
|
const referenceMetaTypeName = referenceMetaType.getName(),
|
|
65
62
|
metaTypeString = metaType.asString();
|
|
66
63
|
|
|
67
|
-
localContext.debug(`The '${
|
|
64
|
+
localContext.debug(`The '${metavariableString}' metavariable's meta-type is '${metaTypeString}' when it should be '${referenceMetaTypeName}'.`, metavariableNode);
|
|
68
65
|
}
|
|
69
66
|
} else {
|
|
70
|
-
localContext.debug(`The '${
|
|
67
|
+
localContext.debug(`The '${metavariableString}' metavariable is not present'.`, metavariableNode);
|
|
71
68
|
}
|
|
72
69
|
|
|
73
|
-
if (
|
|
74
|
-
localContext.debug(`...verified the '${
|
|
70
|
+
if (metavariableVerified) {
|
|
71
|
+
localContext.debug(`...verified the '${metavariableString}' metavariable.`, metavariableNode);
|
|
75
72
|
}
|
|
76
73
|
|
|
77
|
-
return
|
|
78
|
-
}
|
|
74
|
+
return metavariableVerified;
|
|
75
|
+
}
|
package/src/verify/frame.js
CHANGED
|
@@ -19,27 +19,24 @@ export default function verifyFrame(frameNode, frames, assignments, derived, loc
|
|
|
19
19
|
|
|
20
20
|
const declarations = [],
|
|
21
21
|
declarationNodes = declarationNodesQuery(frameNode),
|
|
22
|
+
metavariableNodes = metavariableNodesQuery(frameNode),
|
|
22
23
|
declarationsVerified = declarationNodes.every((declarationNode) => {
|
|
23
24
|
const declarationVerified = verifyDeclaration(declarationNode, declarations, localContext);
|
|
24
25
|
|
|
25
26
|
return declarationVerified;
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const metavariableNodes = metavariableNodesQuery(frameNode),
|
|
30
|
-
metavariablesVerified = metavariableNodes.every((metavariableNode) => {
|
|
31
|
-
const metavariableVerified = verifyMetavariable(metavariableNode, declarations, localContext);
|
|
27
|
+
}),
|
|
28
|
+
metavariablesVerified = metavariableNodes.every((metavariableNode) => {
|
|
29
|
+
const metavariableVerified = verifyMetavariable(metavariableNode, declarations, localContext);
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
return metavariableVerified;
|
|
32
|
+
});
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
if (declarationsVerified && metavariablesVerified) {
|
|
35
|
+
const frame = Frame.fromDeclarations(declarations);
|
|
38
36
|
|
|
39
|
-
|
|
37
|
+
frames.push(frame);
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
}
|
|
39
|
+
frameVerified = true;
|
|
43
40
|
}
|
|
44
41
|
|
|
45
42
|
if (frameVerified) {
|
package/src/verify/proofStep.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import shim from "../shim";
|
|
3
4
|
import ProofStep from "../proofStep";
|
|
4
5
|
import verifySubproof from "../verify/subproof";
|
|
5
|
-
import verifySubDerivation from "../verify/subDerivation";
|
|
6
6
|
import verifyQualifiedStatement from "../verify/statement/qualified";
|
|
7
7
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
8
8
|
|
|
@@ -83,6 +83,6 @@ export default function verifyProofStep(proofStepNode, substitutions, localConte
|
|
|
83
83
|
return proofStepVerified;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
Object.assign(
|
|
86
|
+
Object.assign(shim, {
|
|
87
87
|
verifyProofStep
|
|
88
88
|
});
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import verifyEquality from "../equality";
|
|
4
|
+
import verifyJudgement from "../judgement";
|
|
5
|
+
import verifyTypeAssertion from "../assertion/type";
|
|
6
|
+
import unifyMetavariableAgainstStatement from "../../unify/metavariableAgainstStatement";
|
|
7
|
+
|
|
3
8
|
import { nodeQuery } from "../../utilities/query";
|
|
4
|
-
import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
|
|
5
9
|
|
|
6
10
|
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
12
|
+
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
13
|
+
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference/metavariable!"),
|
|
14
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
10
15
|
|
|
11
16
|
export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, localContext) {
|
|
12
17
|
let qualifiedStatementVerified;
|
|
@@ -184,7 +189,16 @@ function verifyQualifiedStatementAAgainstReference(qualifiedStatementNode, subst
|
|
|
184
189
|
|
|
185
190
|
if (metavariablePresent) {
|
|
186
191
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
187
|
-
|
|
192
|
+
localContextA = null,
|
|
193
|
+
localContextB = localContext, ///
|
|
194
|
+
statementNodeB = statementNode, ///
|
|
195
|
+
substitutionNode = null,
|
|
196
|
+
metavariableNodeA = metavariableNode, ///
|
|
197
|
+
metavariableVerifiedAgainstStatement = unifyMetavariableAgainstStatement(metavariableNodeA, statementNodeB, substitutionNode, substitutions, localContextA, localContextB, () => {
|
|
198
|
+
const verifiedAhead = true;
|
|
199
|
+
|
|
200
|
+
return verifiedAhead;
|
|
201
|
+
});
|
|
188
202
|
|
|
189
203
|
qualifiedStatementVerifiedAgainstReference = metavariableVerifiedAgainstStatement; ///
|
|
190
204
|
}
|
|
@@ -203,13 +217,14 @@ function verifyStatedStatement(statementNode, assignments, derived, localContext
|
|
|
203
217
|
|
|
204
218
|
localContext.trace(`Verifying the '${statementString}' stated statement...`, statementNode);
|
|
205
219
|
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
220
|
+
const verifyStatedStatementFunctions = [
|
|
221
|
+
verifyStatedStatementAsEquality,
|
|
222
|
+
verifyStatedStatementAsJudgement,
|
|
223
|
+
verifyStatedStatementAsTypeAssertion
|
|
209
224
|
];
|
|
210
225
|
|
|
211
|
-
|
|
212
|
-
const statedStatementVerified =
|
|
226
|
+
verifyStatedStatementFunctions.every((verifyStatedStatementFunction) => { ///
|
|
227
|
+
const statedStatementVerified = verifyStatedStatementFunction(statementNode, assignments, derived, localContext);
|
|
213
228
|
|
|
214
229
|
if (statedStatementVerified) {
|
|
215
230
|
return true;
|
|
@@ -224,3 +239,73 @@ function verifyStatedStatement(statementNode, assignments, derived, localContext
|
|
|
224
239
|
|
|
225
240
|
return statedStatementVerified;
|
|
226
241
|
}
|
|
242
|
+
|
|
243
|
+
function verifyStatedStatementAsEquality(statementNode, assignments, derived, localContext) {
|
|
244
|
+
let statedStatementVerifiedAsEquality = true; ///
|
|
245
|
+
|
|
246
|
+
const equalityNode = equalityNodeQuery(statementNode);
|
|
247
|
+
|
|
248
|
+
if (equalityNode !== null) {
|
|
249
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
250
|
+
|
|
251
|
+
localContext.trace(`Verifying the '${statementString}' stated statement as an equality...`, statementNode);
|
|
252
|
+
|
|
253
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
|
|
254
|
+
const verifiedAhead = true;
|
|
255
|
+
|
|
256
|
+
return verifiedAhead;
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
statedStatementVerifiedAsEquality = equalityVerified; ///
|
|
260
|
+
|
|
261
|
+
if (statedStatementVerifiedAsEquality) {
|
|
262
|
+
localContext.debug(`...verified the '${statementString}' stated statement as an equality.`, statementNode);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return statedStatementVerifiedAsEquality;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function verifyStatedStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
270
|
+
let statedStatementVerifiedAsJudgement = true;
|
|
271
|
+
|
|
272
|
+
const judgementNode = judgementNodeQuery(statementNode);
|
|
273
|
+
|
|
274
|
+
if (judgementNode !== null) {
|
|
275
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
276
|
+
|
|
277
|
+
localContext.trace(`Verifying the '${statementString}' stated statement as a judgement...`, statementNode);
|
|
278
|
+
|
|
279
|
+
const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
280
|
+
|
|
281
|
+
statedStatementVerifiedAsJudgement = judgementVerified; ///
|
|
282
|
+
|
|
283
|
+
if (statedStatementVerifiedAsJudgement) {
|
|
284
|
+
localContext.debug(`...verified the '${statementString}' stated statement as a judgement.`, statementNode);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
return statedStatementVerifiedAsJudgement;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function verifyStatedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
292
|
+
let statementVerifiedAsTypeAssertion = true; ///
|
|
293
|
+
|
|
294
|
+
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
295
|
+
|
|
296
|
+
if (typeAssertionNode !== null) {
|
|
297
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
298
|
+
|
|
299
|
+
localContext.trace(`Verifying the '${statementString}' stated statement as a type assertion...`, statementNode);
|
|
300
|
+
|
|
301
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
|
|
302
|
+
|
|
303
|
+
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
304
|
+
|
|
305
|
+
if (statementVerifiedAsTypeAssertion) {
|
|
306
|
+
localContext.debug(`...verified the '${statementString}' stated statement as a type assertion.`, statementNode);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
return statementVerifiedAsTypeAssertion;
|
|
311
|
+
}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import verifyEquality from "../../verify/equality";
|
|
4
|
+
import verifyJudgement from "../../verify/judgement";
|
|
3
5
|
import verifyStatement from "../../verify/statement";
|
|
6
|
+
import verifyTypeAssertion from "../assertion/type";
|
|
4
7
|
|
|
5
8
|
import { nodeQuery } from "../../utilities/query";
|
|
6
|
-
import { verifyStatementAsEquality, verifyStatementAsTypeAssertion } from "../../verify/statement";
|
|
7
9
|
|
|
8
|
-
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!")
|
|
10
|
+
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
|
|
11
|
+
equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
12
|
+
judgementNodeQuery = nodeQuery("/statement/judgement!"),
|
|
13
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
9
14
|
|
|
10
15
|
export default function verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext) {
|
|
11
16
|
let unqualifiedStatementVerified;
|
|
@@ -43,9 +48,9 @@ function verifyDerivedUnqualifiedStatement(unqualifiedStatementNode, assignments
|
|
|
43
48
|
|
|
44
49
|
localContext.trace(`Verifying the '${unqualifiedStatementString}' derived unqualified statement...`, unqualifiedStatementNode);
|
|
45
50
|
|
|
46
|
-
const
|
|
51
|
+
const statementUnified = localContext.unifyStatement(statementNode);
|
|
47
52
|
|
|
48
|
-
if (
|
|
53
|
+
if (statementUnified) {
|
|
49
54
|
derivedUnqualifiedStatementVerified = true;
|
|
50
55
|
} else {
|
|
51
56
|
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
@@ -90,24 +95,93 @@ function verifyDerivedStatement(statementNode, assignments, derived, localContex
|
|
|
90
95
|
|
|
91
96
|
localContext.trace(`Verifying the '${statementString}' derived statement...`, statementNode);
|
|
92
97
|
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
const verifyDerivedStatementFunctions = [
|
|
99
|
+
verifyDerivedStatementAsEquality,
|
|
100
|
+
verifyDerivedStatementAsJudgement,
|
|
101
|
+
verifyDerivedStatementAsTypeAssertion
|
|
96
102
|
];
|
|
97
103
|
|
|
98
|
-
|
|
99
|
-
const derivedStatementVerified =
|
|
104
|
+
derivedStatementVerified = verifyDerivedStatementFunctions.every((verifyDerivedStatementFunction) => { ///
|
|
105
|
+
const derivedStatementVerified = verifyDerivedStatementFunction(statementNode, assignments, derived, localContext);
|
|
100
106
|
|
|
101
107
|
if (derivedStatementVerified) {
|
|
102
108
|
return true;
|
|
103
109
|
}
|
|
104
110
|
});
|
|
105
111
|
|
|
106
|
-
derivedStatementVerified = true; ///
|
|
107
|
-
|
|
108
112
|
if (derivedStatementVerified) {
|
|
109
113
|
localContext.debug(`...verified the '${statementString}' derived statement.`, statementNode);
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
return derivedStatementVerified;
|
|
113
117
|
}
|
|
118
|
+
|
|
119
|
+
function verifyDerivedStatementAsEquality(statementNode, assignments, derived, localContext) {
|
|
120
|
+
let derivedStatementVerifiedAsEquality = true; ///
|
|
121
|
+
|
|
122
|
+
const equalityNode = equalityNodeQuery(statementNode);
|
|
123
|
+
|
|
124
|
+
if (equalityNode !== null) {
|
|
125
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
126
|
+
|
|
127
|
+
localContext.trace(`Verifying the '${statementString}' derived statement as an equality...`, statementNode);
|
|
128
|
+
|
|
129
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, () => {
|
|
130
|
+
const verifiedAhead = true;
|
|
131
|
+
|
|
132
|
+
return verifiedAhead;
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
derivedStatementVerifiedAsEquality = equalityVerified; ///
|
|
136
|
+
|
|
137
|
+
if (derivedStatementVerifiedAsEquality) {
|
|
138
|
+
localContext.debug(`...verified the '${statementString}' derived statement as an equality.`, statementNode);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return derivedStatementVerifiedAsEquality;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function verifyDerivedStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
146
|
+
let derivedStatementVerifiedAsJudgement = true;
|
|
147
|
+
|
|
148
|
+
const judgementNode = judgementNodeQuery(statementNode);
|
|
149
|
+
|
|
150
|
+
if (judgementNode !== null) {
|
|
151
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
152
|
+
|
|
153
|
+
localContext.trace(`Verifying the '${statementString}' derived statement as a judgement...`, statementNode);
|
|
154
|
+
|
|
155
|
+
const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
156
|
+
|
|
157
|
+
derivedStatementVerifiedAsJudgement = judgementVerified; ///
|
|
158
|
+
|
|
159
|
+
if (derivedStatementVerifiedAsJudgement) {
|
|
160
|
+
localContext.debug(`...verified the '${statementString}' derived statement as a judgement.`, statementNode);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return derivedStatementVerifiedAsJudgement;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function verifyDerivedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
168
|
+
let statementVerifiedAsTypeAssertion = true; ///
|
|
169
|
+
|
|
170
|
+
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
171
|
+
|
|
172
|
+
if (typeAssertionNode !== null) {
|
|
173
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
174
|
+
|
|
175
|
+
localContext.trace(`Verifying the '${statementString}' derived statement as a type assertion...`, statementNode);
|
|
176
|
+
|
|
177
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
|
|
178
|
+
|
|
179
|
+
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
180
|
+
|
|
181
|
+
if (statementVerifiedAsTypeAssertion) {
|
|
182
|
+
localContext.debug(`...verified the '${statementString}' derived statement as a type assertion.`, statementNode);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return statementVerifiedAsTypeAssertion;
|
|
187
|
+
}
|