| r ∈ rs ⊦ (r.=>_ * hR)[rs, f(r := o), g(r := a)] ↔ (r.==>(o, a) * hR)[rs, f(r := o), g(r := a)] |
¬((r.=>_ * hR)[rs, f(r := o), g(r := a)] ↔ (r.==>(o, a) * hR)[rs, f(r := o), g(r := a)]), r ∈ rs ⊦
| ¬((r.=>_ * hR)[rs, f(r := o), g(r := a)] ↔ (r.==>(o, a) * hR)[rs, f(r := o), g(r := a)]), r ∈ rs ⊦ |
⊦ hP[rs, f, g] ↔ hP[rs, λ r. (f(r), g(r))]
¬((r.=>_ * hR)[rs, λ r0. (f(r := o)(r0), g(r := a)(r0))] ↔ (r.==>(o, a) * hR)[rs, f(r := o), g(r := a)]), r ∈ rs ⊦
Used terms: r.=>_ * hR, rs, f(r := o), g(r := a)
| ⊦ hP[rs, f, g] ↔ hP[rs, λ r. (f(r), g(r))] |
| ¬((r.=>_ * hR)[rs, λ r0. (f(r := o)(r0), g(r := a)(r0))] ↔ (r.==>(o, a) * hR)[rs, f(r := o), g(r := a)]), r ∈ rs ⊦ |
r ∈ rs ⊦ (r.=>_ * hP)[rs, f(r := o)] ↔ (r => o * hP)[rs, f(r := o)]
(r.=>_ * hR)[rs, (λ r0. (f(r := o)(r0), g(r := a)(r0)))(r := (o, a))] ↔ (r => (o, a) * hR)[rs, (λ r0. (f(r := o)(r0), g(r := a)(r0)))(r := (o, a))], ¬((r.=>_ * hR)[rs, λ r0. (f(r := o)(r0), g(r := a)(r0))] ↔ (r.==>(o, a) * hR)[rs, f(r := o), g(r := a)]), r ∈ rs ⊦
Used terms: rs, r, (o, a), λ r0. (f(r := o)(r0), g(r := a)(r0)), hR
| r ∈ rs ⊦ (r.=>_ * hP)[rs, f(r := o)] ↔ (r => o * hP)[rs, f(r := o)] |
| (r.=>_ * hR)[rs, (λ r0. (f(r := o)(r0), g(r := a)(r0)))(r := (o, a))] ↔ (r => (o, a) * hR)[rs, (λ r0. (f(r := o)(r0), g(r := a)(r0)))(r := (o, a))], ¬((r.=>_ * hR)[rs, λ r0. (f(r := o)(r0), g(r := a)(r0))] ↔ (r.==>(o, a) * hR)[rs, f(r := o), g(r := a)]), r ∈ rs ⊦ |
(r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], (r.=>_ * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))] → (r => (o, a) * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))] ⊦
Used simplifier rules: maplet-def: ⊦ r.==>(o, a) = r => (o, a); modifysep-def: ⊦ hP[rs, f, g] ↔ hP[rs, λ r. (f(r), g(r))]; ⊦ (r.=>_ * hP)[rs, f] → r ∈ rs; (s) sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep ⊦ (r => o * hP)[rs, f] → (r.=>_ * hP)[rs, f]; (s)
| (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], (r.=>_ * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))] → (r => (o, a) * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))] ⊦ |
(r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], ¬ (r.=>_ * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦
(r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], (r => (o, a) * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦
| (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], ¬ (r.=>_ * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦ |
(λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))) ≠ (λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))), (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦
| (λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))) ≠ (λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))), (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦ |
((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0))) ≠ (r0 = r ⊃ (o, a);(f(r0), g(r0))), (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦
| ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0))) ≠ (r0 = r ⊃ (o, a);(f(r0), g(r0))), (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦ |
| (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], (r => (o, a) * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))], ¬ (r => (o, a) * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦ |
(λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))) ≠ (λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))), (r => (o, a) * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))], (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦
| (λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))) ≠ (λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))), (r => (o, a) * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))], (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))] ⊦ |
(r1 = r ⊃ (o, a);(f(r1), g(r1))) ≠ ((r = r1 ⊃ o;f(r1)), (r = r1 ⊃ a;g(r1))), (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], (r => (o, a) * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))] ⊦
| (r1 = r ⊃ (o, a);(f(r1), g(r1))) ≠ ((r = r1 ⊃ o;f(r1)), (r = r1 ⊃ a;g(r1))), (r.=>_ * hR)[rs, λ r0. ((r = r0 ⊃ o;f(r0)), (r = r0 ⊃ a;g(r0)))], (r => (o, a) * hR)[rs, λ r1. (r1 = r ⊃ (o, a);(f(r1), g(r1)))] ⊦ |
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.