| asynced3 ↔ cache_asynced, asynced1 ↔ asynced2, asynced0 ↔ asynced1, cache_dirs = cache_dirs0 \ orphans(cache_dirs0, cache_files0), cache_files = cache_files0 \ orphans(cache_dirs0, cache_files0), dcache = cache_dcache, dirs0 = cache_dirs, err = err0, files0 = cache_files, icache = cache_icache, pcache = cache_pcache, 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) ⊦ ⟪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, err1)⟩ (afs_dirs0 = dirs ∧ afs_files0 = (files ⊕ pcache) ⊕ icache ∧ (afs_asynced ↔ asynced) ∧ ESUCCESS = err1)) ∧ ( err ≠ ESUCCESS → (∀ dirs, files, asynced. ⟨afs_recovery#(asynced2; afs_dirs, afs_files; afs_asynced, err1)⟩ (dirs = afs_dirs ∧ files = afs_files ∧ (asynced ↔ afs_asynced) ∧ err = err1)))) |
asynced0 ↔ asynced1, asynced1 ↔ asynced2, asynced3 ↔ cache_asynced, cache_dirs = cache_dirs0 \ orphans(cache_dirs0, cache_files0), cache_files = cache_files0 \ orphans(cache_dirs0, cache_files0), dcache = cache_dcache, dirs0 = cache_dirs, err = err0, files0 = 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), ⌊err0⌋ , cache_sync0 → synced(cache_files0, cache_icache0, cache_pcache0) ⊦ ⟪skip⟫ ( ( 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, err1)⟩ (afs_dirs0 = dirs ∧ afs_files0 = (files ⊕ pcache) ⊕ icache ∧ (afs_asynced ↔ asynced) ∧ ESUCCESS = err1)) ∧ ( err ≠ ESUCCESS → (∀ dirs, files, asynced. ⟨afs_recovery#(asynced2; afs_dirs, afs_files; afs_asynced, err1)⟩ (dirs = afs_dirs ∧ files = afs_files ∧ (asynced ↔ afs_asynced) ∧ err = err1))))
Used simplifier rules: ⊦ ⌊err⌋ → err ≠ ESUCCESS; (s)