# predicate_property/2

## Description

    predicate_property(Predicate, Property)

Enumerates, by backtracking, the properties of a visible object predicate. Properties for predicates not declared using a scope directive are not enumerated. The valid predicate properties are listed in the language gramar section on predicate properties and described in the User Manual section on predicate properties.

When `Predicate` is ground at compile time and its predicate indicator is listed in a uses/2 or use_module/2 directive, properties are enumerated for the referenced object or module predicate.

When `Predicate` is bound at compile time to a `:/2` term, this predicate enumerates properties for module predicates (assuming that the backend Prolog compiler supports modules).

## Modes and number of proofs

    predicate_property(+callable, ?predicate_property) - zero_or_more

## Errors

Predicate is a variable:
`instantiation_error`
Predicate is neither a variable nor a callable term:
`type_error(callable, Predicate)`
Property is neither a variable nor a valid predicate property:
`domain_error(predicate_property, Property)`

## Examples

To enumerate, by backtracking, the properties of a locally visible user predicate or a user predicate visible in this:
`predicate_property(Predicate, Property)`
To enumerate, by backtracking, the properties of a public or protected predicate visible in self:
`::predicate_property(Predicate, Property)`
To enumerate, by backtracking, the properties of a public predicate visible in an explicit object:
`Object::predicate_property(Predicate, Property)`

See also

current_op/3, current_predicate/1, uses/2, use_module/2