| 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) ⊦ ⟪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) ∧ (asynced1 → synced(files, icache, pcache)) ∧ afs-cons(dirs, files)) |
asynced0 ↔ asynced1, asynced3 ↔ 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 := true, err := ESUCCESS or {dirs := ?, files := ?, asynced := ?; fail#(; ; 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 → asynced ∧ icache-cons(icache, dirs, files) ∧ dcache-cons(dcache, dirs, files) ∧ pcache-cons(pcache, dirs, files) ∧ synced(dirs, icache, pcache) ∧ (asynced1 → synced(files, icache, pcache)) ∧ afs-cons(dirs, files))
Used simplifier rules: afs_recovery#(DOSYNC; DIRS, FILES; ASYNCED, ERR) { ASYNCED := true, ERR := ESUCCESS or {DIRS := ?, FILES := ?, ASYNCED := ?; fail#(; ; ERR)} };