| m0 < # A, m < # A ⊦ perm(A[m0, A[m]][m, A[m0]], A0) ↔ perm(A, A0) |
m0 < # A, m < # A ⊦ (A[m] = A[m0, A[m]][m] ⊃ mkbag(A, # A) -- A[m0];(mkbag(A, # A) -- A[m0] -- A[m0, A[m]][m]) ++ A[m]) ++ A[m0] = mkbag(A0, # A0) ↔ mkbag(A, # A) = mkbag(A0, # A0)
Used simplifier rules: perm: ⊦ perm(A, A0) ↔ mkbag(A, # A) = mkbag(A0, # A0);%mkbag-update: m < # A ⊦ m < n → mkbag(A[m, a], n) = (mkbag(A, n) -- A[m]) ++ a;% ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ (bag ++ a) -- b = (a = b ⊃ bag;(bag -- b) ++ a); (s)% ⊦ m < n → (n ≤ m ↔ false); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ # ar[n, a] = # ar; (s)