| dirs1 = dirs0 \ orphans(dirs0, files1), 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), posix-crash(tree0, abs-files(files1), abs-of(of1), tree, fs, ofh), ⌊err0⌋ , err0 = ESUCCESS → asynced ∧ of-cons(∅, dirs, files) ∧ afs-cons(dirs, files) ⊦ ( err0 = ESUCCESS → (∃ root, fs, ofh. posix-crash(tree0, abs-files(files1), abs-of(of1), root, fs, ofh) ∧ ⟨posix_recover#(isdir2; root, fs, ofh; psynced, err1)⟩ (ofh = ∅ ∧ fs = abs-files(files) ∧ abs(root, ROOT_INO)(dirs) ∧ (psynced → asynced) ∧ ESUCCESS = err1))) ∧ ( err0 ≠ ESUCCESS → (∀ tree, fs, ofh, isdir. ⟨posix_recover#(isdir2; root0, fs1, ofh1; psynced0, err1)⟩ (tree = root0 ∧ fs = fs1 ∧ ofh = ofh1 ∧ (isdir ↔ psynced0) ∧ err0 = err1))) |
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), ⌊err0⌋ ⊦ ⟨posix_recover#(isdir2; root0, fs1, ofh1; psynced0, err1)⟩ (tree1 = root0 ∧ fs0 = fs1 ∧ ofh0 = ofh1 ∧ (isdir ↔ psynced0) ∧ err0 = err1)
Used simplifier rules: ⊦ ⌊err⌋ → err ≠ ESUCCESS; (s)