| key ∈ ri ⊖ (ro ++ datakey(ino, n)) ↔ key ∈ (ri -- datakey(ino, n)) ⊖ ro, log-cons(log, fs), replay-safe(log, fs, fi ⊖ fo) ⊦ (key ∈ ri ⊖ (ro ++ datakey(ino, n)) ↔ key ∈ (ri -- datakey(ino, n)) ⊖ ro) ∧ (key ∈ ri ⊖ (ro ++ datakey(ino, n)) → (ri ⊖ (ro ++ datakey(ino, n)))[key] = ((ri -- datakey(ino, n)) ⊖ ro)[key]) |
log-cons(log, fs), replay-safe(log, fs, fi ⊖ fo), key ∈ ri, key.data? → ¬ inodekey(key.ino) ∈ ro ⊦ (ri ⊖ (ro ++ datakey(ino, n)))[key] = ((ri -- datakey(ino, n)) ⊖ ro)[key], key = datakey(ino, n), key ∈ ro
Used simplifier rules: ⊦ key ∈ ri -- key0 ↔ key ≠ key0 ∧ key ∈ ri; (s)% ⊦ inodekey(m) ≠ datakey(m0, m1); (s)% ⊦ key ∈ ks ++ key0 ↔ key = key0 ∨ key ∈ ks; (s)%⊦ key ∈ ri ⊖ ks ↔ key ∈ ri ∧ ¬ key ∈ ks ∧ (key.data? → ¬ inodekey(key.ino) ∈ ks); (ws)