| ∀ a, st, d, b. a ∈ s0 → s0 = ∅ ∨ st[a, d][b] = st[b] ∨ # s0 = 0 ∨ b ∈ s0, a ∈ s0 ++ a0 ⊦ s0 ++ a0 = ∅, st[a, d][b] = st[b], #(s0 ++ a0) = 0, b ∈ s0 ++ a0 |
a ∈ s0, ∀ a1, st0, d0, b0. a1 ∈ s0 → st0[a1, d0][b0] = st0[b0] ∨ b0 ∈ s0 ⊦ # s0 = 0, b = a0, #(s0 ++ a0) = 0, st[a, d][b] = st[b], 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