| err = ESUCCESS, ks = ro, ri = ri0, ro0 = ro, ro.inodes? ⊦ ⟪while ks ≠ ∅ do {/* (replayorphans-prepost: invariant ks = ro ∧ ro ⊆ ro` ∧ ri ⊖ ro = ri` ⊖ ro` ∧ ks.inodes? wfbound # ks) */; choose key with key ∈ ks in {aubifs_core_index_truncate#(key, 0, fi, ro, fo, fs, log, boolvar; ri); aubifs_core_index_remove#(key, fi, ro, fo, fs, log, boolvar; ri); aubifs_core_orphans_remove#(key, ri, fi, fo, fs, log, boolvar; ro); ks := ks -- key}}⟫ ((err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ks = ∅ ∧ ro = ∅ ∧ ri = ri0 ⊖ ro0)) |
err = ESUCCESS, ks = ro, ks = ks0, ks1 = ro1, ri1 = ri0, ro0 = ro1, ri ⊖ ro = ri1 ⊖ ro1, ro1.inodes?, ks.inodes?, ro ⊆ ro1 ⊦ ⟪choose key with key ∈ ks in {aubifs_core_index_truncate#(key, 0, fi, ro, fo, fs, log, boolvar; ri); aubifs_core_index_remove#(key, fi, ro, fo, fs, log, boolvar; ri); aubifs_core_orphans_remove#(key, ri, fi, fo, fs, log, boolvar; ro); ks := ks -- key}⟫ ((ks = ro ∧ ro ⊆ ro1 ∧ ri ⊖ ro = ri1 ⊖ ro1 ∧ ks.inodes?) ∧ # ks < # ks0), ks = ∅
Used simplifier rules: ⊦ ri ⊖ ∅ = ri; (s)% ⊦ ∅ ⊆ ks; (s)% ⊦ ∅.inodes?; (s)% ⊦ ks ⊆ ks; (s) Used formulas: ks = ro ∧ ro ⊆ ro` ∧ ri ⊖ ro = ri` ⊖ ro` ∧ ks.inodes?, # ks = # ks