| ⊦ #oc(i, mx.toArr) = #oc(i, mx.toArc) |
#oc(i, mx.toArr) ≠ #oc(i, mx.toArc) ⊦
| #oc(i, mx.toArr) ≠ #oc(i, mx.toArc) ⊦ |
#oc(i, (mx0[m, m0 := i0]).toArr) ≠ #oc(i, (mx0[m, m0 := i0]).toArc), ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
Used simplifier rules: init-toArr: ⊦ mkmatrix(m, n, i).toArr = mklist(i, m * n); init-toArc: ⊦ mkmatrix(m, n, i).toArc = mklist(i, m * n); matrix('a) generated by mkmatrix, [ := ];;
| #oc(i, (mx0[m, m0 := i0]).toArr) ≠ #oc(i, (mx0[m, m0 := i0]).toArc), ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
⊦ ¬ m < #r mx ∨ ¬ n < #c mx → mx[m, n := i] = mx
#oc(i, (mx0[m, m0 := i0]).toArr) ≠ #oc(i, (mx0[m, m0 := i0]).toArc), m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
#oc(i, mx0.toArr) ≠ #oc(i, mx0.toArc), ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc), ¬ m < #r mx0 ∨ ¬ m0 < #c mx0 ⊦
Used terms: mx0, m, m0, i0
| ⊦ ¬ m < #r mx ∨ ¬ n < #c mx → mx[m, n := i] = mx |
| #oc(i, (mx0[m, m0 := i0]).toArr) ≠ #oc(i, (mx0[m, m0 := i0]).toArc), m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
#oc(i, mx0.toArr) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0), m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
Used simplifier rules: oc-put-toAr: ⊦ m < #r mx ∧ n < #c mx → #oc(i, (mx[m, n := j]).toArr) = #oc(i, mx.toArr) + (i = j ⊃ 1;0) - (mx[m, n] = i ⊃ 1;0); oc-put-toArc: ⊦ m < #r mx ∧ n < #c mx → #oc(i, (mx[m, n := j]).toArc) = #oc(i, mx.toArc) + (i = j ⊃ 1;0) - (mx[m, n] = i ⊃ 1;0); ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| #oc(i, mx0.toArr) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0), m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
i = i0, #oc(i, mx0.toArr) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0), m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
#oc(i, mx0.toArr) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0), i ≠ i0, m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
Used formulas: i = i0
| i = i0, #oc(i, mx0.toArr) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0), m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
#oc(i0, mx0.toArr) + 1 - (mx0[m, m0] = i0 ⊃ 1;0) ≠ #oc(i0, mx0.toArc) + 1 - (mx0[m, m0] = i0 ⊃ 1;0), m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
| #oc(i0, mx0.toArr) + 1 - (mx0[m, m0] = i0 ⊃ 1;0) ≠ #oc(i0, mx0.toArc) + 1 - (mx0[m, m0] = i0 ⊃ 1;0), m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
mx0[m, m0] = i0, #oc(i0, mx0.toArr) + 1 - (mx0[m, m0] = i0 ⊃ 1;0) ≠ #oc(i0, mx0.toArc) + 1 - (mx0[m, m0] = i0 ⊃ 1;0), m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
#oc(i0, mx0.toArr) + 1 - (mx0[m, m0] = i0 ⊃ 1;0) ≠ #oc(i0, mx0.toArc) + 1 - (mx0[m, m0] = i0 ⊃ 1;0), mx0[m, m0] ≠ i0, m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
Used formulas: mx0[m, m0] = i0
| mx0[m, m0] = i0, #oc(i0, mx0.toArr) + 1 - (mx0[m, m0] = i0 ⊃ 1;0) ≠ #oc(i0, mx0.toArc) + 1 - (mx0[m, m0] = i0 ⊃ 1;0), m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
#oc(mx0[m, m0], mx0.toArr) ≠ #oc(mx0[m, m0], mx0.toArc), m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n + 0 = n; (s) ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s)
| #oc(mx0[m, m0], mx0.toArr) ≠ #oc(mx0[m, m0], mx0.toArc), m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
Used terms: mx0[m, m0]
| #oc(i0, mx0.toArr) + 1 - (mx0[m, m0] = i0 ⊃ 1;0) ≠ #oc(i0, mx0.toArc) + 1 - (mx0[m, m0] = i0 ⊃ 1;0), mx0[m, m0] ≠ i0, m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
#oc(i0, mx0.toArr) ≠ #oc(i0, mx0.toArc), mx0[m, m0] ≠ i0, m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s)
| #oc(i0, mx0.toArr) ≠ #oc(i0, mx0.toArc), mx0[m, m0] ≠ i0, m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
Used terms: i0
| #oc(i, mx0.toArr) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) + (i = i0 ⊃ 1;0) - (mx0[m, m0] = i ⊃ 1;0), i ≠ i0, m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
#oc(i, mx0.toArr) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) - (mx0[m, m0] = i ⊃ 1;0), i ≠ i0, m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n + 0 = n; (s)
| #oc(i, mx0.toArr) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) - (mx0[m, m0] = i ⊃ 1;0), i ≠ i0, m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
mx0[m, m0] = i, #oc(i, mx0.toArr) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) - (mx0[m, m0] = i ⊃ 1;0), i ≠ i0, m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
#oc(i, mx0.toArr) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) - (mx0[m, m0] = i ⊃ 1;0), mx0[m, m0] ≠ i, i ≠ i0, m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
Used formulas: mx0[m, m0] = i
| mx0[m, m0] = i, #oc(i, mx0.toArr) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) - (mx0[m, m0] = i ⊃ 1;0), i ≠ i0, m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
#oc(mx0[m, m0], mx0.toArr) - 1 ≠ #oc(mx0[m, m0], mx0.toArc) - 1, mx0[m, m0] ≠ i0, m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
| #oc(mx0[m, m0], mx0.toArr) - 1 ≠ #oc(mx0[m, m0], mx0.toArc) - 1, mx0[m, m0] ≠ i0, m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
Used terms: mx0[m, m0]
| #oc(i, mx0.toArr) - (mx0[m, m0] = i ⊃ 1;0) ≠ #oc(i, mx0.toArc) - (mx0[m, m0] = i ⊃ 1;0), mx0[m, m0] ≠ i, i ≠ i0, m0 < #c mx0, m < #r mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
#oc(i, mx0.toArr) ≠ #oc(i, mx0.toArc), mx0[m, m0] ≠ i, i ≠ i0, m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦
Used simplifier rules: ⊦ m - 0 = m; (s)
| #oc(i, mx0.toArr) ≠ #oc(i, mx0.toArc), mx0[m, m0] ≠ i, i ≠ i0, m < #r mx0, m0 < #c mx0, ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc) ⊦ |
Used terms: i
| #oc(i, mx0.toArr) ≠ #oc(i, mx0.toArc), ∀ i. #oc(i, mx0.toArr) = #oc(i, mx0.toArc), ¬ m < #r mx0 ∨ ¬ m0 < #c mx0 ⊦ |
Used terms: i
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.