| ∀ fs, adr, nd, ri. (replay-safe(log0, fs[adr, nd], ri) ↔ replay-safe(log0, fs, ri)) ∨ adr ∈ log0 ⊦ replay-safe(adr0 + log0, fs[adr, nd], ri) ↔ replay-safe(adr0 + log0, fs, ri), adr ∈ adr0 + log0 |
node-cons(fs[adr0].key, fs[adr0]), adr0 ∈ fs, ∀ fs, adr, nd, ri. (replay-safe(log0, fs[adr, nd], ri) ↔ replay-safe(log0, fs, ri)) ∨ adr ∈ log0 ⊦ replay-safe(log0, fs[adr, nd], replay-one(adr0, fs[adr0], ri)) ↔ replay-safe(log0, fs, replay-one(adr0, fs[adr0], ri)), adr = adr0, adr0 ∈ ri, adr ∈ log0
Used simplifier rules: replay-safe-rec: ⊦ replay-safe(adr ' + log, fs, ri) ↔ adr ∈ fs ∧ ¬ adr ∈ ri ∧ node-cons(fs[adr].key, fs[adr]) ∧ replay-safe(log, fs, replay-one(adr, fs[adr], ri));% ⊦ adr ≠ adr0 → fs[adr0, nd][adr] = fs[adr]; (s)% ⊦ adr ∈ adr0 ' + ax ↔ ¬(adr ≠ adr0 ∧ ¬ adr ∈ ax); (ss)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ adr ∈ fs[adr1, nd] ↔ adr = adr1 ∨ adr ∈ fs; (s)% ⊦ adr + ax = adr ' + ax; (s)