:- object(set(_type),
	extends(set)).

	:- info([
		version is 1.0,
		author is 'Paulo Moura',
		date is 2006/2/2,
		comment is 'Set predicates with elements constrained to a single type.']).

	valid(Set) :-
		nonvar(Set),
		parameter(1, Type),
		\+ \+ valid(Set, Type).

	valid([], _) :-
		!.
	valid([Element], Type) :-
		!,
		Type::valid(Element).
	valid([Element1, Element2| Set], Type) :-
		Element1 @< Element2,
		Type::valid(Element1),
		Type::valid(Element2),
		valid([Element2| Set], Type).

:- end_object.