| ⊦ g(r) ≠ a → ((a[hP] * true)[rs, f(r; o), g] ↔ (a[hP] * true)[rs, f, g]) |
¬((a[hP] * true)[rs, f(r; o), g] ↔ (a[hP] * true)[rs, f, g]), g(r) ≠ a ⊦
| ¬((a[hP] * true)[rs, f(r; o), g] ↔ (a[hP] * true)[rs, f, g]), g(r) ≠ a ⊦ |
g(r) ≠ a, (a[hP] * true)[rs, f(r; o), g], ¬ (a[hP] * true)[rs, f, g] ⊦
Used simplifier rules: mod-other-hp: ⊦ g(r) ≠ a ∧ (a[hP] * hR)[rs, f, g] → (a[hP] * true)[rs, f(r; o), g]; sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep[heap-aux-inst] sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep[heap-aux-inst]
| g(r) ≠ a, (a[hP] * true)[rs, f(r; o), g], ¬ (a[hP] * true)[rs, f, g] ⊦ |
⊦ (hR0 * hR1)[rs, f, g] ↔ (∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ hR0[rs0, f, g] ∧ hR1[rs1, f, g])
g(r) ≠ a, ¬ (a[hP] * true)[rs, f, g], ∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ a[hP][rs0, f(r; o), g] ∧ true[rs1, f(r; o), g] ⊦
Used terms: rs, true, g, a[hP], f(r; o)
| ⊦ (hR0 * hR1)[rs, f, g] ↔ (∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ hR0[rs0, f, g] ∧ hR1[rs1, f, g]) |
| g(r) ≠ a, ¬ (a[hP] * true)[rs, f, g], ∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ a[hP][rs0, f(r; o), g] ∧ true[rs1, f(r; o), g] ⊦ |
rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP][rs0, f(r; o), g], ¬ (a[hP] * true)[rs0 ∪ rs1, f, g] ⊦
Used simplifier rules: ⊦ true[rs, f, g]; (s)
| rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP][rs0, f(r; o), g], ¬ (a[hP] * true)[rs0 ∪ rs1, f, g] ⊦ |
⊦ hR0[rs0, f, g] ∧ hR1[rs1, f, g] ∧ rs0 ∩ rs1 = ∅ → (hR0 * hR1)[rs0 ∪ rs1, f, g]
rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP][rs0, f(r; o), g], ¬ (a[hP] * true)[rs0 ∪ rs1, f, g] ⊦ a[hP][rs0, f, g] ∧ true[rs1, f, g] ∧ rs0 ∩ rs1 = ∅
Used terms: rs0, true, g, a[hP], f, rs1
| ⊦ hR0[rs0, f, g] ∧ hR1[rs1, f, g] ∧ rs0 ∩ rs1 = ∅ → (hR0 * hR1)[rs0 ∪ rs1, f, g] |
| rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP][rs0, f(r; o), g], ¬ (a[hP] * true)[rs0 ∪ rs1, f, g] ⊦ a[hP][rs0, f, g] ∧ true[rs1, f, g] ∧ rs0 ∩ rs1 = ∅ |
rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP][rs0, f(r; o), g], ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP][rs0, f, g] ⊦
Used simplifier rules: ⊦ true[rs, f, g]; (s)
| rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP][rs0, f(r; o), g], ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP][rs0, f, g] ⊦ |
⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g))
rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP](mk(rs0, f(r; o), g)), ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP][rs0, f, g] ⊦
Used terms: g, f(r; o), rs0, a[hP]
| ⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g)) |
| rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP](mk(rs0, f(r; o), g)), ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP][rs0, f, g] ⊦ |
⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g))
rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP](mk(rs0, f(r; o), g)), ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦
Used terms: g, f, rs0, a[hP]
| ⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g)) |
| rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP](mk(rs0, f(r; o), g)), ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦ |
rs0 ∩ rs1 = ∅, g(r) ≠ a, mk(rs0, f(r; o), g) ≠ mk(rs0, f, g), a[hP](mk(rs0, f(r; o), g)), ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦
Used formulas: mk(rs0, f(r; o), g) = mk(rs0, f, g)
| rs0 ∩ rs1 = ∅, g(r) ≠ a, mk(rs0, f(r; o), g) ≠ mk(rs0, f, g), a[hP](mk(rs0, f(r; o), g)), ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦ |
⊦ ha0 = ha1 ↔ (∀ r. (r ∈ ha0 ↔ r ∈ ha1) ∧ (r ∈ ha0 → ha0[r]o = ha1[r]o ∧ ha0[r]a = ha1[r]a))
rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP](mk(rs0, f(r; o), g)), ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)), ∃ r0. ¬ ( (r0 ∈ mk(rs0, f(r; o), g) ↔ r0 ∈ mk(rs0, f, g)) ∧ (r0 ∈ mk(rs0, f(r; o), g) → mk(rs0, f(r; o), g)[r0]o = mk(rs0, f, g)[r0]o ∧ mk(rs0, f(r; o), g)[r0]a = mk(rs0, f, g)[r0]a)) ⊦
Used terms: mk(rs0, f(r; o), g), mk(rs0, f, g)
| ⊦ ha0 = ha1 ↔ (∀ r. (r ∈ ha0 ↔ r ∈ ha1) ∧ (r ∈ ha0 → ha0[r]o = ha1[r]o ∧ ha0[r]a = ha1[r]a)) |
| rs0 ∩ rs1 = ∅, g(r) ≠ a, a[hP](mk(rs0, f(r; o), g)), ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)), ∃ r0. ¬ ( (r0 ∈ mk(rs0, f(r; o), g) ↔ r0 ∈ mk(rs0, f, g)) ∧ (r0 ∈ mk(rs0, f(r; o), g) → mk(rs0, f(r; o), g)[r0]o = mk(rs0, f, g)[r0]o ∧ mk(rs0, f(r; o), g)[r0]a = mk(rs0, f, g)[r0]a)) ⊦ |
rs0 ∩ rs1 = ∅, (r = r0 ⊃ o;f(r0)) ≠ f(r0), g(r) ≠ a, a[hP](mk(rs0, f(r; o), g)), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦
Used simplifier rules: ⊦ r ∈ rs → mk(rs, f, g)[r]a = g(r); (s) ⊦ r ∈ rs → mk(rs, f, g)[r]o = f(r); (s) ⊦ r ∈ mk(rs, f, g) ↔ r ∈ rs; (s)
| rs0 ∩ rs1 = ∅, (r = r0 ⊃ o;f(r0)) ≠ f(r0), g(r) ≠ a, a[hP](mk(rs0, f(r; o), g)), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦ |
r = r0, rs0 ∩ rs1 = ∅, g(r) ≠ a, o ≠ f(r0), a[hP](mk(rs0, f(r; o), g)), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦
| r = r0, rs0 ∩ rs1 = ∅, g(r) ≠ a, o ≠ f(r0), a[hP](mk(rs0, f(r; o), g)), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦ |
rs0 ∩ rs1 = ∅, g(r0) ≠ a, o ≠ f(r0), a[hP](mk(rs0, f(r0; o), g)), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦
| rs0 ∩ rs1 = ∅, g(r0) ≠ a, o ≠ f(r0), a[hP](mk(rs0, f(r0; o), g)), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)) ⊦ |
⊦ a[hP](mk(rs, f, g)) ↔ hP(mk(rs, f)) ∧ (∀ r. r ∈ rs → g(r) = a)
rs0 ∩ rs1 = ∅, g(r0) ≠ a, o ≠ f(r0), hP(mk(rs0, f(r0; o))), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)), ∀ r. r ∈ rs0 → g(r) = a ⊦
Used terms: a, hP, rs0, g, f(r0; o)
| ⊦ a[hP](mk(rs, f, g)) ↔ hP(mk(rs, f)) ∧ (∀ r. r ∈ rs → g(r) = a) |
| rs0 ∩ rs1 = ∅, g(r0) ≠ a, o ≠ f(r0), hP(mk(rs0, f(r0; o))), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)), ∀ r. r ∈ rs0 → g(r) = a ⊦ |
rs0 ∩ rs1 = ∅, g(r0) ≠ a, o ≠ f(r0), hP(mk(rs0, f(r0; o))), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)), ∀ r. r ∈ rs0 → g(r) = a ⊦
| rs0 ∩ rs1 = ∅, g(r0) ≠ a, o ≠ f(r0), hP(mk(rs0, f(r0; o))), r0 ∈ rs0, ¬ (a[hP] * true)[rs0 ∪ rs1, f, g], ¬ a[hP](mk(rs0, f, g)), ∀ r. r ∈ rs0 → g(r) = a ⊦ |
Used terms: r0
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.