Skip to content

Commit 5f6f798

Browse files
committed
--transform -z: avoid duplicate registrations of evaluation indices
- fixes that duplicate empty rules would be generated upon compression + make steps in w3.txt well-ordered (according to fix; [43] called [52]) - files were previously generated without 'indexEvalSequence' rebuilding, of which files other than w3.txt were not affected
1 parent f121411 commit 5f6f798

File tree

2 files changed

+28
-19
lines changed

2 files changed

+28
-19
lines changed

data/w3.txt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
% Full summary: pmGenerator --transform data/w3.txt -f -n -t . -j 1
88
% Step counting: pmGenerator --transform data/w3.txt -f -n -t . -p -2 -d
99
% pmGenerator --transform data/w3.txt -f -n -t CpCqp,CCpCqrCCpqCpr,CCNpNqCqp,Cpp,CCpqCCqrCpr,CCNppp,CpCNpq -p -2 -d
10-
% Compact (1970 bytes): pmGenerator --transform data/w3.txt -f -n -t CpCqp,CCpCqrCCpqCpr,CCNpNqCqp,Cpp,CCpqCCqrCpr,CCNppp,CpCNpq -j -1 -s CCCpCCqrCsrtCCCqrCsrt,CCCNpqCCrCCNsCCNtuCrvCCvsCtsqCCqwCpw,CCCCNpCCNqrCCsCCNtCCNuvCswCCwtCutxCCxpCqpyCCyzCaz,CCCpCqrsCCqrs,CCCpqrCqr,CCCNpqrCpr,CCNppCqp,CCCCNpqCrqpCsp,CpCCpqCrq,CCCNCNpqrsCps,CpCqCrp,CCCCCpqrCsrtCqt,CNNCpqCrCpq,CCNCCpCqpNrsCrs,CCpNpCqNp,CCpCqNpCrCqNp,CCCpqrCNpr,CCNpqCNCrpq,CCpqCNCprq,CCNpqCNCrCspq,CCpqCCNppq,CCNCpqrCCrqCpq,CCpCpqCpq,CCCCpqCrqsCps,CCpqCNCprq,CCpCqrCqCpr
10+
% Compact (1951 bytes): pmGenerator --transform data/w3.txt -f -n -t CpCqp,CCpCqrCCpqCpr,CCNpNqCqp,Cpp,CCpqCCqrCpr,CCNppp,CpCNpq -j -1 -s CCCpCCqrCsrtCCCqrCsrt,CCCNpqCCrCCNsCCNtuCrvCCvsCtsqCCqwCpw,CCCCNpCCNqrCCsCCNtCCNuvCswCCwtCutxCCxpCqpyCCyzCaz,CCCpCqrsCCqrs,CCCpqrCqr,CCCNpqrCpr,CCNppCqp,CCCCNpqCrqpCsp,CpCCpqCrq,CCCNCNpqrsCps,CpCqCrp,CCCCCpqrCsrtCqt,CNNCpqCrCpq,CCNCCpCqpNrsCrs,CCpNpCqNp,CCpCqNpCrCqNp,CCCpqrCNpr,CCNpqCNCrpq,CCpqCNCprq,CCNpqCNCrCspq,CCpqCCNppq,CCNCpqrCCrqCpq,CCpCpqCpq,CCCCpqCrqsCps,CCpCqrCqCpr
1111
% Concrete (296514 bytes): pmGenerator --transform data/w3.txt -f -n -t CpCqp,CCpCqrCCpqCpr,CCNpNqCqp,Cpp,CCpqCCqrCpr,CCNppp,CpCNpq -j -1 -e
1212

1313
CpCCNqCCNrsCptCCtqCrq = 1
@@ -65,25 +65,25 @@
6565
[41] CCNppp = D[33]DDD[0]D[18]DDD1[6]1[16][36]1
6666

