| dirs0 = abs-dirs(fs0, ri), fi1 = fi0, files0 = abs-files(fs0, ri), fo1 = fo0, fs1 = fs0, log1 = log0, fo0.inodes?, orphans(fs0, ri).inodes?, afs-cons(abs-dirs(fs0, ri), abs-files(fs0, ri)), file-node-cons(fs0, ri), log-cons(log0, fs0), orphans-cons(fs0, ri, orphans(fs0, ri)), replay-cons-strong(fs0, ri, orphans(fs0, ri), fi0, fo0, log0), replay-safe(log0, fs0, fi0 ⊖ fo0), ri-inj(fi0), ri-inj(ri), ubifs-cons(fs0, ri, orphans(fs0, ri), fi0, fo0, log0) ⊦ [aubifs_replay#(boolvar2; ri0, fi0, ro0, fo0, fs0, log0, boolvar3; err)] ( ( err = ESUCCESS → boolvar3 ∧ ubifs-cons(fs0, ri0, ro0, fi0, fo0, log0) ∧ replay-cons-strong(fs0, ri0, ro0, fi0, fo0, log0) ∧ file-node-cons(fs0, ri0) ∧ orphans-cons(fs0, ri0, ro0) ∧ ri-inj(ri0) ∧ ri-inj(fi0) ∧ log-cons(log0, fs0) ∧ ro0.inodes? ∧ fo0.inodes?) → (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ri0 = replay-log(log1, fs1, fi1 ⊖ fo1) ∧ ro0 = ∅ ∧ fs0 = fs1 ∧ fi0 = fi1 ∧ fo0 = fo1 ∧ log0 = log1 ∧ boolvar3) → ( err = ESUCCESS → ⟨dirs := dirs0 \ orphans(dirs0, files0), files := files0 \ orphans(dirs0, files0); afs_recovery#(boolvar2; dirs, files; asynced, err0)⟩ ( dirs = abs-dirs(fs0, ri0) ∧ files = abs-files(fs0, ri0) ∧ orphans(abs-dirs(fs0, ri0), abs-files(fs0, ri0)) = abs-keys(ro0) ∧ (asynced → boolvar3) ∧ ESUCCESS = err0)) ∧ ( err ≠ ESUCCESS → (∀ dirs, files, boolvar. ⟨afs_recovery#(boolvar2; dirs1, files1; asynced0, err0)⟩ (dirs = dirs1 ∧ files = files1 ∧ (boolvar ↔ asynced0) ∧ err = err0)))) |
boolvar0 ↔ boolvar2, boolvar ↔ boolvar3, dirs0 = abs-dirs(fs0, ri1), fi = fi0, fi1 = fi0, files0 = abs-files(fs0, ri1), fo = fo0, fo1 = fo0, fs = fs0, fs1 = fs0, log = log0, log1 = log0, ri = ri0, ro = ro0, orphans(fs0, ri1).inodes?, fo0.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) ⊦ [let ax = ?, ks = ? in {aubifs_core_recover#(boolvar0; ax, ks, fi, ro, fo, log, fs; ri, boolvar, err); if err = ESUCCESS then aubifs_replayorphans#(fi, fo, fs, log, boolvar; ks, err, ri, ro); if err = ESUCCESS then aubifs_replaylog#(ax, fi, ro, fo, fs, log, boolvar; err, ri); if err = ESUCCESS then aubifs_core_journal_sync#(ri, fi, ro, fo, fs, log; ; boolvar, err)}] ( ( err = 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?) → (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ri = replay-log(log1, fs1, fi1 ⊖ fo1) ∧ ro = ∅ ∧ fs = fs1 ∧ fi = fi1 ∧ fo = fo1 ∧ log = log1 ∧ boolvar) → ( err = ESUCCESS → ⟨dirs := dirs0 \ orphans(dirs0, files0), files := files0 \ orphans(dirs0, files0); afs_recovery#(boolvar2; dirs, files; asynced, err0)⟩ ( 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 = err0)) ∧ ( err ≠ ESUCCESS → (∀ dirs, files, boolvar. ⟨afs_recovery#(boolvar2; dirs1, files1; asynced0, err0)⟩ (dirs = dirs1 ∧ files = files1 ∧ (boolvar ↔ asynced0) ∧ err = err0))))
Used simplifier rules: aubifs_replay#(DOSYNC; RI, FI, RO, FO, FS, LOG, CSYNCED; ERR) {let AX = ?, KS = ? in {aubifs_core_recover# (DOSYNC; AX, KS, FI, RO, FO, LOG, FS; RI, CSYNCED, ERR); if ERR = ESUCCESS then aubifs_replayorphans# (FI, FO, FS, LOG, CSYNCED; KS, ERR, RI, RO); if ERR = ESUCCESS then aubifs_replaylog#(AX, FI, RO, FO, FS, LOG, CSYNCED; ERR, RI); if ERR = ESUCCESS then aubifs_core_journal_sync# (RI, FI, RO, FO, FS, LOG; ; CSYNCED, ERR)} };