occam-verify-cli 0.0.960 → 0.0.962
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/local.js +3 -9
- package/lib/proofStep.js +8 -5
- package/lib/substitution/termForVariable.js +24 -25
- package/lib/unifier/statementWithCombinator.js +6 -6
- package/lib/unify/statementAtainstStatement.js +16 -16
- package/lib/unify/statementWithBracketedCombinator.js +30 -0
- package/lib/unify/statementWithCombinators.js +40 -0
- package/lib/unify/statementWithMetaType.js +6 -30
- package/lib/unify/termWithBracketedConstructor.js +39 -0
- package/lib/unify/termWithConstructors.js +61 -0
- package/lib/unify/termWithType.js +4 -12
- package/lib/utilities/assignments.js +9 -12
- package/lib/verifier/intrinsicLevel.js +140 -0
- package/lib/verifier/metaLevel.js +11 -20
- package/lib/verifier/statementAsCombinator.js +9 -9
- package/lib/verifier/termAsConstructor.js +5 -5
- package/lib/verify/assertion/contained.js +2 -3
- package/lib/verify/assertion/defined.js +2 -4
- package/lib/verify/assertion/subproof.js +20 -18
- package/lib/verify/assertion/type.js +1 -2
- package/lib/verify/declaration.js +27 -9
- package/lib/verify/frame.js +25 -6
- package/lib/verify/premise.js +3 -3
- package/lib/verify/proofStep.js +23 -30
- package/lib/verify/statement/qualified.js +93 -137
- package/lib/verify/statement/unqualified.js +18 -104
- package/lib/verify/statement.js +95 -76
- package/lib/verify/statementAsCombinator.js +2 -2
- package/lib/verify/statementGivenMetaType.js +41 -0
- package/lib/verify/supposition.js +3 -3
- package/lib/verify/term.js +39 -65
- package/lib/verify/termAsConstructor.js +2 -2
- package/lib/verify/termGivenType.js +34 -0
- package/package.json +1 -1
- package/src/context/local.js +4 -13
- package/src/proofStep.js +10 -5
- package/src/substitution/termForVariable.js +33 -30
- package/src/unifier/statementWithCombinator.js +5 -5
- package/src/unify/statementAtainstStatement.js +13 -13
- package/src/unify/statementWithBracketedCombinator.js +22 -0
- package/src/unify/statementWithCombinators.js +38 -0
- package/src/unify/statementWithMetaType.js +6 -42
- package/src/unify/termWithBracketedConstructor.js +39 -0
- package/src/unify/termWithConstructors.js +63 -0
- package/src/unify/termWithType.js +4 -20
- package/src/utilities/assignments.js +6 -13
- package/src/verifier/intrinsicLevel.js +42 -0
- package/src/verifier/metaLevel.js +13 -21
- package/src/verifier/statementAsCombinator.js +11 -7
- package/src/verifier/termAsConstructor.js +4 -3
- package/src/verify/assertion/contained.js +1 -3
- package/src/verify/assertion/defined.js +1 -4
- package/src/verify/assertion/subproof.js +22 -18
- package/src/verify/assertion/type.js +0 -1
- package/src/verify/declaration.js +34 -11
- package/src/verify/frame.js +32 -5
- package/src/verify/premise.js +3 -3
- package/src/verify/proofStep.js +26 -38
- package/src/verify/statement/qualified.js +104 -184
- package/src/verify/statement/unqualified.js +19 -149
- package/src/verify/statement.js +126 -72
- package/src/verify/statementAsCombinator.js +1 -1
- package/src/verify/statementGivenMetaType.js +37 -0
- package/src/verify/supposition.js +3 -3
- package/src/verify/term.js +44 -93
- package/src/verify/termAsConstructor.js +1 -1
- package/src/verify/termGivenType.js +32 -0
package/src/verify/premise.js
CHANGED
|
@@ -5,7 +5,7 @@ import ProofStep from "../proofStep";
|
|
|
5
5
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
6
6
|
|
|
7
7
|
import { nodeQuery } from "../utilities/query";
|
|
8
|
-
import {
|
|
8
|
+
import { assignAssignments } from "../utilities/assignments";
|
|
9
9
|
|
|
10
10
|
const statementNodeQuery = nodeQuery("/unqualifiedStatement/statement!"),
|
|
11
11
|
unqualifiedStatementNodeQuery = nodeQuery("/premise/unqualifiedStatement!");
|
|
@@ -25,9 +25,9 @@ export default function verifyPremise(premiseNode, premises, localContext) {
|
|
|
25
25
|
unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
26
26
|
|
|
27
27
|
if (unqualifiedStatementVerified) {
|
|
28
|
-
const
|
|
28
|
+
const assignmentsAssigned = assignAssignments(assignments, localContext);
|
|
29
29
|
|
|
30
|
-
if (
|
|
30
|
+
if (assignmentsAssigned) {
|
|
31
31
|
const statementNode = statementNodeQuery(unqualifiedStatementNode),
|
|
32
32
|
metaproofStep = ProofStep.fromStatementNode(statementNode),
|
|
33
33
|
premise = Premise.fromStatementNode(statementNode);
|
package/src/verify/proofStep.js
CHANGED
|
@@ -7,7 +7,7 @@ import verifyQualifiedStatement from "../verify/statement/qualified";
|
|
|
7
7
|
import verifyUnqualifiedStatement from "../verify/statement/unqualified";
|
|
8
8
|
|
|
9
9
|
import { nodeQuery } from "../utilities/query";
|
|
10
|
-
import {
|
|
10
|
+
import { assignAssignments } from "../utilities/assignments";
|
|
11
11
|
|
|
12
12
|
const subproofNodeQuery = nodeQuery("/proofStep|lastProofStep/subproof!"),
|
|
13
13
|
statementNodeQuery = nodeQuery("/qualifiedStatement|unqualifiedStatement/statement!"),
|
|
@@ -21,63 +21,51 @@ export default function verifyProofStep(proofStepNode, substitutions, localConte
|
|
|
21
21
|
qualifiedStatementNode = qualifiedStatementNodeQuery(proofStepNode),
|
|
22
22
|
unqualifiedStatementNode = unqualifiedStatementNodeQuery(proofStepNode);
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
let proofStep = null;
|
|
25
|
+
|
|
26
|
+
if (subproofNode !== null) {
|
|
27
27
|
let subproofVerified;
|
|
28
28
|
|
|
29
29
|
subproofVerified = verifySubproof(subproofNode, substitutions, localContext);
|
|
30
30
|
|
|
31
31
|
if (subproofVerified) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
localContext.addProofStep(proofStep);
|
|
35
|
-
|
|
36
|
-
proofStepVerified = true;
|
|
32
|
+
proofStep = ProofStep.fromSubproofNode(subproofNode);
|
|
37
33
|
}
|
|
38
|
-
} else
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const assignments = [];
|
|
34
|
+
} else {
|
|
35
|
+
const derived = true,
|
|
36
|
+
assignments = [];
|
|
42
37
|
|
|
43
|
-
|
|
38
|
+
let statementVerified = false;
|
|
44
39
|
|
|
45
|
-
if (
|
|
46
|
-
const
|
|
40
|
+
if (qualifiedStatementNode !== null) {
|
|
41
|
+
const qualifiedStatementVerified = verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, derived, localContext);
|
|
47
42
|
|
|
48
|
-
|
|
49
|
-
}
|
|
43
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode);
|
|
50
44
|
|
|
51
|
-
|
|
52
|
-
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
53
|
-
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
45
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
54
46
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
proofStepVerified = true;
|
|
47
|
+
statementVerified = qualifiedStatementVerified; ///
|
|
58
48
|
}
|
|
59
|
-
} else if (unqualifiedStatementNode !== null) {
|
|
60
|
-
let unqualifiedStatementVerified;
|
|
61
49
|
|
|
62
|
-
|
|
63
|
-
|
|
50
|
+
if (unqualifiedStatementNode !== null) {
|
|
51
|
+
const unqualifiedStatementVerified = verifyUnqualifiedStatement(unqualifiedStatementNode, assignments, derived, localContext);
|
|
64
52
|
|
|
65
|
-
|
|
53
|
+
const statementNode = statementNodeQuery(unqualifiedStatementNode);
|
|
66
54
|
|
|
67
|
-
|
|
68
|
-
const assignmentAssigned = assignAssignment(assignments, localContext);
|
|
55
|
+
proofStep = ProofStep.fromStatementNode(statementNode);
|
|
69
56
|
|
|
70
|
-
|
|
57
|
+
statementVerified = unqualifiedStatementVerified; ///
|
|
71
58
|
}
|
|
72
59
|
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
|
|
60
|
+
if (statementVerified) {
|
|
61
|
+
assignAssignments(assignments, localContext);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
76
64
|
|
|
77
|
-
|
|
65
|
+
if (proofStep !== null) {
|
|
66
|
+
localContext.addProofStep(proofStep);
|
|
78
67
|
|
|
79
|
-
|
|
80
|
-
}
|
|
68
|
+
proofStepVerified = true;
|
|
81
69
|
}
|
|
82
70
|
|
|
83
71
|
return proofStepVerified;
|
|
@@ -1,48 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
import verifyJudgement from "../judgement";
|
|
5
|
-
import verifyTypeAssertion from "../assertion/type";
|
|
6
|
-
import unifyMetavariableWithStatement from "../../unify/metavariableWithStatement";
|
|
3
|
+
import verifyStatement from "../../verify/statement";
|
|
7
4
|
|
|
8
5
|
import { nodeQuery } from "../../utilities/query";
|
|
9
6
|
|
|
10
7
|
const statementNodeQuery = nodeQuery("/qualifiedStatement/statement!"),
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
metavariableNodeQuery = nodeQuery("/qualifiedStatement/reference/metavariable!");
|
|
9
|
+
|
|
10
|
+
const unifyDerivedQualifiedStatementFunctions = [
|
|
11
|
+
unifyDerivedQualifiedStatementAWithRule,
|
|
12
|
+
unifyDerivedQualifiedStatementAWithAxiom,
|
|
13
|
+
unifyDerivedQualifiedStatementAWithLemma,
|
|
14
|
+
unifyDerivedQualifiedStatementAWithTheorem,
|
|
15
|
+
unifyDerivedQualifiedStatementAWithConjecture,
|
|
16
|
+
unifyDerivedQualifiedStatementAWithReference
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
export default function verifyQualifiedStatement(qualifiedStatementNode, substitutions, assignments, derived, localContext) {
|
|
17
20
|
let qualifiedStatementVerified;
|
|
18
21
|
|
|
19
22
|
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
20
23
|
|
|
21
24
|
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement...`, qualifiedStatementNode);
|
|
22
25
|
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
unifyQualifiedStatementAWithAxiom,
|
|
26
|
-
unifyQualifiedStatementAWithLemma,
|
|
27
|
-
unifyQualifiedStatementAWithTheorem,
|
|
28
|
-
unifyQualifiedStatementAWithConjecture,
|
|
29
|
-
unifyQualifiedStatementAWithReference
|
|
30
|
-
];
|
|
26
|
+
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
27
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext);
|
|
31
28
|
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
if (statementVerified) {
|
|
30
|
+
if (derived) {
|
|
31
|
+
const derivedQualifiedStatementVerified = verifyDerivedQualifiedStatement(qualifiedStatementNode, substitutions, localContext);
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
qualifiedStatementVerified = derivedQualifiedStatementVerified; ///
|
|
34
|
+
} else {
|
|
35
|
+
qualifiedStatementVerified = true;
|
|
37
36
|
}
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
if (qualifiedStatementUnified) {
|
|
41
|
-
const derived = false,
|
|
42
|
-
statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
43
|
-
statedStatementVerified = verifyStatedStatement(statementNode, assignments, derived, localContext);
|
|
44
|
-
|
|
45
|
-
qualifiedStatementVerified = statedStatementVerified; ///
|
|
46
37
|
}
|
|
47
38
|
|
|
48
39
|
if (qualifiedStatementVerified) {
|
|
@@ -52,8 +43,30 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, substit
|
|
|
52
43
|
return qualifiedStatementVerified;
|
|
53
44
|
}
|
|
54
45
|
|
|
55
|
-
function
|
|
56
|
-
let
|
|
46
|
+
function verifyDerivedQualifiedStatement(qualifiedStatementNode, substitutions, localContext) {
|
|
47
|
+
let derivedQualifiedStatementVerified;
|
|
48
|
+
|
|
49
|
+
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
50
|
+
|
|
51
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' derived qualified statement...`, qualifiedStatementNode);
|
|
52
|
+
|
|
53
|
+
const derivedQualifiedStatementUnified = unifyDerivedQualifiedStatementFunctions.some((unifyDerivedQualifiedStatementFunction) => {
|
|
54
|
+
const derivedQualifiedStatementUnified = unifyDerivedQualifiedStatementFunction(qualifiedStatementNode, substitutions, localContext);
|
|
55
|
+
|
|
56
|
+
return derivedQualifiedStatementUnified;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
derivedQualifiedStatementVerified = derivedQualifiedStatementUnified; ///
|
|
60
|
+
|
|
61
|
+
if (derivedQualifiedStatementVerified) {
|
|
62
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' derived qualified statement.`, qualifiedStatementNode);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return derivedQualifiedStatementVerified;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function unifyDerivedQualifiedStatementAWithRule(qualifiedStatementNode, substitutions, localContext) {
|
|
69
|
+
let derivedQualifiedStatementUnifiedWithRule = false;
|
|
57
70
|
|
|
58
71
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
59
72
|
rule = localContext.findRuleByMetavariableNode(metavariableNode);
|
|
@@ -63,22 +76,22 @@ function unifyQualifiedStatementAWithRule(qualifiedStatementNode, substitutions,
|
|
|
63
76
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
64
77
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
65
78
|
|
|
66
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' rule...`, qualifiedStatementNode);
|
|
79
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' rule...`, qualifiedStatementNode);
|
|
67
80
|
|
|
68
|
-
const
|
|
81
|
+
const statementUnified = rule.unifyStatement(statementNode, localContext);
|
|
69
82
|
|
|
70
|
-
|
|
83
|
+
derivedQualifiedStatementUnifiedWithRule = statementUnified; ///
|
|
71
84
|
|
|
72
|
-
if (
|
|
73
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' rule.`, qualifiedStatementNode);
|
|
85
|
+
if (derivedQualifiedStatementUnifiedWithRule) {
|
|
86
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' rule.`, qualifiedStatementNode);
|
|
74
87
|
}
|
|
75
88
|
}
|
|
76
89
|
|
|
77
|
-
return
|
|
90
|
+
return derivedQualifiedStatementUnifiedWithRule;
|
|
78
91
|
}
|
|
79
92
|
|
|
80
|
-
function
|
|
81
|
-
let
|
|
93
|
+
function unifyDerivedQualifiedStatementAWithAxiom(qualifiedStatementNode, substitutions, localContext) {
|
|
94
|
+
let derivedQualifiedStatementUnifiedWithAxiom = false;
|
|
82
95
|
|
|
83
96
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
84
97
|
axiom = localContext.findAxiomByMetavariableNode(metavariableNode);
|
|
@@ -88,22 +101,22 @@ function unifyQualifiedStatementAWithAxiom(qualifiedStatementNode, substitutions
|
|
|
88
101
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
89
102
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
90
103
|
|
|
91
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' axiom...`, qualifiedStatementNode);
|
|
104
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' axiom...`, qualifiedStatementNode);
|
|
92
105
|
|
|
93
|
-
const
|
|
106
|
+
const statementUnified = axiom.unifyStatement(statementNode, localContext);
|
|
94
107
|
|
|
95
|
-
|
|
108
|
+
derivedQualifiedStatementUnifiedWithAxiom = statementUnified; ///
|
|
96
109
|
|
|
97
|
-
if (
|
|
98
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' axiom.`, qualifiedStatementNode);
|
|
110
|
+
if (derivedQualifiedStatementUnifiedWithAxiom) {
|
|
111
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' axiom.`, qualifiedStatementNode);
|
|
99
112
|
}
|
|
100
113
|
}
|
|
101
114
|
|
|
102
|
-
return
|
|
115
|
+
return derivedQualifiedStatementUnifiedWithAxiom;
|
|
103
116
|
}
|
|
104
117
|
|
|
105
|
-
function
|
|
106
|
-
let
|
|
118
|
+
function unifyDerivedQualifiedStatementAWithLemma(qualifiedStatementNode, substitutions, localContext) {
|
|
119
|
+
let derivedQualifiedStatementUnifiedWithLemma = false;
|
|
107
120
|
|
|
108
121
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
109
122
|
lemma = localContext.findLemmaByMetavariableNode(metavariableNode);
|
|
@@ -113,22 +126,22 @@ function unifyQualifiedStatementAWithLemma(qualifiedStatementNode, substitutions
|
|
|
113
126
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
114
127
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
115
128
|
|
|
116
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' lemma...`, qualifiedStatementNode);
|
|
129
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' lemma...`, qualifiedStatementNode);
|
|
117
130
|
|
|
118
|
-
const
|
|
131
|
+
const statementUnified = lemma.unifyStatement(statementNode, localContext);
|
|
119
132
|
|
|
120
|
-
|
|
133
|
+
derivedQualifiedStatementUnifiedWithLemma = statementUnified; ///
|
|
121
134
|
|
|
122
|
-
if (
|
|
123
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' lemma.`, qualifiedStatementNode);
|
|
135
|
+
if (derivedQualifiedStatementUnifiedWithLemma) {
|
|
136
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' lemma.`, qualifiedStatementNode);
|
|
124
137
|
}
|
|
125
138
|
}
|
|
126
139
|
|
|
127
|
-
return
|
|
140
|
+
return derivedQualifiedStatementUnifiedWithLemma;
|
|
128
141
|
}
|
|
129
142
|
|
|
130
|
-
function
|
|
131
|
-
let
|
|
143
|
+
function unifyDerivedQualifiedStatementAWithTheorem(qualifiedStatementNode, substitutions, localContext) {
|
|
144
|
+
let derivedQualifiedStatementUnifiedWithTheorem = false;
|
|
132
145
|
|
|
133
146
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
134
147
|
theorem = localContext.findTheoremByMetavariableNode(metavariableNode);
|
|
@@ -138,22 +151,22 @@ function unifyQualifiedStatementAWithTheorem(qualifiedStatementNode, substitutio
|
|
|
138
151
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
139
152
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
140
153
|
|
|
141
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' theorem...`, qualifiedStatementNode);
|
|
154
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' theorem...`, qualifiedStatementNode);
|
|
142
155
|
|
|
143
|
-
const
|
|
156
|
+
const statementUnified = theorem.unifyStatement(statementNode, localContext);
|
|
144
157
|
|
|
145
|
-
|
|
158
|
+
derivedQualifiedStatementUnifiedWithTheorem = statementUnified; ///
|
|
146
159
|
|
|
147
|
-
if (
|
|
148
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' theorem.`, qualifiedStatementNode);
|
|
160
|
+
if (derivedQualifiedStatementUnifiedWithTheorem) {
|
|
161
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' theorem.`, qualifiedStatementNode);
|
|
149
162
|
}
|
|
150
163
|
}
|
|
151
164
|
|
|
152
|
-
return
|
|
165
|
+
return derivedQualifiedStatementUnifiedWithTheorem;
|
|
153
166
|
}
|
|
154
167
|
|
|
155
|
-
function
|
|
156
|
-
let
|
|
168
|
+
function unifyDerivedQualifiedStatementAWithConjecture(qualifiedStatementNode, substitutions, localContext) {
|
|
169
|
+
let derivedQualifiedStatementUnifiedWithConjecture = false;
|
|
157
170
|
|
|
158
171
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
159
172
|
conjecture = localContext.findConjectureByMetavariableNode(metavariableNode);
|
|
@@ -163,145 +176,52 @@ function unifyQualifiedStatementAWithConjecture(qualifiedStatementNode, substitu
|
|
|
163
176
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
164
177
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
165
178
|
|
|
166
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' conjecture...`, qualifiedStatementNode);
|
|
179
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' conjecture...`, qualifiedStatementNode);
|
|
167
180
|
|
|
168
|
-
const
|
|
181
|
+
const statementUnified = conjecture.unifyStatement(statementNode, localContext);
|
|
169
182
|
|
|
170
|
-
|
|
183
|
+
derivedQualifiedStatementUnifiedWithConjecture = statementUnified; ///
|
|
171
184
|
|
|
172
|
-
if (
|
|
173
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' conjecture.`, qualifiedStatementNode);
|
|
185
|
+
if (derivedQualifiedStatementUnifiedWithConjecture) {
|
|
186
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' conjecture.`, qualifiedStatementNode);
|
|
174
187
|
}
|
|
175
188
|
}
|
|
176
189
|
|
|
177
|
-
return
|
|
190
|
+
return derivedQualifiedStatementUnifiedWithConjecture;
|
|
178
191
|
}
|
|
179
192
|
|
|
180
|
-
function
|
|
181
|
-
let
|
|
193
|
+
function unifyDerivedQualifiedStatementAWithReference(qualifiedStatementNode, substitutions, localContext) {
|
|
194
|
+
let derivedQualifiedStatementUnifiedWithReference = false;
|
|
182
195
|
|
|
183
196
|
const metavariableNode = metavariableNodeQuery(qualifiedStatementNode),
|
|
184
197
|
metavariableString = localContext.nodeAsString(metavariableNode),
|
|
185
198
|
metavariablePresent = localContext.isMetavariablePresentByMetavariableNode(metavariableNode),
|
|
186
199
|
qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
187
200
|
|
|
188
|
-
localContext.trace(`Unifying the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' reference...`, qualifiedStatementNode);
|
|
201
|
+
localContext.trace(`Unifying the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' reference...`, qualifiedStatementNode);
|
|
189
202
|
|
|
190
203
|
if (metavariablePresent) {
|
|
191
|
-
const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
192
|
-
localContextA = null,
|
|
193
|
-
localContextB = localContext, ///
|
|
194
|
-
statementNodeB = statementNode, ///
|
|
195
|
-
substitutionNodeA = null,
|
|
196
|
-
metavariableNodeA = metavariableNode, ///
|
|
197
|
-
metavariableUnifiedWithStatement = unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, () => {
|
|
198
|
-
const verifiedAhead = true;
|
|
199
|
-
|
|
200
|
-
return verifiedAhead;
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
qualifiedStatementUnifiedWithReference = metavariableUnifiedWithStatement; ///
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
if (qualifiedStatementUnifiedWithReference) {
|
|
207
|
-
localContext.debug(`...unified the '${qualifiedStatementString}' qualified statement with the '${metavariableString}' reference.`, qualifiedStatementNode);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
return qualifiedStatementUnifiedWithReference;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function verifyStatedStatement(statementNode, assignments, derived, localContext) {
|
|
214
|
-
let statedStatementVerified;
|
|
215
|
-
|
|
216
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
217
|
-
|
|
218
|
-
localContext.trace(`Verifying the '${statementString}' stated statement...`, statementNode);
|
|
219
|
-
|
|
220
|
-
const verifyStatedStatementFunctions = [
|
|
221
|
-
verifyStatedStatementAsEquality,
|
|
222
|
-
verifyStatedStatementAsJudgement,
|
|
223
|
-
verifyStatedStatementAsTypeAssertion
|
|
224
|
-
];
|
|
225
|
-
|
|
226
|
-
verifyStatedStatementFunctions.every((verifyStatedStatementFunction) => { ///
|
|
227
|
-
const statedStatementVerified = verifyStatedStatementFunction(statementNode, assignments, derived, localContext);
|
|
228
|
-
|
|
229
|
-
if (statedStatementVerified) {
|
|
230
|
-
return true;
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
statedStatementVerified = true; ///
|
|
235
204
|
|
|
236
|
-
|
|
237
|
-
|
|
205
|
+
debugger
|
|
206
|
+
|
|
207
|
+
// const statementNode = statementNodeQuery(qualifiedStatementNode),
|
|
208
|
+
// localContextA = null,
|
|
209
|
+
// localContextB = localContext, ///
|
|
210
|
+
// statementNodeB = statementNode, ///
|
|
211
|
+
// substitutionNodeA = null,
|
|
212
|
+
// metavariableNodeA = metavariableNode, ///
|
|
213
|
+
// metavariableUnifiedWithStatement = unifyMetavariableWithStatement(metavariableNodeA, statementNodeB, substitutionNodeA, substitutions, localContextA, localContextB, () => {
|
|
214
|
+
// const verifiedAhead = true;
|
|
215
|
+
//
|
|
216
|
+
// return verifiedAhead;
|
|
217
|
+
// });
|
|
218
|
+
//
|
|
219
|
+
// derivedQualifiedStatementUnifiedWithReference = metavariableUnifiedWithStatement; ///
|
|
238
220
|
}
|
|
239
221
|
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function verifyStatedStatementAsEquality(statementNode, assignments, derived, localContext) {
|
|
244
|
-
let statedStatementVerifiedAsEquality = true; ///
|
|
245
|
-
|
|
246
|
-
const equalityNode = equalityNodeQuery(statementNode);
|
|
247
|
-
|
|
248
|
-
if (equalityNode !== null) {
|
|
249
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
250
|
-
|
|
251
|
-
localContext.trace(`Verifying the '${statementString}' stated statement as an equality...`, statementNode);
|
|
252
|
-
|
|
253
|
-
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext);
|
|
254
|
-
|
|
255
|
-
statedStatementVerifiedAsEquality = equalityVerified; ///
|
|
256
|
-
|
|
257
|
-
if (statedStatementVerifiedAsEquality) {
|
|
258
|
-
localContext.debug(`...verified the '${statementString}' stated statement as an equality.`, statementNode);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
return statedStatementVerifiedAsEquality;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
function verifyStatedStatementAsJudgement(statementNode, assignments, derived, localContext) {
|
|
266
|
-
let statedStatementVerifiedAsJudgement = true;
|
|
267
|
-
|
|
268
|
-
const judgementNode = judgementNodeQuery(statementNode);
|
|
269
|
-
|
|
270
|
-
if (judgementNode !== null) {
|
|
271
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
272
|
-
|
|
273
|
-
localContext.trace(`Verifying the '${statementString}' stated statement as a judgement...`, statementNode);
|
|
274
|
-
|
|
275
|
-
const judgementVerified = verifyJudgement(judgementNode, assignments, derived, localContext);
|
|
276
|
-
|
|
277
|
-
statedStatementVerifiedAsJudgement = judgementVerified; ///
|
|
278
|
-
|
|
279
|
-
if (statedStatementVerifiedAsJudgement) {
|
|
280
|
-
localContext.debug(`...verified the '${statementString}' stated statement as a judgement.`, statementNode);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
return statedStatementVerifiedAsJudgement;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
function verifyStatedStatementAsTypeAssertion(statementNode, assignments, derived, localContext) {
|
|
288
|
-
let statementVerifiedAsTypeAssertion = true; ///
|
|
289
|
-
|
|
290
|
-
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
291
|
-
|
|
292
|
-
if (typeAssertionNode !== null) {
|
|
293
|
-
const statementString = localContext.nodeAsString(statementNode);
|
|
294
|
-
|
|
295
|
-
localContext.trace(`Verifying the '${statementString}' stated statement as a type assertion...`, statementNode);
|
|
296
|
-
|
|
297
|
-
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext);
|
|
298
|
-
|
|
299
|
-
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
300
|
-
|
|
301
|
-
if (statementVerifiedAsTypeAssertion) {
|
|
302
|
-
localContext.debug(`...verified the '${statementString}' stated statement as a type assertion.`, statementNode);
|
|
303
|
-
}
|
|
222
|
+
if (derivedQualifiedStatementUnifiedWithReference) {
|
|
223
|
+
localContext.debug(`...unified the '${qualifiedStatementString}' derived qualified statement with the '${metavariableString}' reference.`, qualifiedStatementNode);
|
|
304
224
|
}
|
|
305
225
|
|
|
306
|
-
return
|
|
226
|
+
return derivedQualifiedStatementUnifiedWithReference;
|
|
307
227
|
}
|