occam-verify-cli 0.0.869 → 0.0.870
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 +3 -3
- package/lib/equality.js +2 -4
- package/lib/equivalence.js +1 -1
- package/lib/premise.js +4 -4
- 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/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/containment.js +5 -5
- package/lib/verify/equality.js +9 -9
- package/lib/verify/metaDerivation.js +19 -19
- package/lib/verify/metaLemma.js +1 -1
- package/lib/verify/metaproof.js +4 -6
- package/lib/verify/metavariable.js +7 -5
- package/lib/verify/metavariableAgainstMetastatement.js +44 -0
- package/lib/verify/metavariableAgainstStatement.js +65 -0
- 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/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/conclusion.js +2 -2
- package/src/equality.js +3 -9
- package/src/equivalence.js +1 -1
- package/src/premise.js +3 -3
- 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/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/containment.js +4 -4
- package/src/verify/equality.js +8 -8
- package/src/verify/metaDerivation.js +18 -18
- package/src/verify/metaLemma.js +2 -2
- package/src/verify/metaproof.js +3 -6
- package/src/verify/metavariable.js +7 -5
- package/src/verify/metavariableAgainstMetastatement.js +42 -0
- package/src/verify/metavariableAgainstStatement.js +77 -0
- 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/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,89 +1,86 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
-
import
|
|
4
|
+
import verifyArgumentAgainstArgument from "../../verify/argumentAgainstArgument";
|
|
5
|
+
import verifyStatementAgainstMetaType from "../../verify/statementAgainstMetaType";
|
|
5
6
|
|
|
6
7
|
import { nodeQuery } from "../../utilities/query";
|
|
7
|
-
import {
|
|
8
|
-
import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../../ruleNames";
|
|
8
|
+
import { verifyNodes } from "../../utilities/verifier";
|
|
9
9
|
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const argumentNodeQuery = nodeQuery("/argument!"),
|
|
11
|
+
metaArgumentMetaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
|
|
12
|
+
metaArgumentStatementNodeQuery = nodeQuery("/metaArgument/statement!");
|
|
13
13
|
|
|
14
14
|
class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
15
15
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
|
|
16
|
-
let nonTerminalNodeVerified
|
|
16
|
+
let nonTerminalNodeVerified;
|
|
17
17
|
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
const nodeQueryMaps = [
|
|
19
|
+
{
|
|
20
|
+
nodeQueryA: metaArgumentStatementNodeQuery,
|
|
21
|
+
nodeQueryB: metaArgumentMetaTypeNodeQuery,
|
|
22
|
+
verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
|
|
23
|
+
let nonTerminalNodeVerified;
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const metaArgumentNode = nonTerminalNode, ///
|
|
27
|
-
combinatorMetaargumentNode = combinatorNonTerminalNode, ///
|
|
28
|
-
metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead);
|
|
25
|
+
const metaArgumentMetaTypeNodeB = nodeB, ///
|
|
26
|
+
metaArgumentStatementNodeA = nodeA, ///
|
|
27
|
+
metaArgumentStatementVerifiedAgainstMetaArgumentMetaType =
|
|
29
28
|
|
|
30
|
-
|
|
29
|
+
this.verifyMetaArgumentStatementAgainstMetaArgumentMetaType(metaArgumentStatementNodeA, metaArgumentMetaTypeNodeB, localContext, verifyAhead);
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
}
|
|
31
|
+
nonTerminalNodeVerified = metaArgumentStatementVerifiedAgainstMetaArgumentMetaType; ///
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
return nonTerminalNodeVerified;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
nodeQueryA: argumentNodeQuery,
|
|
38
|
+
nodeQueryB: argumentNodeQuery,
|
|
39
|
+
verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
|
|
40
|
+
let nonTerminalNodeVerified;
|
|
39
41
|
|
|
40
|
-
|
|
42
|
+
const argumentNodeA = nodeA, ///
|
|
43
|
+
argumentNodeB = nodeB, ///
|
|
44
|
+
argumentNodeVerifiedAgainstArgumentNode =
|
|
41
45
|
|
|
42
|
-
|
|
43
|
-
}
|
|
46
|
+
this.verifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, verifyAhead);
|
|
44
47
|
|
|
45
|
-
|
|
46
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
48
|
+
nonTerminalNodeVerified = argumentNodeVerifiedAgainstArgumentNode; ///
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
return nonTerminalNodeVerified;
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
|
-
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
56
|
+
|
|
57
|
+
nonTerminalNodeVerified = nodesVerified ?
|
|
58
|
+
true :
|
|
59
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
52
60
|
|
|
53
61
|
return nonTerminalNodeVerified;
|
|
54
62
|
}
|
|
55
63
|
|
|
56
|
-
|
|
57
|
-
let
|
|
64
|
+
verifyMetaArgumentStatementAgainstMetaArgumentMetaType(metaArgumentStatementNodeA, metaArgumentMetaTypeNodeB, localContext, verifyAhead) {
|
|
65
|
+
let metaArgumentStatementVerifiedAgainstMetaArgumentMetaType = false;
|
|
58
66
|
|
|
59
|
-
const
|
|
67
|
+
const metaTypeNode = metaArgumentMetaTypeNodeB, ///
|
|
68
|
+
statementNode = metaArgumentStatementNodeA, ///
|
|
69
|
+
statementVerifiedAgainstMetaType = verifyStatementAgainstMetaType(statementNode, metaTypeNode, localContext, verifyAhead);
|
|
60
70
|
|
|
61
|
-
|
|
62
|
-
combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
71
|
+
metaArgumentStatementVerifiedAgainstMetaArgumentMetaType = statementVerifiedAgainstMetaType; ///
|
|
63
72
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
} else {
|
|
67
|
-
if (combinatorMetaTYpeNode === null) {
|
|
68
|
-
const combinatorMetaargumentString = localContext.nodeAsString(combinatorMetaargumentNode);
|
|
73
|
+
return metaArgumentStatementVerifiedAgainstMetaArgumentMetaType;
|
|
74
|
+
}
|
|
69
75
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
|
|
73
|
-
content = combinatorMetaTypeTerminalNode.getContent(),
|
|
74
|
-
contentStatementMetaType = (content === STATEMENT_META_TYPE_NAME);
|
|
76
|
+
verifyArgumentNodeAgainstArgumentNode(argumentNodeA, argumentNodeB, localContext, verifyAhead) {
|
|
77
|
+
let argumentNodeVerifiedAgainstArgumentNode;
|
|
75
78
|
|
|
76
|
-
|
|
77
|
-
localContext.debug(`Expected the meta-type of the combinator to be '${STATEMENT_META_TYPE_NAME}' but got '${content}' instead.`, metaArgumentNode);
|
|
78
|
-
} else {
|
|
79
|
-
const verifiedAhead = verifyAhead();
|
|
79
|
+
const argumentVerifiedAgainstArgument = verifyArgumentAgainstArgument(argumentNodeA, argumentNodeB, localContext, verifyAhead);
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
81
|
+
argumentNodeVerifiedAgainstArgumentNode = argumentVerifiedAgainstArgument; ///
|
|
85
82
|
|
|
86
|
-
return
|
|
83
|
+
return argumentNodeVerifiedAgainstArgumentNode;
|
|
87
84
|
}
|
|
88
85
|
}
|
|
89
86
|
|
|
@@ -1,102 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import NodesVerifier from "../../verifier/nodes";
|
|
4
|
+
import verifyTermAgainstType from "../../verify/termAgainstType";
|
|
4
5
|
|
|
5
|
-
import { first } from "../../utilities/array";
|
|
6
6
|
import { nodeQuery } from "../../utilities/query";
|
|
7
|
-
import {
|
|
7
|
+
import { verifyNodes } from "../../utilities/verifier";
|
|
8
8
|
|
|
9
9
|
const termNodeQuery = nodeQuery("/argument/term!"),
|
|
10
10
|
typeNodeQuery = nodeQuery("/argument/type!");
|
|
11
11
|
|
|
12
12
|
class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
13
13
|
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
|
|
14
|
-
let nonTerminalNodeVerified
|
|
14
|
+
let nonTerminalNodeVerified;
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
const nodeQueryMaps = [
|
|
17
|
+
{
|
|
18
|
+
nodeQueryA: termNodeQuery,
|
|
19
|
+
nodeQueryB: typeNodeQuery,
|
|
20
|
+
verifyNodes: (nodeA, nodeB, localContext, verifyAhead) => {
|
|
21
|
+
let nonTerminalNodeVerified;
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const argumentNode = nonTerminalNode, ///
|
|
25
|
-
constructorArgumentNode = constructorNonTerminalNode, ///
|
|
26
|
-
argumentNodeVerified = this.verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead);
|
|
23
|
+
const termNodeA = nodeA, ///
|
|
24
|
+
typeNodeB = nodeB, ///
|
|
25
|
+
termNodeVerifiedAgainstTypeNode =
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
this.verifyTermNodeAgainstTypeNode(termNodeA, typeNodeB, localContext, verifyAhead);
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
default: {
|
|
34
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, constructorNonTerminalNode, localContext, verifyAhead);
|
|
29
|
+
nonTerminalNodeVerified = termNodeVerifiedAgainstTypeNode; ///
|
|
35
30
|
|
|
36
|
-
|
|
31
|
+
return nonTerminalNodeVerified;
|
|
37
32
|
}
|
|
38
33
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return nonTerminalNodeVerified;
|
|
42
|
-
}
|
|
34
|
+
];
|
|
43
35
|
|
|
44
|
-
|
|
45
|
-
let argumentNodeVerified = false;
|
|
36
|
+
const nodesVerified = verifyNodes(nodeQueryMaps, nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
46
37
|
|
|
47
|
-
|
|
38
|
+
nonTerminalNodeVerified = nodesVerified ?
|
|
39
|
+
true :
|
|
40
|
+
super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
48
41
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (typeNode !== null) {
|
|
52
|
-
localContext.debug(`The '${argumentString}' argument should be a term, not a type.`, argumentNode);
|
|
53
|
-
} else {
|
|
54
|
-
const termNode = termNodeQuery(argumentNode);
|
|
55
|
-
|
|
56
|
-
if (!argumentNodeVerified) {
|
|
57
|
-
const constructorTermNode = termNodeQuery(constructorArgumentNode);
|
|
58
|
-
|
|
59
|
-
if (constructorTermNode !== null) {
|
|
60
|
-
const node = termNode, ///
|
|
61
|
-
constructorNode = constructorTermNode, ///
|
|
62
|
-
nodeVerified = this.verifyNode(node, constructorNode, localContext, verifyAhead);
|
|
63
|
-
|
|
64
|
-
argumentNodeVerified = nodeVerified; ///
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (!argumentNodeVerified) {
|
|
69
|
-
const constructorTypeNode = typeNodeQuery(constructorArgumentNode);
|
|
70
|
-
|
|
71
|
-
if (constructorTypeNode !== null) {
|
|
72
|
-
const { verifyTerm } = termAgainstConstructorNodesVerifier,
|
|
73
|
-
terms = [],
|
|
74
|
-
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
75
|
-
let verifiedAhead = false;
|
|
76
|
-
|
|
77
|
-
const firstTerm = first(terms),
|
|
78
|
-
term = firstTerm, ///
|
|
79
|
-
termType = term.getType(),
|
|
80
|
-
constructorType = localContext.findTypeByTypeNode(constructorTypeNode),
|
|
81
|
-
termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(constructorType);
|
|
42
|
+
return nonTerminalNodeVerified;
|
|
43
|
+
}
|
|
82
44
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
45
|
+
verifyTermNodeAgainstTypeNode(termNodeA, typeNodeB, localContext, verifyAhead) {
|
|
46
|
+
let termNodeVerifiedAgainstTypeNode;
|
|
86
47
|
|
|
87
|
-
|
|
88
|
-
|
|
48
|
+
const { verifyTerm } = termAgainstConstructorNodesVerifier,
|
|
49
|
+
termNode = termNodeA, ///
|
|
50
|
+
typeNode = typeNodeB, ///
|
|
51
|
+
typeVerifiedAgainstTerm = verifyTermAgainstType(termNode, typeNode, localContext, verifyAhead, verifyTerm);
|
|
89
52
|
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
53
|
+
termNodeVerifiedAgainstTypeNode = typeVerifiedAgainstTerm; ///
|
|
94
54
|
|
|
95
|
-
return
|
|
55
|
+
return termNodeVerifiedAgainstTypeNode;
|
|
96
56
|
}
|
|
97
57
|
}
|
|
98
58
|
|
|
99
59
|
const termAgainstConstructorNodesVerifier = new TermAgainstConstructorNodesVerifier();
|
|
100
60
|
|
|
101
61
|
export default termAgainstConstructorNodesVerifier;
|
|
102
|
-
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import termAgainstConstructorNodesVerifier from "../verifier/nodes/termAgainstConstructor";
|
|
4
|
+
|
|
5
|
+
export default function verifyArgumentAgainstArgument(argumentNodeA, argumentNodeB, localContext, verifyAhead) {
|
|
6
|
+
let argumentVerifiedAgainstArgument;
|
|
7
|
+
|
|
8
|
+
const nonTerminalNodeA = argumentNodeA, ///
|
|
9
|
+
nonTerminalNodeB = argumentNodeB, ///
|
|
10
|
+
nonTerminalNodeVerified = termAgainstConstructorNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
11
|
+
|
|
12
|
+
argumentVerifiedAgainstArgument = nonTerminalNodeVerified; ///
|
|
13
|
+
|
|
14
|
+
return argumentVerifiedAgainstArgument;
|
|
15
|
+
}
|
|
@@ -6,9 +6,9 @@ import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
|
6
6
|
|
|
7
7
|
const variableNodeQuery = nodeQuery("/term/variable!"),
|
|
8
8
|
metaArgumentTermNodesQuery = nodesQuery("/metaArgument//term"),
|
|
9
|
-
|
|
9
|
+
metastatementVariableNodesQuery = nodesQuery("/metastatement//variable");
|
|
10
10
|
|
|
11
|
-
export default function verifyContainment(termNode, containmentNode,
|
|
11
|
+
export default function verifyContainment(termNode, containmentNode, metastatementNode, localContext) {
|
|
12
12
|
let containmentVerified = false;
|
|
13
13
|
|
|
14
14
|
const contained = containedFromContainmentNode(containmentNode),
|
|
@@ -17,7 +17,7 @@ export default function verifyContainment(termNode, containmentNode, metaArgumen
|
|
|
17
17
|
if (false) {
|
|
18
18
|
///
|
|
19
19
|
} else if (variableNode !== null) {
|
|
20
|
-
const metaArgumentVariableNodes =
|
|
20
|
+
const metaArgumentVariableNodes = metastatementVariableNodesQuery(metastatementNode),
|
|
21
21
|
variableNodeMatchesMetaArgumentVariableNode = metaArgumentVariableNodes.some((metaArgumentVariableNode) => {
|
|
22
22
|
const variableNodeMatchesMetaArgumentVariableNode = variableNode.match(metaArgumentVariableNode);
|
|
23
23
|
|
|
@@ -38,7 +38,7 @@ export default function verifyContainment(termNode, containmentNode, metaArgumen
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
} else if (termNode !== null) {
|
|
41
|
-
const metaArgumentTermNodes = metaArgumentTermNodesQuery(
|
|
41
|
+
const metaArgumentTermNodes = metaArgumentTermNodesQuery(metastatementNode),
|
|
42
42
|
termNodeMatchesMetaArgumentTermNode = metaArgumentTermNodes.some((metaArgumentTermNode) => {
|
|
43
43
|
const termNodeMatchesMetaArgumentTermNode = termNode.match(metaArgumentTermNode);
|
|
44
44
|
|
package/src/verify/equality.js
CHANGED
|
@@ -19,7 +19,7 @@ export default function verifyEquality(equalityNode, assignments, derived, local
|
|
|
19
19
|
|
|
20
20
|
const verifyEqualityFunctions = [
|
|
21
21
|
verifyDerivedEquality,
|
|
22
|
-
|
|
22
|
+
verifyStatedEquality
|
|
23
23
|
];
|
|
24
24
|
|
|
25
25
|
equalityVerified = verifyEqualityFunctions.some((verifyEqualityFunction) => {
|
|
@@ -91,13 +91,13 @@ function verifyDerivedEquality(equalityNode, assignments, derived, localContext,
|
|
|
91
91
|
return derivedEqualityVerified;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
function
|
|
95
|
-
let
|
|
94
|
+
function verifyStatedEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
|
|
95
|
+
let statedEqualityVerified = false;
|
|
96
96
|
|
|
97
97
|
if (!derived) {
|
|
98
98
|
const equalityString = localContext.nodeAsString(equalityNode);
|
|
99
99
|
|
|
100
|
-
localContext.trace(`Verifying the '${equalityString}'
|
|
100
|
+
localContext.trace(`Verifying the '${equalityString}' stated equality...`, equalityNode);
|
|
101
101
|
|
|
102
102
|
const terms = [],
|
|
103
103
|
leftTermNode = leftTermNodeQuery(equalityNode),
|
|
@@ -131,12 +131,12 @@ function verifyGivenEquality(equalityNode, assignments, derived, localContext, v
|
|
|
131
131
|
return verifiedAhead;
|
|
132
132
|
});
|
|
133
133
|
|
|
134
|
-
|
|
134
|
+
statedEqualityVerified = termsVerified; ///
|
|
135
135
|
|
|
136
|
-
if (
|
|
137
|
-
localContext.trace(`...verified the '${equalityString}'
|
|
136
|
+
if (statedEqualityVerified) {
|
|
137
|
+
localContext.trace(`...verified the '${equalityString}' stated equality.`, equalityNode);
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
return
|
|
141
|
+
return statedEqualityVerified;
|
|
142
142
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import LocalContext from "../context/local";
|
|
4
3
|
import MetaproofStep from "../step/metaproof";
|
|
4
|
+
import LocalMetaContext from "../context/localMeta";
|
|
5
5
|
import verifyMetaSuppositions from "../verify/metaSuppositions";
|
|
6
6
|
import verifyQualifiedMetastatement from "../verify/metastatement/qualified";
|
|
7
7
|
import verifyUnqualifiedMetastatement from "../verify/metastatement/unqualified";
|
|
@@ -15,13 +15,13 @@ const childNodesQuery = nodesQuery("/metaDerivation|metaSubDerivation/*"),
|
|
|
15
15
|
metaSuppositionNodesQuery = nodesQuery("/metaSubproof/metaSupposition"),
|
|
16
16
|
metaSubDerivationNodeQuery = nodeQuery("/metaSubproof/metaSubDerivation");
|
|
17
17
|
|
|
18
|
-
export default function verifyMetaDerivation(metaDerivationNode,
|
|
18
|
+
export default function verifyMetaDerivation(metaDerivationNode, localMetaContext) {
|
|
19
19
|
let metaDerivationVerified;
|
|
20
20
|
|
|
21
21
|
const childNodes = childNodesQuery(metaDerivationNode);
|
|
22
22
|
|
|
23
23
|
metaDerivationVerified = childNodes.every((childNode) => {
|
|
24
|
-
const childVerified = verifyChild(childNode,
|
|
24
|
+
const childVerified = verifyChild(childNode, localMetaContext);
|
|
25
25
|
|
|
26
26
|
if (childVerified) {
|
|
27
27
|
return true;
|
|
@@ -31,13 +31,13 @@ export default function verifyMetaDerivation(metaDerivationNode, localContext) {
|
|
|
31
31
|
return metaDerivationVerified;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
function verifyMetaSubDerivation(metaSubDerivationNode,
|
|
34
|
+
function verifyMetaSubDerivation(metaSubDerivationNode, localMetaContext) {
|
|
35
35
|
let metaSubDerivationVerified;
|
|
36
36
|
|
|
37
37
|
const childNodes = childNodesQuery(metaSubDerivationNode);
|
|
38
38
|
|
|
39
39
|
metaSubDerivationVerified = childNodes.every((childNode) => {
|
|
40
|
-
const childVerified = verifyChild(childNode,
|
|
40
|
+
const childVerified = verifyChild(childNode, localMetaContext);
|
|
41
41
|
|
|
42
42
|
if (childVerified) {
|
|
43
43
|
return true;
|
|
@@ -47,18 +47,18 @@ function verifyMetaSubDerivation(metaSubDerivationNode, localContext) {
|
|
|
47
47
|
return metaSubDerivationVerified;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
function verifyMetaSubproof(metaSubproofNode,
|
|
50
|
+
function verifyMetaSubproof(metaSubproofNode, localMetaContext) {
|
|
51
51
|
let metaSubproofVerified = false;
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
localMetaContext = LocalMetaContext.fromLocalMetaContext(localMetaContext); ///
|
|
54
54
|
|
|
55
55
|
const metaSuppositions = [],
|
|
56
56
|
metaSuppositionNodes = metaSuppositionNodesQuery(metaSubproofNode),
|
|
57
|
-
metaSuppositionsVerified = verifyMetaSuppositions(metaSuppositionNodes, metaSuppositions,
|
|
57
|
+
metaSuppositionsVerified = verifyMetaSuppositions(metaSuppositionNodes, metaSuppositions, localMetaContext);
|
|
58
58
|
|
|
59
59
|
if (metaSuppositionsVerified) {
|
|
60
60
|
const metaSubDerivationNode = metaSubDerivationNodeQuery(metaSubproofNode),
|
|
61
|
-
metaSubDerivationVerified = verifyMetaSubDerivation(metaSubDerivationNode,
|
|
61
|
+
metaSubDerivationVerified = verifyMetaSubDerivation(metaSubDerivationNode, localMetaContext);
|
|
62
62
|
|
|
63
63
|
if (metaSubDerivationVerified) {
|
|
64
64
|
metaSubproofVerified = true;
|
|
@@ -68,7 +68,7 @@ function verifyMetaSubproof(metaSubproofNode, localContext) {
|
|
|
68
68
|
return metaSubproofVerified;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
function verifyChild(childNode,
|
|
71
|
+
function verifyChild(childNode, localMetaContext) {
|
|
72
72
|
let childVerified = false;
|
|
73
73
|
|
|
74
74
|
const childNodeRuleName = childNode.getRuleName();
|
|
@@ -79,12 +79,12 @@ function verifyChild(childNode, localContext) {
|
|
|
79
79
|
|
|
80
80
|
const metaSubproofNode = childNode; ///
|
|
81
81
|
|
|
82
|
-
metaSubproofVerified = verifyMetaSubproof(metaSubproofNode,
|
|
82
|
+
metaSubproofVerified = verifyMetaSubproof(metaSubproofNode, localMetaContext);
|
|
83
83
|
|
|
84
84
|
if (metaSubproofVerified) {
|
|
85
85
|
const metaproofStep = MetaproofStep.fromMetaSubproofNode(metaSubproofNode);
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
88
88
|
|
|
89
89
|
childVerified = true;
|
|
90
90
|
}
|
|
@@ -99,10 +99,10 @@ function verifyChild(childNode, localContext) {
|
|
|
99
99
|
assignments = [],
|
|
100
100
|
qualifiedMetastatementNode = childNode; ///
|
|
101
101
|
|
|
102
|
-
qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, assignments, derived,
|
|
102
|
+
qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, assignments, derived, localMetaContext);
|
|
103
103
|
|
|
104
104
|
if (qualifiedMetastatementVerified) {
|
|
105
|
-
const assignmentAssigned = assignAssignment(assignments,
|
|
105
|
+
const assignmentAssigned = assignAssignment(assignments, localMetaContext);
|
|
106
106
|
|
|
107
107
|
qualifiedMetastatementVerified = assignmentAssigned; ///
|
|
108
108
|
}
|
|
@@ -111,7 +111,7 @@ function verifyChild(childNode, localContext) {
|
|
|
111
111
|
const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
|
|
112
112
|
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
115
115
|
|
|
116
116
|
childVerified = true; ///
|
|
117
117
|
}
|
|
@@ -126,10 +126,10 @@ function verifyChild(childNode, localContext) {
|
|
|
126
126
|
assignments = [],
|
|
127
127
|
unqualifiedMetastatementNode = childNode; ///
|
|
128
128
|
|
|
129
|
-
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived,
|
|
129
|
+
unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, assignments, derived, localMetaContext);
|
|
130
130
|
|
|
131
131
|
if (unqualifiedMetastatementVerified) {
|
|
132
|
-
const assignmentAssigned = assignAssignment(assignments,
|
|
132
|
+
const assignmentAssigned = assignAssignment(assignments, localMetaContext);
|
|
133
133
|
|
|
134
134
|
unqualifiedMetastatementVerified = assignmentAssigned; ///
|
|
135
135
|
}
|
|
@@ -138,7 +138,7 @@ function verifyChild(childNode, localContext) {
|
|
|
138
138
|
const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
|
|
139
139
|
metaproofStep = MetaproofStep.fromMetastatementNode(metastatementNode);
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
localMetaContext.addMetaproofStep(metaproofStep);
|
|
142
142
|
|
|
143
143
|
childVerified = true;
|
|
144
144
|
}
|
package/src/verify/metaLemma.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import MetaLemma from "../metaLemma";
|
|
4
4
|
import verifyLabels from "../verify/labels";
|
|
5
|
-
import
|
|
5
|
+
import verifyMetaproof from "../verify/metaproof";
|
|
6
6
|
import LocalMetaContext from "../context/localMeta";
|
|
7
7
|
import verifyMetaConsequent from "../verify/metaConsequent";
|
|
8
8
|
import verifyMetaSuppositions from "../verify/metaSuppositions";
|
|
@@ -44,7 +44,7 @@ export default function verifyMetaLemma(metaLemmaNode, fileContext) {
|
|
|
44
44
|
const metaproofNode = metaproofNodeQuery(metaLemmaNode),
|
|
45
45
|
firstMetaConsequent = first(metaConsequents),
|
|
46
46
|
metaConsequent = firstMetaConsequent, ///
|
|
47
|
-
metaproofVerified =
|
|
47
|
+
metaproofVerified = verifyMetaproof(metaproofNode, metaConsequent, localMetaContext);
|
|
48
48
|
|
|
49
49
|
if (metaproofVerified) {
|
|
50
50
|
const metaLemma = MetaLemma.fromLabelsMetaSuppositionsMetaConsequentAndLocalMetaContext(labels, metaSuppositions, metaConsequent, localMetaContext);
|
package/src/verify/metaproof.js
CHANGED
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import LocalContext from "../context/local";
|
|
4
3
|
import verifyMetaDerivation from "../verify/metaDerivation";
|
|
5
4
|
|
|
6
5
|
import { nodeQuery } from "../utilities/query";
|
|
7
6
|
|
|
8
7
|
const metaDerivationNodeQuery = nodeQuery("/metaproof/metaDerivation!");
|
|
9
8
|
|
|
10
|
-
export default function verifyMetaproof(metaproofNode, conclusion,
|
|
9
|
+
export default function verifyMetaproof(metaproofNode, conclusion, localMetaproof) {
|
|
11
10
|
let metaproofVerified = false;
|
|
12
11
|
|
|
13
|
-
localContext = LocalContext.fromLocalContext(localContext); ///
|
|
14
|
-
|
|
15
12
|
const metaDerivationNode = metaDerivationNodeQuery(metaproofNode),
|
|
16
|
-
metaDerivationVerified = verifyMetaDerivation(metaDerivationNode,
|
|
13
|
+
metaDerivationVerified = verifyMetaDerivation(metaDerivationNode, localMetaproof);
|
|
17
14
|
|
|
18
15
|
if (metaDerivationVerified) {
|
|
19
|
-
const lastMetaproofStep =
|
|
16
|
+
const lastMetaproofStep = localMetaproof.getLastMetaproofStep();
|
|
20
17
|
|
|
21
18
|
if (lastMetaproofStep !== null) {
|
|
22
19
|
const metaproofStep = lastMetaproofStep, ///
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import Metavariable from "../metavariable";
|
|
4
4
|
import MetavariableAssignment from "../assignment/metavariable";
|
|
5
|
-
import verifyGivenMetavariable from "../verify/givenMetavariable";
|
|
6
5
|
|
|
7
6
|
import { nodeQuery } from "../utilities/query";
|
|
8
7
|
|
|
@@ -44,16 +43,19 @@ export default function verifyMetavariable(metavariableNode, metaTypeNode, fileC
|
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
export function verifyStandaloneMetavariable(metavariableNode, localMetaContext, verifyAhead) {
|
|
47
|
-
let standaloneMetavariableVerified;
|
|
46
|
+
let standaloneMetavariableVerified = false;
|
|
48
47
|
|
|
49
48
|
const metavariableString = localMetaContext.nodeAsString(metavariableNode);
|
|
50
49
|
|
|
51
50
|
localMetaContext.trace(`Verifying the '${metavariableString}' standalone metavariable...`, metavariableNode);
|
|
52
51
|
|
|
53
|
-
const
|
|
54
|
-
givenMetavariableVerified = verifyGivenMetavariable(metavariableNode, metavariables, localMetaContext, verifyAhead);
|
|
52
|
+
const metavariablePresent = localMetaContext.isMetavariablePresentByMetavariableNode(metavariableNode);
|
|
55
53
|
|
|
56
|
-
|
|
54
|
+
if (metavariablePresent) {
|
|
55
|
+
const verifiedAhead = verifyAhead();
|
|
56
|
+
|
|
57
|
+
standaloneMetavariableVerified = verifiedAhead; ///
|
|
58
|
+
}
|
|
57
59
|
|
|
58
60
|
if (standaloneMetavariableVerified) {
|
|
59
61
|
localMetaContext.debug(`...verified the '${metavariableString}' standalone metavariable.`, metavariableNode);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import MetastatementForMetavariableSubstitution from "../substitution/metastatementForMetavariable";
|
|
4
|
+
|
|
5
|
+
export default function verifyMetavariableAgainstMetastatement(metavariableNode, metastatementNode, substitutions, localContextA, localMetaContextB, verifyAhead) {
|
|
6
|
+
let metavariableVerifiedAgainstMetastatement = false;
|
|
7
|
+
|
|
8
|
+
const substitution = substitutions.find((substitution) => {
|
|
9
|
+
const substitutionMatchesMetavariableNodeA = substitution.matchMetavariableNode(metavariableNode);
|
|
10
|
+
|
|
11
|
+
if (substitutionMatchesMetavariableNodeA) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
}) || null;
|
|
15
|
+
|
|
16
|
+
if (substitution !== null) {
|
|
17
|
+
const metastatementNodeMatches = substitution.matchMetastatementNode(metastatementNode);
|
|
18
|
+
|
|
19
|
+
if (metastatementNodeMatches) {
|
|
20
|
+
const verifiedAhead = verifyAhead();
|
|
21
|
+
|
|
22
|
+
metavariableVerifiedAgainstMetastatement = verifiedAhead; ///
|
|
23
|
+
}
|
|
24
|
+
} else {
|
|
25
|
+
let verifiedAhead;
|
|
26
|
+
|
|
27
|
+
const metastatementForMetavariableSubstitution = MetastatementForMetavariableSubstitution.fromMetavariableNodeAndMetastatementNode(metavariableNode, metastatementNode),
|
|
28
|
+
substitution = metastatementForMetavariableSubstitution; ///
|
|
29
|
+
|
|
30
|
+
substitutions.push(substitution);
|
|
31
|
+
|
|
32
|
+
verifiedAhead = verifyAhead();
|
|
33
|
+
|
|
34
|
+
if (!verifiedAhead) {
|
|
35
|
+
substitutions.pop();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
metavariableVerifiedAgainstMetastatement = verifiedAhead; ///
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return metavariableVerifiedAgainstMetastatement;
|
|
42
|
+
}
|