| ⊦ nextperm(ar1, ar2) → smallerPerms(ar2) = smallerPerms(ar1) ++ ar1 |
smallerPerms(ar2) ≠ smallerPerms(ar1) ++ ar1, nextperm(ar1, ar2) ⊦
| smallerPerms(ar2) ≠ smallerPerms(ar1) ++ ar1, nextperm(ar1, ar2) ⊦ |
⊦ nextperm(ar1, ar2) ↔ perm(ar1, ar2) ∧ ar1 ≠ ar2 ∧ ar1 ≤ ar2 ∧ (∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬(ar1 ≤ ar3 ∧ ar3 ≤ ar2))
ar1 ≠ ar2, smallerPerms(ar2) ≠ smallerPerms(ar1) ++ ar1, perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬(ar1 ≤ ar3 ∧ ar3 ≤ ar2) ⊦
Used terms: ar1, ar2
| ⊦ nextperm(ar1, ar2) ↔ perm(ar1, ar2) ∧ ar1 ≠ ar2 ∧ ar1 ≤ ar2 ∧ (∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬(ar1 ≤ ar3 ∧ ar3 ≤ ar2)) |
| ar1 ≠ ar2, smallerPerms(ar2) ≠ smallerPerms(ar1) ++ ar1, perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬(ar1 ≤ ar3 ∧ ar3 ≤ ar2) ⊦ |
ar1 ≠ ar2, smallerPerms(ar2) ≠ smallerPerms(ar1) ++ ar1, perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦
| ar1 ≠ ar2, smallerPerms(ar2) ≠ smallerPerms(ar1) ++ ar1, perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ |
⊦ s1 = s2 ↔ (∀ a. a ∈ s1 ↔ a ∈ s2)
ar1 ≠ ar2, perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2, ∃ a. ¬(a ∈ smallerPerms(ar2) ↔ a ∈ smallerPerms(ar1) ++ ar1) ⊦
Used terms: smallerPerms(ar2), smallerPerms(ar1) ++ ar1
| ⊦ s1 = s2 ↔ (∀ a. a ∈ s1 ↔ a ∈ s2) |
| ar1 ≠ ar2, perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2, ∃ a. ¬(a ∈ smallerPerms(ar2) ↔ a ∈ smallerPerms(ar1) ++ ar1) ⊦ |
¬(ar2 ≠ ar ∧ perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ perm(ar1, ar) ∧ ar ≤ ar1), ar1 ≠ ar2, perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦
Used simplifier rules: smaller-perms: ⊦ ar0 ∈ smallerPerms(ar) ↔ ar ≠ ar0 ∧ perm(ar, ar0) ∧ ar0 ≤ ar; ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ¬(ar2 ≠ ar ∧ perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ perm(ar1, ar) ∧ ar ≤ ar1), ar1 ≠ ar2, perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ |
¬(ar2 ≠ ar ∧ perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ perm(ar1, ar) ∧ ar ≤ ar1), ar1 ≠ ar2, perm(ar1, ar2), perm(ar1, ar), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦
Used simplifier rules: ⊦ perm(x, x); (s) ⊦ perm(x, y) ∧ ¬ perm(x0, y) → x ≠ x0; (s) trans: ⊦ perm(x, y) ∧ perm(y, z) → perm(x, z); (forward) from specification list-perm[natarray-oarray-sort] Used formulas: perm(ar1, ar)
| ¬(ar2 ≠ ar ∧ perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ perm(ar1, ar) ∧ ar ≤ ar1), ar1 ≠ ar2, perm(ar1, ar2), perm(ar1, ar), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ |
¬(ar2 ≠ ar ∧ perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar1 ≠ ar2, perm(ar1, ar), perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦
| ¬(ar2 ≠ ar ∧ perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar1 ≠ ar2, perm(ar1, ar), perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ |
¬(ar2 ≠ ar ∧ perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar2), perm(ar1, ar), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦
Used simplifier rules: array-neg-le-eq-2: ⊦ ar0 ≠ ar1 ∧ ar0 ≤ ar1 → ¬ ar1 ≤ ar0; Used formulas: ar = ar2
| ¬(ar2 ≠ ar ∧ perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar2), perm(ar1, ar), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ |
¬(perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar), perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦
| ¬(perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar), perm(ar1, ar2), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ |
⊦ perm(x, y) ∧ perm(y, z) → perm(x, z)
¬(perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar2), perm(ar1, ar), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ perm(ar2, ar1) ∧ perm(ar1, ar)
¬(true ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar2), perm(ar2, ar1), perm(ar1, ar), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦
Used terms: ar1, ar2, ar
| ⊦ perm(x, y) ∧ perm(y, z) → perm(x, z) |
| ¬(perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar2), perm(ar1, ar), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ perm(ar2, ar1) ∧ perm(ar1, ar) |
¬(perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar), perm(ar1, ar2), ar1 ≤ ar2, ¬ perm(ar2, ar1), ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦
| ¬(perm(ar2, ar) ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar), perm(ar1, ar2), ar1 ≤ ar2, ¬ perm(ar2, ar1), ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ |
⊦ perm(x, y) ↔ perm(y, x)
Used terms: ar1, ar2
| ⊦ perm(x, y) ↔ perm(y, x) |
| ¬(true ∧ ar ≤ ar2 ↔ ar = ar1 ∨ ar ≤ ar1), ar ≠ ar2, ar1 ≠ ar2, perm(ar1, ar2), perm(ar2, ar1), perm(ar1, ar), ar1 ≤ ar2, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ |
ar ≠ ar1, ar ≠ ar2, ar1 ≠ ar2, perm(ar2, ar), perm(ar1, ar2), perm(ar2, ar1), perm(ar1, ar), ar ≤ ar2, ar1 ≤ ar2, ¬ ar ≤ ar1, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦
Used simplifier rules: array-le-trans: ⊦ ar0 ≤ ar1 ∧ ar1 ≤ ar2 → ar0 ≤ ar2; trans: ⊦ perm(x, y) ∧ perm(y, z) → perm(x, z); (forward) from specification list-perm[natarray-oarray-sort] ⊦ perm(x, x); (s)
| ar ≠ ar1, ar ≠ ar2, ar1 ≠ ar2, perm(ar2, ar), perm(ar1, ar2), perm(ar2, ar1), perm(ar1, ar), ar ≤ ar2, ar1 ≤ ar2, ¬ ar ≤ ar1, ∀ ar3. perm(ar1, ar3) ∧ ar3 ≠ ar1 ∧ ar3 ≠ ar2 → ¬ ar1 ≤ ar3 ∨ ¬ ar3 ≤ ar2 ⊦ |
Used simplifier rules: array-neg-le-eq: ⊦ ar0 ≠ ar1 ∧ ¬ ar1 ≤ ar0 → ar0 ≤ ar1; Used terms: ar
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.