| dirs = dirs0 \ orphans(dirs0, files), files0 = files \ orphans(dirs0, files), tree0.dir?, dom of < ino, abs(tree0, ROOT_INO)(dirs0), afs-cons(dirs0, files), fids-cons(tree0, abs-files(files), abs-of(of)), of-cons(of, dirs0, files) ⊦ ⟪vfs_recover#(isdir2; dirs, files0, asynced; of0, ino0, err)⟫ ( ( err = ESUCCESS → (∃ root, fs, ofh. posix-crash(tree0, abs-files(files), abs-of(of), root, fs, ofh) ∧ ⟨posix_recover#(isdir2; root, fs, ofh; psynced, err0)⟩ (ofh = abs-of(of0) ∧ fs = abs-files(files0) ∧ abs(root, ROOT_INO)(dirs) ∧ (psynced → asynced) ∧ ESUCCESS = err0))) ∧ ( err ≠ ESUCCESS → (∀ tree, fs, ofh, isdir. ⟨posix_recover#(isdir2; root0, fs1, ofh1; psynced0, err0)⟩ (tree = root0 ∧ fs = fs1 ∧ ofh = ofh1 ∧ (isdir ↔ psynced0) ∧ err = err0)))) |
dirs = dirs0 \ orphans(dirs0, files), files0 = files \ orphans(dirs0, files), isdir, of-cons(of, dirs0, files), dom of < ino, afs-cons(dirs0, files) ⊦ ⟪vfs_recover#(isdir0; dirs, files0, asynced; of0, ino0, err)⟫ (err = ESUCCESS → asynced ∧ of-cons(of0, dirs, files0) ∧ dom of0 < ino0 ∧ afs-cons(dirs, files0))
isdir1 ↔ true, isdir3 ↔ isdir2, dirs = dirs0 \ orphans(dirs0, files), dirs1 = dirs0, files0 = files \ orphans(dirs0, files), files1 = files, ino1 = ino, of1 = of, tree0.dir?, dom of < ino, abs(tree0, ROOT_INO)(dirs0), afs-cons(dirs0, files), fids-cons(tree0, abs-files(files), abs-of(of)), of-cons(of, dirs0, files) ⊦ [vfs_recover#(isdir2; dirs, files0, asynced; of0, ino0, err)] ( (err = ESUCCESS → asynced ∧ of-cons(of0, dirs, files0) ∧ dom of0 < ino0 ∧ afs-cons(dirs, files0)) → ( err = ESUCCESS → (∃ root, fs, ofh. posix-crash(tree0, abs-files(files), abs-of(of), root, fs, ofh) ∧ ⟨posix_recover#(isdir2; root, fs, ofh; psynced, err0)⟩ (ofh = abs-of(of0) ∧ fs = abs-files(files0) ∧ abs(root, ROOT_INO)(dirs) ∧ (psynced → asynced) ∧ ESUCCESS = err0))) ∧ ( err ≠ ESUCCESS → (∀ tree, fs, ofh, isdir. ⟨posix_recover#(isdir2; root0, fs1, ofh1; psynced0, err0)⟩ (tree = root0 ∧ fs = fs1 ∧ ofh = ofh1 ∧ (isdir ↔ psynced0) ∧ err = err0))))