occam-verify-cli 0.0.959 → 0.0.960
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 +16 -5
- package/bin/utilities/releaseContext.js +5 -8
- package/lib/context/file.js +38 -14
- package/lib/context/release.js +82 -52
- package/lib/frame.js +3 -3
- package/lib/index.js +5 -5
- package/lib/metavariable.js +9 -9
- package/lib/proofStep.js +15 -15
- package/lib/releaseContext/create.js +8 -9
- package/lib/releaseContext/initialise.js +67 -0
- package/lib/rule.js +5 -5
- package/lib/substitution/statementForMetavariable.js +8 -8
- package/lib/substitution/termForVariable.js +6 -6
- package/lib/substitution.js +7 -7
- package/lib/substitutions.js +7 -7
- package/lib/topLevelAssertion.js +5 -5
- package/lib/unifier/equality.js +7 -7
- package/lib/unifier/intrinsicLevel.js +4 -4
- package/lib/unifier/metaLevel.js +10 -10
- package/lib/unifier/statementWithCombinator.js +147 -0
- package/lib/unifier/{termAgainstConstructor.js → termWithConstructor.js} +17 -17
- package/lib/unify/conclusionWithStatement.js +34 -0
- package/lib/unify/consequentWithStatement.js +34 -0
- package/lib/unify/metavariableWithStatement.js +74 -0
- package/lib/unify/premiseWithProofStep.js +41 -0
- package/lib/unify/premisesWithProofSteps.js +31 -0
- package/lib/unify/statementAtainstStatement.js +6 -6
- package/lib/unify/statementWithMetaType.js +48 -0
- package/lib/unify/suppositionWithProffStep.js +41 -0
- package/lib/unify/suppositionsWithProofSteps.js +31 -0
- package/lib/unify/termWithTerm.js +21 -0
- package/lib/unify/termWithType.js +32 -0
- package/lib/unify/variableWithTerm.js +54 -0
- package/lib/verify/error.js +2 -2
- package/lib/verify/judgement.js +3 -3
- package/lib/verify/metavariable.js +4 -4
- package/lib/verify/statement/qualified.js +51 -51
- package/lib/verify/statement.js +18 -18
- package/lib/verify/statementAsCombinator.js +2 -2
- package/lib/verify/term.js +25 -25
- package/package.json +1 -1
- package/src/context/file.js +42 -17
- package/src/context/release.js +84 -45
- package/src/frame.js +2 -2
- package/src/index.js +1 -1
- package/src/metavariable.js +6 -6
- package/src/proofStep.js +14 -14
- package/src/releaseContext/create.js +8 -16
- package/src/releaseContext/{verify.js → initialise.js} +32 -23
- package/src/rule.js +4 -4
- package/src/substitution/statementForMetavariable.js +7 -7
- package/src/substitution/termForVariable.js +4 -4
- package/src/substitution.js +5 -5
- package/src/substitutions.js +5 -5
- package/src/topLevelAssertion.js +4 -4
- package/src/unifier/equality.js +6 -6
- package/src/unifier/intrinsicLevel.js +3 -3
- package/src/unifier/metaLevel.js +9 -9
- package/src/unifier/{statementAgainstCombinator.js → statementWithCombinator.js} +12 -12
- package/src/unifier/{termAgainstConstructor.js → termWithConstructor.js} +9 -9
- package/src/unify/{conclusionAgainstStatement.js → conclusionWithStatement.js} +3 -3
- package/src/unify/{consequentAgainstStatement.js → consequentWithStatement.js} +3 -3
- package/src/unify/{metavariableAgainstStatement.js → metavariableWithStatement.js} +12 -12
- package/src/unify/{premiseAgainstProofStep.js → premiseWithProofStep.js} +5 -5
- package/src/unify/{premisesAgainstProofSteps.js → premisesWithProofSteps.js} +3 -3
- package/src/unify/statementAtainstStatement.js +4 -4
- package/src/unify/{statementAgainstMetaType.js → statementWithMetaType.js} +5 -5
- package/src/unify/{suppositionAgainstProofStep.js → suppositionWithProffStep.js} +5 -5
- package/src/unify/{suppositionsAgainstProofSteps.js → suppositionsWithProofSteps.js} +3 -3
- package/src/unify/{termAgainstTerm.js → termWithTerm.js} +4 -4
- package/src/unify/{termAgainstType.js → termWithType.js} +4 -4
- package/src/unify/{variableAgainstTerm.js → variableWithTerm.js} +5 -5
- package/src/verify/error.js +1 -1
- package/src/verify/judgement.js +3 -3
- package/src/verify/metavariable.js +3 -3
- package/src/verify/statement/qualified.js +50 -50
- package/src/verify/statement.js +17 -17
- package/src/verify/statementAsCombinator.js +1 -1
- package/src/verify/term.js +24 -24
- package/lib/releaseContext/verify.js +0 -66
- package/lib/unifier/statementAgainstCombinator.js +0 -147
- package/lib/unify/conclusionAgainstStatement.js +0 -34
- package/lib/unify/consequentAgainstStatement.js +0 -34
- package/lib/unify/metavariableAgainstStatement.js +0 -74
- package/lib/unify/premiseAgainstProofStep.js +0 -41
- package/lib/unify/premisesAgainstProofSteps.js +0 -31
- package/lib/unify/statementAgainstMetaType.js +0 -48
- package/lib/unify/suppositionAgainstProofStep.js +0 -41
- package/lib/unify/suppositionsAgainstProofSteps.js +0 -31
- package/lib/unify/termAgainstTerm.js +0 -21
- package/lib/unify/termAgainstType.js +0 -32
- package/lib/unify/variableAgainstTerm.js +0 -54
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import LocalContext from "../context/local";
|
|
4
|
-
import
|
|
4
|
+
import unifyPremiseWithProofStep from "../unify/premiseWithProofStep";
|
|
5
5
|
|
|
6
6
|
import { reverse, correlate } from "../utilities/array";
|
|
7
7
|
|
|
8
|
-
export default function
|
|
8
|
+
export default function unifyPremisesWithProofSteps(premisesA, proofStepsB, substitutions, fileContextA, localContextB) {
|
|
9
9
|
premisesA = reverse(premisesA); ///
|
|
10
10
|
|
|
11
11
|
proofStepsB = reverse(proofStepsB); ///
|
|
12
12
|
|
|
13
13
|
const premisesUnified = correlate(premisesA, proofStepsB, (premiseA, proofStepB) => {
|
|
14
14
|
const localContextA = LocalContext.fromFileContext(fileContextA),
|
|
15
|
-
premiseUnified =
|
|
15
|
+
premiseUnified = unifyPremiseWithProofStep(premiseA, proofStepB, substitutions, localContextA, localContextB);
|
|
16
16
|
|
|
17
17
|
if (premiseUnified) {
|
|
18
18
|
return true;
|
|
@@ -5,8 +5,8 @@ import TermForVariableSubstitution from "../substitution/termForVariable";
|
|
|
5
5
|
|
|
6
6
|
import { push } from "../utilities/array";
|
|
7
7
|
|
|
8
|
-
export default function
|
|
9
|
-
let
|
|
8
|
+
export default function unifyStatementWithStatement(statementNodeA, statementNodeB, substitution, substitutions, localContextA, localContextB) {
|
|
9
|
+
let statementUnifiedWithtatement = false;
|
|
10
10
|
|
|
11
11
|
const termForVariableSubstitution = TermForVariableSubstitution.fromSubstitutionAndSubstitutions(substitution, substitutions),
|
|
12
12
|
transformed = termForVariableSubstitution.isTransformed(substitution);
|
|
@@ -35,10 +35,10 @@ export default function unifyStatementAgainstStatement(statementNodeA, statement
|
|
|
35
35
|
push(substitutions, substitutionsA);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
statementUnifiedWithtatement = true;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
return
|
|
41
|
+
return statementUnifiedWithtatement;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function transformSubstitutions(substitutionsA, substitutionsB) {
|
|
@@ -8,8 +8,8 @@ import { FRAME_META_TYPE_NAME, STATEMENT_META_TYPE_NAME } from "../metaTypeNames
|
|
|
8
8
|
const metavariableNodeQuery = nodeQuery("/statement/metavariable"),
|
|
9
9
|
metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type!");
|
|
10
10
|
|
|
11
|
-
export default function
|
|
12
|
-
let
|
|
11
|
+
export default function unifyStatementWithMetaType(statementNode, metaTypeNode, localContext) {
|
|
12
|
+
let statementUnifiedWithMetaType = false;
|
|
13
13
|
|
|
14
14
|
const metaTypeTerminalNode = metaTypeTerminalNodeQuery(metaTypeNode),
|
|
15
15
|
metaTypeTerminalNodeContent = metaTypeTerminalNode.getContent(),
|
|
@@ -26,7 +26,7 @@ export default function unifyStatementAgainstMetaType(statementNode, metaTypeNod
|
|
|
26
26
|
const metavariableMetaTypeName = metavariable.getMetaTypeName();
|
|
27
27
|
|
|
28
28
|
if (metavariableMetaTypeName === metaTypeName) {
|
|
29
|
-
|
|
29
|
+
statementUnifiedWithMetaType = true;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -40,11 +40,11 @@ export default function unifyStatementAgainstMetaType(statementNode, metaTypeNod
|
|
|
40
40
|
assignments = [],
|
|
41
41
|
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
statementUnifiedWithMetaType = statementVerified;
|
|
44
44
|
|
|
45
45
|
break;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
return
|
|
49
|
+
return statementUnifiedWithMetaType;
|
|
50
50
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { subproofNodeAsSubproofString } from "../utilities/unify";
|
|
4
4
|
|
|
5
|
-
export default function
|
|
5
|
+
export default function unifySuppositionWithProofStep(suppositionA, proofStepB, substitutions, localContextA, localContextB) {
|
|
6
6
|
let suppositionUnified = false;
|
|
7
7
|
|
|
8
8
|
const suppositionAStatementNode = suppositionA.getStatementNode();
|
|
@@ -20,12 +20,12 @@ export default function unifySuppositionAgainstProofStep(suppositionA, proofStep
|
|
|
20
20
|
if (subproofNodeB !== null) {
|
|
21
21
|
const subproofStringB = subproofNodeAsSubproofString(subproofNodeB, localContextB);
|
|
22
22
|
|
|
23
|
-
localContextB.trace(`Unifying the '${subproofStringB}' subproof
|
|
23
|
+
localContextB.trace(`Unifying the '${subproofStringB}' subproof with the supposition's '${statementStringA}' statement...`, subproofNodeB);
|
|
24
24
|
|
|
25
25
|
const subproofUnified = suppositionA.unifySubproof(subproofNodeB, substitutions, localContextA, localContextB);
|
|
26
26
|
|
|
27
27
|
if (subproofUnified) {
|
|
28
|
-
localContextB.debug(`...unified the '${subproofStringB}' subproof
|
|
28
|
+
localContextB.debug(`...unified the '${subproofStringB}' subproof with the supposition's '${statementStringA}' statement.`, subproofNodeB);
|
|
29
29
|
|
|
30
30
|
suppositionUnified = true;
|
|
31
31
|
}
|
|
@@ -34,12 +34,12 @@ export default function unifySuppositionAgainstProofStep(suppositionA, proofStep
|
|
|
34
34
|
if (statementNodeB !== null) {
|
|
35
35
|
const statementStringB = localContextB.nodeAsString(statementNodeB);
|
|
36
36
|
|
|
37
|
-
localContextB.trace(`Unifying the '${statementStringB}' statement
|
|
37
|
+
localContextB.trace(`Unifying the '${statementStringB}' statement with the supposition's '${statementStringA}' statement...`, statementNodeB);
|
|
38
38
|
|
|
39
39
|
const statementUnified = suppositionA.unifyStatement(statementNodeB, substitutions, localContextA, localContextB);
|
|
40
40
|
|
|
41
41
|
if (statementUnified) {
|
|
42
|
-
localContextB.debug(`...unified the '${statementStringB}' statement
|
|
42
|
+
localContextB.debug(`...unified the '${statementStringB}' statement with the supposition's '${statementStringA}' statement.`, statementNodeB);
|
|
43
43
|
|
|
44
44
|
suppositionUnified = true;
|
|
45
45
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import LocalContext from "../context/local";
|
|
4
|
-
import
|
|
4
|
+
import unifySuppositionWithProofStep from "./suppositionWithProffStep";
|
|
5
5
|
|
|
6
6
|
import { reverse, correlate } from "../utilities/array";
|
|
7
7
|
|
|
8
|
-
export default function
|
|
8
|
+
export default function unifySuppositionsWithProofSteps(suppositionsA, proofStepsB, substitutions, fileContextA, localContextB) {
|
|
9
9
|
suppositionsA = reverse(suppositionsA); ///
|
|
10
10
|
|
|
11
11
|
proofStepsB = reverse(proofStepsB); ///
|
|
12
12
|
|
|
13
13
|
const suppositionsUnified = correlate(suppositionsA, proofStepsB, (suppositionA, proofStepB) => {
|
|
14
14
|
const localContextA = LocalContext.fromFileContext(fileContextA),
|
|
15
|
-
suppositionUnified =
|
|
15
|
+
suppositionUnified = unifySuppositionWithProofStep(suppositionA, proofStepB, substitutions, localContextA, localContextB);
|
|
16
16
|
|
|
17
17
|
if (suppositionUnified) {
|
|
18
18
|
return true;
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
import { areTermNodesEqual } from "../utilities/equivalences";
|
|
4
4
|
|
|
5
|
-
export default function
|
|
6
|
-
let
|
|
5
|
+
export default function unifyTermWithTerm(leftTermNode, rightTermNode, localContext) {
|
|
6
|
+
let termUnifiedWithTerm = false;
|
|
7
7
|
|
|
8
8
|
const equivalences = localContext.getEquivalences(),
|
|
9
9
|
termNodesEqual = areTermNodesEqual(leftTermNode, rightTermNode, equivalences);
|
|
10
10
|
|
|
11
11
|
if (termNodesEqual) {
|
|
12
|
-
|
|
12
|
+
termUnifiedWithTerm = true;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
return
|
|
15
|
+
return termUnifiedWithTerm;
|
|
16
16
|
}
|
|
@@ -4,8 +4,8 @@ import shim from "../shim";
|
|
|
4
4
|
|
|
5
5
|
import { first } from "../utilities/array";
|
|
6
6
|
|
|
7
|
-
export default function
|
|
8
|
-
let
|
|
7
|
+
export default function unifyTermWithType(termNode, typeNode, localContext) {
|
|
8
|
+
let termUnifiedWithType;
|
|
9
9
|
|
|
10
10
|
const { verifyTerm } = shim,
|
|
11
11
|
terms = [],
|
|
@@ -25,7 +25,7 @@ export default function unifyTermAgainstType(termNode, typeNode, localContext) {
|
|
|
25
25
|
return verifiedAhead;
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
termUnifiedWithType = termVerified; ///
|
|
29
29
|
|
|
30
|
-
return
|
|
30
|
+
return termUnifiedWithType;
|
|
31
31
|
}
|
|
@@ -6,8 +6,8 @@ import { nodeQuery } from "../utilities/query";
|
|
|
6
6
|
|
|
7
7
|
const variableNodeQuery = nodeQuery("/term/variable");
|
|
8
8
|
|
|
9
|
-
export default function
|
|
10
|
-
let
|
|
9
|
+
export default function unifyVariableWithTerm(variableNodeA, termNodeB, substitutions, localContextA, localContextB) {
|
|
10
|
+
let variableUnifiedWithTerm = false;
|
|
11
11
|
|
|
12
12
|
const substitution = substitutions.findSubstitution((substitution) => {
|
|
13
13
|
const substitutionMatchesVariableNodeA = substitution.matchVariableNode(variableNodeA);
|
|
@@ -21,7 +21,7 @@ export default function unifyVariableAgainstTerm(variableNodeA, termNodeB, subst
|
|
|
21
21
|
const substitutionMatchesTermNodeB = substitution.matchTermNode(termNodeB);
|
|
22
22
|
|
|
23
23
|
if (substitutionMatchesTermNodeB) {
|
|
24
|
-
|
|
24
|
+
variableUnifiedWithTerm = true;
|
|
25
25
|
}
|
|
26
26
|
} else {
|
|
27
27
|
const variableA = localContextA.findVariableByVariableNode(variableNodeA);
|
|
@@ -38,11 +38,11 @@ export default function unifyVariableAgainstTerm(variableNodeA, termNodeB, subst
|
|
|
38
38
|
substitutions.addSubstitution(substitution, localContextA, localContextB);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
variableUnifiedWithTerm = true;
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
return
|
|
45
|
+
return variableUnifiedWithTerm;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
function variableFromTermNode(termNode, localContext) {
|
package/src/verify/error.js
CHANGED
|
@@ -5,7 +5,7 @@ export default function verifyError(errorNode, fileContext) {
|
|
|
5
5
|
|
|
6
6
|
const errorString = fileContext.nodeAsString(errorNode)
|
|
7
7
|
|
|
8
|
-
fileContext.debug(`The '${errorString}' cannot be verified.`, errorNode);
|
|
8
|
+
fileContext.debug(`The '${errorString}' error cannot be verified.`, errorNode);
|
|
9
9
|
|
|
10
10
|
return errorVerified;
|
|
11
11
|
}
|
package/src/verify/judgement.js
CHANGED
|
@@ -70,10 +70,10 @@ function verifyDerivedJudgement(judgementNode, assignments, derived, localContex
|
|
|
70
70
|
metaLemmaMetatheorem = (metaLemma || metatheorem); ///
|
|
71
71
|
|
|
72
72
|
if (metaLemmaMetatheorem !== null) {
|
|
73
|
-
const
|
|
74
|
-
|
|
73
|
+
const metaLemmaMetatheoremUnifiedWithDeclaration = declaration.unifyMetaLemmaOrMetaTheorem(metaLemmaMetatheorem),
|
|
74
|
+
metaLemmaMetatheoremUnifiedWithJudgement = judgement.unifyMetaLemmaOrMetaTheorem(metaLemmaMetatheorem);
|
|
75
75
|
|
|
76
|
-
derivedJudgementVerified = (
|
|
76
|
+
derivedJudgementVerified = (metaLemmaMetatheoremUnifiedWithDeclaration && metaLemmaMetatheoremUnifiedWithJudgement);
|
|
77
77
|
} else {
|
|
78
78
|
const metavariableString = localContext.nodeAsString(metavariableNode);
|
|
79
79
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { nodeQuery } from "../utilities/query";
|
|
4
|
+
import { unifyTermWithTermType } from "../metavariable";
|
|
4
5
|
import { nameFromMetavariableNode } from "../utilities/name";
|
|
5
|
-
import { unifyTermAgainstTermType } from "../metavariable";
|
|
6
6
|
|
|
7
7
|
const termNodeQuery = nodeQuery("/metavariable/argument/term"),
|
|
8
8
|
typeNodeQuery = nodeQuery("/metavariable/argument/type");
|
|
@@ -43,9 +43,9 @@ export default function verifyMetavariable(metavariableNode, localContext) {
|
|
|
43
43
|
|
|
44
44
|
localContext.debug(`No term was found when the metavariable's term type is '${termTypeName}'.`, termNode);
|
|
45
45
|
} else {
|
|
46
|
-
const
|
|
46
|
+
const termUnifiedWithTermType = unifyTermWithTermType(termNode, termType, localContext);
|
|
47
47
|
|
|
48
|
-
metavariableVerified =
|
|
48
|
+
metavariableVerified = termUnifiedWithTermType; ///
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import verifyEquality from "../equality";
|
|
4
4
|
import verifyJudgement from "../judgement";
|
|
5
5
|
import verifyTypeAssertion from "../assertion/type";
|
|
6
|
-
import
|
|
6
|
+
import unifyMetavariableWithStatement from "../../unify/metavariableWithStatement";
|
|
7
7
|
|
|
8
8
|
import { nodeQuery } from "../../utilities/query";
|
|
9
9
|
|
|
@@ -21,12 +21,12 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
|
|
|
21
21
|
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
|
|
22
22
|
|
|
23
23
|
const unifyQualifiedStatementFunctions = [
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
unifyQualifiedStatementAWithRule,
|
|
25
|
+
unifyQualifiedStatementAWithAxiom,
|
|
26
|
+
unifyQualifiedStatementAWithLemma,
|
|
27
|
+
unifyQualifiedStatementAWithTheorem,
|
|
28
|
+
unifyQualifiedStatementAWithConjecture,
|
|
29
|
+
unifyQualifiedStatementAWithReference
|
|
30
30
|
];
|
|
31
31
|
|
|
32
32
|
const qualifiedStatementUnified = unifyQualifiedStatementFunctions.some((unifyQualifiedStatementFunction) => { ///
|
|
@@ -52,8 +52,8 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
|
|
|
52
52
|
return qualifiedStatementVerified;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
function
|
|
56
|
-
let
|
|
55
|
+
function unifyQualifiedStatementAWithRule(qualifiedStatementNode, substitutions, localContext) {
|
|
56
|
+
let qualifiedStatementUnifiedWithRule = false;
|
|
57
57
|
|
|
58
58
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
59
59
|
rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
@@ -63,22 +63,22 @@ function unifyQualifiedStatementAAgainstRule(qualifiedStatementNode, substitutio
|
|
|
63
63
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
64
64
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
65
65
|
|
|
66
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement
|
|
66
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' rule...`, qualifiedStatementNode);
|
|
67
67
|
|
|
68
68
|
const ruleMatchesStatement = rule.unifyStatement(statementNode, localContext);
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
qualifiedStatementUnifiedWithRule = ruleMatchesStatement; ///
|
|
71
71
|
|
|
72
|
-
if (
|
|
73
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement
|
|
72
|
+
if (qualifiedStatementUnifiedWithRule) {
|
|
73
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' rule.`, qualifiedStatementNode);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
return
|
|
77
|
+
return qualifiedStatementUnifiedWithRule;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
function
|
|
81
|
-
let
|
|
80
|
+
function unifyQualifiedStatementAWithAxiom(qualifiedStatementNode, substitutions, localContext) {
|
|
81
|
+
let qualifiedStatementUnifiedWithAxiom = false;
|
|
82
82
|
|
|
83
83
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
84
84
|
axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
@@ -88,22 +88,22 @@ function unifyQualifiedStatementAAgainstAxiom(qualifiedStatementNode, substituti
|
|
|
88
88
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
89
89
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
90
90
|
|
|
91
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement
|
|
91
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' axiom...`, qualifiedStatementNode);
|
|
92
92
|
|
|
93
93
|
const axiomMatchesStatement = axiom.unifyStatement(statementNode, localContext);
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
qualifiedStatementUnifiedWithAxiom = axiomMatchesStatement; ///
|
|
96
96
|
|
|
97
|
-
if (
|
|
98
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement
|
|
97
|
+
if (qualifiedStatementUnifiedWithAxiom) {
|
|
98
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' axiom.`, qualifiedStatementNode);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
return
|
|
102
|
+
return qualifiedStatementUnifiedWithAxiom;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
function
|
|
106
|
-
let
|
|
105
|
+
function unifyQualifiedStatementAWithLemma(qualifiedStatementNode, substitutions, localContext) {
|
|
106
|
+
let qualifiedStatementUnifiedWithLemma = false;
|
|
107
107
|
|
|
108
108
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
109
109
|
lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
@@ -113,22 +113,22 @@ function unifyQualifiedStatementAAgainstLemma(qualifiedStatementNode, substituti
|
|
|
113
113
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
114
114
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
115
115
|
|
|
116
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement
|
|
116
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' lemma...`, qualifiedStatementNode);
|
|
117
117
|
|
|
118
118
|
const lemmaMatchesStatement = lemma.unifyStatement(statementNode, localContext);
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
qualifiedStatementUnifiedWithLemma = lemmaMatchesStatement; ///
|
|
121
121
|
|
|
122
|
-
if (
|
|
123
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement
|
|
122
|
+
if (qualifiedStatementUnifiedWithLemma) {
|
|
123
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' lemma.`, qualifiedStatementNode);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
return
|
|
127
|
+
return qualifiedStatementUnifiedWithLemma;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
function
|
|
131
|
-
let
|
|
130
|
+
function unifyQualifiedStatementAWithTheorem(qualifiedStatementNode, substitutions, localContext) {
|
|
131
|
+
let qualifiedStatementUnifiedWithTheorem = false;
|
|
132
132
|
|
|
133
133
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
134
134
|
theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
@@ -138,22 +138,22 @@ function unifyQualifiedStatementAAgainstTheorem(qualifiedStatementNode, substitu
|
|
|
138
138
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
139
139
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
140
140
|
|
|
141
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement
|
|
141
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' theorem...`, qualifiedStatementNode);
|
|
142
142
|
|
|
143
143
|
const theoremMatchesStatement = theorem.unifyStatement(statementNode, localContext);
|
|
144
144
|
|
|
145
|
-
|
|
145
|
+
qualifiedStatementUnifiedWithTheorem = theoremMatchesStatement; ///
|
|
146
146
|
|
|
147
|
-
if (
|
|
148
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement
|
|
147
|
+
if (qualifiedStatementUnifiedWithTheorem) {
|
|
148
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' theorem.`, qualifiedStatementNode);
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
return
|
|
152
|
+
return qualifiedStatementUnifiedWithTheorem;
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
function
|
|
156
|
-
let
|
|
155
|
+
function unifyQualifiedStatementAWithConjecture(qualifiedStatementNode, substitutions, localContext) {
|
|
156
|
+
let qualifiedStatementUnifiedWithConjecture = false;
|
|
157
157
|
|
|
158
158
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
159
159
|
conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
@@ -163,29 +163,29 @@ function unifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, subst
|
|
|
163
163
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
164
164
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
165
165
|
|
|
166
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement
|
|
166
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' conjecture...`, qualifiedStatementNode);
|
|
167
167
|
|
|
168
168
|
const conjectureMatchesStatement = conjecture.unifyStatement(statementNode, localContext);
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
qualifiedStatementUnifiedWithConjecture = conjectureMatchesStatement; ///
|
|
171
171
|
|
|
172
|
-
if (
|
|
173
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement
|
|
172
|
+
if (qualifiedStatementUnifiedWithConjecture) {
|
|
173
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' conjecture.`, qualifiedStatementNode);
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
return
|
|
177
|
+
return qualifiedStatementUnifiedWithConjecture;
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
function
|
|
181
|
-
let
|
|
180
|
+
function unifyQualifiedStatementAWithReference(qualifiedStatementNode, substitutions, localContext) {
|
|
181
|
+
let qualifiedStatementUnifiedWithReference = false;
|
|
182
182
|
|
|
183
183
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
184
184
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
185
185
|
metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode),
|
|
186
186
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
187
187
|
|
|
188
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement
|
|
188
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' reference...`, qualifiedStatementNode);
|
|
189
189
|
|
|
190
190
|
if (metavariablePresent) {
|
|
191
191
|
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
@@ -194,20 +194,20 @@ function unifyQualifiedStatementAAgainstReference(qualifiedStatementNode, substi
|
|
|
194
194
|
statementNodeB = statementNode, ///
|
|
195
195
|
substitutionNodeA = null,
|
|
196
196
|
metavariableNodeA = metavariableNode, ///
|
|
197
|
-
|
|
197
|
+
metavariableUnifiedWithStatement = unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, () => {
|
|
198
198
|
const verifiedAhead = true;
|
|
199
199
|
|
|
200
200
|
return verifiedAhead;
|
|
201
201
|
});
|
|
202
202
|
|
|
203
|
-
|
|
203
|
+
qualifiedStatementUnifiedWithReference = metavariableUnifiedWithStatement; ///
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
if (
|
|
207
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement
|
|
206
|
+
if (qualifiedStatementUnifiedWithReference) {
|
|
207
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' reference.`, qualifiedStatementNode);
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
return
|
|
210
|
+
return qualifiedStatementUnifiedWithReference;
|
|
211
211
|
}
|
|
212
212
|
|
|
213
213
|
function verifyStatedStatement(statementNode, assignments, derived, localContext) {
|
package/src/verify/statement.js
CHANGED
|
@@ -9,7 +9,7 @@ import verifyTypeAssertion from "../verify/assertion/type";
|
|
|
9
9
|
import verifyDefinedAssertion from "../verify/assertion/defined";
|
|
10
10
|
import verifySubproofAssertion from "../verify/assertion/subproof";
|
|
11
11
|
import verifyContainedAssertion from "../verify/assertion/contained";
|
|
12
|
-
import
|
|
12
|
+
import statementWithCombinatorUnifier from "../unifier/statementWithCombinator";
|
|
13
13
|
|
|
14
14
|
import { nodeQuery } from "../utilities/query";
|
|
15
15
|
|
|
@@ -28,9 +28,9 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
|
28
28
|
|
|
29
29
|
localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
|
|
30
30
|
|
|
31
|
-
const
|
|
31
|
+
const statementUnifiedWithCombinators = unifyStatementWithCombinators(statementNode, assignments, derived, localContext);
|
|
32
32
|
|
|
33
|
-
if (
|
|
33
|
+
if (statementUnifiedWithCombinators) {
|
|
34
34
|
statementVerified = true;
|
|
35
35
|
} else {
|
|
36
36
|
const verifyStatementFunctions = [
|
|
@@ -41,7 +41,7 @@ function verifyStatement(statementNode, assignments, derived, localContext) {
|
|
|
41
41
|
verifyStatementAsDefinedAssertion,
|
|
42
42
|
verifyStatementAsSubproofAssertion,
|
|
43
43
|
verifyStatementAsContainedAssertion,
|
|
44
|
-
|
|
44
|
+
unifyStatementWithCombinators
|
|
45
45
|
];
|
|
46
46
|
|
|
47
47
|
statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
|
|
@@ -220,8 +220,8 @@ function verifyStatementAsContainedAssertion(statementNode, assignments, derived
|
|
|
220
220
|
return statementVerifiedAsContainedAssertion;
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
function
|
|
224
|
-
let
|
|
223
|
+
function unifyStatementWithCombinators(statementNode, assignments, derived, localContext) {
|
|
224
|
+
let statementUnifiedWithCombinators = false;
|
|
225
225
|
|
|
226
226
|
const equalityNode = equalityNodeQuery(statementNode),
|
|
227
227
|
judgementNode = judgementNodeQuery(statementNode),
|
|
@@ -246,33 +246,33 @@ function unifyStatementAgainstCombinators(statementNode, assignments, derived, l
|
|
|
246
246
|
...combinators
|
|
247
247
|
];
|
|
248
248
|
|
|
249
|
-
|
|
250
|
-
const
|
|
249
|
+
statementUnifiedWithCombinators = combinators.some((combinator) => {
|
|
250
|
+
const statementUnifiedWithCombinator = unifyStatementWithCombinator(statementNode, combinator, localContext);
|
|
251
251
|
|
|
252
|
-
if (
|
|
252
|
+
if (statementUnifiedWithCombinator) {
|
|
253
253
|
return true;
|
|
254
254
|
}
|
|
255
255
|
});
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
return
|
|
258
|
+
return statementUnifiedWithCombinators;
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
-
function
|
|
262
|
-
let
|
|
261
|
+
function unifyStatementWithCombinator(statementNode, combinator, localContext) {
|
|
262
|
+
let statementUnifiedWithCombinator;
|
|
263
263
|
|
|
264
264
|
const statementString = localContext.nodeAsString(statementNode),
|
|
265
265
|
combinatorString = combinator.getString();
|
|
266
266
|
|
|
267
|
-
localContext.trace(`Unifying the '${statementString}' statement
|
|
267
|
+
localContext.trace(`Unifying the '${statementString}' statement with the '${combinatorString}' combinator...`, statementNode);
|
|
268
268
|
|
|
269
269
|
const combinatorStatementNode = combinator.getStatementNode();
|
|
270
270
|
|
|
271
|
-
|
|
271
|
+
statementUnifiedWithCombinator = statementWithCombinatorUnifier.unify(statementNode, combinatorStatementNode, localContext);
|
|
272
272
|
|
|
273
|
-
if (
|
|
274
|
-
localContext.debug(`...unified the '${statementString}' statement
|
|
273
|
+
if (statementUnifiedWithCombinator) {
|
|
274
|
+
localContext.debug(`...unified the '${statementString}' statement with the '${combinatorString}' combinator.`, statementNode);
|
|
275
275
|
}
|
|
276
276
|
|
|
277
|
-
return
|
|
277
|
+
return statementUnifiedWithCombinator;
|
|
278
278
|
}
|
|
@@ -8,7 +8,7 @@ export default function verifyStatementAsCombinator(statementNode, fileContext)
|
|
|
8
8
|
|
|
9
9
|
const statementString = fileContext.nodeAsString(statementNode);
|
|
10
10
|
|
|
11
|
-
fileContext.trace(`Verifying the '${statementString}' statement as a combinator
|
|
11
|
+
fileContext.trace(`Verifying the '${statementString}' statement as a combinator...`, statementNode);
|
|
12
12
|
|
|
13
13
|
statementVerifiedAsCombinator = statementAsCombinatorVerifier.verify(statementNode, fileContext);
|
|
14
14
|
|