| ⊦ 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.