| fo.inodes?, ro.inodes?, log-cons(log, fs), node-cons(nd.key, nd), ri-cons(ri, fs), ri-inj(fi), ri-inj(ri) ⊦ ⟪boolvar := ?⟫ (log-cons(log + adr1 ', fs[adr1, nd]) ∧ ri-cons(ri, fs[adr1, nd])), adr1 ∈ fs |
Used simplifier rules: ⊦ log-cons(log0 + log1, fs) ↔ log-cons(log0, fs) ∧ log-cons(log1, fs); (s)% ⊦ log-cons(adr ', fs) ↔ adr ∈ fs ∧ node-cons(fs[adr].key, fs[adr]); (s)% ⊦ adr ∈ fs[adr1, nd] ↔ adr = adr1 ∨ adr ∈ fs; (s)% ⊦ fs[adr, nd][adr] = nd; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]%⊦ log-cons(log, fs) → ( log-cons(log0, fs0) ↔ (∀ adr. (adr ∈ log → adr ∈ fs ∧ node-cons(fs[adr].key, fs[adr])) → adr ∈ log0 → adr ∈ fs0 ∧ node-cons(fs0[adr].key, fs0[adr]))); (ss)% ⊦ log-cons(log, fs) ∧ adr ∈ log → adr ∈ fs; (ss)% ⊦ adr ∈ fs ∧ ¬ adr0 ∈ fs → fs[adr0, nd][adr] = fs[adr]; (s)% ⊦ log-cons(log, fs) ∧ adr ∈ log → node-cons(fs[adr].key, fs[adr]); (ss)%⊦ ri-cons(ri, fs) → ( ri-cons(ri0, fs0) ↔ (∀ key. (key ∈ ri → ri[key] ∈ fs ∧ key-cons(key, fs[ri[key]])) → key ∈ ri0 → ri0[key] ∈ fs0 ∧ key-cons(key, fs0[ri0[key]]))); (ss)% ⊦ key ∈ ri ∧ ri-cons(ri, fs) → ri[key] ∈ fs; (ss)% ⊦ key ∈ ri ∧ ri-cons(ri, fs) → key-cons(key, fs[ri[key]]); (ss)