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