| cache_dirs = cache_dirs0 \ orphans(cache_dirs0, cache_files0), cache_files = cache_files0 \ orphans(cache_dirs0, cache_files0), afs_dirs0 = cache_dirs0, afs_files0 = (cache_files0 ⊕ cache_pcache0) ⊕ cache_icache0, afs_asynced0 ↔ cache_asynced0, cache_asynced0, afs-cons(afs_dirs0, afs_files0), icache-cons(cache_icache0, cache_dirs0, cache_files0), dcache-cons(cache_dcache0, 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), afs-cons(cache_dirs0, cache_files0) ⊦ ⟪cache_recovery#(asynced0; cache_dirs, cache_files, cache_asynced, cache_icache, cache_dcache, cache_pcache; cache_sync, err)⟫ ( ( err = ESUCCESS → (∃ afs_dirs, afs_files, afs_asynced. (afs_dirs = afs_dirs0 \ orphans(afs_dirs0, afs_files0) ∧ afs_files = afs_files0 \ orphans(afs_dirs0, afs_files0)) ∧ ⟨afs_recovery#(asynced0; afs_dirs, afs_files; afs_asynced, err0)⟩ ((afs_dirs = cache_dirs ∧ afs_files = (cache_files ⊕ cache_pcache) ⊕ cache_icache ∧ (afs_asynced ↔ cache_asynced)) ∧ err = 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)))) |