occam-verify-cli 0.0.870 → 0.0.872
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/context/file.js +94 -71
- package/lib/label.js +5 -6
- package/lib/metaLemmaMetatheorem.js +13 -13
- package/lib/metaType/context.js +124 -0
- package/lib/metaType/label.js +124 -0
- package/lib/metaType/statement.js +124 -0
- package/lib/metaType.js +1 -112
- package/lib/metaTypeNames.js +6 -2
- package/lib/metaTypes.js +12 -4
- package/lib/metavariable.js +49 -9
- package/lib/mixins/context.js +36 -28
- package/lib/rule.js +13 -13
- package/lib/ruleNames.js +4 -4
- 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/verify/axiom.js +4 -4
- package/lib/verify/conjecture.js +4 -4
- package/lib/verify/label.js +8 -9
- package/lib/verify/labels.js +15 -8
- package/lib/verify/lemma.js +4 -4
- package/lib/verify/metaLemma.js +4 -4
- package/lib/verify/metastatement/qualified.js +3 -3
- package/lib/verify/metatheorem.js +4 -4
- package/lib/verify/metavariable.js +35 -9
- package/lib/verify/rule.js +4 -4
- package/lib/verify/statement/qualified.js +29 -29
- package/lib/verify/theorem.js +4 -4
- package/package.json +1 -1
- package/src/axiomLemmaTheoremConjecture.js +13 -13
- package/src/context/file.js +98 -72
- package/src/label.js +6 -7
- package/src/metaLemmaMetatheorem.js +13 -13
- package/src/metaType/context.js +18 -0
- package/src/metaType/label.js +18 -0
- package/src/metaType/statement.js +18 -0
- package/src/metaType.js +0 -23
- package/src/metaTypeNames.js +2 -1
- package/src/metaTypes.js +4 -1
- package/src/metavariable.js +60 -10
- package/src/mixins/context.js +23 -17
- package/src/rule.js +13 -13
- package/src/ruleNames.js +1 -1
- 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/verify/axiom.js +4 -4
- package/src/verify/conjecture.js +4 -4
- package/src/verify/label.js +8 -9
- package/src/verify/labels.js +17 -7
- package/src/verify/lemma.js +4 -4
- package/src/verify/metaLemma.js +4 -4
- package/src/verify/metastatement/qualified.js +5 -4
- package/src/verify/metatheorem.js +4 -4
- package/src/verify/metavariable.js +59 -11
- package/src/verify/rule.js +4 -4
- package/src/verify/statement/qualified.js +35 -30
- package/src/verify/theorem.js +4 -4
package/src/rule.js
CHANGED
|
@@ -31,19 +31,6 @@ export default class Rule {
|
|
|
31
31
|
return this.fileContext;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
matchLabelNode(labelNode) {
|
|
35
|
-
const labelNodeMatches = this.labels.some((label) => {
|
|
36
|
-
const node = labelNode, ///
|
|
37
|
-
labelMatchesNode = label.matchNode(node);
|
|
38
|
-
|
|
39
|
-
if (labelMatchesNode) {
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
return labelNodeMatches;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
34
|
matchStatement(statementNode, statementLocalContext) {
|
|
48
35
|
let statementNatches;
|
|
49
36
|
|
|
@@ -112,6 +99,19 @@ export default class Rule {
|
|
|
112
99
|
return metastatementNatches;
|
|
113
100
|
}
|
|
114
101
|
|
|
102
|
+
matchLabelMetavariableNode(labelMetavariableNode) {
|
|
103
|
+
const labelMetavariableNodeMatches = this.labels.some((label) => {
|
|
104
|
+
const node = labelMetavariableNode, ///
|
|
105
|
+
labelMatchesNode = label.matchNode(node);
|
|
106
|
+
|
|
107
|
+
if (labelMatchesNode) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
return labelMetavariableNodeMatches;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
115
|
toJSON(tokens) {
|
|
116
116
|
const labelsJSON = this.labels.map((label) => {
|
|
117
117
|
const labelJSON = label.toJSON(tokens);
|
package/src/ruleNames.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export const LABEL_RULE_NAME = "label";
|
|
4
3
|
export const SUBPROOF_RULE_NAME = "subproof";
|
|
4
|
+
export const METAVARIABLE_RULE_NAME = "metavariable";
|
|
5
5
|
export const RULE_SUBPROOF_RULE_NAME = "ruleSubproof";
|
|
6
6
|
export const META_SUBPROOF_RULE_NAME = "metaSubproof";
|
|
7
7
|
export const META_ARGUMENT_RULE_NAME = "metaArgument";
|
package/src/utilities/name.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { nodeQuery } from "../utilities/query";
|
|
4
4
|
|
|
5
5
|
const typeTerminalNodeQuery = nodeQuery("/type/@type"),
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
nameTerminalNodeQuery = nodeQuery("/metavariable/@name"),
|
|
7
|
+
metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
|
|
8
8
|
|
|
9
9
|
export function typeNameFromTypeNode(typeNode) {
|
|
10
10
|
let typeName = null;
|
|
@@ -19,12 +19,12 @@ export function typeNameFromTypeNode(typeNode) {
|
|
|
19
19
|
return typeName;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export function
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
export function nameFromMetavariableNode(metavariableNode) {
|
|
23
|
+
const nameTerminalNode = nameTerminalNodeQuery(metavariableNode),
|
|
24
|
+
nameTerminalNodeContent = nameTerminalNode.getContent(),
|
|
25
|
+
name = nameTerminalNodeContent; ///
|
|
26
26
|
|
|
27
|
-
return
|
|
27
|
+
return name;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export function metaTypeNameFromMetaTypeNode(metaTypeNode) {
|
package/src/utilities/node.js
CHANGED
|
@@ -4,12 +4,12 @@ import { parsersUtilities } from "occam-custom-grammars";
|
|
|
4
4
|
|
|
5
5
|
import { nodeQuery } from "../utilities/query";
|
|
6
6
|
import { combinedCustomGrammarFromNothing } from "./customGrammar";
|
|
7
|
-
import {
|
|
7
|
+
import { METAVARIABLE_RULE_NAME,
|
|
8
8
|
VARIABLE_DECLARATION_RULE_NAME,
|
|
9
9
|
UNQUALIFIED_STATEMENT_RULE_NAME,
|
|
10
10
|
CONSTRUCTOR_DECLARATION_RULE_NAME,
|
|
11
11
|
UNQUALIFIED_METASTATEMENT_RULE_NAME } from "../ruleNames";
|
|
12
|
-
import {
|
|
12
|
+
import { metavariableTokensFromMetavariableString,
|
|
13
13
|
variableDeclarationTokensFromVariableString,
|
|
14
14
|
unqualifiedStatementTokensFromStatementString,
|
|
15
15
|
unqualifiedMetastatementTokensFromMetastatementString } from "../utilities/tokens";
|
|
@@ -24,13 +24,6 @@ const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
|
|
|
24
24
|
statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
|
|
25
25
|
metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
|
|
26
26
|
|
|
27
|
-
export function labelNodeFromLabelString(labelString, lexer, parser) {
|
|
28
|
-
const labelTokens = labelTokensFromLabelString(labelString, lexer),
|
|
29
|
-
labelNode = labelNodeFromLabelTokens(labelTokens, parser);
|
|
30
|
-
|
|
31
|
-
return labelNode;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
27
|
export function variableNodeFromVariableString(variableString, lexer, parser) {
|
|
35
28
|
const variableTDeclarationTokens = variableDeclarationTokensFromVariableString(variableString, lexer),
|
|
36
29
|
variableNode = variableNodeFromVariableVariableTDeclarationTokens(variableTDeclarationTokens, parser);
|
|
@@ -45,6 +38,13 @@ export function statementNodeFromStatementString(statementString, lexer, parser)
|
|
|
45
38
|
return statementNode;
|
|
46
39
|
}
|
|
47
40
|
|
|
41
|
+
export function metavariableNodeFromMetavariableString(metavariableString, lexer, parser) {
|
|
42
|
+
const metavariableTokens = metavariableTokensFromMetavariableString(metavariableString, lexer),
|
|
43
|
+
metavariableNode = metavariableNodeFromMetavariableTokens(metavariableTokens, parser);
|
|
44
|
+
|
|
45
|
+
return metavariableNode;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
48
|
export function metastatementNodeFromMetastatementString(metastatementString, lexer, parser) {
|
|
49
49
|
const unqualifiedMetastatementTokens = unqualifiedMetastatementTokensFromMetastatementString(metastatementString, lexer),
|
|
50
50
|
metastatementNode = metastatementNodeFromUnqualifiedMetastatementTokens(unqualifiedMetastatementTokens, parser);
|
|
@@ -80,11 +80,11 @@ export function metastatementNodeFromUnqualifiedMetastatementTokens(unqualifiedM
|
|
|
80
80
|
return metastatementNode;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
export function
|
|
84
|
-
const ruleName =
|
|
85
|
-
|
|
83
|
+
export function metavariableNodeFromMetavariableTokens(metavariableTokens, parser) {
|
|
84
|
+
const ruleName = METAVARIABLE_RULE_NAME,
|
|
85
|
+
metavariableNode = nodeFromTokensRuleNameAndParser(metavariableTokens, ruleName, parser);
|
|
86
86
|
|
|
87
|
-
return
|
|
87
|
+
return metavariableNode;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
export function variableDeclarationNodeFromVariableTDeclarationTokens(variableTDeclarationTokens, parser) {
|
package/src/utilities/query.js
CHANGED
|
@@ -6,11 +6,9 @@ export function nodeQuery(expression) {
|
|
|
6
6
|
const query = Query.fromExpression(expression);
|
|
7
7
|
|
|
8
8
|
return function(node) {
|
|
9
|
-
|
|
10
|
-
const nodes = query.execute(node);
|
|
9
|
+
const nodes = query.execute(node);
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
}
|
|
11
|
+
node = nodes.shift() || null; ///
|
|
14
12
|
|
|
15
13
|
return node;
|
|
16
14
|
};
|
|
@@ -20,11 +18,7 @@ export function nodesQuery(expression) {
|
|
|
20
18
|
const query = Query.fromExpression(expression);
|
|
21
19
|
|
|
22
20
|
return function(node) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
if (node !== null) {
|
|
26
|
-
nodes = query.execute(node);
|
|
27
|
-
}
|
|
21
|
+
const nodes = query.execute(node);
|
|
28
22
|
|
|
29
23
|
return nodes;
|
|
30
24
|
};
|
package/src/utilities/tokens.js
CHANGED
|
@@ -9,11 +9,11 @@ const { florenceLexerFromCombinedCustomGrammar } = lexersUtilities;
|
|
|
9
9
|
const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
|
|
10
10
|
florenceLexer = florenceLexerFromCombinedCustomGrammar(combinedCustomGrammar);
|
|
11
11
|
|
|
12
|
-
export function
|
|
13
|
-
const
|
|
14
|
-
|
|
12
|
+
export function metavariableTokensFromMetavariableString(metavariableString, lexer) {
|
|
13
|
+
const metavariableContent = `${metavariableString}`,
|
|
14
|
+
metavariableTokens = tokensFromContentAndLexer(metavariableContent, lexer);
|
|
15
15
|
|
|
16
|
-
return
|
|
16
|
+
return metavariableTokens;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export function constructorDeclarationTokensFromTermString(termString, lexer) {
|
package/src/verify/axiom.js
CHANGED
|
@@ -9,21 +9,21 @@ import verifySuppositions from "../verify/suppositions";
|
|
|
9
9
|
import { first } from "../utilities/array";
|
|
10
10
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
11
11
|
|
|
12
|
-
const
|
|
12
|
+
const labelsNodeQuery = nodeQuery("/axiom/labels!"),
|
|
13
13
|
consequentNodeQuery = nodeQuery("/axiom/consequent!"),
|
|
14
14
|
suppositionsNodeQuery = nodesQuery("/axiom/supposition");
|
|
15
15
|
|
|
16
16
|
export default function verifyAxiom(axiomNode, fileContext) {
|
|
17
17
|
let axiomVerified = false;
|
|
18
18
|
|
|
19
|
-
const
|
|
20
|
-
labelsString = fileContext.
|
|
19
|
+
const labelsNode = labelsNodeQuery(axiomNode),
|
|
20
|
+
labelsString = fileContext.nodeAsString(labelsNode),
|
|
21
21
|
localContext = LocalContext.fromFileContext(fileContext);
|
|
22
22
|
|
|
23
23
|
fileContext.trace(`Verifying the '${labelsString}' axiom...`, axiomNode);
|
|
24
24
|
|
|
25
25
|
const labels = [],
|
|
26
|
-
labelsVerified = verifyLabels(
|
|
26
|
+
labelsVerified = verifyLabels(labelsNode, labels, fileContext);
|
|
27
27
|
|
|
28
28
|
if (labelsVerified) {
|
|
29
29
|
const suppositions = [],
|
package/src/verify/conjecture.js
CHANGED
|
@@ -11,21 +11,21 @@ import { first } from "../utilities/array";
|
|
|
11
11
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
12
12
|
|
|
13
13
|
const proofNodeQuery = nodeQuery("/conjecture/proof!"),
|
|
14
|
-
|
|
14
|
+
labelsNodeQuery = nodeQuery("/conjecture/labels!"),
|
|
15
15
|
consequentNodeQuery = nodeQuery("/conjecture/consequent!"),
|
|
16
16
|
suppositionsNodeQuery = nodesQuery("/conjecture/supposition");
|
|
17
17
|
|
|
18
18
|
export default function verifyConjecture(conjectureNode, fileContext) {
|
|
19
19
|
let conjectureVerified = false;
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
labelsString = fileContext.
|
|
21
|
+
const labelsNode = labelsNodeQuery(conjectureNode),
|
|
22
|
+
labelsString = fileContext.nodeAsString(labelsNode),
|
|
23
23
|
localContext = LocalContext.fromFileContext(fileContext);
|
|
24
24
|
|
|
25
25
|
fileContext.trace(`Verifying the '${labelsString}' conjecture...`, conjectureNode);
|
|
26
26
|
|
|
27
27
|
const labels = [],
|
|
28
|
-
labelsVerified = verifyLabels(
|
|
28
|
+
labelsVerified = verifyLabels(labelsNode, labels, fileContext);
|
|
29
29
|
|
|
30
30
|
if (labelsVerified) {
|
|
31
31
|
const suppositions = [],
|
package/src/verify/label.js
CHANGED
|
@@ -2,21 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
import Label from "../label";
|
|
4
4
|
|
|
5
|
-
export default function verifyLabel(
|
|
5
|
+
export default function verifyLabel(labelsMetavariableNode, labels, fileContext) {
|
|
6
6
|
let labelVerified = false;
|
|
7
7
|
|
|
8
|
-
const
|
|
8
|
+
const labelMetavariableString = fileContext.nodeAsString(labelsMetavariableNode);
|
|
9
9
|
|
|
10
|
-
fileContext.trace(`Verifying the '${
|
|
10
|
+
fileContext.trace(`Verifying the '${labelMetavariableString}' label...`, labelsMetavariableNode);
|
|
11
11
|
|
|
12
|
-
const labelPresent = fileContext.
|
|
12
|
+
const labelPresent = fileContext.isLabelPresentByLabelMetavariableNode(labelsMetavariableNode);
|
|
13
13
|
|
|
14
14
|
if (labelPresent) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
fileContext.debug(`The '${labelString}' label is already present.`, labelNode);
|
|
15
|
+
fileContext.debug(`The '${labelMetavariableString}' label is already present.`, labelsMetavariableNode);
|
|
18
16
|
} else {
|
|
19
|
-
const
|
|
17
|
+
const metavariableNode = labelsMetavariableNode, ///
|
|
18
|
+
label = Label.fromMetavariableNode(metavariableNode);
|
|
20
19
|
|
|
21
20
|
labels.push(label);
|
|
22
21
|
|
|
@@ -24,7 +23,7 @@ export default function verifyLabel(labelNode, labels, fileContext) {
|
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
if (labelVerified) {
|
|
27
|
-
fileContext.debug(`...verified the '${
|
|
26
|
+
fileContext.debug(`...verified the '${labelMetavariableString}' label.`, labelsMetavariableNode);
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
return labelVerified;
|
package/src/verify/labels.js
CHANGED
|
@@ -2,16 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyLabel from "../verify/label";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import { nodesQuery } from "../utilities/query";
|
|
6
|
+
|
|
7
|
+
const labelsMetavariableNodesQuery = nodesQuery("/labels/metavariable");
|
|
8
|
+
|
|
9
|
+
export default function verifyLabels(labelsNode, labels, fileContext) {
|
|
6
10
|
let labelsVerified;
|
|
7
11
|
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
if (labelsNode === null) {
|
|
13
|
+
labelsVerified = true;
|
|
14
|
+
} else {
|
|
15
|
+
const labelsMetavariableNodes = labelsMetavariableNodesQuery(labelsNode);
|
|
16
|
+
|
|
17
|
+
labelsVerified = labelsMetavariableNodes.every((labelsMetavariableNode) => {
|
|
18
|
+
const labelVerified = verifyLabel(labelsMetavariableNode, labels, fileContext);
|
|
10
19
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
20
|
+
if (labelVerified) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
15
25
|
|
|
16
26
|
return labelsVerified;
|
|
17
27
|
}
|
package/src/verify/lemma.js
CHANGED
|
@@ -12,15 +12,15 @@ import { EMPTY_STRING } from "../constants";
|
|
|
12
12
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
13
13
|
|
|
14
14
|
const proofNodeQuery = nodeQuery("/lemma/proof!"),
|
|
15
|
-
|
|
15
|
+
labelsNodeQuery = nodeQuery("/lemma/labels!"),
|
|
16
16
|
consequentNodeQuery = nodeQuery("/lemma/consequent!"),
|
|
17
17
|
suppositionsNodeQuery = nodesQuery("/lemma/supposition");
|
|
18
18
|
|
|
19
19
|
export default function verifyLemma(lemmaNode, fileContext) {
|
|
20
20
|
let lemmaVerified = false;
|
|
21
21
|
|
|
22
|
-
const
|
|
23
|
-
labelsString = fileContext.
|
|
22
|
+
const labelsNode = labelsNodeQuery(lemmaNode),
|
|
23
|
+
labelsString = fileContext.nodeAsString(labelsNode),
|
|
24
24
|
localContext = LocalContext.fromFileContext(fileContext);
|
|
25
25
|
|
|
26
26
|
(labelsString === EMPTY_STRING) ?
|
|
@@ -28,7 +28,7 @@ export default function verifyLemma(lemmaNode, fileContext) {
|
|
|
28
28
|
fileContext.trace(`Verifying the '${labelsString}' lemma...`, lemmaNode);
|
|
29
29
|
|
|
30
30
|
const labels = [],
|
|
31
|
-
labelsVerified = verifyLabels(
|
|
31
|
+
labelsVerified = verifyLabels(labelsNode, labels, fileContext);
|
|
32
32
|
|
|
33
33
|
if (labelsVerified) {
|
|
34
34
|
const suppositions = [],
|
package/src/verify/metaLemma.js
CHANGED
|
@@ -11,7 +11,7 @@ import { first } from "../utilities/array";
|
|
|
11
11
|
import { EMPTY_STRING } from "../constants";
|
|
12
12
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
13
13
|
|
|
14
|
-
const
|
|
14
|
+
const labelsNodeQuery = nodeQuery("/metaLemma/labels!"),
|
|
15
15
|
metaproofNodeQuery = nodeQuery("/metaLemma/metaproof!"),
|
|
16
16
|
metaConsequentNodeQuery = nodeQuery("/metaLemma/metaConsequent!"),
|
|
17
17
|
metaSuppositionsNodeQuery = nodesQuery("/metaLemma/metaSupposition");
|
|
@@ -19,8 +19,8 @@ const labelNodesQuery = nodesQuery("/metaLemma//reference/label"),
|
|
|
19
19
|
export default function verifyMetaLemma(metaLemmaNode, fileContext) {
|
|
20
20
|
let metaLemmaVerified = false;
|
|
21
21
|
|
|
22
|
-
const
|
|
23
|
-
labelsString = fileContext.
|
|
22
|
+
const labelsNode = labelsNodeQuery(metaLemmaNode),
|
|
23
|
+
labelsString = fileContext.nodeAsString(labelsNode),
|
|
24
24
|
localMetaContext = LocalMetaContext.fromFileContext(fileContext);
|
|
25
25
|
|
|
26
26
|
(labelsString === EMPTY_STRING) ?
|
|
@@ -28,7 +28,7 @@ export default function verifyMetaLemma(metaLemmaNode, fileContext) {
|
|
|
28
28
|
fileContext.trace(`Verifying the '${labelsString}' meta-lLemma...`, metaLemmaNode);
|
|
29
29
|
|
|
30
30
|
const labels = [],
|
|
31
|
-
labelsVerified = verifyLabels(
|
|
31
|
+
labelsVerified = verifyLabels(labelsNode, labels, fileContext);
|
|
32
32
|
|
|
33
33
|
if (labelsVerified) {
|
|
34
34
|
const metaSuppositions = [],
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { nodeQuery } from "../../utilities/query";
|
|
4
4
|
|
|
5
|
-
const
|
|
6
|
-
|
|
5
|
+
const metastatementNodeQuery = nodeQuery("/qualifiedMetastatement/metastatement!"),
|
|
6
|
+
referenceMetavariableNodeQuery = nodeQuery("/qualifiedMetastatement/reference!/metavariable!");
|
|
7
7
|
|
|
8
8
|
export default function verifyQualifiedMetastatement(qualifiedMetastatementNode, assignments, derived, localMetaContext) {
|
|
9
9
|
let qualifiedMetastatementVerified = false;
|
|
@@ -16,8 +16,9 @@ export default function verifyQualifiedMetastatement(qualifiedMetastatementNode,
|
|
|
16
16
|
|
|
17
17
|
localMetaContext.trace(`Verifying the '${metastatementString}' qualified metastatement...`, qualifiedMetastatementNode);
|
|
18
18
|
|
|
19
|
-
const
|
|
20
|
-
|
|
19
|
+
const referenceMetavariableNode = referenceMetavariableNodeQuery(qualifiedMetastatementNode),
|
|
20
|
+
labelMetavariableNode = referenceMetavariableNode, ///
|
|
21
|
+
rule = localMetaContext.findRuleByLabelMetavariableNode(labelMetavariableNode);
|
|
21
22
|
|
|
22
23
|
if (rule !== null) {
|
|
23
24
|
const ruleMatchesMetastatement = rule.matchMetastatement(metastatementNode, metastatementLocalMetaContext);
|
|
@@ -10,7 +10,7 @@ import verifyMetaSuppositions from "../verify/metaSuppositions";
|
|
|
10
10
|
import { first } from "../utilities/array";
|
|
11
11
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
12
12
|
|
|
13
|
-
const
|
|
13
|
+
const labelsNodeQuery = nodeQuery("/metatheorem/labels!"),
|
|
14
14
|
metaproofNodeQuery = nodeQuery("/metatheorem/metaproof!"),
|
|
15
15
|
metaConsequentNodeQuery = nodeQuery("/metatheorem/metaConsequent!"),
|
|
16
16
|
metaSuppositionsNodeQuery = nodesQuery("/metatheorem/metaSupposition");
|
|
@@ -18,14 +18,14 @@ const labelNodesQuery = nodesQuery("/metatheorem//reference/label"),
|
|
|
18
18
|
export default function verifyMetatheorem(metatheoremNode, fileContext) {
|
|
19
19
|
let metatheoremVerified = false;
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
labelsString = fileContext.
|
|
21
|
+
const labelsNode = labelsNodeQuery(metatheoremNode),
|
|
22
|
+
labelsString = fileContext.nodeAsString(labelsNode),
|
|
23
23
|
localMetaContext = LocalMetaContext.fromFileContext(fileContext);
|
|
24
24
|
|
|
25
25
|
fileContext.trace(`Verifying the '${labelsString}' metatheorem...`, metatheoremNode);
|
|
26
26
|
|
|
27
27
|
const labels = [],
|
|
28
|
-
labelsVerified = verifyLabels(
|
|
28
|
+
labelsVerified = verifyLabels(labelsNode, labels, fileContext);
|
|
29
29
|
|
|
30
30
|
if (labelsVerified) {
|
|
31
31
|
const metaSuppositions = [],
|
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
import Metavariable from "../metavariable";
|
|
4
4
|
import MetavariableAssignment from "../assignment/metavariable";
|
|
5
5
|
|
|
6
|
+
import { first } from "../utilities/array";
|
|
6
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
|
+
import { nameFromMetavariableNode } from "../utilities/name";
|
|
7
9
|
|
|
8
|
-
const
|
|
10
|
+
const termNodeQuery = nodeQuery("/argument/term"),
|
|
11
|
+
typeNodeQuery = nodeQuery("/argument/type"),
|
|
9
12
|
argumentNodeQuery = nodeQuery("/metavariable/argument!");
|
|
10
13
|
|
|
11
14
|
export default function verifyMetavariable(metavariableNode, metaTypeNode, fileContext) {
|
|
@@ -15,17 +18,38 @@ export default function verifyMetavariable(metavariableNode, metaTypeNode, fileC
|
|
|
15
18
|
|
|
16
19
|
fileContext.trace(`Verifying the '${metavariableString}' metavariable...`, metavariableNode);
|
|
17
20
|
|
|
18
|
-
const
|
|
21
|
+
const name = nameFromMetavariableNode(metavariableNode),
|
|
22
|
+
metavariablePresent = fileContext.isMetavariablePresentByName(name);
|
|
19
23
|
|
|
20
24
|
if (metavariablePresent) {
|
|
21
25
|
fileContext.debug(`The metavariable '${metavariableString}' is already present.`, metavariableNode);
|
|
22
26
|
} else {
|
|
23
|
-
const
|
|
24
|
-
|
|
27
|
+
const termTypes = [],
|
|
28
|
+
metaTypes = [],
|
|
29
|
+
argumentNode = argumentNodeQuery(metavariableNode),
|
|
30
|
+
argumentVerified = verifyArgument(argumentNode, termTypes, fileContext),
|
|
31
|
+
metaTypeVerified = verifyMetaType(metaTypeNode, metaTypes, fileContext);
|
|
25
32
|
|
|
26
|
-
if (argumentVerified) {
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
if (argumentVerified && metaTypeVerified) {
|
|
34
|
+
let termType,
|
|
35
|
+
metaType;
|
|
36
|
+
|
|
37
|
+
const firstMetaType = first(metaTypes);
|
|
38
|
+
|
|
39
|
+
metaType = firstMetaType; ///
|
|
40
|
+
|
|
41
|
+
const termTypesLength = termTypes.length;
|
|
42
|
+
|
|
43
|
+
if (termTypesLength === 0) {
|
|
44
|
+
termType = null;
|
|
45
|
+
} else {
|
|
46
|
+
const firstTermType = first(termTypes);
|
|
47
|
+
|
|
48
|
+
termType = firstTermType; ///
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const node = metavariableNode, ///
|
|
52
|
+
metavariable = Metavariable.fromNodeNameTermTypeAndMetaType(node, name, termType, metaType),
|
|
29
53
|
metavariableAssignment = MetavariableAssignment.fromMetavariable(metavariable),
|
|
30
54
|
metavariableAssigned = metavariableAssignment.assign(fileContext);
|
|
31
55
|
|
|
@@ -64,27 +88,51 @@ export function verifyStandaloneMetavariable(metavariableNode, localMetaContext,
|
|
|
64
88
|
return standaloneMetavariableVerified;
|
|
65
89
|
}
|
|
66
90
|
|
|
67
|
-
function verifyArgument(
|
|
91
|
+
function verifyArgument(argumentNode, termTypes, fileContext) {
|
|
68
92
|
let argumentVerified = false;
|
|
69
93
|
|
|
70
94
|
if (argumentNode === null) {
|
|
71
95
|
argumentVerified = true;
|
|
72
96
|
} else {
|
|
97
|
+
const termNode = termNodeQuery(argumentNode);
|
|
98
|
+
|
|
99
|
+
if (termNode === null) {
|
|
100
|
+
|
|
101
|
+
} else {
|
|
102
|
+
const termString = fileContext.nodeAsString(termNode);
|
|
103
|
+
|
|
104
|
+
fileContext.debug(`The '${termString}' term was found when a type should have been present.`, termNode);
|
|
105
|
+
}
|
|
73
106
|
const typeNode = typeNodeQuery(argumentNode);
|
|
74
107
|
|
|
75
108
|
if (typeNode !== null) {
|
|
76
109
|
const type = fileContext.findTypeByTypeNode(typeNode);
|
|
77
110
|
|
|
78
111
|
if (type !== null) {
|
|
112
|
+
const termType = type; ///
|
|
113
|
+
|
|
114
|
+
termTypes.push(termType);
|
|
115
|
+
|
|
79
116
|
argumentVerified = true;
|
|
80
117
|
} else {
|
|
81
|
-
const typeString = fileContext.nodeAsString(typeNode)
|
|
82
|
-
metavariableString = fileContext.nodeAsString(metavariableNode);
|
|
118
|
+
const typeString = fileContext.nodeAsString(typeNode);
|
|
83
119
|
|
|
84
|
-
fileContext.debug(`The '${
|
|
120
|
+
fileContext.debug(`The '${typeString}' type is not present.`, typeNode);
|
|
85
121
|
}
|
|
86
122
|
}
|
|
87
123
|
}
|
|
88
124
|
|
|
89
125
|
return argumentVerified;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function verifyMetaType(metaTypeNode, metaTypes, fileContext) {
|
|
129
|
+
let metaTypeVerified;
|
|
130
|
+
|
|
131
|
+
const metaType = fileContext.findMetaTypeByMetaTypeNode(metaTypeNode);
|
|
132
|
+
|
|
133
|
+
metaTypes.push(metaType);
|
|
134
|
+
|
|
135
|
+
metaTypeVerified = true;
|
|
136
|
+
|
|
137
|
+
return metaTypeVerified;
|
|
90
138
|
}
|
package/src/verify/rule.js
CHANGED
|
@@ -10,7 +10,7 @@ import verifyConclusion from "../verify/conclusion";
|
|
|
10
10
|
import { first } from "../utilities/array";
|
|
11
11
|
import { nodeQuery, nodesQuery } from "../utilities/query";
|
|
12
12
|
|
|
13
|
-
const
|
|
13
|
+
const labelsNodeQuery = nodeQuery("/rule/labels!"),
|
|
14
14
|
premisesNodeQuery = nodesQuery("/rule/premise"),
|
|
15
15
|
ruleProofNodeQuery = nodeQuery("/rule/ruleProof!"),
|
|
16
16
|
conclusionNodeQuery = nodeQuery("/rule/conclusion!");
|
|
@@ -18,14 +18,14 @@ const labelNodesQuery = nodesQuery("/rule//reference/label"),
|
|
|
18
18
|
export default function verifyRule(ruleNode, fileContext) {
|
|
19
19
|
let ruleVerified = false;
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
labelsString = fileContext.
|
|
21
|
+
const labelsNode = labelsNodeQuery(ruleNode),
|
|
22
|
+
labelsString = fileContext.nodeAsString(labelsNode),
|
|
23
23
|
localMetaContext = LocalMetaContext.fromFileContext(fileContext);
|
|
24
24
|
|
|
25
25
|
fileContext.trace(`Verifying the '${labelsString}' rule...`, ruleNode);
|
|
26
26
|
|
|
27
27
|
const labels = [],
|
|
28
|
-
labelsVerified = verifyLabels(
|
|
28
|
+
labelsVerified = verifyLabels(labelsNode, labels, fileContext);
|
|
29
29
|
|
|
30
30
|
if (labelsVerified) {
|
|
31
31
|
const premises = [],
|