| # links(m2, cache_dirs) = cache_dirs[m2].nlink, asynced1 ↔ true, asynced0 ↔ old_ino = new_ino ∧ mkdentry(str0, entries[str0]) = mkdentry(str0, entries[str0]), cache_dirs[m2] = mkdir(cache_dirs[m2].size, md3, cache_dirs[m2].nlink, cache_dirs[m2].nsubdirs, entries), cache_files[entries[str0]] = mkfile(m1, md, # links(entries[str0], cache_dirs), content), ((cache_files ⊕ cache_pcache) ⊕ cache_icache)[entries[str0]] = mkfile(m8, md4, # links(entries[str0], cache_dirs), content0), entries[str0] = cache_dirs[m2].entries[str0], ¬ asynced0, dirs = dirs0[old_ino, dirs0[old_ino].size:= (dirs0[old_ino].size - 1)], dirs0 = cache_dirs[old_ino, cache_dirs[old_ino].entries:= (cache_dirs[old_ino].entries -- mkdentry(str0, entries[str0]).name)], new_ino = m2, old_dent = mkdentry(str0, entries[str0]), old_ino = m2, afs-cons(cache_dirs, (cache_files ⊕ cache_pcache) ⊕ cache_icache), afs-cons(cache_dirs, cache_files), afs-cons (cache_dirs[m2, mkdir(cache_dirs[m2].size, md5, cache_dirs[m2].nlink, cache_dirs[m2].nsubdirs, entries)], cache_files[entries[str0], mkfile(m, md0, # links(entries[str0], cache_dirs), content)]), dcache-cons (cache_dcache[dentrykey(m2, str0), mkdentry(str0, entries[str0])], cache_dirs[m2, mkdir(cache_dirs[m2].size, md5, cache_dirs[m2].nlink, cache_dirs[m2].nsubdirs, entries)], cache_files[entries[str0], mkfile(m, md0, # links(entries[str0], cache_dirs), content)]), dcache-cons(cache_dcache, cache_dirs, cache_files), icache-cons (cache_icache[m2, mkientry(false, mkinode(m2, md5, true, cache_dirs[m2].nlink, cache_dirs[m2].nsubdirs, cache_dirs[m2].size))] [entries[str0], mkientry(false, mkinode(entries[str0], md0, false, # links(entries[str0], cache_dirs), 0, m)) ], cache_dirs[m2, mkdir(cache_dirs[m2].size, md5, cache_dirs[m2].nlink, cache_dirs[m2].nsubdirs, entries)], cache_files[entries[str0], mkfile(m, md0, # links(entries[str0], cache_dirs), content)]), icache-cons(cache_icache, cache_dirs, cache_files), pcache-cons (cache_pcache, cache_dirs[m2, mkdir(cache_dirs[m2].size, md5, cache_dirs[m2].nlink, cache_dirs[m2].nsubdirs, entries)], cache_files[entries[str0], mkfile(m, md0, # links(entries[str0], cache_dirs), content)]), pcache-cons(cache_pcache, cache_dirs, cache_files), synced (cache_dirs[m2, mkdir(cache_dirs[m2].size, md5, cache_dirs[m2].nlink, cache_dirs[m2].nsubdirs, entries)], cache_icache[m2, mkientry(false, mkinode(m2, md5, true, cache_dirs[m2].nlink, cache_dirs[m2].nsubdirs, cache_dirs[m2].size))] [entries[str0], mkientry(false, mkinode(entries[str0], md0, false, # links(entries[str0], cache_dirs), 0, m)) ], cache_pcache), synced(cache_dirs, cache_icache, cache_pcache), str0 ∈ entries, m2 ∈ cache_dirs, entries[str0] ∈ cache_files, str0 ∈ cache_dirs[m2].entries, dirs0[old_ino].size ≥ 1, cache_sync → synced(cache_files, cache_icache, cache_pcache), cache_sync → synced (cache_files[entries[str0], mkfile(m, md0, # links(entries[str0], cache_dirs), content)], cache_icache[m2, mkientry(false, mkinode(m2, md5, true, cache_dirs[m2].nlink, cache_dirs[m2].nsubdirs, cache_dirs[m2].size))] [entries[str0], mkientry(false, mkinode(entries[str0], md0, false, # links(entries[str0], cache_dirs), 0, m)) ], cache_pcache), old_ino = new_ino → str0 ∈ entries ∧ str0 ∈ entries, links(m2, cache_dirs) ≠ ∅ ∨ m2 = ROOT_INO ⊦ old_dent.dentry?, entries[str0] ∈ cache_dirs |