| ⊦ mx1 = mx0[r, c := a] ↔ #r mx0 = #r mx1 ∧ #c mx0 = #c mx1 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0])) |
⊦ #r mx1 = #r mx0 ∧ #c mx1 = #c mx0 ∧ (∀ r0, c0. r0 < #r mx1 ∧ c0 < #c mx1 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ #r mx0 = #r mx1 ∧ #c mx0 = #c mx1 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]))
Used simplifier rules: extension: ⊦ mx1 = mx2 ↔ #r mx1 = #r mx2 ∧ #c mx1 = #c mx2 ∧ (∀ r, c. r < #r mx1 ∧ c < #c mx1 → mx1[r, c] = mx2[r, c]); rowno-put: ⊦ #r mx[r, c := a] = #r mx; colno-put: ⊦ #c mx[r, c := a] = #c mx;
| ⊦ #r mx1 = #r mx0 ∧ #c mx1 = #c mx0 ∧ (∀ r0, c0. r0 < #r mx1 ∧ c0 < #c mx1 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ #r mx0 = #r mx1 ∧ #c mx0 = #c mx1 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0])) |
#r mx1 = #r mx0 ⊦ #r mx1 = #r mx0 ∧ #c mx1 = #c mx0 ∧ (∀ r0, c0. r0 < #r mx1 ∧ c0 < #c mx1 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ #r mx0 = #r mx1 ∧ #c mx0 = #c mx1 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]))
Used formulas: #r mx1 = #r mx0
| #r mx1 = #r mx0 ⊦ #r mx1 = #r mx0 ∧ #c mx1 = #c mx0 ∧ (∀ r0, c0. r0 < #r mx1 ∧ c0 < #c mx1 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ #r mx0 = #r mx1 ∧ #c mx0 = #c mx1 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0])) |
#r mx1 = #r mx0 ⊦ #c mx1 = #c mx0 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx1 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ #c mx0 = #c mx1 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]))
| #r mx1 = #r mx0 ⊦ #c mx1 = #c mx0 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx1 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ #c mx0 = #c mx1 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0])) |
#c mx1 = #c mx0, #r mx1 = #r mx0 ⊦ #c mx1 = #c mx0 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx1 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ #c mx0 = #c mx1 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]))
Used formulas: #c mx1 = #c mx0
| #c mx1 = #c mx0, #r mx1 = #r mx0 ⊦ #c mx1 = #c mx0 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx1 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ #c mx0 = #c mx1 ∧ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0])) |
#c mx1 = #c mx0, #r mx1 = #r mx0 ⊦ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]))
| #c mx1 = #c mx0, #r mx1 = #r mx0 ⊦ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]) ↔ (∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0])) |
#c mx1 = #c mx0, #r mx1 = #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦ ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0])
#c mx1 = #c mx0, #r mx1 = #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦ ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0]
| #c mx1 = #c mx0, #r mx1 = #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦ ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]), c0 < #c mx0, r0 < #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦
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
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]), c0 < #c mx0, r0 < #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, r = r0, mx1[r0, c0] ≠ (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]), r0 < #r mx0, c0 < #c mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]), r ≠ r0, r0 < #r mx0, c0 < #c mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦
Used formulas: r = r0
| #c mx1 = #c mx0, #r mx1 = #r mx0, r = r0, mx1[r0, c0] ≠ (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]), r0 < #r mx0, c0 < #c mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (c = c0 ⊃ a;mx0[r0, c0]), c0 < #c mx0, r0 < #r mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (mx0[r0, c := a])[r1, c0] ⊦
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (c = c0 ⊃ a;mx0[r0, c0]), c0 < #c mx0, r0 < #r mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (mx0[r0, c := a])[r1, c0] ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, c = c0, mx1[r0, c0] ≠ (c = c0 ⊃ a;mx0[r0, c0]), r0 < #r mx0, c0 < #c mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (mx0[r0, c := a])[r1, c0] ⊦
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (c = c0 ⊃ a;mx0[r0, c0]), c ≠ c0, r0 < #r mx0, c0 < #c mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (mx0[r0, c := a])[r1, c0] ⊦
Used formulas: c = c0
| #c mx1 = #c mx0, #r mx1 = #r mx0, c = c0, mx1[r0, c0] ≠ (c = c0 ⊃ a;mx0[r0, c0]), r0 < #r mx0, c0 < #c mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (mx0[r0, c := a])[r1, c0] ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ a, c0 < #c mx0, r0 < #r mx0, ∀ r1, c1. r1 < #r mx0 ∧ c1 < #c mx0 → mx1[r1, c1] = (mx0[r0, c0 := a])[r1, c1] ⊦
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ a, c0 < #c mx0, r0 < #r mx0, ∀ r1, c1. r1 < #r mx0 ∧ c1 < #c mx0 → mx1[r1, c1] = (mx0[r0, c0 := a])[r1, c1] ⊦ |
Used simplifier rules: put-same: ⊦ r < #r mx ∧ c < #c mx → (mx[r, c := a])[r, c] = a; Used terms: r0, c0
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (c = c0 ⊃ a;mx0[r0, c0]), c ≠ c0, r0 < #r mx0, c0 < #c mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (mx0[r0, c := a])[r1, c0] ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ mx0[r0, c0], c ≠ c0, c0 < #c mx0, r0 < #r mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (mx0[r0, c := a])[r1, c0] ⊦
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ mx0[r0, c0], c ≠ c0, c0 < #c mx0, r0 < #r mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (mx0[r0, c := a])[r1, c0] ⊦ |
Used simplifier rules: put-othercol: ⊦ c ≠ c0 → (mx[r, c := a])[r0, c0] = mx[r0, c0]; Used terms: r0, c0
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]), r ≠ r0, r0 < #r mx0, c0 < #c mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ mx0[r0, c0], r ≠ r0, c0 < #c mx0, r0 < #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ mx0[r0, c0], r ≠ r0, c0 < #c mx0, r0 < #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] ⊦ |
Used simplifier rules: put-otherrow: ⊦ r ≠ r0 → (mx[r, c := a])[r0, c0] = mx[r0, c0]; Used terms: r0, c0
| #c mx1 = #c mx0, #r mx1 = #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦ ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (mx0[r, c := a])[r0, c0] |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (mx0[r, c := a])[r0, c0], c0 < #c mx0, r0 < #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦
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
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (mx0[r, c := a])[r0, c0], c0 < #c mx0, r0 < #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, r = r0, mx1[r0, c0] ≠ (mx0[r, c := a])[r0, c0], r0 < #r mx0, c0 < #c mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (mx0[r, c := a])[r0, c0], r ≠ r0, r0 < #r mx0, c0 < #c mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦
Used formulas: r = r0
| #c mx1 = #c mx0, #r mx1 = #r mx0, r = r0, mx1[r0, c0] ≠ (mx0[r, c := a])[r0, c0], r0 < #r mx0, c0 < #c mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (mx0[r0, c := a])[r0, c0], c0 < #c mx0, r0 < #r mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (r0 = r1 ∧ c = c0 ⊃ a;mx0[r1, c0]) ⊦
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (mx0[r0, c := a])[r0, c0], c0 < #c mx0, r0 < #r mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (r0 = r1 ∧ c = c0 ⊃ a;mx0[r1, c0]) ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, c = c0, mx1[r0, c0] ≠ (mx0[r0, c := a])[r0, c0], r0 < #r mx0, c0 < #c mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (r0 = r1 ∧ c = c0 ⊃ a;mx0[r1, c0]) ⊦
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (mx0[r0, c := a])[r0, c0], c ≠ c0, r0 < #r mx0, c0 < #c mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (r0 = r1 ∧ c = c0 ⊃ a;mx0[r1, c0]) ⊦
Used formulas: c = c0
| #c mx1 = #c mx0, #r mx1 = #r mx0, c = c0, mx1[r0, c0] ≠ (mx0[r0, c := a])[r0, c0], r0 < #r mx0, c0 < #c mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (r0 = r1 ∧ c = c0 ⊃ a;mx0[r1, c0]) ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ a, c0 < #c mx0, r0 < #r mx0, ∀ r1, c1. r1 < #r mx0 ∧ c1 < #c mx0 → mx1[r1, c1] = (r0 = r1 ∧ c0 = c1 ⊃ a;mx0[r1, c1]) ⊦
Used simplifier rules: put-same: ⊦ r < #r mx ∧ c < #c mx → (mx[r, c := a])[r, c] = a;
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ a, c0 < #c mx0, r0 < #r mx0, ∀ r1, c1. r1 < #r mx0 ∧ c1 < #c mx0 → mx1[r1, c1] = (r0 = r1 ∧ c0 = c1 ⊃ a;mx0[r1, c1]) ⊦ |
Used terms: r0, c0
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (mx0[r0, c := a])[r0, c0], c ≠ c0, r0 < #r mx0, c0 < #c mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (r0 = r1 ∧ c = c0 ⊃ a;mx0[r1, c0]) ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ mx0[r0, c0], c ≠ c0, c0 < #c mx0, r0 < #r mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (r0 = r1 ∧ c = c0 ⊃ a;mx0[r1, c0]) ⊦
Used simplifier rules: put-othercol: ⊦ c ≠ c0 → (mx[r, c := a])[r0, c0] = mx[r0, c0];
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ mx0[r0, c0], c ≠ c0, c0 < #c mx0, r0 < #r mx0, ∀ r1, c0. r1 < #r mx0 ∧ c0 < #c mx0 → mx1[r1, c0] = (r0 = r1 ∧ c = c0 ⊃ a;mx0[r1, c0]) ⊦ |
Used terms: r0, c0
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ (mx0[r, c := a])[r0, c0], r ≠ r0, r0 < #r mx0, c0 < #c mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦ |
#c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ mx0[r0, c0], r ≠ r0, c0 < #c mx0, r0 < #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦
Used simplifier rules: put-otherrow: ⊦ r ≠ r0 → (mx[r, c := a])[r0, c0] = mx[r0, c0];
| #c mx1 = #c mx0, #r mx1 = #r mx0, mx1[r0, c0] ≠ mx0[r0, c0], r ≠ r0, c0 < #c mx0, r0 < #r mx0, ∀ r0, c0. r0 < #r mx0 ∧ c0 < #c mx0 → mx1[r0, c0] = (r = r0 ∧ c = c0 ⊃ a;mx0[r0, c0]) ⊦ |
Used terms: r0, c0
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.