| asynced3 ↔ asynced2, asynced0 ↔ asynced1, 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; 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)) |
asynced0 ↔ asynced1, asynced3 ↔ asynced2, asynced ↔ true, dcache = dcache0, dirs = dirs0 \ orphans(dirs0, files1), err = ESUCCESS, 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) ⊦ ⟪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))