occam-verify-cli 0.0.262

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.
Files changed (72) hide show
  1. package/README.md +7 -0
  2. package/bin/abbreviations.js +11 -0
  3. package/bin/antecedent.js +19 -0
  4. package/bin/axiom.js +52 -0
  5. package/bin/combinator.js +27 -0
  6. package/bin/conclusion.js +19 -0
  7. package/bin/consequent.js +19 -0
  8. package/bin/constants.js +9 -0
  9. package/bin/constructor.js +43 -0
  10. package/bin/context/file.js +257 -0
  11. package/bin/context/metaproof.js +90 -0
  12. package/bin/context/package/fileSystem.js +111 -0
  13. package/bin/context/package.js +221 -0
  14. package/bin/context/proof.js +93 -0
  15. package/bin/fileNames.js +17 -0
  16. package/bin/loadPackageContexts.js +53 -0
  17. package/bin/main.js +25 -0
  18. package/bin/metaAntecedent.js +19 -0
  19. package/bin/metaConsequent.js +19 -0
  20. package/bin/metaSubstitution.js +24 -0
  21. package/bin/options.js +9 -0
  22. package/bin/premise.js +19 -0
  23. package/bin/rule.js +64 -0
  24. package/bin/ruleNames.js +19 -0
  25. package/bin/type.js +120 -0
  26. package/bin/utilities/array.js +97 -0
  27. package/bin/utilities/fileSystem.js +97 -0
  28. package/bin/utilities/query.js +92 -0
  29. package/bin/utilities/rule.js +279 -0
  30. package/bin/utilities/string.js +51 -0
  31. package/bin/variable.js +54 -0
  32. package/bin/verify/antecedent.js +35 -0
  33. package/bin/verify/axiom/IndicativeConditional.js +54 -0
  34. package/bin/verify/axiom/unqualifiedStatement.js +40 -0
  35. package/bin/verify/axiom.js +37 -0
  36. package/bin/verify/conclusion.js +32 -0
  37. package/bin/verify/consequent.js +32 -0
  38. package/bin/verify/declaration/combinator.js +17 -0
  39. package/bin/verify/declaration/constructor.js +19 -0
  40. package/bin/verify/declaration/topLevel.js +61 -0
  41. package/bin/verify/declaration/type.js +21 -0
  42. package/bin/verify/declaration/variable.js +19 -0
  43. package/bin/verify/equality.js +52 -0
  44. package/bin/verify/file.js +43 -0
  45. package/bin/verify/files.js +46 -0
  46. package/bin/verify/label.js +27 -0
  47. package/bin/verify/labels.js +17 -0
  48. package/bin/verify/metaAntecedent.js +35 -0
  49. package/bin/verify/metaConsequent.js +32 -0
  50. package/bin/verify/metaDerivation.js +105 -0
  51. package/bin/verify/metaproof.js +46 -0
  52. package/bin/verify/metastatement/qualified.js +43 -0
  53. package/bin/verify/metastatement/unqualified.js +40 -0
  54. package/bin/verify/package.js +81 -0
  55. package/bin/verify/premise.js +35 -0
  56. package/bin/verify/rule/inferenceConditional.js +54 -0
  57. package/bin/verify/rule/unqualifiedMetastatement.js +40 -0
  58. package/bin/verify/rule.js +61 -0
  59. package/bin/verify/statement/qualified.js +17 -0
  60. package/bin/verify/statement/unqualified.js +27 -0
  61. package/bin/verify/statement.js +47 -0
  62. package/bin/verify/statementAsCombinator.js +140 -0
  63. package/bin/verify/term.js +183 -0
  64. package/bin/verify/termAsConstructor.js +173 -0
  65. package/bin/verify/termAsVariable.js +41 -0
  66. package/bin/verify/type.js +53 -0
  67. package/bin/verify/typeAssertion.js +69 -0
  68. package/bin/verify/variable.js +55 -0
  69. package/index.js +9 -0
  70. package/license.txt +48 -0
  71. package/package.json +24 -0
  72. package/verify.js +13 -0
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ const MetaAntecedent = require("../metaAntecedent"),
4
+ verifyUnqualifiedMetastatement = require("../verify/metastatement/unqualified");
5
+
6
+ const { nodeQuery, nodesQuery } = require("../utilities/query");
7
+
8
+ const metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement"),
9
+ unqualifiedMetastatementNodesQuery = nodesQuery("/metaAntecedent/unqualifiedMetastatement");
10
+
11
+ function verifyMetaAntecedent(metaAntecedentNode, metaAntecedents, context) {
12
+ const unqualifiedMetastatementNodes = unqualifiedMetastatementNodesQuery(metaAntecedentNode),
13
+ metaAntecedentVerified = unqualifiedMetastatementNodes.every((unqualifiedMetastatementNode) => {
14
+ const unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context);
15
+
16
+ if (unqualifiedMetastatementVerified) {
17
+ return true;
18
+ }
19
+ });
20
+
21
+ if (metaAntecedentVerified) {
22
+ const metastatementNodes = unqualifiedMetastatementNodes.map((unqualifiedMetastatementNode) => {
23
+ const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
24
+
25
+ return metastatementNode;
26
+ }),
27
+ metaAntecedent = MetaAntecedent.fromMetastatementNodes(metastatementNodes);
28
+
29
+ metaAntecedents.push(metaAntecedent);
30
+ }
31
+
32
+ return metaAntecedentVerified;
33
+ }
34
+
35
+ module.exports = verifyMetaAntecedent;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ const MetaConsequent = require("../metaConsequent"),
4
+ verifyUnqualifiedMetaStatement = require("../verify/metastatement/unqualified");
5
+
6
+ const { nodeQuery } = require("../utilities/query");
7
+
8
+ const metastatementNodeQuery = nodeQuery("/unqualifiedMetaStatement/metastatement!"),
9
+ unqualifiedMetaStatementNodeQuery = nodeQuery("/metaConsequent/unqualifiedMetaStatement!");
10
+
11
+ function verifyMetaConsequent(metaConsequentNode, metaConsequents, context) {
12
+ let metaConsequentVerified = false;
13
+
14
+ const unqualifiedMetaStatementNode = unqualifiedMetaStatementNodeQuery(metaConsequentNode);
15
+
16
+ if (unqualifiedMetaStatementNode !== null) {
17
+ const unqualifiedMetaStatementVerified = verifyUnqualifiedMetaStatement(unqualifiedMetaStatementNode, context);
18
+
19
+ if (unqualifiedMetaStatementVerified) {
20
+ const metastatementNode = metastatementNodeQuery(unqualifiedMetaStatementNode),
21
+ metaConsequent = MetaConsequent.fromMetaStatementNode(metastatementNode);
22
+
23
+ metaConsequents.push(metaConsequent);
24
+
25
+ metaConsequentVerified = true;
26
+ }
27
+ }
28
+
29
+ return metaConsequentVerified;
30
+ }
31
+
32
+ module.exports = verifyMetaConsequent;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ const MetaproofContext = require("../context/metaproof"),
4
+ verifyMetaAntecedent = require("../verify/metaAntecedent"),
5
+ verifyQualifiedMetastatement = require("../verify/metastatement/qualified"),
6
+ verifyUnqualifiedMetastatement = require("../verify/metastatement/unqualified");
7
+
8
+ const { nodeQuery, nodesQuery } = require("../utilities/query"),
9
+ { META_SUBLEMMA_RULE_NAME, QUALIFIED_METASTATEMENT_RULE_NAME, UNQUALIFIED_METASTATEMENT_RULE_NAME } = require("../ruleNames");
10
+
11
+ const metaAntecedentNodeQuery = nodeQuery("/metaSublemma/metaAntecedent!"),
12
+ metaDerivationNodeQuery = nodeQuery("/metaSublemma/metaDerivation!"),
13
+ metaSublemmaChildNodesQuery = nodesQuery("/metaDerivation/*"),
14
+ qualifiedMetastatementNodeQuery = nodeQuery("/metaSublemma/qualifiedMetastatement!"),
15
+ unqualifiedMetastatementNodeQuery = nodeQuery("/metaSublemma/unqualifiedMetastatement!");
16
+
17
+ function verifyMetaDerivation(metaNode, context) {
18
+ const derived = true;
19
+
20
+ context.setDerived(derived);
21
+
22
+ const metaSublemmaChildNodes = metaSublemmaChildNodesQuery(metaNode),
23
+ metaSublemmaChildNodesVerified = metaSublemmaChildNodes.every((metaSublemmaChildNode) => {
24
+ let metaSublemmaChildNodeVerified;
25
+
26
+ const ruleName = metaSublemmaChildNode.getRuleName();
27
+
28
+ switch (ruleName) {
29
+ case META_SUBLEMMA_RULE_NAME: {
30
+ const metaSublemmaNode = metaSublemmaChildNode, ///
31
+ metaSublemmaVerified = verifyMetaSublemma(metaSublemmaNode, context);
32
+
33
+ metaSublemmaChildNodeVerified = metaSublemmaVerified; ///
34
+
35
+ break;
36
+ }
37
+
38
+ case QUALIFIED_METASTATEMENT_RULE_NAME: {
39
+ const qualifiedMetastatementNode = metaSublemmaChildNode, ///
40
+ qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, context);
41
+
42
+ metaSublemmaChildNodeVerified = qualifiedMetastatementVerified; ///
43
+
44
+ break;
45
+ }
46
+
47
+ case UNQUALIFIED_METASTATEMENT_RULE_NAME: {
48
+ const unqualifiedMetastatementNode = metaSublemmaChildNode, ///
49
+ unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context);
50
+
51
+ metaSublemmaChildNodeVerified = unqualifiedMetastatementVerified; ///
52
+
53
+ break;
54
+ }
55
+ }
56
+
57
+ return metaSublemmaChildNodeVerified;
58
+ }),
59
+ metaDerivationVerified = metaSublemmaChildNodesVerified; ///
60
+
61
+ return metaDerivationVerified;
62
+ }
63
+
64
+ module.exports = verifyMetaDerivation;
65
+
66
+ function verifyMetaSublemma(metaSublemmaNode, context) {
67
+ let metaSublemmaVerified = false;
68
+
69
+ const metaproofContext = MetaproofContext.fromContext(context);
70
+
71
+ context = metaproofContext; ///
72
+
73
+ const metaAntecedents = [],
74
+ metaAntecedentNode = metaAntecedentNodeQuery(metaSublemmaNode),
75
+ metaAntecedentVerified = verifyMetaAntecedent(metaAntecedentNode, metaAntecedents, context);
76
+
77
+ if (metaAntecedentVerified) {
78
+ let metaDerivationVerified = true;
79
+
80
+ const metaDerivationNode = metaDerivationNodeQuery(metaSublemmaNode);
81
+
82
+ if (metaDerivationNode !== null) {
83
+ metaDerivationVerified = verifyMetaDerivation(metaDerivationNode, context);
84
+ }
85
+
86
+ if (metaDerivationVerified) {
87
+ const qualifiedMetastatementNode = qualifiedMetastatementNodeQuery(metaSublemmaNode),
88
+ unqualifiedMetastatementNode = unqualifiedMetastatementNodeQuery(metaSublemmaNode);
89
+
90
+ if (qualifiedMetastatementNode !== null) {
91
+ const qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, context);
92
+
93
+ metaSublemmaVerified = qualifiedMetastatementVerified; ///
94
+ }
95
+
96
+ if (unqualifiedMetastatementNode !== null) {
97
+ const unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context);
98
+
99
+ metaSublemmaVerified = unqualifiedMetastatementVerified; ///
100
+ }
101
+ }
102
+ }
103
+
104
+ return metaSublemmaVerified;
105
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ const verifyMetaDerivation = require("../verify/metaDerivation"),
4
+ verifyQualifiedMetastatement = require("../verify/metastatement/qualified");
5
+
6
+ const { first } = require("../utilities/array"),
7
+ { nodeQuery } = require("../utilities/query"),
8
+ { nodeAsString } = require("../utilities/string");
9
+
10
+ const metastatementNodeQuery = nodeQuery("/qualifiedMetastatement!/metastatement!"),
11
+ metaDerivationNodeQuery = nodeQuery("/metaproof/metaDerivation!"),
12
+ qualifiedStatementNodeQuery = nodeQuery("/metaproof/qualifiedMetastatement!");
13
+
14
+ function verifyMetaproof(metaproofNode, rules, context) {
15
+ let metaproofVerified = false;
16
+
17
+ const metaDerivationNode = metaDerivationNodeQuery(metaproofNode);
18
+
19
+ let metaDerivationVerified = false;
20
+
21
+ if (metaDerivationNode !== null) {
22
+ metaDerivationVerified = verifyMetaDerivation(metaDerivationNode, context);
23
+ }
24
+
25
+ if (metaDerivationVerified) {
26
+ const qualifiedMetastatementNode = qualifiedStatementNodeQuery(metaproofNode),
27
+ qualifiedMetastatementVerified = verifyQualifiedMetastatement(qualifiedMetastatementNode, context);
28
+
29
+ if (qualifiedMetastatementVerified) {
30
+ const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode),
31
+ firstRule = first(rules),
32
+ rule = firstRule, ///
33
+ metastatementString = nodeAsString(metastatementNode),
34
+ conclusionMetastatementNode = rule.getConclusionMetastatementNode(),
35
+ conclusionMetastatementString = nodeAsString(conclusionMetastatementNode);
36
+
37
+ if (metastatementString === conclusionMetastatementString) {
38
+ metaproofVerified = true;
39
+ }
40
+ }
41
+ }
42
+
43
+ return metaproofVerified;
44
+ }
45
+
46
+ module.exports = verifyMetaproof;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ const { loggingUtilities } = require("necessary");
4
+
5
+ const { matchRule } = require("../../utilities/rule"),
6
+ { nodeAsString } = require("../../utilities/string"),
7
+ { nodeQuery, referenceNameFromReferenceNode } = require("../../utilities/query");
8
+
9
+ const { log } = loggingUtilities;
10
+
11
+ const referenceNodeQuery = nodeQuery("/qualifiedMetastatement/qualification!/reference!"),
12
+ metastatementNodeQuery = nodeQuery("/qualifiedMetastatement/metastatement!");
13
+
14
+ function verifyQualifiedMetastatement(qualifiedMetastatementNode, context) {
15
+ let qualifiedMetastatementVerified = false;
16
+
17
+ const metastatementNode = metastatementNodeQuery(qualifiedMetastatementNode);
18
+
19
+ if (metastatementNode !== null) {
20
+ const referenceNode = referenceNodeQuery(qualifiedMetastatementNode),
21
+ referenceName = referenceNameFromReferenceNode(referenceNode),
22
+ rule = context.findRuleByReferenceName(referenceName);
23
+
24
+ if (rule !== null) {
25
+ const ruleMatches = matchRule(rule, metastatementNode, context);
26
+
27
+ if (ruleMatches) {
28
+ context.addMetastatementNode(metastatementNode);
29
+
30
+ const metastatementString = nodeAsString(metastatementNode);
31
+
32
+ log.info(`Verified the '${metastatementString}' qualified metastatement.`);
33
+
34
+ qualifiedMetastatementVerified = true;
35
+ }
36
+ }
37
+ }
38
+
39
+ return qualifiedMetastatementVerified;
40
+ }
41
+
42
+ module.exports = verifyQualifiedMetastatement;
43
+
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ const { loggingUtilities } = require("necessary");
4
+
5
+ const { nodeQuery } = require("../../utilities/query"),
6
+ { nodeAsString } = require("../../utilities/string");
7
+
8
+ const { log } = loggingUtilities;
9
+
10
+ const metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement!");
11
+
12
+ function verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context) {
13
+ let unqualifiedMetastatementVerified = false;
14
+
15
+ const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
16
+
17
+ if (metastatementNode !== null) {
18
+ const derived = context.isDerived();
19
+
20
+ let metastatementPresent = true; ///
21
+
22
+ if (derived) {
23
+ metastatementPresent = context.isMetastatementNodePresent(metastatementNode);
24
+ }
25
+
26
+ if (metastatementPresent) {
27
+ context.addMetastatementNode(metastatementNode);
28
+ }
29
+
30
+ const metastatementString = nodeAsString(metastatementNode);
31
+
32
+ log.info(`Verified the '${metastatementString}' unqualified metastatement.`);
33
+
34
+ unqualifiedMetastatementVerified = true;
35
+ }
36
+
37
+ return unqualifiedMetastatementVerified;
38
+ }
39
+
40
+ module.exports = verifyUnqualifiedMetastatement;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ const { loggingUtilities } = require("necessary");
4
+
5
+ const verifyFiles = require("../verify/files");
6
+
7
+ const { log } = loggingUtilities;
8
+
9
+ function verifyPackage(packageName, packageContextMap, packageContexts = []) {
10
+ const packageContext = packageContextMap[packageName];
11
+
12
+ let packageVerified = packageContext.isPackageVerified();
13
+
14
+ if (!packageVerified) {
15
+ log.debug(`Verifying the '${packageName}' package...`);
16
+
17
+ const dependencyPackageNames = packageContext.getDependencyPackageNames(),
18
+ dependencyPackagesVVerified = dependencyPackageNames.every((dependencyPackageName) => {
19
+ const packageName = dependencyPackageName, ///
20
+ packageVerified = verifyPackage(packageName, packageContextMap, packageContexts);
21
+
22
+ if (packageVerified) {
23
+ return true;
24
+ }
25
+ });
26
+
27
+ if (dependencyPackagesVVerified) {
28
+ const packageNames = dependencyPackageNames, ///
29
+ packageContexts = packageNames.map((packageName) => {
30
+ const packageContext = packageContextMap[packageName];
31
+
32
+ return packageContext;
33
+ });
34
+
35
+ const dependencyPackageContexts = retrieveDependencyPackageContexts(dependencyPackageNames, packageContextMap);
36
+
37
+ sortDependencyPackageContexts(dependencyPackageContexts, packageContexts);
38
+
39
+ packageContext.initialise(packageContexts, dependencyPackageContexts);
40
+
41
+ const filesVerified = verifyFiles(packageContext);
42
+
43
+ packageVerified = filesVerified; ///
44
+
45
+ if (packageVerified) {
46
+ packageContexts.push(packageContext);
47
+
48
+ log.info(`Verified the '${packageName}' package.`);
49
+ }
50
+ }
51
+ }
52
+
53
+ return packageVerified;
54
+ }
55
+
56
+ module.exports = verifyPackage;
57
+
58
+ function sortDependencyPackageContexts(dependencyPackageContexts, packageContexts) {
59
+ dependencyPackageContexts.sort((dependencyPackageContextA, dependencyPackageContextB) => {
60
+ const indexA = packageContexts.indexOf(dependencyPackageContextA),
61
+ indexB = packageContexts.indexOf(dependencyPackageContextB),
62
+ difference = (indexB - indexA);
63
+
64
+ return difference;
65
+ });
66
+ }
67
+
68
+ function retrieveDependencyPackageContexts(dependencyPackageNames, packageContextMap, dependencyPackageContexts = []) {
69
+ dependencyPackageNames.forEach((dependencyPackageName) => {
70
+ const dependencyPackageContext = packageContextMap[dependencyPackageName],
71
+ dependencyPackageContextsIncludesDependencyPackageContext = dependencyPackageContexts.includes(dependencyPackageContext);
72
+
73
+ if (!dependencyPackageContextsIncludesDependencyPackageContext) {
74
+ dependencyPackageContexts.push(dependencyPackageContext);
75
+
76
+ retrieveDependencyPackageContexts(dependencyPackageNames, packageContextMap, dependencyPackageContexts);
77
+ }
78
+ });
79
+
80
+ return dependencyPackageContexts;
81
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ const Premise = require("../premise"),
4
+ verifyUnqualifiedMetastatement = require("../verify/metastatement/unqualified");
5
+
6
+ const { nodeQuery, nodesQuery } = require("../utilities/query");
7
+
8
+ const metastatementNodeQuery = nodeQuery("/unqualifiedMetastatement/metastatement"),
9
+ unqualifiedMetastatementNodesQuery = nodesQuery("/premise|premises/unqualifiedMetastatement");
10
+
11
+ function verifyPremise(premiseNode, premises, context) {
12
+ const unqualifiedMetastatementNodes = unqualifiedMetastatementNodesQuery(premiseNode),
13
+ premiseVerified = unqualifiedMetastatementNodes.every((unqualifiedMetastatementNode) => {
14
+ const unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context);
15
+
16
+ if (unqualifiedMetastatementVerified) {
17
+ return true;
18
+ }
19
+ });
20
+
21
+ if (premiseVerified) {
22
+ const metastatementNodes = unqualifiedMetastatementNodes.map((unqualifiedMetastatementNode) => {
23
+ const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode);
24
+
25
+ return metastatementNode;
26
+ }),
27
+ premise = Premise.fromMetastatementNodes(metastatementNodes);
28
+
29
+ premises.push(premise);
30
+ }
31
+
32
+ return premiseVerified;
33
+ }
34
+
35
+ module.exports = verifyPremise;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ const Rule = require("../../rule"),
4
+ verifyLabels = require("../../verify/labels"),
5
+ verifyPremise = require("../../verify/premise"),
6
+ verifyConclusion = require("../../verify/conclusion");
7
+
8
+ const { first } = require("../../utilities/array"),
9
+ { nodeQuery, nodesQuery } = require("../../utilities/query");
10
+
11
+ const labelNodesQuery = nodesQuery("/rule/label"),
12
+ premiseNodeQuery = nodeQuery("/inferenceConditional/premise|premises!"),
13
+ conclusionNodeQuery = nodeQuery("/inferenceConditional/conclusion!"),
14
+ inferenceConditionalNodeQuery = nodeQuery("/rule/inferenceConditional!");
15
+
16
+ function verifyInferenceConditionalRule(ruleNode, rules, context) {
17
+ let inferenceConditionalRuleVerified = false;
18
+
19
+ const inferenceConditionalNode = inferenceConditionalNodeQuery(ruleNode);
20
+
21
+ if (inferenceConditionalNode !== null) {
22
+ const labels = [],
23
+ labelNodes = labelNodesQuery(ruleNode),
24
+ labelsVerified = verifyLabels(labelNodes, labels, context);
25
+
26
+ if (labelsVerified) {
27
+ const premises = [],
28
+ premiseNode = premiseNodeQuery(inferenceConditionalNode),
29
+ premiseVerified = verifyPremise(premiseNode, premises, context);
30
+
31
+ if (premiseVerified) {
32
+ const conclusions = [],
33
+ conclusionNode = conclusionNodeQuery(inferenceConditionalNode),
34
+ conclusionVerified = verifyConclusion(conclusionNode, conclusions, context);
35
+
36
+ if (conclusionVerified) {
37
+ const firstPremise = first(premises),
38
+ firstConclusion = first(conclusions),
39
+ premise = firstPremise, ///
40
+ conclusion = firstConclusion, ///
41
+ rule = Rule.fromPremiseConclusionAndLabels(premise, conclusion, labels);
42
+
43
+ rules.push(rule);
44
+
45
+ inferenceConditionalRuleVerified = true;
46
+ }
47
+ }
48
+ }
49
+ }
50
+
51
+ return inferenceConditionalRuleVerified;
52
+ }
53
+
54
+ module.exports = verifyInferenceConditionalRule;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ const Rule = require("../../rule"),
4
+ verifyLabels = require("../../verify/labels"),
5
+ verifyUnqualifiedMetastatement = require("../../verify/metastatement/unqualified");
6
+
7
+ const { nodeQuery, nodesQuery } = require("../../utilities/query");
8
+
9
+ const labelNodesQuery = nodesQuery("/rule/label"),
10
+ metastatementNodeQuery = nodeQuery("/*/metastatement"),
11
+ unqualifiedMetastatementNodeQuery = nodeQuery("/rule/unqualifiedMetastatement!");
12
+
13
+ function verifyUnqualifiedMetastatementRule(ruleNode, rules, context) {
14
+ let unqualifiedMetastatementRuleVerified = false;
15
+
16
+ const unqualifiedMetastatementNode = unqualifiedMetastatementNodeQuery(ruleNode);
17
+
18
+ if (unqualifiedMetastatementNode !== null) {
19
+ const labels = [],
20
+ labelNodes = labelNodesQuery(ruleNode),
21
+ labelsVerified = verifyLabels(labelNodes, labels, context);
22
+
23
+ if (labelsVerified) {
24
+ const unqualifiedMetastatementVerified = verifyUnqualifiedMetastatement(unqualifiedMetastatementNode, context);
25
+
26
+ if (unqualifiedMetastatementVerified) {
27
+ const metastatementNode = metastatementNodeQuery(unqualifiedMetastatementNode),
28
+ rule = Rule.fromMetastatementNodeAndLabels(metastatementNode, labels);
29
+
30
+ rules.push(rule);
31
+
32
+ unqualifiedMetastatementRuleVerified = true;
33
+ }
34
+ }
35
+ }
36
+
37
+ return unqualifiedMetastatementRuleVerified;
38
+ }
39
+
40
+ module.exports = verifyUnqualifiedMetastatementRule;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ const { loggingUtilities } = require("necessary");
4
+
5
+ const verifyMetaproof = require("../verify/metaproof"),
6
+ MetaproofContext = require("../context/metaproof"),
7
+ verifyInferenceConditionalRule = require("../verify/rule/inferenceConditional"),
8
+ verifyUnqualifiedMetastatementRule = require("../verify/rule/unqualifiedMetastatement");
9
+
10
+ const { first } = require("../utilities/array"),
11
+ { nodesAsString } = require("../utilities/string"),
12
+ { nodeQuery, nodesQuery } = require("../utilities/query");
13
+
14
+ const { log } = loggingUtilities;
15
+
16
+ const labelNodesQuery = nodesQuery("/rule/label"),
17
+ metaproofNodeQuery = nodeQuery("/rule/metaproof!");
18
+
19
+ function verifyRule(ruleNode, context) {
20
+ let ruleVerified = false;
21
+
22
+ const labelNodes = labelNodesQuery(ruleNode),
23
+ labelsString = nodesAsString(labelNodes);
24
+
25
+ log.debug(`Verifying the '${labelsString}' rule...`);
26
+
27
+ const metaproofContext = MetaproofContext.fromContext(context);
28
+
29
+ context = metaproofContext; ///
30
+
31
+ const rules = [],
32
+ inferenceConditionalRuleVerified = verifyInferenceConditionalRule(ruleNode, rules, context),
33
+ unqualifiedMetastatementRuleVerified = verifyUnqualifiedMetastatementRule(ruleNode, rules, context);
34
+
35
+ if (inferenceConditionalRuleVerified || unqualifiedMetastatementRuleVerified) {
36
+ const metaproofNode = metaproofNodeQuery(ruleNode);
37
+
38
+ let metaproofVerified = true;
39
+
40
+ if (metaproofNode !== null) {
41
+ metaproofVerified = verifyMetaproof(metaproofNode, rules, context);
42
+ }
43
+
44
+ if (metaproofVerified) {
45
+ ruleVerified = true;
46
+ }
47
+ }
48
+
49
+ if (ruleVerified) {
50
+ const firstRule = first(rules),
51
+ rule = firstRule; ///
52
+
53
+ context.addRule(rule);
54
+
55
+ log.info(`Verified the '${labelsString}' rule.`);
56
+ }
57
+
58
+ return ruleVerified;
59
+ }
60
+
61
+ module.exports = verifyRule;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ const verifyStatement = require("../../verify/statement");
4
+
5
+ const { nodeQuery } = require("../../utilities/query");
6
+
7
+ const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!");
8
+
9
+ function verifyQualifiedStatement(qualifiedStatementNode, context) {
10
+ const statementNode = statementNodeQuery(qualifiedStatementNode),
11
+ statementVerified = verifyStatement(statementNode, context),
12
+ qualifiedStatementVerified = statementVerified; ///
13
+
14
+ return qualifiedStatementVerified;
15
+ }
16
+
17
+ module.exports = verifyQualifiedStatement;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ const verifyStatement = require("../../verify/statement");
4
+
5
+ const { nodeQuery } = require("../../utilities/query");
6
+
7
+ const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
8
+
9
+ function verifyUnqualifiedStatement(unqualifiedStatementNode, context) {
10
+ let unqualifiedStatementVerified = false;
11
+
12
+ const statementNode = statementNodeQuery(unqualifiedStatementNode);
13
+
14
+ if (statementNode !== null) {
15
+ const statementVerified = verifyStatement(statementNode, context);
16
+
17
+ if (statementVerified) {
18
+ context.addStatementNode(statementNode);
19
+
20
+ unqualifiedStatementVerified = true;
21
+ }
22
+ }
23
+
24
+ return unqualifiedStatementVerified;
25
+ }
26
+
27
+ module.exports = verifyUnqualifiedStatement;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ const { loggingUtilities } = require("necessary");
4
+
5
+ const verifyEquality = require("../verify/equality"),
6
+ verifyTypeAssertion = require("../verify/typeAssertion");
7
+
8
+ const { nodeQuery } = require("../utilities/query"),
9
+ { nodeAsString } = require("../utilities/string");
10
+
11
+ const equalityNodeQuery = nodeQuery("/statement/equality!"),
12
+ typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
13
+
14
+ const { log } = loggingUtilities;
15
+
16
+ function verifyStatement(statementNode, context) {
17
+ let statementVerified = false;
18
+
19
+ const statementString = nodeAsString(statementNode);
20
+
21
+ log.debug(`Verifying the '${statementString}' statement...`);
22
+
23
+ const equalityNode = equalityNodeQuery(statementNode),
24
+ typeAssertionNode = typeAssertionNodeQuery(statementNode);
25
+
26
+ if (false) {
27
+ ///
28
+ } else if (equalityNode !== null) {
29
+ const equalityVerified = verifyEquality(equalityNode, context);
30
+
31
+ statementVerified = equalityVerified; ///
32
+ } else if (typeAssertionNode !== null) {
33
+ const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, context);
34
+
35
+ statementVerified = typeAssertionVerified; ///
36
+ } else {
37
+ debugger
38
+ }
39
+
40
+ if (statementVerified) {
41
+ log.info(`Verified the '${statementString}' statement.`);
42
+ }
43
+
44
+ return statementVerified;
45
+ }
46
+
47
+ module.exports = verifyStatement;