| jro1.keys = fo0, jro2.keys = ro0, jvalid3 ↔ jvalid4, fi0 = fi1, fi1 = fi3, fi2 = ri0, fs0 = nodes(gstore0 ↓, jro0), gstore = crash(gstore0, gstore1, jro0, nx), gstore2 = gstore1, jro = jro0, jvalid1, ks = ks0, log0 = abs-log(nx, gstore0 ↓), log1 = ax, nx0 = nx, p_os = jro1, pmaxino = jmaxino, fo0.inodes?, ro0.inodes?, fi1.inos < jmaxino, fi2.inos < jmaxino0, jro1 < jmaxino, jro2 < jmaxino0, inv-journal(nx, gstore0, gstore1, jro0), log-cons(log0, fs0), refsize-cons(gstore1, range fi1), refsize-cons(gstore0, range fi2), ri-inj(fi1), ri-inj(fi2), ri-inj(fi3), ri-inj(ri0), jmaxino ≤ jmaxino0, fi1.lebs ⊆ dom gstore1, fi2.lebs ⊆ dom gstore0, jvalid2 ∧ nx ≠ [] → valid-journal-head(nx, gstore0, jro0), jvalid0 → jvalid1 ⊦ ⟪gjournal_recover# (jvalid3; log1, ks, jmaxino1, jro3, fi4, fi0, jro, gstore, gstore2, nx0, pmaxino, p_os, jvalid5; jvalid6, jmaxino2, jvalid4, err)⟫ ( ( err = ESUCCESS → (∃ ri, fi, ro, fo, fs, log, jvalid. (fi = fi3 ∧ fo = fo0 ∧ fs = fs0 ∧ log = log0) ∧ ⟨aubifs_core_recover#(jvalid4; ax, ks0, fi, ro, fo, log, fs; ri, jvalid, err0)⟩ ( ( jro3.keys = ro ∧ p_os.keys = fo ∧ fi4 = ri ∧ fi0 = fi ∧ log = abs-log(nx0, gstore ↓) ∧ fs = nodes(gstore ↓, jro) ∧ (jvalid → jvalid5)) ∧ log1 = ax ∧ ks = ks0 ∧ err = err0))) ∧ ( err ≠ ESUCCESS → (∀ ri, fi, ro, fo, fs, log, jvalid. ⟨aubifs_core_recover#(jvalid4; ax, ks0, fi5, ro1, fo1, log1, fs1; ri1, jvalid7, err0)⟩ (ri = ri1 ∧ fi = fi5 ∧ ro = ro1 ∧ fo = fo1 ∧ fs = fs1 ∧ log = log1 ∧ (jvalid ↔ jvalid7) ∧ log1 = ax ∧ ks = ks0 ∧ err = err0)))), jmaxino = 0, jmaxino0 = 0 |
jro1.keys = fo0, fi0 = fi3, fs0 = nodes(gstore0 ↓, jro0), gstore = crash(gstore0, gstore1, jro0, nx), ks = ks0, log0 = abs-log(nx, gstore0 ↓), log1 = ax, remove-refsize0(gstore1) = gstore1, elems nx ∩ jro0 = ∅, dom gstore1 ∪ elems nx = dom gstore0 ∪ jro0, jmaxino ≠ 0, jmaxino0 ≠ 0, jro2.keys.inodes?, jro1.keys.inodes?, jro2 < jmaxino0, jro1 < jmaxino, ri0.inos < jmaxino0, fi3.inos < jmaxino, inv(gstore0 \ jro0), inv(gstore1), log-cons(abs-log(nx, gstore0 ↓), nodes(gstore0 ↓, jro0)), refsize-cons(gstore0, range ri0), refsize-cons(gstore1, range fi3), ri-inj(ri0), ri-inj(fi3), jmaxino ≤ jmaxino0, ri0.lebs ⊆ dom gstore0, fi3.lebs ⊆ dom gstore1, ¬ dups(nx), jvalid2 ∧ nx ≠ [] → valid-journal-head(nx, gstore0, jro0) ⊦ ⟪gjournal_recover# (jvalid3; log1, ks, jmaxino1, jro3, fi4, fi0, jro0, gstore, gstore1, nx, jmaxino, jro1, jvalid5; jvalid6, jmaxino2, jvalid4, err)⟫ ( ( err = ESUCCESS → (∃ ro. ⟨aubifs_core_recover#(jvalid4; ax, ks0, fi3, ro, fo0, log0, fs0; ri, jvalid, err0)⟩ ( jro3.keys = ro ∧ jro1.keys = fo0 ∧ fi4 = ri ∧ fi0 = fi3 ∧ log0 = abs-log(nx, gstore ↓) ∧ fs0 = nodes(gstore ↓, jro0) ∧ (jvalid → jvalid5) ∧ log1 = ax ∧ ks = ks0 ∧ ESUCCESS = err0))) ∧ ( err ≠ ESUCCESS → (∀ ri, fi, ro, fo, fs, log, jvalid. ⟨aubifs_core_recover#(jvalid4; ax, ks0, fi5, ro1, fo1, log1, fs1; ri1, jvalid7, err0)⟩ (ri = ri1 ∧ fi = fi5 ∧ ro = ro1 ∧ fo = fo1 ∧ fs = fs1 ∧ log = ax ∧ (jvalid ↔ jvalid7) ∧ log1 = ax ∧ ks = ks0 ∧ err = err0))))
Used simplifier rules: ⊦ inv-journal(nx, gstore, gstore0, ginval) ↔ inv(gstore \ ginval) ∧ inv(gstore0) ∧ elems nx ∩ ginval = ∅ ∧ ¬ dups(nx) ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval ∧ remove-refsize0(gstore0) = gstore0; (s)