| fs[ri[inodekey(m)]].directory, fo.inodes?, orphans(fs, ri).inodes?, afs-cons(abs-dirs(fs, ri), abs-files(fs, ri)), file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, orphans(fs, ri)), replay-cons-strong(fs, ri, orphans(fs, ri), fi, fo, log), ri-inj(fi), ri-inj(ri), ubifs-cons(fs, ri, orphans(fs, ri), fi, fo, log), inodekey(m) ∈ ri, ⌊err0⌋ , asynced → boolvar ⊦ ⟨afs_readdir#(mkinode(m, md, boolvar0, m0, m1, m2), abs-dirs(fs, ri), abs-files(fs, ri), asynced; strings0, err1)⟩ ((asynced → boolvar) ∧ strings = strings0 ∧ err0 = err1) |
dirs = abs-dirs(fs, ri), err = err1, files = abs-files(fs, ri), inode = mkinode(m, md, boolvar0, m0, m1, m2), fs[ri[inodekey(m)]].directory, orphans(fs, ri).inodes?, fo.inodes?, afs-cons(abs-dirs(fs, ri), abs-files(fs, ri)), file-node-cons(fs, ri), log-cons(log, fs), orphans-cons(fs, ri, orphans(fs, ri)), replay-cons-strong(fs, ri, orphans(fs, ri), fi, fo, log), ri-inj(ri), ri-inj(fi), ubifs-cons(fs, ri, orphans(fs, ri), fi, fo, log), inodekey(m) ∈ ri, ⌊err0⌋ , asynced → boolvar ⊦ ⟨if pre-readdir(inode.ino, dirs, files) then {{strings0 := dom dirs[inode.ino].entries; err := ESUCCESS} or {choose strings with true in strings0 := strings; fail#(; ; err)}} else abort⟩ ((asynced → boolvar) ∧ strings = strings0 ∧ err0 = err)
Used simplifier rules: afs_readdir#(INODE, DIRS, FILES, ASYNCED; NAMES, ERR) {if pre-readdir(INODE.ino, DIRS, FILES) then { {NAMES := dom DIRS[INODE.ino].entries; ERR := ESUCCESS} or {choose NAMES0 with true in NAMES := NAMES0; fail#(; ; ERR)}} else abort };