| isdir ↔ isdir2, dirs = dirs0 \ orphans(dirs0, files1), files = 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), ∃ tree1, fs1, ofh1. posix-crash(tree0, abs-files(files1), abs-of(of1), tree1, fs1, ofh1) ⊦ [asynced := true, err := ESUCCESS or {dirs := ?, files := ?, asynced := ?; fail#(; ; err)}] ( (err = ESUCCESS → asynced ∧ of-cons(∅, dirs, files) ∧ 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 = ∅ ∧ 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)))) |
dirs = dirs0 \ orphans(dirs0, files1), files = 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), posix-crash(tree0, abs-files(files1), abs-of(of1), tree, fs, ofh) ⊦ [asynced := true, err := ESUCCESS or {dirs := ?, files := ?, asynced := ?; fail#(; ; err)}] ( (err = ESUCCESS → asynced ∧ of-cons(∅, dirs, files) ∧ 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 = ∅ ∧ 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))))