| ∀ a, st, b, d. a ∈ s0 → s0 = ∅ ∨ st[b, d][a] = st[a] ∨ # s0 = 0 ∨ b ∈ s0, a ∈ s0 ++ a0 ⊦ s0 ++ a0 = ∅, st[b, d][a] = st[a], #(s0 ++ a0) = 0, b ∈ s0 ++ a0 |
a ∈ s0, ∀ a1, st0, b0, d0. a1 ∈ s0 → st0[b0, d0][a1] = st0[a1] ∨ b0 ∈ s0 ⊦ # s0 = 0, b = a0, #(s0 ++ a0) = 0, st[b, d][a] = st[a], a = a0, s0 = ∅, b ∈ s0
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic%ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic%At-other: ⊦ a ≠ b → st[b, d][a] = st[a]; from specification store%size-zero: ⊦ # s ≠ 0 → s ≠ ∅; (forward) from specification set-basic%add: ⊦ ¬ a ∈ s ++ b ↔ a ≠ b ∧ ¬ a ∈ s; from specification set-basic%rax: ⊦ a ∈ s ++ b ↔ ¬ ¬(a = b ∨ a ∈ s); from specification set-basic%ne: ⊦ ∅ ≠ s ++ a; from specification set-basic