occam-verify-cli 0.0.968 → 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 -8
- 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 +7 -7
- 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 +66 -32
- package/lib/verify/assertion/defined.js +51 -46
- 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 +3 -3
- 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 +7 -7
- 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 -38
- package/src/verify/assertion/defined.js +64 -55
- 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 +2 -2
- 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
|
}
|
|
@@ -1,30 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import metaLevelVerifier from "../../verifier/metaLevel";
|
|
4
|
+
|
|
5
|
+
import { isAssertionNegated } from "../../utilities/assertion";
|
|
4
6
|
import { nodeQuery, nodesQuery } from "../../utilities/query";
|
|
5
7
|
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
+
const variableNodeQuery = nodeQuery("/containedAssertion/variable!"),
|
|
9
|
+
metavariableNodeQuery = nodeQuery("/containedAssertion/metavariable"),
|
|
10
|
+
statementVariableNodesQuery = nodesQuery("/containedAssertion/statement//variable"),
|
|
11
|
+
statementMetavariableNodesQuery = nodesQuery("/containedAssertion/statement//metavariable");
|
|
12
|
+
|
|
13
|
+
const verifyContainedAssertionFunctions = [
|
|
14
|
+
verifyDerivedContainedAssertion,
|
|
15
|
+
verifyStatedContainedAssertion
|
|
16
|
+
];
|
|
8
17
|
|
|
9
|
-
export default function verifyContainedAssertion(containedAssertionNode, assignments,
|
|
10
|
-
let containedAssertionVerified;
|
|
18
|
+
export default function verifyContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
|
|
19
|
+
let containedAssertionVerified = false;
|
|
11
20
|
|
|
12
|
-
const containedAssertionString = localContext.nodeAsString(containedAssertionNode)
|
|
21
|
+
const containedAssertionString = localContext.nodeAsString(containedAssertionNode),
|
|
22
|
+
savedStated = stated; ///
|
|
13
23
|
|
|
14
24
|
localContext.trace(`Verifying the '${containedAssertionString}' contained assertion...`, containedAssertionNode);
|
|
15
25
|
|
|
16
|
-
|
|
17
|
-
verifyDerivedContainedAssertion,
|
|
18
|
-
verifyStatedContainedAssertion
|
|
19
|
-
];
|
|
26
|
+
assignments = []; ///
|
|
20
27
|
|
|
21
|
-
|
|
22
|
-
const containedAssertionVerified = verifyContainedAssertionFunction(containedAssertionNode, assignments, derived, localContext);
|
|
28
|
+
stated = true; ///
|
|
23
29
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
+
}
|
|
28
43
|
|
|
29
44
|
if (containedAssertionVerified) {
|
|
30
45
|
localContext.debug(`...verified the '${containedAssertionString}' contained assertion.`, containedAssertionNode);
|
|
@@ -33,35 +48,62 @@ export default function verifyContainedAssertion(containedAssertionNode, assignm
|
|
|
33
48
|
return containedAssertionVerified;
|
|
34
49
|
}
|
|
35
50
|
|
|
36
|
-
function verifyDerivedContainedAssertion(containedAssertionNode, assignments,
|
|
51
|
+
function verifyDerivedContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
|
|
37
52
|
let derivedContainedAssertionVerified = false;
|
|
38
53
|
|
|
39
|
-
if (
|
|
54
|
+
if (!stated) {
|
|
40
55
|
const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
|
|
41
56
|
|
|
42
57
|
localContext.trace(`Verifying the '${containedAssertionString}' derived contained assertion...`, containedAssertionNode);
|
|
43
58
|
|
|
44
59
|
const assertionNegated = isAssertionNegated(containedAssertionNode),
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
+
}
|
|
59
101
|
}
|
|
60
|
-
}
|
|
61
102
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
103
|
+
if (negated) {
|
|
104
|
+
if (!variableNodeMatchesStatementVariableNode) {
|
|
105
|
+
derivedContainedAssertionVerified = true;
|
|
106
|
+
}
|
|
65
107
|
}
|
|
66
108
|
}
|
|
67
109
|
|
|
@@ -73,10 +115,10 @@ function verifyDerivedContainedAssertion(containedAssertionNode, assignments, de
|
|
|
73
115
|
return derivedContainedAssertionVerified;
|
|
74
116
|
}
|
|
75
117
|
|
|
76
|
-
function verifyStatedContainedAssertion(containedAssertionNode, assignments,
|
|
118
|
+
function verifyStatedContainedAssertion(containedAssertionNode, assignments, stated, localContext) {
|
|
77
119
|
let statedContainedAssertionVerified;
|
|
78
120
|
|
|
79
|
-
if (
|
|
121
|
+
if (stated) {
|
|
80
122
|
const containedAssertionString = localContext.nodeAsString(containedAssertionNode);
|
|
81
123
|
|
|
82
124
|
localContext.trace(`Verifying the '${containedAssertionString}' stated contained assertion...`, containedAssertionNode);
|
|
@@ -1,33 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import verifyTerm from "../../verify/term";
|
|
4
|
+
import metaLevelVerifier from "../../verifier/metaLevel";
|
|
4
5
|
|
|
5
6
|
import { first } from "../../utilities/array";
|
|
6
7
|
import { nodeQuery } from "../../utilities/query";
|
|
7
|
-
import { isAssertionNegated } from "../../utilities/
|
|
8
|
+
import { isAssertionNegated } from "../../utilities/assertion";
|
|
8
9
|
|
|
9
|
-
const
|
|
10
|
-
|
|
10
|
+
const variableNodeQuery = nodeQuery("/definedAssertion/variable!"),
|
|
11
|
+
metavariableNodeQuery = nodeQuery("/definedAssertion/metavariable!");
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
const verifyDefinedAssertionFunctions = [
|
|
14
|
+
verifyDerivedDefinedAssertion,
|
|
15
|
+
verifyStatedDefinedAssertion
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
export default function verifyDefinedAssertion(definedAssertionNode, assignments, stated, localContext) {
|
|
13
19
|
let definedAssertionVerified;
|
|
14
20
|
|
|
15
21
|
const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
|
|
16
22
|
|
|
17
23
|
localContext.trace(`Verifying the '${definedAssertionString}' defined assertion...`, definedAssertionNode);
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
verifyDerivedDefinedAssertion,
|
|
21
|
-
verifyStatedDefinedAssertion
|
|
22
|
-
];
|
|
25
|
+
assignments = []; ///
|
|
23
26
|
|
|
24
|
-
|
|
25
|
-
const definedAssertionVerified = verifyDefinedAssertionFunction(definedAssertionNode, assignments, derived, localContext);
|
|
27
|
+
const verified = metaLevelVerifier.verify(definedAssertionNode, assignments, stated, localContext);
|
|
26
28
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
if (verified) {
|
|
30
|
+
definedAssertionVerified = verifyDefinedAssertionFunctions.some((verifyDefinedAssertionFunction) => {
|
|
31
|
+
const definedAssertionVerified = verifyDefinedAssertionFunction(definedAssertionNode, assignments, stated, localContext);
|
|
32
|
+
|
|
33
|
+
if (definedAssertionVerified) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
31
38
|
|
|
32
39
|
if (definedAssertionVerified) {
|
|
33
40
|
localContext.debug(`...verified the '${definedAssertionString}' defined assertion.`, definedAssertionNode);
|
|
@@ -36,61 +43,48 @@ export default function verifyDefinedAssertion(definedAssertionNode, assignments
|
|
|
36
43
|
return definedAssertionVerified;
|
|
37
44
|
}
|
|
38
45
|
|
|
39
|
-
function verifyDerivedDefinedAssertion(definedAssertionNode, assignments,
|
|
46
|
+
function verifyDerivedDefinedAssertion(definedAssertionNode, assignments, stated, localContext) {
|
|
40
47
|
let derivedDefinedAssertionVerified = false;
|
|
41
48
|
|
|
42
|
-
if (
|
|
49
|
+
if (!stated) {
|
|
43
50
|
const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
|
|
44
51
|
|
|
45
52
|
localContext.trace(`Verifying the '${definedAssertionString}' derived defined assertion...`, definedAssertionNode);
|
|
46
53
|
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
const assertionNegated = isAssertionNegated(definedAssertionNode),
|
|
55
|
+
metavariableNode = metavariableNodeQuery(definedAssertionNode),
|
|
56
|
+
variableNode = variableNodeQuery(definedAssertionNode);
|
|
50
57
|
|
|
51
58
|
if (false) {
|
|
52
59
|
///
|
|
53
|
-
} else if (
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
if (variable !== null) {
|
|
57
|
-
const variableDefined = localContext.isVariableDefined(variable);
|
|
60
|
+
} else if (metavariableNode !== null) {
|
|
61
|
+
const metavariable = localContext.findMetavariableByMetavariableNode(metavariableNode),
|
|
62
|
+
metavariableDefined = localContext.isMetavariableDefined(metavariable);
|
|
58
63
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
64
|
+
if (!assertionNegated) {
|
|
65
|
+
if (metavariableDefined) {
|
|
66
|
+
derivedDefinedAssertionVerified = true;
|
|
63
67
|
}
|
|
68
|
+
}
|
|
64
69
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
70
|
+
if (assertionNegated) {
|
|
71
|
+
if (!metavariableDefined) {
|
|
72
|
+
derivedDefinedAssertionVerified = true;
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
|
-
} else if (
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (termVerified) {
|
|
80
|
-
const firstTerm = first(terms),
|
|
81
|
-
term = firstTerm, ///
|
|
82
|
-
termGrounded = localContext.isTermGrounded(term);
|
|
83
|
-
|
|
84
|
-
if (!statementNegated) {
|
|
85
|
-
if (termGrounded) {
|
|
86
|
-
derivedDefinedAssertionVerified = true;
|
|
87
|
-
}
|
|
75
|
+
} else if (variableNode !== null) {
|
|
76
|
+
const variable = localContext.findVariableByVariableNode(variableNode),
|
|
77
|
+
variableDefined = localContext.isVariableDefined(variable);
|
|
78
|
+
|
|
79
|
+
if (!assertionNegated) {
|
|
80
|
+
if (variableDefined) {
|
|
81
|
+
derivedDefinedAssertionVerified = true;
|
|
88
82
|
}
|
|
83
|
+
}
|
|
89
84
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
85
|
+
if (assertionNegated) {
|
|
86
|
+
if (!variableDefined) {
|
|
87
|
+
derivedDefinedAssertionVerified = true;
|
|
94
88
|
}
|
|
95
89
|
}
|
|
96
90
|
}
|
|
@@ -103,10 +97,10 @@ function verifyDerivedDefinedAssertion(definedAssertionNode, assignments, derive
|
|
|
103
97
|
return derivedDefinedAssertionVerified;
|
|
104
98
|
}
|
|
105
99
|
|
|
106
|
-
function verifyStatedDefinedAssertion(definedAssertionNode, assignments,
|
|
100
|
+
function verifyStatedDefinedAssertion(definedAssertionNode, assignments, stated, localContext) {
|
|
107
101
|
let statedDefinedAssertionVerified;
|
|
108
102
|
|
|
109
|
-
if (
|
|
103
|
+
if (stated) {
|
|
110
104
|
const definedAssertionString = localContext.nodeAsString(definedAssertionNode);
|
|
111
105
|
|
|
112
106
|
localContext.trace(`Verifying the '${definedAssertionString}' stated defined assertion...`, definedAssertionNode);
|
|
@@ -120,3 +114,18 @@ function verifyStatedDefinedAssertion(definedAssertionNode, assignments, derived
|
|
|
120
114
|
|
|
121
115
|
return statedDefinedAssertionVerified;
|
|
122
116
|
}
|
|
117
|
+
|
|
118
|
+
function termFromTermNode(termNode, localContext) {
|
|
119
|
+
const terms = [];
|
|
120
|
+
|
|
121
|
+
verifyTerm(termNode, terms, localContext, () => {
|
|
122
|
+
const verifiedAhead = true;
|
|
123
|
+
|
|
124
|
+
return verifiedAhead;
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const firstTerm = first(terms),
|
|
128
|
+
term = firstTerm; ///
|
|
129
|
+
|
|
130
|
+
return term;
|
|
131
|
+
}
|