| ⊦ x.map(f) = bx1 + bx2 ↔ (∃ y, z. x = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) |
∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) ⊦ (a + x0).map(f) = bx1 + bx2 ↔ (∃ y, z. a + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f))
Used simplifier rules: app-02: ⊦ x + y = [] ↔ x = [] ∧ y = []; map-base: ⊦ [].map(f) = []; Nil: ⊦ [] + x = x; a: ⊦ (x + y) + z = x + y + z; List[A] freely generated by [], +;
| ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) ⊦ (a + x0).map(f) = bx1 + bx2 ↔ (∃ y, z. a + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) |
∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) ⊦ f(a) ' + x0.map(f) = bx1 + bx2 ↔ (∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f))
Used simplifier rules: map-rec: ⊦ (a ' + x).map(f) = f(a) + x.map(f); a: ⊦ (x + y) + z = x + y + z; c: ⊦ a + x = a ' + x;
| ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) ⊦ f(a) ' + x0.map(f) = bx1 + bx2 ↔ (∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) |
f(a) ' + x0.map(f) = bx1 + bx2, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) ⊦ ∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)
f(a) ' + x0.map(f) ≠ bx1 + bx2, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), ∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f) ⊦
| f(a) ' + x0.map(f) = bx1 + bx2, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) ⊦ ∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f) |
f(a) ' + x0.map(f) = bx1 + bx2, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), f(a) ∈ bx1 ∨ f(a) ∈ bx2 ⊦ ∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)
Used simplifier rules: in-14: ⊦ a ' + x = y → a ∈ y; in-append: ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; a: ⊦ (x + y) + z = x + y + z;
| f(a) ' + x0.map(f) = bx1 + bx2, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), f(a) ∈ bx1 ∨ f(a) ∈ bx2 ⊦ ∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f) |
f(a) ' + x0.map(f) = bx1 + bx2, bx1 = b + bx, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), f(a) ∈ bx1 ∨ f(a) ∈ bx2 ⊦ ∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)
Used simplifier rules: in-empty: ⊦ ¬ a ∈ []; map-empty: ⊦ x.map(f) = [] ↔ x = []; Nil: ⊦ [] + x = x; map-rec: ⊦ (a ' + x).map(f) = f(a) + x.map(f); c: ⊦ a + x = a ' + x; a: ⊦ (x + y) + z = x + y + z; List[A] freely generated by [], +;
| f(a) ' + x0.map(f) = bx1 + bx2, bx1 = b + bx, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), f(a) ∈ bx1 ∨ f(a) ∈ bx2 ⊦ ∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f) |
x0.map(f) = bx + bx2, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) ⊦ ∃ y, z. a ' + x0 = y + z ∧ f(a) ' + bx = y.map(f) ∧ bx2 = z.map(f)
Used simplifier rules: c-06: ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; in-rec: ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; a: ⊦ (x + y) + z = x + y + z; c: ⊦ a + x = a ' + x;
| x0.map(f) = bx + bx2, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)) ⊦ ∃ y, z. a ' + x0 = y + z ∧ f(a) ' + bx = y.map(f) ∧ bx2 = z.map(f) |
x0.map(f) = bx + bx2, x0.map(f) = bx + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx = y.map(f) ∧ bx2 = z.map(f)) ⊦ ∃ y, z. a ' + x0 = y + z ∧ f(a) ' + bx = y.map(f) ∧ bx2 = z.map(f)
Used terms: f, bx, bx2
| x0.map(f) = bx + bx2, x0.map(f) = bx + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx = y.map(f) ∧ bx2 = z.map(f)) ⊦ ∃ y, z. a ' + x0 = y + z ∧ f(a) ' + bx = y.map(f) ∧ bx2 = z.map(f) |
(y + z).map(f) = y.map(f) + z.map(f) ⊦ ∃ y0, z0. a ' + y + z = y0 + z0 ∧ f(a) ' + y.map(f) = y0.map(f) ∧ z.map(f) = z0.map(f)
| (y + z).map(f) = y.map(f) + z.map(f) ⊦ ∃ y0, z0. a ' + y + z = y0 + z0 ∧ f(a) ' + y.map(f) = y0.map(f) ∧ z.map(f) = z0.map(f) |
Used simplifier rules: map-rec: ⊦ (a ' + x).map(f) = f(a) + x.map(f); c: ⊦ a + x = a ' + x; len-01: ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); a: ⊦ (x + y) + z = x + y + z; Used terms: a ' + y, z
| f(a) ' + x0.map(f) ≠ bx1 + bx2, ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), ∃ y, z. a ' + x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f) ⊦ |
a ' + x0 = y + z, f(a) ' + x0.map(f) ≠ y.map(f) + z.map(f), ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), a ∈ y ∨ a ∈ z ⊦
Used simplifier rules: in-14: ⊦ a ' + x = y → a ∈ y; in-append: ⊦ a ∈ x + y ↔ a ∈ x ∨ a ∈ y; a: ⊦ (x + y) + z = x + y + z;
| a ' + x0 = y + z, f(a) ' + x0.map(f) ≠ y.map(f) + z.map(f), ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), a ∈ y ∨ a ∈ z ⊦ |
a ' + x0 = y + z, y = a0 + y0, f(a) ' + x0.map(f) ≠ y.map(f) + z.map(f), ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), a ∈ y ∨ a ∈ z ⊦
Used simplifier rules: map-base: ⊦ [].map(f) = []; Nil: ⊦ [] + x = x; in-empty: ⊦ ¬ a ∈ []; in-14: ⊦ a ' + x = y → a ∈ y; map-rec: ⊦ (a ' + x).map(f) = f(a) + x.map(f); c: ⊦ a + x = a ' + x; len-01: ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); a: ⊦ (x + y) + z = x + y + z; List[A] freely generated by [], +;
| a ' + x0 = y + z, y = a0 + y0, f(a) ' + x0.map(f) ≠ y.map(f) + z.map(f), ∀ f, bx1, bx2. x0.map(f) = bx1 + bx2 ↔ (∃ y, z. x0 = y + z ∧ bx1 = y.map(f) ∧ bx2 = z.map(f)), a ∈ y ∨ a ∈ z ⊦ |
(y0 + z).map(f) ≠ y0.map(f) + z.map(f), ∀ f, bx1, bx2. (y0 + z).map(f) = bx1 + bx2 ↔ (∃ y, z0. y0 + z = y + z0 ∧ bx1 = y.map(f) ∧ bx2 = z0.map(f)) ⊦
Used simplifier rules: c-06: ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y; map-rec: ⊦ (a ' + x).map(f) = f(a) + x.map(f); c: ⊦ a + x = a ' + x; in-rec: ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; len-01: ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); a: ⊦ (x + y) + z = x + y + z;
| (y0 + z).map(f) ≠ y0.map(f) + z.map(f), ∀ f, bx1, bx2. (y0 + z).map(f) = bx1 + bx2 ↔ (∃ y, z0. y0 + z = y + z0 ∧ bx1 = y.map(f) ∧ bx2 = z0.map(f)) ⊦ |
(y0 + z).map(f) ≠ y0.map(f) + z.map(f), (y0 + z).map(f) = y0.map(f) + z.map(f) ↔ (∃ y, z0. y0 + z = y + z0 ∧ y0.map(f) = y.map(f) ∧ z.map(f) = z0.map(f)) ⊦
Used terms: f, y0.map(f), z.map(f)
| (y0 + z).map(f) ≠ y0.map(f) + z.map(f), (y0 + z).map(f) = y0.map(f) + z.map(f) ↔ (∃ y, z0. y0 + z = y + z0 ∧ y0.map(f) = y.map(f) ∧ z.map(f) = z0.map(f)) ⊦ |
(y0 + z).map(f) ≠ y0.map(f) + z.map(f) ⊦ ∃ y, z0. y0 + z = y + z0 ∧ y0.map(f) = y.map(f) ∧ z.map(f) = z0.map(f)
| (y0 + z).map(f) ≠ y0.map(f) + z.map(f) ⊦ ∃ y, z0. y0 + z = y + z0 ∧ y0.map(f) = y.map(f) ∧ z.map(f) = z0.map(f) |
Used terms: y0, z
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.