occam-verify-cli 1.0.437 → 1.0.444
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/context/file.js +38 -35
- package/lib/context/local.js +10 -10
- package/lib/context/release.js +6 -6
- package/lib/context/temporary.js +14 -14
- package/lib/element/assertion/contained.js +45 -45
- package/lib/element/assertion/defined.js +13 -13
- package/lib/element/assertion/property.js +23 -22
- package/lib/element/assertion/satisfies.js +7 -6
- package/lib/element/assertion/subproof.js +20 -17
- package/lib/element/assertion/type.js +3 -2
- package/lib/element/assertion.js +1 -23
- package/lib/element/assumption.js +24 -22
- package/lib/element/axiom.js +9 -12
- package/lib/element/axiomLemmaTheoremConjecture.js +32 -32
- package/lib/element/{statement/combinator → combinator}/bracketed.js +16 -16
- package/lib/element/combinator.js +229 -0
- package/lib/element/conclusion.js +11 -9
- package/lib/element/{term/constructor → constructor}/bracketed.js +5 -5
- package/lib/element/constructor.js +232 -0
- package/lib/element/declaration/combinator.js +2 -16
- package/lib/element/declaration/complexType.js +12 -12
- package/lib/element/declaration/constructor.js +13 -11
- package/lib/element/declaration/simpleType.js +4 -4
- package/lib/element/declaration/typePrefix.js +2 -2
- package/lib/element/declaration/variable.js +3 -3
- package/lib/element/deduction.js +11 -9
- package/lib/element/derivation.js +5 -8
- package/lib/element/equivalence.js +10 -10
- package/lib/element/equivalences.js +5 -5
- package/lib/element/frame.js +32 -38
- package/lib/element/hypothesis.js +3 -3
- package/lib/element/judgement.js +6 -4
- package/lib/element/label.js +16 -18
- package/lib/element/metaLemmaMetatheorem.js +5 -5
- package/lib/element/metaType.js +17 -80
- package/lib/element/metavariable.js +34 -34
- package/lib/element/parameter.js +3 -3
- package/lib/element/premise.js +43 -52
- package/lib/element/property.js +9 -9
- package/lib/element/propertyRelation.js +13 -13
- package/lib/element/reference.js +14 -17
- package/lib/element/rule.js +26 -50
- package/lib/element/signature.js +11 -11
- package/lib/element/statement.js +54 -56
- package/lib/element/step.js +79 -51
- package/lib/element/subDerivation.js +7 -10
- package/lib/element/subproof.js +6 -14
- package/lib/element/substitution/frame.js +1 -7
- package/lib/element/substitution/reference.js +2 -3
- package/lib/element/substitution/statement.js +44 -15
- package/lib/element/substitution/term.js +10 -57
- package/lib/element/substitution.js +5 -11
- package/lib/element/substitutions.js +29 -29
- package/lib/element/supposition.js +63 -55
- package/lib/element/term.js +21 -34
- package/lib/element/type.js +47 -60
- package/lib/element/typePrefix.js +5 -5
- package/lib/element/variable.js +9 -9
- package/lib/element.js +27 -3
- package/lib/metaTypes.js +52 -0
- package/lib/node/axiomLemmaTheoremConjecture.js +9 -9
- package/lib/node/body/axiom.js +2 -25
- package/lib/node/body/conjecture.js +2 -25
- package/lib/node/body/lemma.js +2 -25
- package/lib/node/body/metaLemma.js +2 -25
- package/lib/node/body/metatheorem.js +2 -25
- package/lib/node/body/rule.js +15 -1
- package/lib/node/body/theorem.js +2 -25
- package/lib/node/body.js +25 -2
- package/lib/node/combinator.js +11 -2
- package/lib/node/constructor.js +11 -2
- package/lib/node/declaration/combinator.js +5 -5
- package/lib/node/declaration/constructor.js +8 -8
- package/lib/node/declaration/property.js +15 -15
- package/lib/node/declaration/simpleType.js +31 -31
- package/lib/node/declaration/variable.js +8 -8
- package/lib/node/equality.js +8 -8
- package/lib/node/frame.js +20 -20
- package/lib/node/header.js +22 -22
- package/lib/node/metaLemmaMetaTheorem.js +16 -16
- package/lib/node/metavariable.js +15 -15
- package/lib/node/property.js +8 -8
- package/lib/node/propertyRelation.js +8 -8
- package/lib/node/rule.js +16 -16
- package/lib/node/statement.js +12 -12
- package/lib/node/step.js +22 -22
- package/lib/node/subproof.js +8 -8
- package/lib/node/substitution/frame.js +19 -19
- package/lib/node/substitution/statement.js +19 -19
- package/lib/node/substitution/term.js +19 -19
- package/lib/node/term.js +35 -35
- package/lib/preamble.js +5 -5
- package/lib/process/instantiate.js +20 -2
- package/lib/process/unify.js +39 -42
- package/lib/process/validate.js +431 -0
- package/lib/process/verify.js +44 -135
- package/lib/types.js +27 -0
- package/lib/utilities/brackets.js +4 -4
- package/lib/utilities/element.js +100 -61
- package/lib/utilities/instance.js +18 -18
- package/lib/utilities/statement.js +11 -16
- package/lib/utilities/string.js +21 -10
- package/lib/utilities/unification.js +237 -0
- package/lib/utilities/validation.js +251 -0
- package/package.json +6 -6
- package/src/context/file.js +37 -31
- package/src/context/local.js +8 -8
- package/src/context/release.js +9 -6
- package/src/context/temporary.js +11 -11
- package/src/element/assertion/contained.js +19 -20
- package/src/element/assertion/defined.js +11 -12
- package/src/element/assertion/property.js +20 -20
- package/src/element/assertion/satisfies.js +6 -6
- package/src/element/assertion/subproof.js +17 -15
- package/src/element/assertion/type.js +2 -2
- package/src/element/assertion.js +0 -2
- package/src/element/assumption.js +22 -19
- package/src/element/axiom.js +7 -11
- package/src/element/axiomLemmaTheoremConjecture.js +36 -36
- package/src/element/{statement/combinator → combinator}/bracketed.js +7 -7
- package/src/element/combinator.js +90 -0
- package/src/element/conclusion.js +12 -10
- package/src/element/{term/constructor → constructor}/bracketed.js +5 -5
- package/src/element/{term/constructor.js → constructor.js} +17 -25
- package/src/element/declaration/combinator.js +1 -22
- package/src/element/declaration/complexType.js +11 -11
- package/src/element/declaration/constructor.js +13 -10
- package/src/element/declaration/simpleType.js +3 -3
- package/src/element/declaration/typePrefix.js +1 -1
- package/src/element/declaration/variable.js +2 -2
- package/src/element/deduction.js +12 -9
- package/src/element/derivation.js +4 -8
- package/src/element/equivalence.js +8 -8
- package/src/element/equivalences.js +4 -4
- package/src/element/frame.js +28 -30
- package/src/element/hypothesis.js +2 -2
- package/src/element/judgement.js +6 -3
- package/src/element/label.js +14 -21
- package/src/element/metaLemmaMetatheorem.js +4 -3
- package/src/element/metaType.js +9 -45
- package/src/element/metavariable.js +29 -31
- package/src/element/parameter.js +2 -2
- package/src/element/premise.js +56 -62
- package/src/element/property.js +6 -6
- package/src/element/propertyRelation.js +11 -11
- package/src/element/reference.js +12 -21
- package/src/element/rule.js +28 -72
- package/src/element/signature.js +10 -9
- package/src/element/statement.js +69 -56
- package/src/element/step.js +89 -51
- package/src/element/subDerivation.js +6 -10
- package/src/element/subproof.js +4 -12
- package/src/element/substitution/frame.js +0 -2
- package/src/element/substitution/reference.js +1 -5
- package/src/element/substitution/statement.js +44 -14
- package/src/element/substitution/term.js +10 -13
- package/src/element/substitution.js +3 -5
- package/src/element/substitutions.js +48 -30
- package/src/element/supposition.js +88 -70
- package/src/element/term.js +18 -28
- package/src/element/type.js +42 -36
- package/src/element/typePrefix.js +3 -3
- package/src/element/variable.js +7 -7
- package/src/element.js +15 -1
- package/src/metaTypes.js +42 -0
- package/src/node/axiomLemmaTheoremConjecture.js +6 -6
- package/src/node/body/axiom.js +0 -21
- package/src/node/body/conjecture.js +0 -23
- package/src/node/body/lemma.js +0 -23
- package/src/node/body/metaLemma.js +0 -23
- package/src/node/body/metatheorem.js +0 -23
- package/src/node/body/rule.js +12 -0
- package/src/node/body/theorem.js +0 -23
- package/src/node/body.js +23 -0
- package/src/node/combinator.js +9 -0
- package/src/node/constructor.js +9 -0
- package/src/node/declaration/combinator.js +5 -5
- package/src/node/declaration/constructor.js +8 -8
- package/src/node/declaration/property.js +14 -14
- package/src/node/declaration/simpleType.js +31 -31
- package/src/node/declaration/variable.js +7 -7
- package/src/node/equality.js +7 -7
- package/src/node/frame.js +21 -21
- package/src/node/header.js +22 -22
- package/src/node/metaLemmaMetaTheorem.js +14 -14
- package/src/node/metavariable.js +14 -14
- package/src/node/property.js +7 -7
- package/src/node/propertyRelation.js +7 -7
- package/src/node/rule.js +15 -15
- package/src/node/statement.js +12 -12
- package/src/node/step.js +21 -21
- package/src/node/subproof.js +7 -7
- package/src/node/substitution/frame.js +18 -18
- package/src/node/substitution/statement.js +18 -18
- package/src/node/substitution/term.js +18 -18
- package/src/node/term.js +34 -34
- package/src/preamble.js +4 -4
- package/src/process/instantiate.js +12 -0
- package/src/process/unify.js +53 -57
- package/src/process/validate.js +316 -0
- package/src/process/verify.js +50 -138
- package/src/types.js +18 -0
- package/src/utilities/brackets.js +10 -6
- package/src/utilities/element.js +138 -91
- package/src/utilities/instance.js +18 -18
- package/src/utilities/statement.js +27 -28
- package/src/utilities/string.js +34 -20
- package/src/{mixins/step/unify.js → utilities/unification.js} +82 -68
- package/src/utilities/validation.js +369 -0
- package/lib/element/statement/combinator.js +0 -105
- package/lib/element/term/constructor.js +0 -172
- package/lib/mixins/statement/verify.js +0 -198
- package/lib/mixins/step/unify.js +0 -228
- package/lib/mixins/term/verify.js +0 -65
- package/src/element/statement/combinator.js +0 -59
- package/src/mixins/statement/verify.js +0 -295
- package/src/mixins/term/verify.js +0 -81
|
@@ -5,13 +5,6 @@ import SubstitutionNode from "../../node/substitution";
|
|
|
5
5
|
import { TERM_RULE_NAME } from "../../ruleNames";
|
|
6
6
|
|
|
7
7
|
export default class TermSubstitutionNode extends SubstitutionNode {
|
|
8
|
-
getVariableNode() {
|
|
9
|
-
const lastVariableNode = this.getLastVariableNode(),
|
|
10
|
-
variableNode = lastVariableNode; ///
|
|
11
|
-
|
|
12
|
-
return variableNode;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
8
|
getTermNode() {
|
|
16
9
|
const firstTermNode = this.getFirstTermNode(),
|
|
17
10
|
termNode = firstTermNode; ///
|
|
@@ -19,18 +12,11 @@ export default class TermSubstitutionNode extends SubstitutionNode {
|
|
|
19
12
|
return termNode;
|
|
20
13
|
}
|
|
21
14
|
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return lastTermNode;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
getFirstTermNode() {
|
|
30
|
-
const ruleName = TERM_RULE_NAME,
|
|
31
|
-
firstTermNode = this.getFirstNodeByRuleName(ruleName);
|
|
15
|
+
getVariableNode() {
|
|
16
|
+
const lastVariableNode = this.getLastVariableNode(),
|
|
17
|
+
variableNode = lastVariableNode; ///
|
|
32
18
|
|
|
33
|
-
return
|
|
19
|
+
return variableNode;
|
|
34
20
|
}
|
|
35
21
|
|
|
36
22
|
getLastVariableNode() {
|
|
@@ -49,6 +35,20 @@ export default class TermSubstitutionNode extends SubstitutionNode {
|
|
|
49
35
|
return firstVariableNode;
|
|
50
36
|
}
|
|
51
37
|
|
|
38
|
+
getLastTermNode() {
|
|
39
|
+
const ruleName = TERM_RULE_NAME,
|
|
40
|
+
lastTermNode = this.getLastNodeByRuleName(ruleName);
|
|
41
|
+
|
|
42
|
+
return lastTermNode;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
getFirstTermNode() {
|
|
46
|
+
const ruleName = TERM_RULE_NAME,
|
|
47
|
+
firstTermNode = this.getFirstNodeByRuleName(ruleName);
|
|
48
|
+
|
|
49
|
+
return firstTermNode;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
52
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return SubstitutionNode.fromRuleNameChildNodesOpacityAndPrecedence(TermSubstitutionNode, ruleName, childNodes, opacity, precedence); }
|
|
53
53
|
}
|
|
54
54
|
|
package/src/node/term.js
CHANGED
|
@@ -5,27 +5,6 @@ import NonTerminalNode from "../nonTerminalNode";
|
|
|
5
5
|
import { ARGUMENT_RULE_NAME, VARIABLE_RULE_NAME } from "../ruleNames";
|
|
6
6
|
|
|
7
7
|
export default class TermNode extends NonTerminalNode {
|
|
8
|
-
getVariableIdentifier() {
|
|
9
|
-
let variableIdentifier = null;
|
|
10
|
-
|
|
11
|
-
const singular = this.isSingular();
|
|
12
|
-
|
|
13
|
-
if (singular) {
|
|
14
|
-
const singularVariableNode = this.getSingularVariableNode();
|
|
15
|
-
|
|
16
|
-
variableIdentifier = singularVariableNode.getVariableIdentifier();
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return variableIdentifier;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
getVariableNode() {
|
|
23
|
-
const singularVariableNode = this.getSingularVariableNode(),
|
|
24
|
-
variableNode = singularVariableNode; //
|
|
25
|
-
|
|
26
|
-
return variableNode;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
8
|
isSingular() {
|
|
30
9
|
let singular = false;
|
|
31
10
|
|
|
@@ -38,11 +17,11 @@ export default class TermNode extends NonTerminalNode {
|
|
|
38
17
|
return singular;
|
|
39
18
|
}
|
|
40
19
|
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
|
|
20
|
+
getVariableNode() {
|
|
21
|
+
const singularVariableNode = this.getSingularVariableNode(),
|
|
22
|
+
variableNode = singularVariableNode; //
|
|
44
23
|
|
|
45
|
-
return
|
|
24
|
+
return variableNode;
|
|
46
25
|
}
|
|
47
26
|
|
|
48
27
|
getSingularTermNode() {
|
|
@@ -57,18 +36,18 @@ export default class TermNode extends NonTerminalNode {
|
|
|
57
36
|
return singularTermNode;
|
|
58
37
|
}
|
|
59
38
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
singularArgumentNode = this.getSingularNodeByRuleName(ruleName);
|
|
39
|
+
getVariableIdentifier() {
|
|
40
|
+
let variableIdentifier = null;
|
|
63
41
|
|
|
64
|
-
|
|
65
|
-
}
|
|
42
|
+
const singular = this.isSingular();
|
|
66
43
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
singularVariableNode = this.getSingularNodeByRuleName(ruleName);
|
|
44
|
+
if (singular) {
|
|
45
|
+
const singularVariableNode = this.getSingularVariableNode();
|
|
70
46
|
|
|
71
|
-
|
|
47
|
+
variableIdentifier = singularVariableNode.getVariableIdentifier();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return variableIdentifier;
|
|
72
51
|
}
|
|
73
52
|
|
|
74
53
|
getSingularVariableIdentifier() {
|
|
@@ -85,5 +64,26 @@ export default class TermNode extends NonTerminalNode {
|
|
|
85
64
|
return singularVariableIdentifier;
|
|
86
65
|
}
|
|
87
66
|
|
|
67
|
+
getVariableNodes() {
|
|
68
|
+
const ruleName = VARIABLE_RULE_NAME,
|
|
69
|
+
variableNodes = this.getNodesByRuleName(ruleName);
|
|
70
|
+
|
|
71
|
+
return variableNodes;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
getSingularArgumentNode() {
|
|
75
|
+
const ruleName = ARGUMENT_RULE_NAME,
|
|
76
|
+
singularArgumentNode = this.getSingularNodeByRuleName(ruleName);
|
|
77
|
+
|
|
78
|
+
return singularArgumentNode;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
getSingularVariableNode() {
|
|
82
|
+
const ruleName = VARIABLE_RULE_NAME,
|
|
83
|
+
singularVariableNode = this.getSingularNodeByRuleName(ruleName);
|
|
84
|
+
|
|
85
|
+
return singularVariableNode;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
88
|
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return NonTerminalNode.fromRuleNameChildNodesOpacityAndPrecedence(TermNode, ruleName, childNodes, opacity, precedence); }
|
|
89
89
|
}
|
package/src/preamble.js
CHANGED
|
@@ -31,6 +31,8 @@ import Conclusion from "./element/conclusion";
|
|
|
31
31
|
import Derivation from "./element/derivation";
|
|
32
32
|
import Hypothesis from "./element/hypothesis";
|
|
33
33
|
import Assumption from "./element/assumption";
|
|
34
|
+
import Combinator from "./element/combinator";
|
|
35
|
+
import Constructor from "./element/constructor";
|
|
34
36
|
import Supposition from "./element/supposition";
|
|
35
37
|
import Metatheorem from "./element/metatheorem";
|
|
36
38
|
import Equivalence from "./element/equivalence";
|
|
@@ -40,7 +42,6 @@ import Substitutions from "./element/substitutions";
|
|
|
40
42
|
import ProcedureCall from "./element/procedureCall";
|
|
41
43
|
import SubDerivation from "./element/subDerivation";
|
|
42
44
|
import TypeAssertion from "./element/assertion/type";
|
|
43
|
-
import ConstructorTerm from "./element/term/constructor";
|
|
44
45
|
import PropertyRelation from "./element/propertyRelation";
|
|
45
46
|
import DefinedAssertion from "./element/assertion/defined";
|
|
46
47
|
import TermSubstitution from "./element/substitution/term";
|
|
@@ -51,7 +52,8 @@ import ProcedureReference from "./element/procedureReference";
|
|
|
51
52
|
import ContainedAssertion from "./element/assertion/contained";
|
|
52
53
|
import SatisfiesAssertion from "./element/assertion/satisfies";
|
|
53
54
|
import VariableDeclaration from "./element/declaration/variable";
|
|
54
|
-
import
|
|
55
|
+
import BracketedCombinator from "./element/combinator/bracketed";
|
|
56
|
+
import BracketedConstructor from "./element/constructor/bracketed";
|
|
55
57
|
import SimpleTypeDeclaration from "./element/declaration/simpleType";
|
|
56
58
|
import StatementSubstitution from "./element/substitution/statement";
|
|
57
59
|
import ReferenceSubstitution from "./element/substitution/reference";
|
|
@@ -60,5 +62,3 @@ import TypePrefixDeclaration from "./element/declaration/typePrefix";
|
|
|
60
62
|
import ConstructorDeclaration from "./element/declaration/constructor";
|
|
61
63
|
import ComplexTypeDeclaration from "./element/declaration/complexType";
|
|
62
64
|
import MetavariableDeclaration from "./element/declaration/metavariable";
|
|
63
|
-
import BracketedConstructorTerm from "./element/term/constructor/bracketed";
|
|
64
|
-
import BracketedCombinatorStatement from "./element/statement/combinator/bracketed";
|
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
import { ruleFromBNF } from "../utilities/bnf";
|
|
4
4
|
|
|
5
5
|
const termPlaceholderBNF = ` _ ::= term... <END_OF_LINE> ; `,
|
|
6
|
+
stepPlaceholderBNF = ` _ ::= step... <END_OF_LINE> ; `,
|
|
6
7
|
variablePlaceholderBNF = ` _ ::= variable... <END_OF_LINE> ; `,
|
|
7
8
|
referencePlaceholderBNF = ` _ ::= reference... <END_OF_LINE> ; `,
|
|
8
9
|
statementPlaceholderBNF = ` _ ::= statement... <END_OF_LINE> ; `,
|
|
10
|
+
combinatorPlaceholderBNF = ` _ ::= combinator... <END_OF_LINE> ; `,
|
|
11
|
+
constructorPlaceholderBNF = ` _ ::= constructor... <END_OF_LINE> ; `,
|
|
9
12
|
equivalencePlaceholderBNF = ` _ ::= equivalence... <END_OF_LINE> ; `,
|
|
10
13
|
metavariablePlaceholderBNF = ` _ ::= metavariable... <END_OF_LINE> ; `,
|
|
11
14
|
termSubstitutionPlaceholderBNF = ` _ ::= termSubstitution... <END_OF_LINE> ; `,
|
|
@@ -13,9 +16,12 @@ const termPlaceholderBNF = ` _ ::= term... <END_OF_LINE> ; `,
|
|
|
13
16
|
statementSubstitutionPlaceholderBNF = ` _ ::= statementSubstitution... <END_OF_LINE> ; `,
|
|
14
17
|
referenceSubstitutionPlaceholderBNF = ` _ ::= referenceSubstitution... <END_OF_LINE> ; `,
|
|
15
18
|
termPlaceholderRule = ruleFromBNF(termPlaceholderBNF),
|
|
19
|
+
stepPlaceholderRule = ruleFromBNF(stepPlaceholderBNF),
|
|
16
20
|
variablePlaceholderRule = ruleFromBNF(variablePlaceholderBNF),
|
|
17
21
|
referencePlaceholderRule = ruleFromBNF(referencePlaceholderBNF),
|
|
18
22
|
statementPlaceholderRule = ruleFromBNF(statementPlaceholderBNF),
|
|
23
|
+
combinatorPlaceholderRule = ruleFromBNF(combinatorPlaceholderBNF),
|
|
24
|
+
constructorPlaceholderRule = ruleFromBNF(constructorPlaceholderBNF),
|
|
19
25
|
equivalencePlaceholderRule = ruleFromBNF(equivalencePlaceholderBNF),
|
|
20
26
|
metavariablePlaceholderRule = ruleFromBNF(metavariablePlaceholderBNF),
|
|
21
27
|
termSubstitutionPlaceholderRule = ruleFromBNF(termSubstitutionPlaceholderBNF),
|
|
@@ -25,12 +31,18 @@ const termPlaceholderBNF = ` _ ::= term... <END_OF_LINE> ; `,
|
|
|
25
31
|
|
|
26
32
|
export function instantiateTerm(string, context) { return instantiate(termPlaceholderRule, string, context); }
|
|
27
33
|
|
|
34
|
+
export function instantiateStep(string, context) { return instantiate(stepPlaceholderRule, string, context); }
|
|
35
|
+
|
|
28
36
|
export function instantiateVariable(string, context) { return instantiate(variablePlaceholderRule, string, context); }
|
|
29
37
|
|
|
30
38
|
export function instantiateReference(string, context) { return instantiate(referencePlaceholderRule, string, context); }
|
|
31
39
|
|
|
32
40
|
export function instantiateStatement(string, context) { return instantiate(statementPlaceholderRule, string, context); }
|
|
33
41
|
|
|
42
|
+
export function instantiateCombinator(string, context) { return instantiate(combinatorPlaceholderRule, string, context); }
|
|
43
|
+
|
|
44
|
+
export function instantiateConstructor(string, context) { return instantiate(constructorPlaceholderRule, string, context); }
|
|
45
|
+
|
|
34
46
|
export function instantiateEquivalence(string, context) { return instantiate(equivalencePlaceholderRule, string, context); }
|
|
35
47
|
|
|
36
48
|
export function instantiateMetavariable(string, context) { return instantiate(metavariablePlaceholderRule, string, context); }
|
package/src/process/unify.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import elements from "../elements";
|
|
4
|
-
|
|
5
3
|
import { nodeQuery } from "../utilities/query";
|
|
4
|
+
import { termFromTermNode, frameFromFrameNode, statementFromStatementNode } from "../utilities/element";
|
|
6
5
|
import { terminalNodeMapFromNodes, areTerminalNodeMapsEqual, isLastRemainingArgumentFunction } from "../utilities/pass";
|
|
7
6
|
|
|
8
7
|
const nonTerminalNodeQuery = nodeQuery("/*");
|
|
@@ -29,7 +28,7 @@ class Pass {
|
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
descend(generalChildNodes, specificChildNodes, ...remainingArguments) {
|
|
32
|
-
let
|
|
31
|
+
let descended = false;
|
|
33
32
|
|
|
34
33
|
const generalChildNodesLength = generalChildNodes.length,
|
|
35
34
|
specificChildNodesLength = specificChildNodes.length;
|
|
@@ -43,9 +42,12 @@ class Pass {
|
|
|
43
42
|
const lastRemainingArgumentFunction = isLastRemainingArgumentFunction(remainingArguments);
|
|
44
43
|
|
|
45
44
|
if (lastRemainingArgumentFunction) {
|
|
46
|
-
const index = 0
|
|
45
|
+
const index = 0,
|
|
46
|
+
descendedAhead = this.descendAhead(index, generalChildNodes, specificChildNodes,...remainingArguments);
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
if (descendedAhead) {
|
|
49
|
+
descended = true;
|
|
50
|
+
}
|
|
49
51
|
} else {
|
|
50
52
|
const visited = generalChildNodes.every((generalChildNode, index) => {
|
|
51
53
|
const specificChildNode = specificChildNodes[index],
|
|
@@ -59,13 +61,13 @@ class Pass {
|
|
|
59
61
|
});
|
|
60
62
|
|
|
61
63
|
if (visited) {
|
|
62
|
-
|
|
64
|
+
descended = true;
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
}
|
|
67
69
|
|
|
68
|
-
return
|
|
70
|
+
return descended;
|
|
69
71
|
}
|
|
70
72
|
|
|
71
73
|
descendAhead(index, generalChildNodes, specificChildNodes, ...remainingArguments) {
|
|
@@ -346,11 +348,10 @@ class CombinatorPass extends Pass {
|
|
|
346
348
|
|
|
347
349
|
context = specificContext; ///
|
|
348
350
|
|
|
349
|
-
const
|
|
350
|
-
|
|
351
|
-
statementVerifiesGivenType = statement.verifyGivenMetaType(metaType, assignments, stated, context);
|
|
351
|
+
const statement = statementFromStatementNode(statementNode, context),
|
|
352
|
+
statementValidatesGivenType = statement.validateGivenMetaType(metaType, assignments, stated, context);
|
|
352
353
|
|
|
353
|
-
if (
|
|
354
|
+
if (statementValidatesGivenType) {
|
|
354
355
|
success = true;
|
|
355
356
|
}
|
|
356
357
|
|
|
@@ -375,11 +376,10 @@ class CombinatorPass extends Pass {
|
|
|
375
376
|
|
|
376
377
|
context = specificContext; ///
|
|
377
378
|
|
|
378
|
-
const
|
|
379
|
-
|
|
380
|
-
frameVerifiesGivenType = frame.verifyGivenMetaType(metaType, assignments, stated, context);
|
|
379
|
+
const frame = frameFromFrameNode(frameNode, context),
|
|
380
|
+
frameValidatesGivenMetaType = frame.validateGivenMetaType(metaType, assignments, stated, context);
|
|
381
381
|
|
|
382
|
-
if (
|
|
382
|
+
if (frameValidatesGivenMetaType) {
|
|
383
383
|
success = true;
|
|
384
384
|
}
|
|
385
385
|
|
|
@@ -405,11 +405,10 @@ class CombinatorPass extends Pass {
|
|
|
405
405
|
if (type !== null) {
|
|
406
406
|
context = specificContext; ///
|
|
407
407
|
|
|
408
|
-
const
|
|
409
|
-
|
|
410
|
-
termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
|
|
408
|
+
const term = termFromTermNode(termNode, context),
|
|
409
|
+
termValidatesGivenType = term.validateGivenType(type, generalContext, specificContext);
|
|
411
410
|
|
|
412
|
-
if (
|
|
411
|
+
if (termValidatesGivenType) {
|
|
413
412
|
success = true;
|
|
414
413
|
}
|
|
415
414
|
}
|
|
@@ -441,11 +440,10 @@ class ConstructorPass extends Pass {
|
|
|
441
440
|
if (type !== null) {
|
|
442
441
|
context = specificContext; ///
|
|
443
442
|
|
|
444
|
-
const
|
|
445
|
-
|
|
446
|
-
termVerifiesGivenType = term.verifyGivenType(type, generalContext, specificContext);
|
|
443
|
+
const term = termFromTermNode(termNode, context),
|
|
444
|
+
termValidatesGivenType = term.validateGivenType(type, generalContext, specificContext);
|
|
447
445
|
|
|
448
|
-
if (
|
|
446
|
+
if (termValidatesGivenType) {
|
|
449
447
|
success = true;
|
|
450
448
|
}
|
|
451
449
|
}
|
|
@@ -470,9 +468,9 @@ class MetavariablePass extends Pass {
|
|
|
470
468
|
type = generalContext.findTypeByNominalTypeName(nominalTypeName),
|
|
471
469
|
context = specificContext, ///
|
|
472
470
|
term = context.findTermByTermNode(termNode),
|
|
473
|
-
|
|
471
|
+
termValidatesGivenType = term.validateGivenType(type, generalContext, specificContext);
|
|
474
472
|
|
|
475
|
-
if (
|
|
473
|
+
if (termValidatesGivenType) {
|
|
476
474
|
success = true;
|
|
477
475
|
}
|
|
478
476
|
|
|
@@ -567,6 +565,21 @@ export function unifyMetavariable(generalMetavariable, specificMetavariable, gen
|
|
|
567
565
|
return metavariableUnifies;
|
|
568
566
|
}
|
|
569
567
|
|
|
568
|
+
export function unifyTermWithConstructor(term, constructor, generalContext, specificContext) {
|
|
569
|
+
let termUnifiesWithConstructor = false;
|
|
570
|
+
|
|
571
|
+
const termNode = term.getNode(),
|
|
572
|
+
constructorTerm = constructor.getTerm(),
|
|
573
|
+
constructorTermNode = constructorTerm.getNode(),
|
|
574
|
+
success = constructorPass.run(constructorTermNode, termNode, generalContext, specificContext);
|
|
575
|
+
|
|
576
|
+
if (success) {
|
|
577
|
+
termUnifiesWithConstructor = true;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
return termUnifiesWithConstructor;
|
|
581
|
+
}
|
|
582
|
+
|
|
570
583
|
export function unifyStatementIntrinsically(generalStatement, specificStatement, substitutions, generalContext, specificContext) {
|
|
571
584
|
let statementUnifiesIntrinsically = false;
|
|
572
585
|
|
|
@@ -583,6 +596,21 @@ export function unifyStatementIntrinsically(generalStatement, specificStatement,
|
|
|
583
596
|
return statementUnifiesIntrinsically;
|
|
584
597
|
}
|
|
585
598
|
|
|
599
|
+
export function unifyStatementWithCombinator(statement, combinator, assignments, stated, generalContext, specificContext) {
|
|
600
|
+
let statementUnifiesWithCombinator = false;
|
|
601
|
+
|
|
602
|
+
const statementNode = statement.getNode(),
|
|
603
|
+
combinatorStatement = combinator.getStatement(),
|
|
604
|
+
combinatorStatementNode = combinatorStatement.getNode(),
|
|
605
|
+
success = combinatorPass.run(combinatorStatementNode, statementNode, assignments, stated, generalContext, specificContext);
|
|
606
|
+
|
|
607
|
+
if (success) {
|
|
608
|
+
statementUnifiesWithCombinator = true;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
return statementUnifiesWithCombinator;
|
|
612
|
+
}
|
|
613
|
+
|
|
586
614
|
export function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariable, substitutions, generalContext, specificContext) {
|
|
587
615
|
let metavariableUnifiesIntrinsically = false;
|
|
588
616
|
|
|
@@ -598,35 +626,3 @@ export function unifyMetavariableIntrinsically(generalMetavariable, specificMeta
|
|
|
598
626
|
|
|
599
627
|
return metavariableUnifiesIntrinsically;
|
|
600
628
|
}
|
|
601
|
-
|
|
602
|
-
export function unifyTermWithConstructorTerm(term, constructorTerm, context) {
|
|
603
|
-
let termUnifiesWithConstructor = false;
|
|
604
|
-
|
|
605
|
-
const termNode = term.getNode(),
|
|
606
|
-
generalContext = context, ///
|
|
607
|
-
specificContext = context, ///
|
|
608
|
-
constructorTermNode = constructorTerm.getNode(),
|
|
609
|
-
success = constructorPass.run(constructorTermNode, termNode, generalContext, specificContext);
|
|
610
|
-
|
|
611
|
-
if (success) {
|
|
612
|
-
termUnifiesWithConstructor = true;
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
return termUnifiesWithConstructor;
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
export function unifyStatementWithCombinatorStatement(statement, combinatorStatement, assignments, stated, context) {
|
|
619
|
-
let statementUnifiesWithCombinator = false;
|
|
620
|
-
|
|
621
|
-
const statementNode = statement.getNode(),
|
|
622
|
-
generalContext = context, ///
|
|
623
|
-
specificContext = context, ///
|
|
624
|
-
combinatorStatementNode = combinatorStatement.getNode(),
|
|
625
|
-
success = combinatorPass.run(combinatorStatementNode, statementNode, assignments, stated, generalContext, specificContext);
|
|
626
|
-
|
|
627
|
-
if (success) {
|
|
628
|
-
statementUnifiesWithCombinator = true;
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
return statementUnifiesWithCombinator;
|
|
632
|
-
}
|