| dirs = dirs0 \ orphans(dirs0, files), files0 = files \ orphans(dirs0, files), fs0 = abs-files(files), isdir1, ofh0 = abs-of(of), tree0.dir?, dom of < ino, abs(tree0, ROOT_INO)(dirs0), afs-cons(dirs0, files), fids-cons(tree0, fs0, ofh0), of-cons(of, dirs0, files), isdir0 → isdir1 ⊦ ⟪vfs_recover#(isdir2; dirs, files0, asynced; of0, ino0, err)⟫ ( ( err = ESUCCESS → (∃ root, fs, ofh, psynced. posix-crash(tree0, fs0, ofh0, 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)) ∧ err = 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), 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))))