| afs_asynced ↔ cache_asynced, asynced ↔ asynced0, ((cache_files ⊕ cache_pcache) ⊕ cache_icache)[m] = mkfile(m0, md0, m1, content), afs_dirs = cache_dirs, afs_files = (cache_files ⊕ cache_pcache) ⊕ cache_icache, buf-opt = buf-opt0, err = err0, inode = mkinode(m, md, false, m1, 0, m2), afs-cons(cache_dirs, (cache_files ⊕ cache_pcache) ⊕ cache_icache), afs-cons(cache_dirs, cache_files), dcache-cons(cache_dcache, cache_dirs, cache_files), icache-cons(cache_icache, cache_dirs, cache_files), pcache-cons(cache_pcache, cache_dirs, cache_files), synced(cache_dirs, cache_icache, cache_pcache), m ∈ cache_files, datakey(m, m2 / VFS_PAGE_SIZE) ∈ cache_pcache, cache_sync → synced(cache_files, cache_icache, cache_pcache) ⊦ buf-opt0.some?, valid-file-inode(inode, cache_dirs, (cache_files ⊕ cache_pcache) ⊕ cache_icache) ∧ m2 / VFS_PAGE_SIZE = inode.size / VFS_PAGE_SIZE ∧ buf-opt.none? ∧ datakey(inode.ino, m2 / VFS_PAGE_SIZE) ∈ cache_pcache ∧ cache_dirs = cache_dirs ∧ (cache_files ⊕ cache_pcache) ⊕ cache_icache = (cache_files ⊕ cache_pcache) ⊕ cache_icache ∧ (cache_asynced ↔ cache_asynced) ∧ afs-cons(cache_dirs, (cache_files ⊕ cache_pcache) ⊕ cache_icache) ∧ icache-cons(cache_icache, cache_dirs, cache_files) ∧ dcache-cons(cache_dcache, cache_dirs, cache_files) ∧ pcache-cons(cache_pcache, cache_dirs, cache_files) ∧ synced(cache_dirs, cache_icache, cache_pcache) ∧ (cache_sync → synced(cache_files, cache_icache, cache_pcache)) ∧ afs-cons(cache_dirs, cache_files) ∧ buf-opt = buf-opt ∧ inode = inode ∧ (asynced ↔ asynced) ∧ err = err |
((cache_files ⊕ cache_pcache) ⊕ cache_icache)[m] = mkfile(m0, md0, m1, content), afs-cons(cache_dirs, (cache_files ⊕ cache_pcache) ⊕ cache_icache), afs-cons(cache_dirs, cache_files), dcache-cons(cache_dcache, cache_dirs, cache_files), icache-cons(cache_icache, cache_dirs, cache_files), pcache-cons(cache_pcache, cache_dirs, cache_files), synced(cache_dirs, cache_icache, cache_pcache), m ∈ cache_files, datakey(m, m2 / VFS_PAGE_SIZE) ∈ cache_pcache, cache_sync → synced(cache_files, cache_icache, cache_pcache) ⊦ buf-opt0 = none, buf-opt0.some?
Used simplifier rules: ⊦ mkfile(m, md, m0, content).nlink = m0; (s)% ⊦ buf-opt.none? ↔ buf-opt = none; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).size = m2; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).directory ↔ boolvar; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).nsubdirs = m1; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).nlink = m0; (s)% ⊦ ino ∈ files ⊕ pcache ↔ ino ∈ files; (s)% ⊦ ino ∈ files ⊕ icache ↔ ino ∈ files; (s)% ⊦ valid-file-ino(ino, dirs, files) ↔ ino ∈ files; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).ino = m; (s)%⊦ valid-file-inode(inode, dirs, files) ↔ valid-file-ino(inode.ino, dirs, files) ∧ inode.nlink = files[inode.ino].nlink ∧ inode.nsubdirs = 0 ∧ ¬ inode.directory; (s)