enrich
list-set
with
functions
#oc : 'a × list('a) → nat;
predicates
perm : list('a) × list('a);
. ⊆m . : list('a) × list('a);
variables
x : list('a);
y : list('a);
z : list('a);
a : 'a;
b : 'a;
c : 'a;
m : nat;
n : nat;
axioms
oc-e: #oc(a, []) = 0;
used for: s, ls;
oc-y: #oc(a, a ' + x) = #oc(a, x) + 1;
used for: s, ls;
oc-n: a ≠ b → #oc(a, b ' + x) = #oc(a, x);
used for: s, ls, lc;
msubset: x ⊆m y ↔ (∀ a. #oc(a, x) ≤ #oc(a, y));
used for: ls;
perm: perm(x, y) ↔ x ⊆m y ∧ y ⊆m x;
used for: s, ls;
end enrich