| ⊦ ⟪cache_format#(n, asynced0, LEB_SIZE, md; cache_dirs, cache_files, cache_asynced, cache_icache, cache_dcache, cache_pcache; cache_sync, err)⟫ ( ( err = ESUCCESS → ⟨afs_format#(n, asynced0, LEB_SIZE, md; afs_dirs; afs_files, afs_asynced, err0)⟩ (afs_dirs = cache_dirs ∧ afs_files = (cache_files ⊕ cache_pcache) ⊕ cache_icache ∧ (afs_asynced ↔ cache_asynced) ∧ ESUCCESS = err0)) ∧ ( err ≠ ESUCCESS → (∀ dirs, files, asynced. ⟨afs_format#(n, asynced0, LEB_SIZE, md; afs_dirs; afs_files, afs_asynced, err0)⟩ (dirs = afs_dirs ∧ files = afs_files ∧ (asynced ↔ afs_asynced) ∧ err = err0)))) |
asynced1 ↔ asynced2, asynced0 ↔ cache_asynced, dcache = cache_dcache, dirs = cache_dirs, files = cache_files, icache = cache_icache, pcache = cache_pcache, size = LEB_SIZE ⊦ ⟪if size = LEB_SIZE then {asynced := asynced1; afs_format#(n, asynced1, size, md; dirs; files, asynced0, err); if err = ESUCCESS then icache_format#(; ; icache, err); if err = ESUCCESS then dcache_format#(; ; dcache, err); if err = ESUCCESS then pcache_format#(; ; pcache, err)} else abort⟫ ( ( err = ESUCCESS → ⟨afs_format#(n, asynced2, LEB_SIZE, md; afs_dirs; afs_files, afs_asynced, err0)⟩ (afs_dirs = dirs ∧ afs_files = (files ⊕ pcache) ⊕ icache ∧ (afs_asynced ↔ asynced0) ∧ ESUCCESS = err0)) ∧ ( err ≠ ESUCCESS → (∀ dirs, files, asynced. ⟨afs_format#(n, asynced2, LEB_SIZE, md; afs_dirs; afs_files, afs_asynced, err0)⟩ (dirs = afs_dirs ∧ files = afs_files ∧ (asynced ↔ afs_asynced) ∧ err = err0))))
Used simplifier rules: cache_format# (N, DOSYNC, SIZE, MD ; DIRS, FILES, ASYNCED, ICACHE, DCACHE, PCACHE ; SYNC, ERR ) {if SIZE = LEB_SIZE then {SYNC := DOSYNC; afs_format#(N, DOSYNC, SIZE, MD; DIRS; FILES, ASYNCED, ERR); if ERR = ESUCCESS then icache_format#(; ; ICACHE, ERR); if ERR = ESUCCESS then dcache_format#(; ; DCACHE, ERR); if ERR = ESUCCESS then pcache_format#(; ; PCACHE, ERR)} else abort };