| ro.inodes?, fo0.inodes?, file-node-cons(fs0, ri), log-cons(log0, fs0), orphans-cons(fs0, ri, ro), replay-cons-strong(fs0, ri, ro, fi0, fo0, log0), ri-inj(ri), ri-inj(fi0), ubifs-cons(fs0, ri, ro, fi0, fo0, log0) ⊦ ⟪aubifs_replay#(boolvar0; ri0, fi0, ro0, fo0, fs0, log0, boolvar1; err)⟫ ( err = ESUCCESS → boolvar1 ∧ ubifs-cons(fs0, ri0, ro0, fi0, fo0, log0) ∧ replay-cons-strong(fs0, ri0, ro0, fi0, fo0, log0) ∧ file-node-cons(fs0, ri0) ∧ orphans-cons(fs0, ri0, ro0) ∧ ri-inj(fi0)) |
replay-safe(log, fs, fi ⊖ fo), fo.inodes?, fs0 = fs, fi0 = fi, fo0 = fo, log0 = log ⊦ ⟪aubifs_replay#(boolvar0; ri, fi, ro, fo, fs, log, boolvar; err)⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ri = replay(log, fs, fi, fo) ∧ ro = ∅ ∧ fs = fs0 ∧ fi = fi0 ∧ fo = fo0 ∧ log = log0 ∧ boolvar))
boolvar2 ↔ boolvar0, fi0 = fi0, fi1 = fi0, fo0 = fo0, fo1 = fo0, fs0 = fs0, fs1 = fs0, log0 = log0, log1 = log0, ro.inodes?, fo0.inodes?, file-node-cons(fs0, ri), log-cons(log0, fs0), orphans-cons(fs0, ri, ro), replay-cons-strong(fs0, ri, ro, fi0, fo0, log0), replay-safe(log0, fs0, fi0 ⊖ fo0), ri-inj(fi0), ri-inj(ri), ubifs-cons(fs0, ri, ro, fi0, fo0, log0) ⊦ [aubifs_replay#(boolvar0; ri0, fi0, ro0, fo0, fs0, log0, boolvar1; err)] ( (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ri0 = replay(log0, fs0, fi0, fo0) ∧ ro0 = ∅ ∧ fs0 = fs1 ∧ fi0 = fi1 ∧ fo0 = fo1 ∧ log0 = log1 ∧ boolvar1) → err = ESUCCESS → boolvar1 ∧ ubifs-cons(fs0, ri0, ro0, fi0, fo0, log0) ∧ replay-cons-strong(fs0, ri0, ro0, fi0, fo0, log0) ∧ file-node-cons(fs0, ri0) ∧ orphans-cons(fs0, ri0, ro0) ∧ ri-inj(fi0))
Used simplifier rules: ⊦ replay-cons-strong(fs, ri, ro, fi, fo, log) → replay-safe(log, fs, fi ⊖ fo); (ss)% ⊦ ubifs-cons(fs, ri, ro, fi, fo, log) → fo.inodes?; (ss)