| ⊦ cu = cu0 ↔ #x cu = #x cu0 ∧ #y cu = #y cu0 ∧ #z cu = #z cu0 ∧ (∀ ny, nz. ny < #y cu ∧ nz < #z cu → cu[ny, nz]yz = cu0[ny, nz]yz) |
#x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu ≠ cu0, ∀ ny, nz. ny < #y cu0 ∧ nz < #z cu0 → cu[ny, nz]yz = cu0[ny, nz]yz ⊦
| #x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu ≠ cu0, ∀ ny, nz. ny < #y cu0 ∧ nz < #z cu0 → cu[ny, nz]yz = cu0[ny, nz]yz ⊦ |
⊦ cu1 = cu2 ↔ #x cu1 = #x cu2 ∧ #y cu1 = #y cu2 ∧ #z cu1 = #z cu2 ∧ (∀ nx, ny, nz. nx < #x cu1 ∧ ny < #y cu1 ∧ nz < #z cu1 → cu1[nx, ny, nz] = cu2[nx, ny, nz])
#x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, ∀ ny, nz. ny < #y cu0 ∧ nz < #z cu0 → cu[ny, nz]yz = cu0[ny, nz]yz, #x cu ≠ #x cu0 ∨ #y cu ≠ #y cu0 ∨ #z cu ≠ #z cu0 ∨ (∃ nx, ny, nz. ¬(nx < #x cu ∧ ny < #y cu ∧ nz < #z cu → cu[nx, ny, nz] = cu0[nx, ny, nz])) ⊦
Used terms: cu, cu0
| ⊦ cu1 = cu2 ↔ #x cu1 = #x cu2 ∧ #y cu1 = #y cu2 ∧ #z cu1 = #z cu2 ∧ (∀ nx, ny, nz. nx < #x cu1 ∧ ny < #y cu1 ∧ nz < #z cu1 → cu1[nx, ny, nz] = cu2[nx, ny, nz]) |
| #x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, ∀ ny, nz. ny < #y cu0 ∧ nz < #z cu0 → cu[ny, nz]yz = cu0[ny, nz]yz, #x cu ≠ #x cu0 ∨ #y cu ≠ #y cu0 ∨ #z cu ≠ #z cu0 ∨ (∃ nx, ny, nz. ¬(nx < #x cu ∧ ny < #y cu ∧ nz < #z cu → cu[nx, ny, nz] = cu0[nx, ny, nz])) ⊦ |
#x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nz < #z cu0, ny < #y cu0, nx < #x cu0, ∀ ny, nz. ny < #y cu0 ∧ nz < #z cu0 → cu[ny, nz]yz = cu0[ny, nz]yz ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| #x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nz < #z cu0, ny < #y cu0, nx < #x cu0, ∀ ny, nz. ny < #y cu0 ∧ nz < #z cu0 → cu[ny, nz]yz = cu0[ny, nz]yz ⊦ |
#x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nx < #x cu0, ny < #y cu0, nz < #z cu0, ny < #y cu0 ∧ nz < #z cu0 → cu[ny, nz]yz = cu0[ny, nz]yz ⊦
Used terms: ny, nz
| #x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nx < #x cu0, ny < #y cu0, nz < #z cu0, ny < #y cu0 ∧ nz < #z cu0 → cu[ny, nz]yz = cu0[ny, nz]yz ⊦ |
#x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[ny, nz]yz = cu0[ny, nz]yz, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nz < #z cu0, ny < #y cu0, nx < #x cu0 ⊦
| #x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[ny, nz]yz = cu0[ny, nz]yz, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nz < #z cu0, ny < #y cu0, nx < #x cu0 ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n])
# cu[ny, nz]yz = # cu0[ny, nz]yz, #x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nx < #x cu0, ny < #y cu0, nz < #z cu0, ∀ n. n < # cu[ny, nz]yz → cu[ny, nz]yz[n] = cu0[ny, nz]yz[n] ⊦
Used terms: cu[ny, nz]yz, cu0[ny, nz]yz
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n]) |
| # cu[ny, nz]yz = # cu0[ny, nz]yz, #x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nx < #x cu0, ny < #y cu0, nz < #z cu0, ∀ n. n < # cu[ny, nz]yz → cu[ny, nz]yz[n] = cu0[ny, nz]yz[n] ⊦ |
#x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nz < #z cu0, ny < #y cu0, nx < #x cu0, ∀ n. n < #x cu0 → cu[n, ny, nz] = cu0[n, ny, nz] ⊦
Used simplifier rules: sel-dh-size: ⊦ # cu[ny, nz]yz = #x cu; sel-dh-get: ⊦ cu[ny, nz]yz[nx] = cu[nx, ny, nz];
| #x cu = #x cu0, #y cu = #y cu0, #z cu = #z cu0, cu[nx, ny, nz] ≠ cu0[nx, ny, nz], nz < #z cu0, ny < #y cu0, nx < #x cu0, ∀ n. n < #x cu0 → cu[n, ny, nz] = cu0[n, ny, nz] ⊦ |
Used terms: nx
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.