AbstractIn this paper semi-linear norms, a class of functions to weight the terms occurring in a program, are defined and studied. All the functions in this class have the nice property of allowing a syntactical characterization of rigid terms, i.e. terms whose weight does not change under substitution. Based on these norms, a general proof method for universal termination of pure Prolog programs can be adapted to deal with a large class of programs in a simple way. The proof method requires pre/post specifications well-behaved with respect to substitutions to be associated with each predicate symbol in the program, and ordering functions not increasing with respect to substitutions to be associated with cycles in the program. The specifica...