occam-verify-cli 0.0.967 → 0.0.971
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/bin/action/verify.js +6 -22
- package/bin/main.js +27 -0
- package/lib/constants.js +5 -1
- package/lib/context/file.js +48 -53
- package/lib/context/local.js +45 -39
- package/lib/context/release.js +3 -3
- package/lib/declaration.js +9 -7
- package/lib/equivalence.js +23 -21
- package/lib/judgement.js +3 -3
- package/lib/label.js +3 -3
- package/lib/log.js +3 -3
- package/lib/metaType.js +7 -7
- package/lib/metavariable.js +12 -43
- package/lib/node/term/bracketed.js +16 -0
- package/lib/proofStep.js +3 -29
- package/lib/releaseContext/initialise.js +11 -17
- package/lib/resolve/substitutions.js +99 -0
- package/lib/rule.js +10 -6
- package/lib/substitution/statementForMetavariable.js +93 -98
- package/lib/substitution/termForVariable.js +45 -54
- package/lib/substitution.js +51 -9
- package/lib/substitutions.js +165 -12
- package/lib/term.js +8 -1
- package/lib/topLevelAssertion.js +10 -6
- package/lib/type.js +5 -5
- package/lib/unifier/metaLevel.js +10 -3
- package/lib/unifier/statementWithCombinator.js +6 -6
- package/lib/unifier.js +2 -2
- package/lib/unify/metavariableWithStatement.js +13 -48
- package/lib/unify/metavariableWithStatementGivenSubstitution.js +39 -0
- package/lib/unify/premiseWithProofStep.js +3 -3
- package/lib/unify/statement/qualified.js +117 -0
- package/lib/unify/statement/unqualified.js +25 -0
- package/lib/unify/statementWithBracketedCombinator.js +3 -3
- package/lib/unify/statementWithCombinators.js +5 -5
- package/lib/unify/statementWithMetaType.js +3 -3
- package/lib/unify/statementWithSttaemetnGivenEquivalences.js +45 -0
- package/lib/unify/suppositionWithProffStep.js +3 -3
- package/lib/unify/variableWithTerm.js +11 -26
- package/lib/utilities/array.js +5 -14
- package/lib/utilities/assertion.js +24 -0
- package/lib/utilities/brackets.js +60 -0
- package/lib/utilities/message.js +52 -0
- package/lib/utilities/name.js +7 -7
- package/lib/utilities/node.js +10 -17
- package/lib/utilities/string.js +1 -7
- package/lib/utilities/subproof.js +19 -0
- package/lib/utilities/unify.js +30 -11
- package/lib/variable.js +8 -8
- package/lib/verifier/metaLevel.js +6 -6
- package/lib/verifier/statementAsCombinator.js +2 -2
- package/lib/verify/assertion/contained.js +62 -34
- package/lib/verify/assertion/defined.js +53 -48
- package/lib/verify/assertion/subproof.js +9 -9
- package/lib/verify/assertion/type.js +11 -11
- package/lib/verify/conclusion.js +6 -6
- package/lib/verify/consequent.js +6 -6
- package/lib/verify/declaration/metavariable.js +2 -2
- package/lib/verify/declaration.js +34 -20
- package/lib/verify/equality.js +13 -13
- package/lib/verify/frame.js +38 -24
- package/lib/verify/judgement.js +13 -13
- package/lib/verify/metavariable.js +2 -2
- package/lib/verify/premise.js +5 -5
- package/lib/verify/proofStep.js +15 -24
- package/lib/verify/statement/qualified.js +15 -124
- package/lib/verify/statement/unqualified.js +23 -24
- package/lib/verify/statement.js +24 -24
- package/lib/verify/statementGivenMetaType.js +18 -9
- package/lib/verify/supposition.js +5 -5
- package/package.json +2 -2
- package/src/constants.js +1 -0
- package/src/context/file.js +49 -55
- package/src/context/local.js +34 -31
- package/src/context/release.js +2 -2
- package/src/declaration.js +12 -10
- package/src/equivalence.js +27 -26
- package/src/judgement.js +2 -2
- package/src/label.js +2 -2
- package/src/log.js +1 -1
- package/src/metaType.js +7 -7
- package/src/metavariable.js +10 -49
- package/src/node/term/bracketed.js +9 -0
- package/src/proofStep.js +3 -48
- package/src/releaseContext/initialise.js +13 -24
- package/src/resolve/substitutions.js +134 -0
- package/src/rule.js +10 -5
- package/src/substitution/statementForMetavariable.js +99 -85
- package/src/substitution/termForVariable.js +50 -65
- package/src/substitution.js +46 -8
- package/src/substitutions.js +176 -10
- package/src/term.js +6 -0
- package/src/topLevelAssertion.js +10 -5
- package/src/type.js +4 -4
- package/src/unifier/metaLevel.js +11 -3
- package/src/unifier/statementWithCombinator.js +5 -5
- package/src/unifier.js +1 -1
- package/src/unify/metavariableWithStatement.js +17 -71
- package/src/unify/metavariableWithStatementGivenSubstitution.js +39 -0
- package/src/unify/premiseWithProofStep.js +1 -1
- package/src/unify/statement/qualified.js +183 -0
- package/src/unify/statement/unqualified.js +24 -0
- package/src/unify/statementWithBracketedCombinator.js +2 -2
- package/src/unify/statementWithCombinators.js +4 -4
- package/src/unify/statementWithMetaType.js +2 -2
- package/src/unify/statementWithSttaemetnGivenEquivalences.js +51 -0
- package/src/unify/suppositionWithProffStep.js +1 -1
- package/src/unify/variableWithTerm.js +14 -35
- package/src/utilities/array.js +1 -16
- package/src/utilities/assertion.js +19 -0
- package/src/utilities/brackets.js +56 -0
- package/src/utilities/name.js +8 -8
- package/src/utilities/node.js +14 -17
- package/src/utilities/string.js +2 -2
- package/src/utilities/subproof.js +18 -0
- package/src/utilities/unify.js +24 -12
- package/src/variable.js +11 -11
- package/src/verifier/metaLevel.js +5 -5
- package/src/verifier/statementAsCombinator.js +2 -2
- package/src/verify/assertion/contained.js +80 -40
- package/src/verify/assertion/defined.js +66 -57
- package/src/verify/assertion/subproof.js +8 -8
- package/src/verify/assertion/type.js +11 -11
- package/src/verify/conclusion.js +8 -8
- package/src/verify/consequent.js +8 -8
- package/src/verify/declaration/metavariable.js +4 -3
- package/src/verify/declaration.js +46 -23
- package/src/verify/equality.js +13 -13
- package/src/verify/frame.js +48 -28
- package/src/verify/judgement.js +13 -13
- package/src/verify/metavariable.js +3 -3
- package/src/verify/premise.js +6 -6
- package/src/verify/proofStep.js +14 -31
- package/src/verify/statement/qualified.js +18 -199
- package/src/verify/statement/unqualified.js +25 -31
- package/src/verify/statement.js +23 -23
- package/src/verify/statementGivenMetaType.js +23 -12
- package/src/verify/supposition.js +6 -6
- package/lib/unify/statementAtainstStatement.js +0 -49
- package/lib/utilities/lineIndex.js +0 -52
- package/lib/utilities/match.js +0 -59
- package/lib/utilities/verify.js +0 -19
- package/src/unify/statementAtainstStatement.js +0 -56
- package/src/utilities/match.js +0 -53
- package/src/utilities/verify.js +0 -14
- /package/src/utilities/{lineIndex.js → message.js} +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import bracketedTermNode from "../node/term/bracketed";
|
|
4
|
+
import bracketedStatementNode from "../node/statement/bracketed";
|
|
5
|
+
|
|
6
|
+
import { nodeQuery } from "../utilities/query";
|
|
7
|
+
import { BRACKETED_TERM_DEPTH, BRACKETED_STATEMENT_DEPTH } from "../constants";
|
|
8
|
+
|
|
9
|
+
const bracketedTermChildNodeQuery = nodeQuery("/term/argument/term!"),
|
|
10
|
+
bracketedStatementChildNodeQuery = nodeQuery("/statement/metaArgument/statement!");
|
|
11
|
+
|
|
12
|
+
export function stripBracketsFromTerm(statementNode) {
|
|
13
|
+
const bracketedTermChildNode = bracketedTermChildNodeFromTermNode(statementNode);
|
|
14
|
+
|
|
15
|
+
if (bracketedTermChildNode !== null) {
|
|
16
|
+
statementNode = bracketedTermChildNode; ///
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return statementNode;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function stripBracketsFromStatement(statementNode) {
|
|
23
|
+
const bracketedStatementChildNode = bracketedStatementChildNodeFromStatementNode(statementNode);
|
|
24
|
+
|
|
25
|
+
if (bracketedStatementChildNode !== null) {
|
|
26
|
+
statementNode = bracketedStatementChildNode; ///
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return statementNode;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function bracketedTermChildNodeFromTermNode(termNode) {
|
|
33
|
+
let bracketedTermChildNode = null;
|
|
34
|
+
|
|
35
|
+
const depth = BRACKETED_TERM_DEPTH,
|
|
36
|
+
termNodeMatchBracketedTermNode = termNode.match(bracketedTermNode, depth);
|
|
37
|
+
|
|
38
|
+
if (termNodeMatchBracketedTermNode) {
|
|
39
|
+
bracketedTermChildNode = bracketedTermChildNodeQuery(termNode);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return bracketedTermChildNode;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function bracketedStatementChildNodeFromStatementNode(statementNode) {
|
|
46
|
+
let bracketedStatementChildNode = null;
|
|
47
|
+
|
|
48
|
+
const depth = BRACKETED_STATEMENT_DEPTH,
|
|
49
|
+
statementNodeMatchBracketedStatementNode = statementNode.match(bracketedStatementNode, depth);
|
|
50
|
+
|
|
51
|
+
if (statementNodeMatchBracketedStatementNode) {
|
|
52
|
+
bracketedStatementChildNode = bracketedStatementChildNodeQuery(statementNode);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return bracketedStatementChildNode;
|
|
56
|
+
}
|
package/src/utilities/name.js
CHANGED
|
@@ -14,14 +14,6 @@ export function typeNameFromTypeNode(typeNode) {
|
|
|
14
14
|
return typeName;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export function nameFromMetavariableNode(metavariableNode) {
|
|
18
|
-
const nameTerminalNode = nameTerminalNodeQuery(metavariableNode),
|
|
19
|
-
nameTerminalNodeContent = nameTerminalNode.getContent(),
|
|
20
|
-
name = nameTerminalNodeContent; ///
|
|
21
|
-
|
|
22
|
-
return name;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
17
|
export function metaTypeNameFromMetaTypeNode(metaTypeNode) {
|
|
26
18
|
const metaTypeTerminalNode = metaTypeTerminalNodeQuery(metaTypeNode),
|
|
27
19
|
metaTypeTerminalNodeContent = metaTypeTerminalNode.getContent(),
|
|
@@ -29,3 +21,11 @@ export function metaTypeNameFromMetaTypeNode(metaTypeNode) {
|
|
|
29
21
|
|
|
30
22
|
return metaTypeName;
|
|
31
23
|
}
|
|
24
|
+
|
|
25
|
+
export function metavariableNameFromMetavariableNode(metavariableNode) {
|
|
26
|
+
const nameTerminalNode = nameTerminalNodeQuery(metavariableNode),
|
|
27
|
+
nameTerminalNodeContent = nameTerminalNode.getContent(),
|
|
28
|
+
metavariableName = nameTerminalNodeContent; ///
|
|
29
|
+
|
|
30
|
+
return metavariableName;
|
|
31
|
+
}
|
package/src/utilities/node.js
CHANGED
|
@@ -4,8 +4,8 @@ import { parsersUtilities } from "occam-custom-grammars";
|
|
|
4
4
|
|
|
5
5
|
import { nodeQuery } from "../utilities/query";
|
|
6
6
|
import { combinedCustomGrammarFromNothing } from "./customGrammar";
|
|
7
|
-
import { unqualifiedStatementTokensFromStatementString } from "../utilities/tokens";
|
|
8
7
|
import { UNQUALIFIED_STATEMENT_RULE_NAME, CONSTRUCTOR_DECLARATION_RULE_NAME } from "../ruleNames";
|
|
8
|
+
import { constructorDeclarationTokensFromTermString, unqualifiedStatementTokensFromStatementString } from "../utilities/tokens";
|
|
9
9
|
|
|
10
10
|
const { florenceParserFromCombinedCustomGrammar } = parsersUtilities;
|
|
11
11
|
|
|
@@ -15,6 +15,13 @@ const combinedCustomGrammar = combinedCustomGrammarFromNothing(),
|
|
|
15
15
|
const termNodeQuery = nodeQuery("/constructorDeclaration/term!"),
|
|
16
16
|
statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!");
|
|
17
17
|
|
|
18
|
+
export function termNodeFromTermString(termString, lexer, parser) {
|
|
19
|
+
const constructorDeclarationTokens = constructorDeclarationTokensFromTermString(termString, lexer),
|
|
20
|
+
termNode = termNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser);
|
|
21
|
+
|
|
22
|
+
return termNode;
|
|
23
|
+
}
|
|
24
|
+
|
|
18
25
|
export function statementNodeFromStatementString(statementString, lexer, parser) {
|
|
19
26
|
const unqualifiedStatementTokens = unqualifiedStatementTokensFromStatementString(statementString, lexer),
|
|
20
27
|
statementNode = statementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
|
|
@@ -23,37 +30,27 @@ export function statementNodeFromStatementString(statementString, lexer, parser)
|
|
|
23
30
|
}
|
|
24
31
|
|
|
25
32
|
export function termNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const constructorDeclarationNode = constructorDeclarationNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser);
|
|
29
|
-
|
|
30
|
-
if (constructorDeclarationNode !== null) {
|
|
31
|
-
termNode = termNodeQuery(constructorDeclarationNode);
|
|
32
|
-
}
|
|
33
|
+
const constructorDeclarationNode = constructorDeclarationNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser),
|
|
34
|
+
termNode = termNodeQuery(constructorDeclarationNode);
|
|
33
35
|
|
|
34
36
|
return termNode;
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
export function statementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser);
|
|
41
|
-
|
|
42
|
-
if (unqualifiedStatementNode !== null) {
|
|
43
|
-
statementNode = statementNodeQuery(unqualifiedStatementNode);
|
|
44
|
-
}
|
|
40
|
+
const unqualifiedStatementNode = unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser),
|
|
41
|
+
statementNode = statementNodeQuery(unqualifiedStatementNode);
|
|
45
42
|
|
|
46
43
|
return statementNode;
|
|
47
44
|
}
|
|
48
45
|
|
|
49
|
-
|
|
46
|
+
function unqualifiedStatementNodeFromUnqualifiedStatementTokens(unqualifiedStatementTokens, parser) {
|
|
50
47
|
const ruleName = UNQUALIFIED_STATEMENT_RULE_NAME,
|
|
51
48
|
unqualifiedStatementNode = nodeFromTokensRuleNameAndParser(unqualifiedStatementTokens, ruleName, parser);
|
|
52
49
|
|
|
53
50
|
return unqualifiedStatementNode;
|
|
54
51
|
}
|
|
55
52
|
|
|
56
|
-
|
|
53
|
+
function constructorDeclarationNodeFromConstructorDeclarationTokens(constructorDeclarationTokens, parser) {
|
|
57
54
|
const ruleName = CONSTRUCTOR_DECLARATION_RULE_NAME,
|
|
58
55
|
constructorDeclarationNode = nodeFromTokensRuleNameAndParser(constructorDeclarationTokens, ruleName, parser);
|
|
59
56
|
|
package/src/utilities/string.js
CHANGED
|
@@ -36,14 +36,14 @@ export function nodesAsString(nodes, tokens) {
|
|
|
36
36
|
return string;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
function terminalNodeAsString(terminalNode) {
|
|
40
40
|
const content = terminalNode.getContent(),
|
|
41
41
|
string = content; ///
|
|
42
42
|
|
|
43
43
|
return string;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
function nonTerminalNodeAsString(nonTerminalNode, tokens) {
|
|
47
47
|
const lastSignificantTokenIndex = nonTerminalNode.getLastSignificantTokenIndex(tokens),
|
|
48
48
|
firstSignificantTokenIndex = nonTerminalNode.getFirstSignificantTokenIndex(tokens),
|
|
49
49
|
start = firstSignificantTokenIndex, ///
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { nodeQuery, nodesQuery } from "./query";
|
|
4
|
+
import { nodeAsString, nodesAsString } from "./string";
|
|
5
|
+
|
|
6
|
+
const subproofSuppositionStatementNodesQuery = nodesQuery("/subproof/supposition/unqualifiedStatement/statement!"),
|
|
7
|
+
subproofLastProofStepStatementNodeQuery = nodeQuery("/subproof/subDerivation/lastProofStep/unqualifiedStatement|qualifiedStatement/statement!");
|
|
8
|
+
|
|
9
|
+
export function subproofNodeAsSubproofString(subproofNode, localContext) {
|
|
10
|
+
const tokens = localContext.getTokens(),
|
|
11
|
+
subproofSuppositionStatementNodes = subproofSuppositionStatementNodesQuery(subproofNode),
|
|
12
|
+
subproofLastProofStepStatementNode = subproofLastProofStepStatementNodeQuery(subproofNode),
|
|
13
|
+
subproofSuppositionStatementsString = nodesAsString(subproofSuppositionStatementNodes, tokens),
|
|
14
|
+
subproofLastProofStepStatementString = nodeAsString(subproofLastProofStepStatementNode, tokens),
|
|
15
|
+
subproofString = `[${subproofSuppositionStatementsString}]...${subproofLastProofStepStatementString}`;
|
|
16
|
+
|
|
17
|
+
return subproofString;
|
|
18
|
+
}
|
package/src/utilities/unify.js
CHANGED
|
@@ -1,18 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { nodeQuery
|
|
4
|
-
import { nodeAsString, nodesAsString } from "./string";
|
|
3
|
+
import { nodeQuery } from "../utilities/query";
|
|
5
4
|
|
|
6
|
-
const
|
|
7
|
-
|
|
5
|
+
const variableNodeQuery = nodeQuery("/term/variable"),
|
|
6
|
+
metavariableNodeQuery = nodeQuery("/statement/metavariable");
|
|
8
7
|
|
|
9
|
-
export function
|
|
10
|
-
|
|
11
|
-
subproofSuppositionStatementNodes = subproofSuppositionStatementNodesQuery(subproofNode),
|
|
12
|
-
subproofLastProofStepStatementNode = subproofLastProofStepStatementNodeQuery(subproofNode),
|
|
13
|
-
subproofSuppositionStatementsString = nodesAsString(subproofSuppositionStatementNodes, tokens),
|
|
14
|
-
subproofLastProofStepStatementString = nodeAsString(subproofLastProofStepStatementNode, tokens),
|
|
15
|
-
subproofString = `[${subproofSuppositionStatementsString}]...${subproofLastProofStepStatementString}`;
|
|
8
|
+
export function variableFromTermNode(termNode, localContext) {
|
|
9
|
+
let variable = null;
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+
const variableNode = variableNodeQuery(termNode);
|
|
12
|
+
|
|
13
|
+
if (variableNode !== null) {
|
|
14
|
+
variable = localContext.findVariableByVariableNode(variableNode);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return variable;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function metavariableFromStatementNode(statementNode, localContext) {
|
|
21
|
+
let metavariable = null;
|
|
22
|
+
|
|
23
|
+
const metavariableNode = metavariableNodeQuery(statementNode)
|
|
24
|
+
|
|
25
|
+
if (metavariableNode !== null) {
|
|
26
|
+
metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return metavariable;
|
|
18
30
|
}
|
package/src/variable.js
CHANGED
|
@@ -19,31 +19,31 @@ export default class Variable {
|
|
|
19
19
|
match(variable) {
|
|
20
20
|
const type = variable.getType(),
|
|
21
21
|
node = variable.getNode(),
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
matches =
|
|
22
|
+
typeMatches = this.matchType(type),
|
|
23
|
+
nodeMatches = this.matchNode(node),
|
|
24
|
+
matches = nodeMatches && typeMatches;
|
|
25
25
|
|
|
26
26
|
return matches;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
matchNode(node) {
|
|
30
|
-
const
|
|
30
|
+
const nodeMatches = this.node.match(node);
|
|
31
31
|
|
|
32
|
-
return
|
|
32
|
+
return nodeMatches;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
matchType(type) {
|
|
36
|
-
const
|
|
36
|
+
const typeMatches = this.type.match(type);
|
|
37
37
|
|
|
38
|
-
return
|
|
38
|
+
return typeMatches;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
matchNodeAndType(node, type) {
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
const nodeMatches = this.matchNode(node),
|
|
43
|
+
typeNatches = this.matchType(type),
|
|
44
|
+
nodeAndTypeMatch = (nodeMatches && typeNatches);
|
|
45
45
|
|
|
46
|
-
return
|
|
46
|
+
return nodeAndTypeMatch;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
asString(tokens) {
|
|
@@ -9,12 +9,12 @@ const termNodeQuery = nodeQuery("/term!"),
|
|
|
9
9
|
statementNodeQuery = nodeQuery("/statement!");
|
|
10
10
|
|
|
11
11
|
class MetaLevelVerifier extends Verifier {
|
|
12
|
-
verify(node, assignments,
|
|
12
|
+
verify(node, assignments, stated, localContext) {
|
|
13
13
|
let verified;
|
|
14
14
|
|
|
15
15
|
const nonTerminalNode = node, ///
|
|
16
16
|
childNodes = nonTerminalNode.getChildNodes(),
|
|
17
|
-
nonTerminalNodeVerified = this.verifyChildNodes(childNodes, assignments,
|
|
17
|
+
nonTerminalNodeVerified = this.verifyChildNodes(childNodes, assignments, stated, localContext);
|
|
18
18
|
|
|
19
19
|
verified = nonTerminalNodeVerified; ///
|
|
20
20
|
|
|
@@ -24,16 +24,16 @@ class MetaLevelVerifier extends Verifier {
|
|
|
24
24
|
static maps = [
|
|
25
25
|
{
|
|
26
26
|
nodeQuery: statementNodeQuery,
|
|
27
|
-
verify: (statementNode, assignments,
|
|
27
|
+
verify: (statementNode, assignments, stated, localContext) => {
|
|
28
28
|
const { verifyStatement } = shim,
|
|
29
|
-
statementVerified = verifyStatement(statementNode, assignments,
|
|
29
|
+
statementVerified = verifyStatement(statementNode, assignments, stated, localContext);
|
|
30
30
|
|
|
31
31
|
return statementVerified;
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
nodeQuery: termNodeQuery,
|
|
36
|
-
verify: (termNode, assignments,
|
|
36
|
+
verify: (termNode, assignments, stated, localContext) => {
|
|
37
37
|
const { verifyTerm } = shim,
|
|
38
38
|
terms = [],
|
|
39
39
|
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
@@ -29,10 +29,10 @@ class StatementAsCombinatorVerifier extends Verifier {
|
|
|
29
29
|
nodeQuery: statementNodeQuery,
|
|
30
30
|
verify: (statementNode, fileContext) => {
|
|
31
31
|
const { verifyStatement } = shim,
|
|
32
|
-
|
|
32
|
+
stated = false, ///
|
|
33
33
|
assignments = [],
|
|
34
34
|
localContext = LocalContext.fromFileContext(fileContext),
|
|
35
|
-
statementVerified = verifyStatement(statementNode, assignments,
|
|
35
|
+
statementVerified = verifyStatement(statementNode, assignments, stated, localContext);
|
|
36
36
|
|
|
37
37
|
return statementVerified;
|
|
38
38
|
}
|
|
@@ -2,31 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
import metaLevelVerifier from "../../verifier/metaLevel";
|
|
4
4
|
|
|
5
|
-
import { isAssertionNegated } from "../../utilities/
|
|
5
|
+
import { isAssertionNegated } from "../../utilities/assertion";
|
|
6
6
|
import { nodeQuery, nodesQuery } from "../../utilities/query";
|
|
7
7
|
|
|
8
|
-
const
|
|
9
|
-
|
|
8
|
+
const variableNodeQuery = nodeQuery("/containedAssertion/variable!"),
|
|
9
|
+
metavariableNodeQuery = nodeQuery("/containedAssertion/metavariable"),
|
|
10
|
+
statementVariableNodesQuery = nodesQuery("/containedAssertion/statement//variable"),
|
|
11
|
+
statementMetavariableNodesQuery = nodesQuery("/containedAssertion/statement//metavariable");
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
const verifyContainedAssertionFunctions = [
|
|
14
|
+
verifyDerivedContainedAssertion,
|
|
15
|
+
verifyStatedContainedAssertion
|
|
16
|
+
];
|
|
13
17
|
|
|
14
|
-
|
|
18
|
+
export default function verifyContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
|
|
19
|
+
let containedAssertionVerified = false;
|
|
20
|
+
|
|
21
|
+
const containedAssertionString = localContext.nodeAsString(containedAssertionNode),
|
|
22
|
+
savedStated = stated; ///
|
|
15
23
|
|
|
16
24
|
localContext.trace(`Verifying the '${containedAssertionString}' contained assertion...`, containedAssertionNode);
|
|
17
25
|
|
|
18
|
-
|
|
19
|
-
verifyDerivedContainedAssertion,
|
|
20
|
-
verifyStatedContainedAssertion
|
|
21
|
-
];
|
|
26
|
+
assignments = []; ///
|
|
22
27
|
|
|
23
|
-
|
|
24
|
-
const containedAssertionVerified = verifyContainedAssertionFunction(containedAssertionNode, assignments, derived, localContext);
|
|
28
|
+
stated = true; ///
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
const verified = metaLevelVerifier.verify(containedAssertionNode, assignments, stated, localContext);
|
|
31
|
+
|
|
32
|
+
stated = savedStated; ///
|
|
33
|
+
|
|
34
|
+
if (verified) {
|
|
35
|
+
containedAssertionVerified = verifyContainedAssertionFunctions.some((verifyContainedAssertionFunction) => {
|
|
36
|
+
const containedAssertionVerified = verifyContainedAssertionFunction(containedAssertionNode, assignments, stated, localContext);
|
|
37
|
+
|
|
38
|
+
if (containedAssertionVerified) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
30
43
|
|
|
31
44
|
if (containedAssertionVerified) {
|
|
32
45
|
localContext.debug(`...verified the '${containedAssertionString}' contained assertion.`, containedAssertionNode);
|
|
@@ -35,35 +48,62 @@ export default function verifyContainedAssertion(containedAssertionNode, assignm
|
|
|
35
48
|
return containedAssertionVerified;
|
|
36
49
|
}
|
|
37
50
|
|
|
38
|
-
function verifyDerivedContainedAssertion(containedAssertionNode, assignments,
|
|
51
|
+
function verifyDerivedContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
|
|
39
52
|
let derivedContainedAssertionVerified = false;
|
|
40
53
|
|
|
41
|
-
if (
|
|
54
|
+
if (!stated) {
|
|
42
55
|
const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
|
|
43
56
|
|
|
44
57
|
localContext.trace(`Verifying the '${containedAssertionString}' derived contained assertion...`, containedAssertionNode);
|
|
45
58
|
|
|
46
59
|
const assertionNegated = isAssertionNegated(containedAssertionNode),
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
metavariableNode = metavariableNodeQuery(containedAssertionNode),
|
|
61
|
+
variableNode = variableNodeQuery(containedAssertionNode),
|
|
62
|
+
negated = assertionNegated; ///
|
|
63
|
+
|
|
64
|
+
if (false) {
|
|
65
|
+
///
|
|
66
|
+
} else if (metavariableNode !== null) {
|
|
67
|
+
const statementMetavariableNodes = statementMetavariableNodesQuery(containedAssertionNode),
|
|
68
|
+
variableNodeMatchesStatementMetavariableNode = statementMetavariableNodes.some((statementMetavariableNode) => {
|
|
69
|
+
const variableNodeMatchesStatementMetavariableNode = variableNode.match(statementMetavariableNode);
|
|
70
|
+
|
|
71
|
+
if (variableNodeMatchesStatementMetavariableNode) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
if (!negated) {
|
|
77
|
+
if (variableNodeMatchesStatementMetavariableNode) {
|
|
78
|
+
derivedContainedAssertionVerified = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (negated) {
|
|
83
|
+
if (!variableNodeMatchesStatementMetavariableNode) {
|
|
84
|
+
derivedContainedAssertionVerified = true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
} else if (variableNode !== null) {
|
|
88
|
+
const statementVariableNodes = statementVariableNodesQuery(containedAssertionNode),
|
|
89
|
+
variableNodeMatchesStatementVariableNode = statementVariableNodes.some((statementVariableNode) => {
|
|
90
|
+
const variableNodeMatchesStatementVariableNode = variableNode.match(statementVariableNode);
|
|
91
|
+
|
|
92
|
+
if (variableNodeMatchesStatementVariableNode) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
if (!negated) {
|
|
98
|
+
if (variableNodeMatchesStatementVariableNode) {
|
|
99
|
+
derivedContainedAssertionVerified = true;
|
|
100
|
+
}
|
|
61
101
|
}
|
|
62
|
-
}
|
|
63
102
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
103
|
+
if (negated) {
|
|
104
|
+
if (!variableNodeMatchesStatementVariableNode) {
|
|
105
|
+
derivedContainedAssertionVerified = true;
|
|
106
|
+
}
|
|
67
107
|
}
|
|
68
108
|
}
|
|
69
109
|
|
|
@@ -75,15 +115,15 @@ function verifyDerivedContainedAssertion(containedAssertionNode, assignments, de
|
|
|
75
115
|
return derivedContainedAssertionVerified;
|
|
76
116
|
}
|
|
77
117
|
|
|
78
|
-
function verifyStatedContainedAssertion(containedAssertionNode, assignments,
|
|
79
|
-
let statedContainedAssertionVerified
|
|
118
|
+
function verifyStatedContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
|
|
119
|
+
let statedContainedAssertionVerified;
|
|
80
120
|
|
|
81
|
-
if (
|
|
121
|
+
if (stated) {
|
|
82
122
|
const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
|
|
83
123
|
|
|
84
124
|
localContext.trace(`Verifying the '${containedAssertionString}' stated contained assertion...`, containedAssertionNode);
|
|
85
125
|
|
|
86
|
-
|
|
126
|
+
statedContainedAssertionVerified = true;
|
|
87
127
|
|
|
88
128
|
if (statedContainedAssertionVerified) {
|
|
89
129
|
localContext.debug(`...verified the '${containedAssertionString}' stated contained assertion.`, containedAssertionNode);
|