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