| cache_dirs = cache_dirs0 \ orphans(cache_dirs0, cache_files0), cache_files = cache_files0 \ orphans(cache_dirs0, cache_files0), afs-cons(cache_dirs0, (cache_files0 ⊕ cache_pcache0) ⊕ cache_icache0), afs-cons(cache_dirs0, cache_files0), dcache-cons(cache_dcache0, cache_dirs0, cache_files0), icache-cons(cache_icache0, cache_dirs0, cache_files0), pcache-cons(cache_pcache0, cache_dirs0, cache_files0), synced(cache_dirs0, cache_icache0, cache_pcache0), cache_sync0 → synced(cache_files0, cache_icache0, cache_pcache0) ⊦ ⟪cache_recovery#(asynced0; cache_dirs, cache_files, cache_asynced, cache_icache, cache_dcache, cache_pcache; cache_sync, err)⟫ ( ( err = ESUCCESS → ⟨afs_dirs0 := cache_dirs0 \ orphans(cache_dirs0, (cache_files0 ⊕ cache_pcache0) ⊕ cache_icache0), afs_files0 := ((cache_files0 ⊕ cache_pcache0) ⊕ cache_icache0) \ orphans(cache_dirs0, (cache_files0 ⊕ cache_pcache0) ⊕ cache_icache0); afs_recovery#(asynced0; afs_dirs0, afs_files0; afs_asynced, err0)⟩ (afs_dirs0 = cache_dirs ∧ afs_files0 = (cache_files ⊕ cache_pcache) ⊕ cache_icache ∧ (afs_asynced ↔ cache_asynced) ∧ ESUCCESS = err0)) ∧ ( err ≠ ESUCCESS → (∀ dirs, files, asynced. ⟨afs_recovery#(asynced0; afs_dirs, afs_files; afs_asynced, err0)⟩ (dirs = afs_dirs ∧ files = afs_files ∧ (asynced ↔ afs_asynced) ∧ err = err0)))) |
asynced1 ↔ asynced2, asynced0 ↔ cache_asynced, cache_dirs = cache_dirs0 \ orphans(cache_dirs0, cache_files0), cache_files = cache_files0 \ orphans(cache_dirs0, cache_files0), dcache = cache_dcache, dirs = cache_dirs, files = cache_files, icache = cache_icache, pcache = cache_pcache, afs-cons(cache_dirs0, cache_files0), afs-cons(cache_dirs0, (cache_files0 ⊕ cache_pcache0) ⊕ cache_icache0), dcache-cons(cache_dcache0, cache_dirs0, cache_files0), icache-cons(cache_icache0, cache_dirs0, cache_files0), pcache-cons(cache_pcache0, cache_dirs0, cache_files0), synced(cache_dirs0, cache_icache0, cache_pcache0), cache_sync0 → synced(cache_files0, cache_icache0, cache_pcache0) ⊦ ⟪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 → ⟨afs_dirs0 := cache_dirs0 \ orphans(cache_dirs0, (cache_files0 ⊕ cache_pcache0) ⊕ cache_icache0), afs_files0 := ((cache_files0 ⊕ cache_pcache0) ⊕ cache_icache0) \ orphans(cache_dirs0, (cache_files0 ⊕ cache_pcache0) ⊕ cache_icache0); afs_recovery#(asynced2; afs_dirs0, afs_files0; afs_asynced, err0)⟩ (afs_dirs0 = dirs ∧ afs_files0 = (files ⊕ pcache) ⊕ icache ∧ (afs_asynced ↔ asynced0) ∧ ESUCCESS = err0)) ∧ ( err ≠ ESUCCESS → (∀ dirs, files, asynced. ⟨afs_recovery#(asynced2; afs_dirs, afs_files; afs_asynced, err0)⟩ (dirs = afs_dirs ∧ files = afs_files ∧ (asynced ↔ afs_asynced) ∧ err = err0))))
Used simplifier rules: cache_recovery# (DOSYNC; DIRS, FILES, ASYNCED, ICACHE, DCACHE, PCACHE; SYNC, ERR) {SYNC := DOSYNC; afs_recovery#(DOSYNC; DIRS, FILES; ASYNCED, 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) };