| ⊦ m2 ≤ m1 ∧ m1 + n ≤ m2 + m → (id○(ar0, copy(ar, m0, ar1, m1, n), m2, m) ↔ id○(ar0, ar1, m2, m)) |
¬(id○(ar0, copy(ar, m0, ar1, m1, n), m2, m) ↔ id○(ar0, ar1, m2, m)), m2 ≤ m1, m1 + n ≤ m2 + m ⊦
| ¬(id○(ar0, copy(ar, m0, ar1, m1, n), m2, m) ↔ id○(ar0, ar1, m2, m)), m2 ≤ m1, m1 + n ≤ m2 + m ⊦ |
# ar0 = # ar1, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m ⊦ (∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1])) ↔ (∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0])
Used simplifier rules: size-copy: ⊦ # copy(ar, m, ar0, m0, n) = # ar0; Idexcept-n: ⊦ id○(ar0, ar1, m, n) ↔ # ar0 = # ar1 ∧ m + n ≤ # ar0 ∧ (∀ m0. (m0 < m ∨ m + n ≤ m0) ∧ m0 < # ar0 → ar0[m0] = ar1[m0]); at-copy: ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]); let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat
| # ar0 = # ar1, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m ⊦ (∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1])) ↔ (∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0]) |
# ar0 = # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]) ⊦ ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0]
# ar0 = # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1])
| # ar0 = # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]) ⊦ ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] |
# ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < m2 ∨ m2 + m ≤ m3 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < m2 ∨ m2 + m ≤ m3 ⊦ |
# ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < # ar1, m3 < m2, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < m2 ∨ m2 + m ≤ m3 ⊦
# ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < # ar1, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m, ¬ m3 < m2, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < m2 ∨ m2 + m ≤ m3 ⊦
Used formulas: m3 < m2
| # ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < # ar1, m3 < m2, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < m2 ∨ m2 + m ≤ m3 ⊦ |
# ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < m2, m3 < # ar1, m3 < m1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat
| # ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < m2, m3 < # ar1, m3 < m1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]) ⊦ |
Used terms: m3
| # ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < # ar1, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m, ¬ m3 < m2, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < m2 ∨ m2 + m ≤ m3 ⊦ |
# ar0 = # ar1, ar0[m3] ≠ ar1[m3], m1 + n < # ar1, m3 < # ar1, m2 < # ar1, m2 + m < # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 ≤ m3, m2 + m ≤ m3, m1 + n ≤ m3, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # ar0 = # ar1, ar0[m3] ≠ ar1[m3], m1 + n < # ar1, m3 < # ar1, m2 < # ar1, m2 + m < # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 ≤ m3, m2 + m ≤ m3, m1 + n ≤ m3, ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]) ⊦ |
Used simplifier rules: ⊦ m ≤ n → (n < m ↔ false); (s) Used terms: m3
| # ar0 = # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ ∀ m3. (m3 < m2 ∨ m2 + m ≤ m3) ∧ m3 < # ar1 → ar0[m3] = (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]) |
# ar0 = # ar1, ar0[m3] ≠ (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], m3 < m2 ∨ m2 + m ≤ m3 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # ar0 = # ar1, ar0[m3] ≠ (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], m3 < m2 ∨ m2 + m ≤ m3 ⊦ |
# ar0 = # ar1, ar0[m3] ≠ (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < # ar1, m3 < m2, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], m3 < m2 ∨ m2 + m ≤ m3 ⊦
# ar0 = # ar1, ar0[m3] ≠ (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < # ar1, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m, ¬ m3 < m2, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], m3 < m2 ∨ m2 + m ≤ m3 ⊦
Used formulas: m3 < m2
| # ar0 = # ar1, ar0[m3] ≠ (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < # ar1, m3 < m2, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], m3 < m2 ∨ m2 + m ≤ m3 ⊦ |
# ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < m2, m3 < # ar1, m3 < m1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat
| # ar0 = # ar1, ar0[m3] ≠ ar1[m3], m3 < m2, m3 < # ar1, m3 < m1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 + m ≤ # ar1, m1 + n ≤ # ar1, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
Used terms: m3
| # ar0 = # ar1, ar0[m3] ≠ (m3 < m1 ∨ m1 + n ≤ m3 ⊃ ar1[m3];ar[m3 + m0 - m1]), m3 < # ar1, m1 + n ≤ # ar1, m2 + m ≤ # ar1, m2 ≤ m1, m1 + n ≤ m2 + m, ¬ m3 < m2, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], m3 < m2 ∨ m2 + m ≤ m3 ⊦ |
# ar0 = # ar1, ar0[m3] ≠ ar1[m3], m1 + n < # ar1, m3 < # ar1, m2 < # ar1, m2 + m < # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 ≤ m3, m2 + m ≤ m3, m1 + n ≤ m3, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # ar0 = # ar1, ar0[m3] ≠ ar1[m3], m1 + n < # ar1, m3 < # ar1, m2 < # ar1, m2 + m < # ar1, m1 + n ≤ m2 + m, m2 ≤ m1, m2 ≤ m3, m2 + m ≤ m3, m1 + n ≤ m3, ∀ m0. (m0 < m2 ∨ m2 + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
Used simplifier rules: ⊦ m ≤ n → (n < m ↔ false); (s) Used terms: m3
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.