| 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), ⌊err0⌋ , cache_sync0 → synced(cache_files0, cache_icache0, cache_pcache0) ⊦ ⟨afs_recovery#(asynced2; afs_dirs, afs_files; afs_asynced, err1)⟩ (dirs = afs_dirs ∧ files = afs_files ∧ (asynced ↔ afs_asynced) ∧ err0 = err1) |
asynced0 ↔ asynced2, dirs = afs_dirs, files = afs_files, 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), ⌊err0⌋ , cache_sync0 → synced(cache_files0, cache_icache0, cache_pcache0) ⊦ ⟨asynced := true, err := ESUCCESS or {dirs := ?, files := ?, asynced := ?; fail#(; ; err)}⟩ (dirs0 = dirs ∧ files0 = files ∧ (asynced1 ↔ asynced) ∧ err0 = err)
Used simplifier rules: afs_recovery#(DOSYNC; DIRS, FILES; ASYNCED, ERR) { ASYNCED := true, ERR := ESUCCESS or {DIRS := ?, FILES := ?, ASYNCED := ?; fail#(; ; ERR)} };