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