| 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)))) |
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) ⊦ [ino := 0; afs_recovery#(isdir; dirs, files; asynced, err)] ( (err = ESUCCESS → asynced ∧ of-cons(∅, dirs, files) ∧ dom ∅ < 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(∅) ∧ 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))))