| ⊦ mx[r0, c0, a][r1, c1, b] = mx[r1, c1, b][r0, c0, a] ↔ r0 ≠ r1 ∨ c0 ≠ c1 ∨ ¬ r0 < #r mx ∨ ¬ c0 < #c mx ∨ a = b |
¬(mx[r0, c0, a][r1, c1, b] = mx[r1, c1, b][r0, c0, a] ↔ r0 ≠ r1 ∨ c0 ≠ c1 ∨ ¬ r0 < #r mx ∨ ¬ c0 < #c mx ∨ a = b) ⊦
| ¬(mx[r0, c0, a][r1, c1, b] = mx[r1, c1, b][r0, c0, a] ↔ r0 ≠ r1 ∨ c0 ≠ c1 ∨ ¬ r0 < #r mx ∨ ¬ c0 < #c mx ∨ a = b) ⊦ |
⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r0, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r0, c0, a][r, c]) ↔ r0 ≠ r1 ∨ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b
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, c. r < #r mx ∧ c < #c mx → mx[r0, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r0, c0, a][r, c]) ↔ r0 ≠ r1 ∨ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b |
r0 = r1 ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r0, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r0, c0, a][r, c]) ↔ r0 ≠ r1 ∨ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b
r0 ≠ r1 ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r0, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r0, c0, a][r, c]) ↔ r0 ≠ r1 ∨ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b
Used formulas: r0 = r1
| r0 = r1 ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r0, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r0, c0, a][r, c]) ↔ r0 ≠ r1 ∨ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b |
⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r1, c0, a][r, c]) ↔ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b
| ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r1, c0, a][r, c]) ↔ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b |
c0 = c1 ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r1, c0, a][r, c]) ↔ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b
c0 ≠ c1 ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r1, c0, a][r, c]) ↔ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b
Used formulas: c0 = c1
| c0 = c1 ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r1, c0, a][r, c]) ↔ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b |
⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c]) ↔ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b
Used simplifier rules: cputput: ⊦ mx[r, c, a][r, c, b] = mx[r, c, b];
| ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c]) ↔ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b |
a ≠ b ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c]) ↔ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b
Used formulas: a = b
| a ≠ b ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c]) ↔ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b |
a ≠ b ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c]) ↔ ¬ r1 < #r mx ∨ ¬ c1 < #c mx
| a ≠ b ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c]) ↔ ¬ r1 < #r mx ∨ ¬ c1 < #c mx |
a ≠ b, r1 < #r mx ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c]) ↔ ¬ r1 < #r mx ∨ ¬ c1 < #c mx
Used simplifier rules: cngetput-r: r ≠ r0 ⊦ mx[r, c, a][r0, c0] = mx[r0, c0]; ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n < m ↔ false); (s) Used formulas: r1 < #r mx
| a ≠ b, r1 < #r mx ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c]) ↔ ¬ r1 < #r mx ∨ ¬ c1 < #c mx |
a ≠ b, c1 < #c mx, r1 < #r mx, ∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c] ⊦
Used simplifier rules: cngetput-c: c ≠ c0 ⊦ mx[r, c, a][r0, c0] = mx[r0, c0]; ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| a ≠ b, c1 < #c mx, r1 < #r mx, ∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c1, b][r, c] = mx[r1, c1, a][r, c] ⊦ |
Used simplifier rules: put-same: ⊦ r < #r mx ∧ c < #c mx → mx[r, c, a][r, c] = a; Used terms: r1, c1
| c0 ≠ c1 ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r1, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r1, c0, a][r, c]) ↔ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b |
mx[r1, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r1, c0, a][r, c], c0 ≠ c1, c < #c mx, r < #r mx ⊦
Used simplifier rules: cputput: ⊦ mx[r, c, a][r, c, b] = mx[r, c, b]; cngetput-c: c ≠ c0 ⊦ mx[r, c, a][r0, c0] = mx[r0, c0]; ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| mx[r1, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r1, c0, a][r, c], c0 ≠ c1, c < #c mx, r < #r mx ⊦ |
r1 = r, mx[r1, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r1, c0, a][r, c], c0 ≠ c1, r < #r mx, c < #c mx ⊦
Used simplifier rules: put-otherrow: ⊦ r ≠ r0 → mx[r, c, a][r0, c0] = mx[r0, c0]; Used formulas: r1 = r
| r1 = r, mx[r1, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r1, c0, a][r, c], c0 ≠ c1, r < #r mx, c < #c mx ⊦ |
mx[r, c0, a][r, c1, b][r, c] ≠ mx[r, c1, b][r, c0, a][r, c], c0 ≠ c1, c < #c mx, r < #r mx ⊦
| mx[r, c0, a][r, c1, b][r, c] ≠ mx[r, c1, b][r, c0, a][r, c], c0 ≠ c1, c < #c mx, r < #r mx ⊦ |
mx[r, c0, a][r, c1, b][r, c] ≠ mx[r, c1, b][r, c0, a][r, c], c0 ≠ c1, c1 ≠ c, r < #r mx, c < #c mx ⊦
Used simplifier rules: rowno-put: ⊦ #r mx[r, c, a] = #r mx; colno-put: ⊦ #c mx[r, c, a] = #c mx; cgetput: r < #r mx, c < #c mx ⊦ mx[r, c, a][r, c] = a; put-othercol: ⊦ c ≠ c0 → mx[r, c, a][r0, c0] = mx[r0, c0]; put-same: ⊦ r < #r mx ∧ c < #c mx → mx[r, c, a][r, c] = a; Used formulas: c1 = c
| mx[r, c0, a][r, c1, b][r, c] ≠ mx[r, c1, b][r, c0, a][r, c], c0 ≠ c1, c1 ≠ c, r < #r mx, c < #c mx ⊦ |
mx[r, c0, a][r, c] ≠ mx[r, c1, b][r, c0, a][r, c], c0 ≠ c1, c1 ≠ c, c < #c mx, r < #r mx ⊦
Used simplifier rules: put-othercol: ⊦ c ≠ c0 → mx[r, c, a][r0, c0] = mx[r0, c0];
| mx[r, c0, a][r, c] ≠ mx[r, c1, b][r, c0, a][r, c], c0 ≠ c1, c1 ≠ c, c < #c mx, r < #r mx ⊦ |
Used simplifier rules: put-same: ⊦ r < #r mx ∧ c < #c mx → mx[r, c, a][r, c] = a; rowno-put: ⊦ #r mx[r, c, a] = #r mx; colno-put: ⊦ #c mx[r, c, a] = #c mx; cgetput: r < #r mx, c < #c mx ⊦ mx[r, c, a][r, c] = a; put-othercol: ⊦ c ≠ c0 → mx[r, c, a][r0, c0] = mx[r0, c0]; Used formulas: c0 = c
| r0 ≠ r1 ⊦ (∀ r, c. r < #r mx ∧ c < #c mx → mx[r0, c0, a][r1, c1, b][r, c] = mx[r1, c1, b][r0, c0, a][r, c]) ↔ r0 ≠ r1 ∨ c0 ≠ c1 ∨ ¬ r1 < #r mx ∨ ¬ c1 < #c mx ∨ a = b |
mx[r0, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, c < #c mx, r < #r mx ⊦
Used simplifier rules: cputput: ⊦ mx[r, c, a][r, c, b] = mx[r, c, b]; cngetput-c: c ≠ c0 ⊦ mx[r, c, a][r0, c0] = mx[r0, c0]; ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| mx[r0, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, c < #c mx, r < #r mx ⊦ |
r1 = r, mx[r0, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, r < #r mx, c < #c mx ⊦
mx[r0, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, r1 ≠ r, r < #r mx, c < #c mx ⊦
Used formulas: r1 = r
| r1 = r, mx[r0, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, r < #r mx, c < #c mx ⊦ |
mx[r0, c0, a][r, c1, b][r, c] ≠ mx[r, c1, b][r, c], r0 ≠ r, c < #c mx, r < #r mx ⊦
Used simplifier rules: put-otherrow: ⊦ r ≠ r0 → mx[r, c, a][r0, c0] = mx[r0, c0];
| mx[r0, c0, a][r, c1, b][r, c] ≠ mx[r, c1, b][r, c], r0 ≠ r, c < #c mx, r < #r mx ⊦ |
Used simplifier rules: rowno-put: ⊦ #r mx[r, c, a] = #r mx; colno-put: ⊦ #c mx[r, c, a] = #c mx; cgetput: r < #r mx, c < #c mx ⊦ mx[r, c, a][r, c] = a; put-same: ⊦ r < #r mx ∧ c < #c mx → mx[r, c, a][r, c] = a; put-otherrow: ⊦ r ≠ r0 → mx[r, c, a][r0, c0] = mx[r0, c0]; put-othercol: ⊦ c ≠ c0 → mx[r, c, a][r0, c0] = mx[r0, c0]; Used formulas: c1 = c
| mx[r0, c0, a][r1, c1, b][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, r1 ≠ r, r < #r mx, c < #c mx ⊦ |
mx[r0, c0, a][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, r1 ≠ r, c < #c mx, r < #r mx ⊦
Used simplifier rules: put-otherrow: ⊦ r ≠ r0 → mx[r, c, a][r0, c0] = mx[r0, c0];
| mx[r0, c0, a][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, r1 ≠ r, c < #c mx, r < #r mx ⊦ |
r0 = r, mx[r0, c0, a][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, r1 ≠ r, r < #r mx, c < #c mx ⊦
Used simplifier rules: put-otherrow: ⊦ r ≠ r0 → mx[r, c, a][r0, c0] = mx[r0, c0]; Used formulas: r0 = r
| r0 = r, mx[r0, c0, a][r, c] ≠ mx[r1, c1, b][r0, c0, a][r, c], r0 ≠ r1, r1 ≠ r, r < #r mx, c < #c mx ⊦ |
mx[r, c0, a][r, c] ≠ mx[r1, c1, b][r, c0, a][r, c], r1 ≠ r, c < #c mx, r < #r mx ⊦
| mx[r, c0, a][r, c] ≠ mx[r1, c1, b][r, c0, a][r, c], r1 ≠ r, c < #c mx, r < #r mx ⊦ |
Used simplifier rules: put-same: ⊦ r < #r mx ∧ c < #c mx → mx[r, c, a][r, c] = a; rowno-put: ⊦ #r mx[r, c, a] = #r mx; colno-put: ⊦ #c mx[r, c, a] = #c mx; cgetput: r < #r mx, c < #c mx ⊦ mx[r, c, a][r, c] = a; put-othercol: ⊦ c ≠ c0 → mx[r, c, a][r0, c0] = mx[r0, c0]; put-otherrow: ⊦ r ≠ r0 → mx[r, c, a][r0, c0] = mx[r0, c0]; Used formulas: c0 = c
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.