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