| err0 = ESUCCESS, ks = fo0, ri = fi0, ro = fo0, fo0.inodes?, orphans(fs0, ri1).inodes?, afs-cons(abs-dirs(fs0, ri1), abs-files(fs0, ri1)), file-node-cons(fs0, ri1), log-cons(log0, fs0), orphans-cons(fs0, ri1, orphans(fs0, ri1)), replay-cons-strong(fs0, ri1, orphans(fs0, ri1), fi0, fo0, log0), replay-safe(log0, fs0, fi0 ⊖ fo0), ri-inj(fi0), ri-inj(ri1), ubifs-cons(fs0, ri1, orphans(fs0, ri1), fi0, fo0, log0) ⊦ [aubifs_replayorphans#(fi0, fo0, fs0, log0, true; ks, err0, ri, ro); log := log0; fs := fs0; fo := fo0; fi := fi0; boolvar := true; if err0 = ESUCCESS then aubifs_replaylog#(log0, fi, ro, fo, fs, log, boolvar; err0, ri); if err0 = ESUCCESS then aubifs_core_journal_sync#(ri, fi, ro, fo, fs, log; ; boolvar, err0)] ( ( err0 = ESUCCESS → boolvar ∧ ubifs-cons(fs, ri, ro, fi, fo, log) ∧ replay-cons-strong(fs, ri, ro, fi, fo, log) ∧ file-node-cons(fs, ri) ∧ orphans-cons(fs, ri, ro) ∧ ri-inj(ri) ∧ ri-inj(fi) ∧ log-cons(log, fs) ∧ ro.inodes? ∧ fo.inodes?) → (err0 = ESUCCESS ∨ ⌊err0⌋ ) ∧ (err0 = ESUCCESS → ri = replay-log(log0, fs0, fi0 ⊖ fo0) ∧ ro = ∅ ∧ fs = fs0 ∧ fi = fi0 ∧ fo = fo0 ∧ log = log0 ∧ boolvar) → ( err0 = ESUCCESS → ⟨dirs := abs-dirs(fs0, ri1) \ abs-keys(orphans(fs0, ri1)), files := abs-files(fs0, ri1) \ abs-keys(orphans(fs0, ri1)); afs_recovery#(boolvar2; dirs, files; asynced, err1)⟩ ( dirs = abs-dirs(fs, ri) ∧ files = abs-files(fs, ri) ∧ orphans(abs-dirs(fs, ri), abs-files(fs, ri)) = abs-keys(ro) ∧ (asynced → boolvar) ∧ ESUCCESS = err1)) ∧ ( err0 ≠ ESUCCESS → (∀ dirs, files, boolvar. ⟨afs_recovery#(boolvar2; dirs1, files1; asynced0, err1)⟩ (dirs = dirs1 ∧ files = files1 ∧ (boolvar ↔ asynced0) ∧ err0 = err1)))) |
ri = ri0, ro0 = ro, ks = ro, err = ESUCCESS, ks.inodes? ⊦ ⟪aubifs_replayorphans#(fi, fo, fs, log, boolvar; ks, err, ri, ro)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ks = ro ∧ ro = ∅ ∧ ri = ri0 ⊖ ro0))
boolvar0 ↔ true, err0 = ESUCCESS, fi1 = fi0, fo1 = fo0, fs1 = fs0, ks = fo0, ks = ro, log1 = log0, ri = fi0, ri = ri, ri2 = ri, ro = fo0, ro = ro, ro1 = ro, orphans(fs0, ri1).inodes?, fo0.inodes?, ks.inodes?, afs-cons(abs-dirs(fs0, ri1), abs-files(fs0, ri1)), file-node-cons(fs0, ri1), log-cons(log0, fs0), orphans-cons(fs0, ri1, orphans(fs0, ri1)), replay-cons-strong(fs0, ri1, orphans(fs0, ri1), fi0, fo0, log0), replay-safe(log0, fs0, fi0 ⊖ fo0), ri-inj(ri1), ri-inj(fi0), ubifs-cons(fs0, ri1, orphans(fs0, ri1), fi0, fo0, log0) ⊦ [aubifs_replayorphans#(fi0, fo0, fs0, log0, true; ks, err0, ri, ro)] ( (err0 = ESUCCESS ∨ ⌊err0⌋ ) ∧ (err0 = ESUCCESS → ks = ro ∧ ro = ∅ ∧ ri = ri2 ⊖ ro1) → [log := log0; fs := fs0; fo := fo0; fi := fi0; boolvar := true; if err0 = ESUCCESS then aubifs_replaylog#(log0, fi, ro, fo, fs, log, boolvar; err0, ri); if err0 = ESUCCESS then aubifs_core_journal_sync#(ri, fi, ro, fo, fs, log; ; boolvar, err0)] ( ( err0 = ESUCCESS → boolvar ∧ ubifs-cons(fs, ri, ro, fi, fo, log) ∧ replay-cons-strong(fs, ri, ro, fi, fo, log) ∧ file-node-cons(fs, ri) ∧ orphans-cons(fs, ri, ro) ∧ ri-inj(ri) ∧ ri-inj(fi) ∧ log-cons(log, fs) ∧ ro.inodes? ∧ fo.inodes?) → (err0 = ESUCCESS ∨ ⌊err0⌋ ) ∧ (err0 = ESUCCESS → ri = replay-log(log0, fs0, fi0 ⊖ fo0) ∧ ro = ∅ ∧ fs = fs0 ∧ fi = fi0 ∧ fo = fo0 ∧ log = log0 ∧ boolvar) → ( err0 = ESUCCESS → ⟨dirs := abs-dirs(fs0, ri1) \ abs-keys(orphans(fs0, ri1)), files := abs-files(fs0, ri1) \ abs-keys(orphans(fs0, ri1)); afs_recovery#(boolvar2; dirs, files; asynced, err1)⟩ ( dirs = abs-dirs(fs, ri) ∧ files = abs-files(fs, ri) ∧ orphans(abs-dirs(fs, ri), abs-files(fs, ri)) = abs-keys(ro) ∧ (asynced → boolvar) ∧ ESUCCESS = err1)) ∧ ( err0 ≠ ESUCCESS → (∀ dirs, files, boolvar. ⟨afs_recovery#(boolvar2; dirs1, files1; asynced0, err1)⟩ (dirs = dirs1 ∧ files = files1 ∧ (boolvar ↔ asynced0) ∧ err0 = err1)))))
Used simplifier rules: ⊦ ubifs-cons(fs, ri, ro, fi, fo, log) → fo.inodes?; (ss)