| log = ax, remove-refsize0(gstore3) = gstore3, elems nx1 ∩ jro4 = ∅, dom gstore3 ∪ elems nx1 = dom gstore2 ∪ jro4, jmaxino0 ≠ 0, jmaxino3 ≠ 0, jro1.keys.inodes?, jro5.keys.inodes?, fi3.inos < jmaxino0, ri0.inos < jmaxino3, jro1 < jmaxino0, jro5 < jmaxino3, inv(gstore3), inv(gstore2 \ jro4), log-cons(abs-log(nx1, gstore2 ↓), nodes(gstore2 ↓, jro4)), refsize-cons(gstore3, range fi3), refsize-cons(gstore2, range ri0), ri-inj(fi3), ri-inj(ri0), jmaxino0 ≤ jmaxino3, fi3.lebs ⊆ dom gstore3, ri0.lebs ⊆ dom gstore2, ¬ dups(nx1), jvalid8 ∧ nx1 ≠ [] → valid-journal-head(nx1, gstore2, jro4) ⊦ ⟪gjournal_restore_log#(nx1, fi3, fi3, jro4, crash(gstore2, gstore3, jro4, nx1), gstore3, nx1, jmaxino0, jro1, true; log; err); ks := jro1.keys⟫ ( ( err = ESUCCESS → (∃ ro. ⟨log0 := abs-log(nx1, gstore2 ↓); fs0 := nodes(gstore2 ↓, jro4); fo0 := jro1.keys; fi1 := fi3; fi0 := fi3; aubifs_core_recover#(jvalid2; ax, ks0, fi3, ro, fo0, log0, fs0; ri, jvalid, err1)⟩ ( jro1.keys = ro ∧ jro1.keys = fo0 ∧ fi1 = ri ∧ fi0 = fi3 ∧ log0 = abs-log(nx1, gstore2 ↓) ∧ fs0 = nodes(gstore2 ↓, jro4) ∧ log = ax ∧ ks = ks0 ∧ ESUCCESS = err1))) ∧ ( err ≠ ESUCCESS → (∀ ri, fi, ro, fo, fs, log0, jvalid0. ⟨aubifs_core_recover#(jvalid2; ax, ks0, fi5, ro1, fo1, log, fs1; ri1, jvalid7, err1)⟩ (ri = ri1 ∧ fi = fi5 ∧ ro = ro1 ∧ fo = fo1 ∧ fs = fs1 ∧ log0 = ax ∧ (jvalid0 ↔ jvalid7) ∧ log = ax ∧ ks = ks0 ∧ err = err1)))) |
elems nx ⊆ dom gstore, elems nx ∩ ginval = ∅, inv(gstore \ ginval) ⊦ ⟪gjournal_restore_log#(nx, ri, fi, ginval, gstore, gstore0, nx0, maxino, ns, boolvar0; ax; err)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ax = abs-log(nx, gstore ↓)))
boolvar ↔ true, fi2 = fi3, ginval0 = jro4, gstore1 = crash(gstore2, gstore3, jro4, nx1), gstore4 = gstore3, log = ax, maxino0 = jmaxino0, ns0 = jro1, nx2 = nx1, nx3 = nx1, remove-refsize0(gstore3) = gstore3, ri2 = fi3, elems nx1 ∩ jro4 = ∅, dom gstore3 ∪ elems nx1 = dom gstore2 ∪ jro4, jro5.keys.inodes?, jro1.keys.inodes?, jro5 < jmaxino3, jro1 < jmaxino0, ri0.inos < jmaxino3, fi3.inos < jmaxino0, inv(gstore2 \ jro4), inv(gstore3), inv(crash(gstore2, gstore3, jro4, nx1) \ jro4), log-cons(abs-log(nx1, gstore2 ↓), nodes(gstore2 ↓, jro4)), refsize-cons(gstore2, range ri0), refsize-cons(gstore3, range fi3), ri-inj(ri0), ri-inj(fi3), jmaxino0 ≤ jmaxino3, ri0.lebs ⊆ dom gstore2, fi3.lebs ⊆ dom gstore3, elems nx1 ⊆ dom crash(gstore2, gstore3, jro4, nx1), jvalid8 ∧ nx1 ≠ [] → valid-journal-head(nx1, gstore2, jro4) ⊦ [gjournal_restore_log#(nx1, fi3, fi3, jro4, crash(gstore2, gstore3, jro4, nx1), gstore3, nx1, jmaxino0, jro1, true; log; err)] ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → log = abs-log(nx2, gstore1 ↓)) → ⟪ks := jro1.keys⟫ ( ( err = ESUCCESS → (∃ ro. ⟨log0 := abs-log(nx1, gstore2 ↓); fs0 := nodes(gstore2 ↓, jro4); fo0 := jro1.keys; fi1 := fi3; fi0 := fi3; aubifs_core_recover#(jvalid2; ax, ks0, fi3, ro, fo0, log0, fs0; ri, jvalid, err1)⟩ ( jro1.keys = ro ∧ jro1.keys = fo0 ∧ fi1 = ri ∧ fi0 = fi3 ∧ log0 = abs-log(nx1, gstore2 ↓) ∧ fs0 = nodes(gstore2 ↓, jro4) ∧ log = ax ∧ ks = ks0 ∧ ESUCCESS = err1))) ∧ ( err ≠ ESUCCESS → (∀ ri, fi, ro, fo, fs, log0, jvalid0. ⟨aubifs_core_recover#(jvalid2; ax, ks0, fi5, ro1, fo1, log, fs1; ri1, jvalid7, err1)⟩ (ri = ri1 ∧ fi = fi5 ∧ ro = ro1 ∧ fo = fo1 ∧ fs = fs1 ∧ log0 = ax ∧ (jvalid0 ↔ jvalid7) ∧ log = ax ∧ ks = ks0 ∧ err = err1))))), jmaxino0 = 0, jmaxino3 = 0, dups(nx1)
Used simplifier rules: ⊦ dom crash(gstore, gstore0, ginval, nx) = dom gstore ∪ ginval; (s)%una: ⊦ (ns ∪ ns0) ∪ ns1 = ns ∪ ns0 ∪ ns1; from specification set-union[nat-set]%unc: ⊦ ns ∪ ns0 = ns0 ∪ ns; from specification set-union[nat-set]%⊦ ns ∪ elems nx = dom gstore ∪ ginval → elems nx ⊆ dom gstore ∪ ginval; (s)%⊦ inv(gstore \ ginval) ∧ inv(gstore0) ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval → inv(crash(gstore, gstore0, ginval, nx) \ ginval); (ss)