6767
[42] CCNpqCNCrpq = D[7]D[0]D[18]DD[7]D[0]D[33]D[18][16]D[18][40]
68-
[43] CNCpqCrCsp = D[52][27]
69-
[44] CCNpqCNCrCspq = D[7]D[0]D[18]DD[7]D[0]DD[7][34][20]D[18]D[13][40]
70-
[45] CCpCpqCrCpq = D[0][43]
71-
[46] CCpqCCNppq = D[7]D[0]D[39]D[0]DD[23]D[17]D[18][36]1
72-
[47] CCNCpqrCCrqCpq = DD[46]DD1[21]DDD[3]D[3]D1[7][6][13]D[44]1
73-
[48] CCpCpqCpq = DD[45][45]1
74-
[49] CCCCpqCrqsCps = DD[13]D1D[6]D[3]DD[15]11D[46]D[28][48]
75-
[50] CCpqCCNqpq = D[0]D[49][46]
76-
[51] CpCCpqq = D[49][48]
77-
[52] CCpqCNCprq = D[7]D[0]DDD[0]D[28]D[17]D[19]D[14]D[19][32]DDD[13]D1DDD[15]D[3]D[3]D1[11]1[0]1DD[3][11][37]1
68+
[43] CCpqCNCprq = D[7]D[0]DDD[0]D[28]D[17]D[19]D[14]D[19][32]DDD[13]D1DDD[15]D[3]D[3]D1[11]1[0]1DD[3][11][37]1
69+
[44] CNCpqCrCsp = D[43][27]
70+
[45] CCNpqCNCrCspq = D[7]D[0]D[18]DD[7]D[0]DD[7][34][20]D[18]D[13][40]
71+
[46] CCpCpqCrCpq = D[0][44]
72+
[47] CCpqCCNppq = D[7]D[0]D[39]D[0]DD[23]D[17]D[18][36]1
73+
[48] CCNCpqrCCrqCpq = DD[47]DD1[21]DDD[3]D[3]D1[7][6][13]D[45]1
74+
[49] CCpCpqCpq = DD[46][46]1
75+
[50] CCCCpqCrqsCps = DD[13]D1D[6]D[3]DD[15]11D[47]D[28][49]
76+
[51] CCpqCCNqpq = D[0]D[50][47]
77+
[52] CpCCpqq = D[50][49]
7878

7979
% Axiom 1 by Łukasiewicz (CCpqCCqrCpr), i.e. (0→1)→((1→2)→(0→2)) ; 16469 steps
80-
[53] CCpqCCqrCpr = DDD1[52]D[26]D[46][51][47]
80+
[53] CCpqCCqrCpr = DDD1[43]D[26]D[47][52][48]
8181

8282
% Axiom 3 for Frege by Łukasiewicz (CCNpNqCqp), i.e. (¬0→¬1)→(1→0) ; 23321 steps
83-
[54] CCNpNqCqp = DD[7][37]DD[48]D[0]D[42][43]DD[50]D[18]D[19][33]D[42]D[48]DD[7]D[0]D[25][38][44]
83+
[54] CCNpNqCqp = DD[7][37]DD[49]D[0]D[42][44]DD[51]D[18]D[19][33]D[42]D[49]DD[7]D[0]D[25][38][45]
8484

8585
[55] CCCCpqCrqsCCrps = D[53][53]
86-
[56] CCpCqrCqCpr = D[55]D[53][51]
86+
[56] CCpCqrCqCpr = D[55]D[53][52]
8787

8888
% Axiom 2 by Frege (CCpCqrCCpqCpr), i.e. (0→(1→2))→((0→1)→(0→2)) ; 254925 steps
89-
[57] CCpCqrCCpqCpr = D[56]D[55]D[47]DD[56]D[39][50]D[56]D[55][39]
89+
[57] CCpCqrCCpqCpr = D[56]D[55]D[48]DD[56]D[39][51]D[56]D[55][39]

metamath/DRuleParser.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2164,8 +2164,12 @@ void DRuleParser::compressAbstractDProof(vector<string>& retractedDProof, vector
21642164
// 6. Rebuild 'indexEvalSequence' (if some rules changed).
21652165
if (modified) {
21662166
vector<size_t> newIndexEvalSequence;
2167+
set<size_t> registered;
21672168
set<size_t> explored;
2168-
auto explore = [&](const string& rule, size_t i, const auto& me) -> void { // similar to 'auto parse' in DRuleParser::parseAbstractDProof(), but everything is parsed already
2169+
2170+
// Similar to 'auto parse' in DRuleParser::parseAbstractDProof(), but everything is parsed already.
2171+
// Additionally, need to avoid duplicate registration of evaluation indices, which here could occur due to non-orderliness of the input.
2172+
auto explore = [&](const string& rule, size_t i, const auto& me) -> void {
21692173
vector<DProofInfo> rawParseData;
21702174
string::size_type pos = rule.find('[');
21712175
if (pos != string::npos) {
@@ -2185,7 +2189,10 @@ void DRuleParser::compressAbstractDProof(vector<string>& retractedDProof, vector
21852189
me(num < retractedDProof.size() ? retractedDProof[num] : helperRules[num - retractedDProof.size()], num, me);
21862190
explored.emplace(num);
21872191
}
2188-
newIndexEvalSequence.push_back(i);
2192+
if (!registered.count(i)) {
2193+
newIndexEvalSequence.push_back(i);
2194+
registered.emplace(i);
2195+
}
21892196
return;
21902197
} else {
21912198
bool refLhs = pos == 1;
@@ -2221,8 +2228,10 @@ void DRuleParser::compressAbstractDProof(vector<string>& retractedDProof, vector
22212228
}
22222229
}
22232230
}
2224-
newIndexEvalSequence.push_back(i);
2225-
return;
2231+
if (!registered.count(i)) {
2232+
newIndexEvalSequence.push_back(i);
2233+
registered.emplace(i);
2234+
}
22262235
};
22272236
for (size_t i = 0; i < retractedDProof.size(); i++)
22282237
explore(retractedDProof[i], i, explore);

0 commit comments

Comments
 (0)