| 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 → 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)))) |
isdir ↔ isdir2, dirs = dirs0 \ orphans(dirs0, files1), files = files0, files0 = files1 \ orphans(dirs0, files1), tree0.dir?, dom of1 < ino, abs(tree0, ROOT_INO)(dirs0), afs-cons(dirs0, files1), fids-cons(tree0, abs-files(files1), abs-of(of1)), of-cons(of1, dirs0, files1) ⊦ [of := ∅; ino := 0; afs_recovery#(isdir; dirs, files; asynced, err)] ( (err = ESUCCESS → asynced ∧ of-cons(of, dirs, files) ∧ dom of < ino ∧ afs-cons(dirs, files)) → ( err = ESUCCESS → (∃ root, fs, ofh. posix-crash(tree0, abs-files(files1), abs-of(of1), root, fs, ofh) ∧ ⟨posix_recover#(isdir2; root, fs, ofh; psynced, err0)⟩ (ofh = abs-of(of) ∧ fs = abs-files(files) ∧ 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))))
Used simplifier rules: vfs_recover#(DOSYNC; DIRS, FILES, ASYNCED; OF, MAXINO, ERR) {OF := ∅; MAXINO := 0; afs_recovery#(DOSYNC; DIRS, FILES; ASYNCED, ERR) };