| dirs0 = dirs \ orphans(dirs, files), files0 = files \ orphans(dirs, files), afs-cons(dirs, files), m ∈ dirs ∧ m0 = dirs[m].nlink ∧ m2 = dirs[m].size ∧ m1 = dirs[m].nsubdirs ∧ boolvar ∨ m ∈ files ∧ m0 = files[m].nlink ∧ m1 = 0 ∧ ¬ boolvar ⊦ ⟨fail#(; ; err); asynced := ?⟩ asynced, ⟨if boolvar then dirs[m].meta := md else {files[m].meta := md; files[m].size := m2}; err := ESUCCESS; asynced := ?⟩ (asynced ∧ dirs0 = dirs \ orphans(dirs, files) ∧ files0 = files \ orphans(dirs, files)) |
dirs0 = dirs \ orphans(dirs, files), files0 = files \ orphans(dirs, files), afs-cons(dirs, files), m ∈ dirs ∧ m0 = dirs[m].nlink ∧ m2 = dirs[m].size ∧ m1 = dirs[m].nsubdirs ∧ boolvar ∨ m ∈ files ∧ m0 = files[m].nlink ∧ m1 = 0 ∧ ¬ boolvar ⊦ ⟨choose err0 with ⌊err0⌋ in err := err0; asynced := ?⟩ asynced, ⟨if boolvar then dirs[m].meta := md else {files[m].meta := md; files[m].size := m2}; err := ESUCCESS; asynced := ?⟩ (asynced ∧ dirs0 = dirs \ orphans(dirs, files) ∧ files0 = files \ orphans(dirs, files))
Used simplifier rules: fail#(; ; ERR){choose ERR0 with ⌊ERR0⌋ in ERR := ERR0};