THEOREM L_9 (H_LeaderCompleteness)

Lines 1016–1296 · AbstractRaft_IndProofs_test.tla
Obligations Proved
418/418
SMT / Isabelle / Trivial
159 / 2 / 257
Total Prover Time
4.1s
Isabelle Rescues
2

Proof Notes

Proof Tree

<1>. USE A0,A1,A2,A3,A4,A5,A6 7/7 tlapm
#8 L1017:12:1017:14 trivial tlapm
#9 L1017:15:1017:17 trivial tlapm
#10 L1017:18:1017:20 trivial tlapm
#11 L1017:21:1017:23 trivial tlapm
#12 L1017:24:1017:26 trivial tlapm
#13 L1017:27:1017:29 trivial tlapm
#14 L1017:30:1017:32 trivial tlapm
<1>1 (H_LeaderCompleteness,ClientRequestAction) TypeOK /\ H_LeaderCompleteness /\ ClientRequestAction => H_LeaderCompleteness' BY DEF TypeOK,ClientRequestAction,ClientRequest,H_LeaderComplet... 1/1 smt
#15 L1019:88:1019:90 proved smt cached
<1>2 (H_LeaderCompleteness,GetEntriesAction) TypeOK /\ H_LeaderCompleteness /\ GetEntriesAction => H_LeaderCompleteness' BY DEF TypeOK,GetEntriesAction,GetEntries,H_LeaderCompleteness,InL... 1/1 smt
#16 L1021:85:1021:87 proved smt cached
<1>3 (H_LeaderCompleteness,RollbackEntriesAction) TypeOK /\ H_LeaderCompleteness /\ RollbackEntriesAction => H_LeaderCompleteness' 12/12 smt
<2>. SUFFICES ASSUME TypeOK, H_LeaderCompleteness, 1/1 smt
#21 L1026:38:1026:40 proved smt cached
<2>1 state[i] = Secondary BY DEF RollbackEntries 1/1 smt
#22 L1027:32:1027:34 proved smt cached
<2>2 UNCHANGED <<state, currentTerm, immediatelyCommitted>> BY DEF RollbackEntries 1/1 smt
#23 L1028:66:1028:68 proved smt cached
<2>3 \A s \in Server : s # i => log'[s] = log[s] BY DEF RollbackEntries, TypeOK 1/1 smt
#24 L1029:55:1029:57 proved smt cached
<2>4 \A s \in Server : state'[s] = Primary => s # i 4/4 tlapm
#25 L1031:7:1031:9 proved smt cached
#26 L1031:10:1031:14 trivial tlapm
#27 L1031:16:1031:20 trivial tlapm
#28 L1031:22:1031:24 trivial tlapm
<2>. QED BY <2>2, <2>3, <2>4 DEF H_LeaderCompleteness, InLog 4/4 tlapm
#17 L1032:14:1032:16 proved smt cached
#18 L1032:17:1032:21 trivial tlapm
#19 L1032:23:1032:27 trivial tlapm
#20 L1032:29:1032:33 trivial tlapm
<1>4 (H_LeaderCompleteness,BecomeLeaderAction) TypeOK /\ H_TermsMonotonic /\ H_UniformLogEntries /\ H_CommittedEntryIsOnQuorum /\ H_LaterLogsHaveEarlierCommitted /\ H_LeaderCompleteness /\ BecomeLe... 296/296 tlapm
<2>. SUFFICES ASSUME TypeOK, H_TermsMonotonic, H_UniformLogEntries, H_CommittedEntryIsOnQuorum, 1/1 smt
#32 L1038:38:1038:40 proved smt cached
<2>1 UNCHANGED <<log, immediatelyCommitted>> BY DEF BecomeLeader 1/1 smt
#33 L1039:51:1039:53 proved smt cached
<2>2 state' = [s \in Server |-> IF s = leader THEN Primary ELSE IF s \in voteQ THEN Secondary ELSE state[s]] 1/1 smt
#34 L1041:7:1041:9 proved smt cached
<2>3 currentTerm' = [s \in Server |-> IF s \in voteQ THEN currentTerm[leader] + 1 ELSE currentTerm[s]] 1/1 smt
#35 L1043:7:1043:9 proved smt cached
<2>4 leader \in voteQ BY DEF BecomeLeader 1/1 smt
#36 L1044:28:1044:30 proved smt cached
<2>5 \A v \in voteQ : CanVoteForOplog(v, leader, currentTerm[leader] + 1) BY DEF BecomeLeader 1/1 smt
#37 L1045:80:1045:82 proved smt cached
<2>qi Quorum intersection \A Q1, Q2 \in Quorums(Server) : Q1 \cap Q2 # {} 24/24 tlapm
<3>1 IsFiniteSet(Server) BY A0 2/2 smt
#43 L1048:33:1048:35 proved smt cached
#44 L1048:36:1048:38 trivial tlapm
<3>2 SUFFICES ASSUME NEW Q1 \in Quorums(Server), NEW Q2 \in Quorums(Server) PROVE Q1 \cap Q2 # {} OBVIOUS 1/1 smt
#45 L1049:106:1049:113 proved smt cached
<3>3 Q1 \subseteq Server /\ Q2 \subseteq Server BY DEF Quorums 1/1 smt
#46 L1050:56:1050:58 proved smt cached
<3>4 IsFiniteSet(Q1) /\ IsFiniteSet(Q2) BY <3>1, <3>3, FS_Subset 4/4 tlapm
#47 L1051:48:1051:50 proved smt cached
#48 L1051:51:1051:55 trivial tlapm
#49 L1051:57:1051:61 trivial tlapm
#50 L1051:63:1051:72 trivial tlapm
<3>5 Cardinality(Q1) * 2 > Cardinality(Server) /\ Cardinality(Q2) * 2 > Cardinality(Server) BY DEF Quorums 1/1 smt
#51 L1052:100:1052:102 proved smt cached
<3>6 Cardinality(Server) \in Nat BY <3>1, FS_CardinalityType 3/3 tlapm
#52 L1053:41:1053:43 proved smt cached
#53 L1053:44:1053:48 trivial tlapm
#54 L1053:50:1053:68 trivial tlapm
<3>7 Cardinality(Q1) \in Nat /\ Cardinality(Q2) \in Nat BY <3>4, FS_CardinalityType 3/3 tlapm
#55 L1054:64:1054:66 proved smt cached
#56 L1054:67:1054:71 trivial tlapm
#57 L1054:73:1054:91 trivial tlapm
<3>8 Cardinality(Q1) + Cardinality(Q2) > Cardinality(Server) BY <3>5, <3>6, <3>7 4/4 tlapm
#58 L1055:69:1055:71 proved smt cached
#59 L1055:72:1055:76 trivial tlapm
#60 L1055:78:1055:82 trivial tlapm
#61 L1055:84:1055:88 trivial tlapm
<3>. QED BY <3>1, <3>3, <3>8, FS_MajoritiesIntersect 5/5 tlapm
#38 L1056:16:1056:18 proved smt cached
#39 L1056:19:1056:23 trivial tlapm
#40 L1056:25:1056:29 trivial tlapm
#41 L1056:31:1056:35 trivial tlapm
#42 L1056:37:1056:59 trivial tlapm
<2>. SUFFICES: show for any primary s in post-state, all committed entries with smaller terms are in log'[s] SUFFICES ASSUME NEW s \in Server, state'[s] = Primary, 2/2 smt
#62 L1060:41:1060:43 proved smt cached
#63 L1060:44:1060:48 trivial tlapm
<2>6 Case s # leader: s was already primary, use induction hypothesis CASE s # leader 20/20 tlapm
<3>1 state[s] = Primary BY <2>6, <2>2, A7 4/4 tlapm
#67 L1063:32:1063:34 proved smt cached
#68 L1063:35:1063:39 trivial tlapm
#69 L1063:41:1063:45 trivial tlapm
#70 L1063:47:1063:49 trivial tlapm
<3>2 s \notin voteQ BY <2>6, <2>2, <3>1, A7 5/5 tlapm
#71 L1064:28:1064:30 proved smt cached
#72 L1064:31:1064:35 trivial tlapm
#73 L1064:37:1064:41 trivial tlapm
#74 L1064:43:1064:47 trivial tlapm
#75 L1064:49:1064:51 trivial tlapm
<3>3 currentTerm'[s] = currentTerm[s] BY <3>2, <2>3 3/3 tlapm
#76 L1065:46:1065:48 proved smt cached
#77 L1065:49:1065:53 trivial tlapm
#78 L1065:55:1065:59 trivial tlapm
<3>4 c[2] < currentTerm[s] BY <3>3 2/2 smt
#79 L1066:35:1066:37 proved smt cached
#80 L1066:38:1066:42 trivial tlapm
<3>5 InLog(<<c[1],c[2]>>, s) BY <3>1, <3>4 DEF H_LeaderCompleteness 3/3 tlapm
#81 L1067:37:1067:39 proved smt cached
#82 L1067:40:1067:44 trivial tlapm
#83 L1067:46:1067:50 trivial tlapm
<3>. QED BY <3>5, <2>1 DEF InLog 3/3 tlapm
#64 L1068:16:1068:18 proved smt cached
#65 L1068:19:1068:23 trivial tlapm
#66 L1068:25:1068:29 trivial tlapm
<2>7 Case s = leader: the new primary must have all committed entries CASE s = leader 241/241 tlapm
<3>0 currentTerm'[leader] = currentTerm[leader]+1 since leader ∈ voteQ currentTerm'[leader] = currentTerm[leader] + 1 BY <2>3, <2>4 3/3 tlapm
#88 L1072:60:1072:62 proved smt cached
#89 L1072:63:1072:67 trivial tlapm
#90 L1072:69:1072:73 trivial tlapm
<3>ct c[2] <= currentTerm[leader] c[2] \in Nat /\ currentTerm[leader] \in Nat BY DEF TypeOK, Terms, H_CommittedEntryIsOnQuorum, InLog 1/1 smt
#91 L1074:58:1074:60 proved smt cached
<3>c1pos c[1] >= 1 /\ c[1] \in Nat BY DEF TypeOK, LogIndices 1/1 smt
#92 L1075:43:1075:45 proved smt cached
<3>1 c[2] < currentTerm[leader] + 1 BY <2>7, <3>0 3/3 tlapm
#93 L1076:44:1076:46 proved smt cached
#94 L1076:47:1076:51 trivial tlapm
#95 L1076:53:1076:57 trivial tlapm
<3>2 From H_CommittedEntryIsOnQuorum, get quorum Qc where everyone has InLog(c, n) PICK Qc \in Quorums(Server) : \A n \in Qc : InLog(<<c[1],c[2]>>, n) 1/1 smt
#96 L1079:9:1079:11 proved smt cached
<3>3 Qc and voteQ intersect Qc \cap voteQ # {} BY <2>qi 2/2 smt
#97 L1081:32:1081:34 proved smt cached
#98 L1081:35:1081:40 trivial tlapm
<3>4 PICK w \in Qc \cap voteQ : TRUE BY <3>3 2/2 smt
#99 L1082:45:1082:47 proved smt cached
#100 L1082:48:1082:52 trivial tlapm
<3>5 InLog(<<c[1],c[2]>>, w) BY <3>4, <3>2 3/3 tlapm
#101 L1083:37:1083:39 proved smt cached
#102 L1083:40:1083:44 trivial tlapm
#103 L1083:46:1083:50 trivial tlapm
<3>6 CanVoteForOplog(w, leader, currentTerm[leader] + 1) BY <3>4, <2>5 3/3 tlapm
#104 L1084:65:1084:67 proved smt cached
#105 L1084:68:1084:72 trivial tlapm
#106 L1084:74:1084:78 trivial tlapm
<3>7 Expand InLog for w PICK xw \in DOMAIN log[w] : xw = c[1] /\ log[w][xw] = c[2] BY <3>5 DEF InLog 2/2 smt
#107 L1086:72:1086:74 proved smt cached
#108 L1086:75:1086:79 trivial tlapm
<3>8 c[1] \in DOMAIN log[w] /\ log[w][c[1]] = c[2] BY <3>7 2/2 smt
#109 L1087:59:1087:61 proved smt cached
#110 L1087:62:1087:66 trivial tlapm
<3>9 w \in Server BY <3>4, A4 DEF Quorums 3/3 tlapm
#111 L1088:26:1088:28 proved smt cached
#112 L1088:29:1088:33 trivial tlapm
#113 L1088:35:1088:37 trivial tlapm
<3>10 CanVoteForOplog means: LastTerm(log[leader]) > LastTerm(log[w]) OR (equal and longer) LET logOk == \/ LastTerm(log[leader]) > LastTerm(log[w]) 2/2 smt
#114 L1094:9:1094:11 proved smt cached
#115 L1094:12:1094:16 trivial tlapm
<3>11 By H_TermsMonotonic: c[2] = log[w][c[1]] <= LastTerm(log[w]) Len(log[w]) \in Nat /\ Len(log[w]) > 0 2/2 smt
#116 L1097:9:1097:11 proved smt cached
#117 L1097:12:1097:16 trivial tlapm
<3>12 Len(log[w]) \in DOMAIN log[w] 2/2 smt
#118 L1099:9:1099:11 proved smt cached
#119 L1099:12:1099:17 trivial tlapm
<3>13 c[2] <= LastTerm(log[w]) 10/10 tlapm
<3>14 Case A: LastTerm(log[leader]) > LastTerm(log[w]) >= c[2] CASE LastTerm(log[leader]) > LastTerm(log[w]) 37/37 tlapm
<3>15 Case B: equal last terms and leader's log at least as long CASE LastTerm(log[leader]) = LastTerm(log[w]) /\ Len(log[leader]) >= Len(log[w]) 158/158 tlapm
<3>. QED BY <3>14, <3>15, <3>10 4/4 tlapm
#84 L1229:16:1229:18 proved smt cached
#85 L1229:19:1229:24 trivial tlapm
#86 L1229:26:1229:31 trivial tlapm
#87 L1229:33:1229:38 trivial tlapm
<2>. QED BY <2>6, <2>7 3/3 tlapm
#29 L1230:14:1230:16 proved smt cached
#30 L1230:17:1230:21 trivial tlapm
#31 L1230:23:1230:27 trivial tlapm
<1>5 (H_LeaderCompleteness,CommitEntryAction) TypeOK /\ H_TermsMonotonic /\ H_QuorumsSafeAtTerms /\ H_LeaderCompleteness /\ CommitEntryAction => H_LeaderCompleteness' 60/60 tlapm
<2>. SUFFICES ASSUME TypeOK, H_TermsMonotonic, H_QuorumsSafeAtTerms, H_LeaderCompleteness, 1/1 smt
#329 L1235:38:1235:40 proved smt cached
<2>1 UNCHANGED <<log, currentTerm, state>> BY DEF CommitEntry 1/1 smt
#330 L1236:49:1236:51 proved smt cached
<2>2 immediatelyCommitted' = immediatelyCommitted \cup {<<Len(log[p]), currentTerm[p]>>} BY DEF CommitEntry 1/1 smt
#331 L1237:95:1237:97 proved smt cached
<2>qi Quorum intersection lemma \A Q1, Q2 \in Quorums(Server) : Q1 \cap Q2 # {} 24/24 tlapm
<3>1 IsFiniteSet(Server) BY A0 2/2 smt
#337 L1240:33:1240:35 proved smt cached
#338 L1240:36:1240:38 trivial tlapm
<3>2 SUFFICES ASSUME NEW Q1 \in Quorums(Server), NEW Q2 \in Quorums(Server) PROVE Q1 \cap Q2 # {} OBVIOUS 1/1 smt
#339 L1241:106:1241:113 proved smt cached
<3>3 Q1 \subseteq Server /\ Q2 \subseteq Server BY DEF Quorums 1/1 smt
#340 L1242:56:1242:58 proved smt cached
<3>4 IsFiniteSet(Q1) /\ IsFiniteSet(Q2) BY <3>1, <3>3, FS_Subset 4/4 tlapm
#341 L1243:48:1243:50 proved smt cached
#342 L1243:51:1243:55 trivial tlapm
#343 L1243:57:1243:61 trivial tlapm
#344 L1243:63:1243:72 trivial tlapm
<3>5 Cardinality(Q1) * 2 > Cardinality(Server) /\ Cardinality(Q2) * 2 > Cardinality(Server) BY DEF Quorums 1/1 smt
#345 L1244:100:1244:102 proved smt cached
<3>6 Cardinality(Server) \in Nat BY <3>1, FS_CardinalityType 3/3 tlapm
#346 L1245:41:1245:43 proved smt cached
#347 L1245:44:1245:48 trivial tlapm
#348 L1245:50:1245:68 trivial tlapm
<3>7 Cardinality(Q1) \in Nat /\ Cardinality(Q2) \in Nat BY <3>4, FS_CardinalityType 3/3 tlapm
#349 L1246:64:1246:66 proved smt cached
#350 L1246:67:1246:71 trivial tlapm
#351 L1246:73:1246:91 trivial tlapm
<3>8 Cardinality(Q1) + Cardinality(Q2) > Cardinality(Server) BY <3>5, <3>6, <3>7 4/4 tlapm
#352 L1247:69:1247:71 proved smt cached
#353 L1247:72:1247:76 trivial tlapm
#354 L1247:78:1247:82 trivial tlapm
#355 L1247:84:1247:88 trivial tlapm
<3>. QED BY <3>1, <3>3, <3>8, FS_MajoritiesIntersect 5/5 tlapm
#332 L1248:16:1248:18 proved smt cached
#333 L1248:19:1248:23 trivial tlapm
#334 L1248:25:1248:29 trivial tlapm
#335 L1248:31:1248:35 trivial tlapm
#336 L1248:37:1248:59 trivial tlapm
<2>3 The commit quorum all have term = currentTerm[p] ImmediatelyCommitted(<<Len(log[p]), currentTerm[p]>>, commitQ) BY DEF CommitEntry 1/1 smt
#356 L1250:74:1250:76 proved smt cached
<2>4 \A n \in commitQ : currentTerm[n] = currentTerm[p] BY <2>3 DEF ImmediatelyCommitted 2/2 smt
#357 L1251:62:1251:64 proved smt cached
#358 L1251:65:1251:69 trivial tlapm
<2>5 For any primary s with currentTerm[s] > currentTerm[p], contradiction via quorum intersection \A s \in Server : state[s] = Primary /\ currentTerm[s] > currentTerm[p] => FALSE 16/16 tlapm
<3>. SUFFICES ASSUME NEW s \in Server, state[s] = Primary, currentTerm[s] > currentTerm[p] PROVE FALSE OBVIOUS 1/1 smt
#362 L1254:110:1254:117 proved smt cached
<3>1 PICK Qs \in Quorums(Server) : \A n \in Qs : currentTerm[n] >= currentTerm[s] 1/1 smt
#363 L1256:9:1256:11 proved smt cached
<3>2 commitQ \cap Qs # {} BY <2>qi 2/2 smt
#364 L1257:34:1257:36 proved smt cached
#365 L1257:37:1257:42 trivial tlapm
<3>3 PICK w \in commitQ \cap Qs : TRUE BY <3>2 2/2 smt
#366 L1258:47:1258:49 proved smt cached
#367 L1258:50:1258:54 trivial tlapm
<3>4 currentTerm[w] = currentTerm[p] /\ currentTerm[w] >= currentTerm[s] BY <2>4, <3>1, <3>3 4/4 tlapm
#368 L1259:81:1259:83 proved smt cached
#369 L1259:84:1259:88 trivial tlapm
#370 L1259:90:1259:94 trivial tlapm
#371 L1259:96:1259:100 trivial tlapm
<3>5 w \in Server BY <3>3, A4 DEF Quorums 3/3 tlapm
#372 L1260:26:1260:28 proved smt cached
#373 L1260:29:1260:33 trivial tlapm
#374 L1260:35:1260:37 trivial tlapm
<3>. QED BY <3>4, <3>5 DEF TypeOK, Terms 3/3 tlapm
#359 L1261:16:1261:18 proved smt cached
#360 L1261:19:1261:23 trivial tlapm
#361 L1261:25:1261:29 trivial tlapm
<2>. Main proof: for all primaries s, all committed entries in post-state with smaller terms are in log SUFFICES ASSUME NEW s \in Server, state'[s] = Primary, 1/1 smt
#375 L1265:41:1265:43 proved smt cached
<2>6 state[s] = Primary /\ currentTerm'[s] = currentTerm[s] /\ log'[s] = log[s] BY <2>1 2/2 smt
#376 L1266:86:1266:88 proved smt cached
#377 L1266:89:1266:93 trivial tlapm
<2>7 CASE c \in immediatelyCommitted 3/3 tlapm
#378 L1268:7:1268:9 proved smt cached
#379 L1268:10:1268:14 trivial tlapm
#380 L1268:16:1268:20 trivial tlapm
<2>8 CASE c = <<Len(log[p]), currentTerm[p]>> 4/4 tlapm
#381 L1271:7:1271:9 proved smt cached
#382 L1271:10:1271:14 trivial tlapm
#383 L1271:16:1271:20 trivial tlapm
#384 L1271:22:1271:26 trivial tlapm
<2>. QED BY <2>2, <2>7, <2>8 4/4 tlapm
#325 L1272:14:1272:16 proved smt cached
#326 L1272:17:1272:21 trivial tlapm
#327 L1272:23:1272:27 trivial tlapm
#328 L1272:29:1272:33 trivial tlapm
<1>6 (H_LeaderCompleteness,UpdateTermsAction) TypeOK /\ H_LeaderCompleteness /\ UpdateTermsAction => H_LeaderCompleteness' 34/34 tlapm
<2>. SUFFICES ASSUME TypeOK, H_LeaderCompleteness, 1/1 smt
#388 L1277:38:1277:40 proved smt cached
<2>1 UNCHANGED <<log, immediatelyCommitted>> BY DEF UpdateTerms 1/1 smt
#389 L1278:51:1278:53 proved smt cached
<2>2 state' = [state EXCEPT ![j] = Secondary] BY DEF UpdateTerms, UpdateTermsExpr 1/1 smt
#390 L1279:52:1279:54 proved smt cached
<2>3 currentTerm' = [currentTerm EXCEPT ![j] = currentTerm[i]] BY DEF UpdateTerms, UpdateTermsExpr 1/1 smt
#391 L1280:69:1280:71 proved smt cached
<2>4 \A s \in Server : state'[s] = Primary => s # j 8/8 smt
<3>. SUFFICES ASSUME NEW s \in Server, state'[s] = Primary PROVE s # j OBVIOUS 1/1 smt
#395 L1282:78:1282:85 proved smt cached
<3>1 j \in Server OBVIOUS 1/1 smt
#396 L1283:26:1283:33 proved smt 1.2s (12%)
<3>2 state'[j] = Secondary BY <3>1, <2>2 DEF TypeOK 3/3 tlapm
#397 L1284:35:1284:37 proved smt 1.1s (11%)
#398 L1284:38:1284:42 trivial tlapm
#399 L1284:44:1284:48 trivial tlapm
<3>. QED BY <3>2, A7 3/3 tlapm
#392 L1285:16:1285:18 proved smt cached
#393 L1285:19:1285:23 trivial tlapm
#394 L1285:25:1285:27 trivial tlapm
<2>5 \A s \in Server : s # j => currentTerm'[s] = currentTerm[s] /\ log'[s] = log[s] BY <2>3, <2>1 3/3 tlapm
#400 L1286:91:1286:93 proved smt cached
#401 L1286:94:1286:98 trivial tlapm
#402 L1286:100:1286:104 trivial tlapm
<2>. SUFFICES ASSUME NEW s \in Server, state'[s] = Primary, 1/1 smt
#403 L1289:41:1289:43 proved smt cached
<2>6 s # j BY <2>4 2/2 smt
#404 L1290:17:1290:19 proved smt cached
#405 L1290:20:1290:24 trivial tlapm
<2>7 log'[s] = log[s] /\ currentTerm'[s] = currentTerm[s] BY <2>6, <2>5 3/3 tlapm
#406 L1291:64:1291:66 proved smt cached
#407 L1291:67:1291:71 trivial tlapm
#408 L1291:73:1291:77 trivial tlapm
<2>8 state[s] = Primary BY <2>6, <2>2, A7 4/4 tlapm
#409 L1292:30:1292:32 proved smt cached
#410 L1292:33:1292:37 trivial tlapm
#411 L1292:39:1292:43 trivial tlapm
#412 L1292:45:1292:47 trivial tlapm
<2>9 c \in immediatelyCommitted BY <2>1 2/2 smt
#413 L1293:38:1293:40 proved smt cached
#414 L1293:41:1293:45 trivial tlapm
<2>10 InLog(<<c[1],c[2]>>, s) BY <2>7, <2>8, <2>9 DEF H_LeaderCompleteness 4/4 tlapm
#415 L1294:36:1294:38 proved smt cached
#416 L1294:39:1294:43 trivial tlapm
#417 L1294:45:1294:49 trivial tlapm
#418 L1294:51:1294:55 trivial tlapm
<2>. QED BY <2>10, <2>7 DEF InLog 3/3 tlapm
#385 L1295:14:1295:16 proved smt cached
#386 L1295:17:1295:22 trivial tlapm
#387 L1295:24:1295:28 trivial tlapm
<1>7 QED BY <1>1,<1>2,<1>3,<1>4,<1>5,<1>6 DEF Next 7/7 tlapm
#1 L1296:11:1296:13 proved smt cached
#2 L1296:14:1296:18 trivial tlapm
#3 L1296:19:1296:23 trivial tlapm
#4 L1296:24:1296:28 trivial tlapm
#5 L1296:29:1296:33 trivial tlapm
#6 L1296:34:1296:38 trivial tlapm
#7 L1296:39:1296:43 trivial tlapm