| dirs = dirs0 \ orphans(dirs0, files), files0 = files \ orphans(dirs0, files), afs-cons(dirs0, files), dcache-cons(dcache, dirs0, files), icache-cons(icache, dirs0, files), pcache-cons(pcache, dirs0, files), synced(dirs0, icache, pcache), asynced0 → synced(files, icache, pcache) ⊦ ⟪cache_recovery#(asynced1; dirs, files0, asynced2, icache0, dcache0, pcache0; asynced3, err)⟫ ( err = ESUCCESS → asynced2 ∧ icache-cons(icache0, dirs, files0) ∧ dcache-cons(dcache0, dirs, files0) ∧ pcache-cons(pcache0, dirs, files0) ∧ synced(dirs, icache0, pcache0) ∧ (asynced3 → synced(files0, icache0, pcache0)) ∧ afs-cons(dirs, files0)) |
asynced0 ↔ asynced2, dcache = dcache0, dirs = dirs0 \ orphans(dirs0, files1), files = files0, files0 = files1 \ orphans(dirs0, files1), icache = icache0, pcache = pcache0, afs-cons(dirs0, files1), dcache-cons(dcache1, dirs0, files1), icache-cons(icache1, dirs0, files1), pcache-cons(pcache1, dirs0, files1), synced(dirs0, icache1, pcache1), asynced4 → synced(files1, icache1, pcache1) ⊦ ⟪asynced := asynced1; afs_recovery#(asynced1; dirs, files; asynced0, err); if err = ESUCCESS then icache_recovery#(; ; icache, err); if err = ESUCCESS then dcache_recovery#(; ; dcache, err); if err = ESUCCESS then pcache_recovery#(; ; pcache, err)⟫ ( err = ESUCCESS → asynced0 ∧ icache-cons(icache, dirs, files) ∧ dcache-cons(dcache, dirs, files) ∧ pcache-cons(pcache, dirs, files) ∧ synced(dirs, icache, pcache) ∧ (asynced → synced(files, icache, pcache)) ∧ afs-cons(dirs, files))
Used simplifier rules: recover: ⊦ ;