predicates {relations} | R Documentation |
Relation Predicates
Description
Predicate functions for testing for binary relations and endorelations, and special kinds thereof.
Usage
relation_is(x, predicate, ...)
relation_is_Euclidean(x, na.rm = FALSE)
relation_is_Ferrers(x, na.rm = FALSE)
relation_is_acyclic(x)
relation_is_antisymmetric(x, na.rm = FALSE)
relation_is_asymmetric(x, na.rm = FALSE)
relation_is_bijective(x)
relation_is_binary(x)
relation_is_complete(x, na.rm = FALSE)
relation_is_coreflexive(x, na.rm = FALSE)
relation_is_crisp(x, na.rm = FALSE)
relation_is_cyclic(x)
relation_is_endorelation(x)
relation_is_equivalence(x, na.rm = FALSE)
relation_is_functional(x)
relation_is_homogeneous(x)
relation_is_injective(x)
relation_is_interval_order(x, na.rm = FALSE)
relation_is_irreflexive(x, na.rm = FALSE)
relation_is_left_total(x)
relation_is_linear_order(x, na.rm = FALSE)
relation_is_match(x, na.rm = FALSE)
relation_is_negatively_transitive(x, na.rm = FALSE)
relation_is_partial_order(x, na.rm = FALSE)
relation_is_preference(x, na.rm = FALSE)
relation_is_preorder(x, na.rm = FALSE)
relation_is_quasiorder(x, na.rm = FALSE)
relation_is_quasitransitive(x, na.rm = FALSE)
relation_is_quaternary(x)
relation_is_reflexive(x, na.rm = FALSE)
relation_is_right_total(x)
relation_is_semiorder(x, na.rm = FALSE)
relation_is_semitransitive(x, na.rm = FALSE)
relation_is_strict_linear_order(x, na.rm = FALSE)
relation_is_strict_partial_order(x, na.rm = FALSE)
relation_is_strongly_complete(x, na.rm = FALSE)
relation_is_surjective(x)
relation_is_symmetric(x, na.rm = FALSE)
relation_is_ternary(x)
relation_is_tournament(x, na.rm = FALSE)
relation_is_transitive(x, na.rm = FALSE)
relation_is_trichotomous(x, na.rm = FALSE)
relation_is_weak_order(x, na.rm = FALSE)
relation_has_missings(x)
Arguments
x |
an object inheriting from class |
na.rm |
a logical indicating whether tuples with missing memberships are excluded in the predicate computations. |
predicate |
character vector matching one of the following (see details):
|
... |
Additional arguments passed to the predicate functions
(currently, only |
Details
This help page documents the predicates currently available. Note that
the preferred way is to use the meta-predicate function
relation_is(x, "FOO")
instead of the individual predicates
relation_is_FOO(x)
since the latter will become deprecated in
future releases.
A binary relation is a relation with arity 2.
A relation on a set
is called
homogeneous iff
.
An endorelation is a binary homogeneous relation.
For a crisp binary relation, let us write iff
is contained in
.
A crisp binary relation is called
- left-total:
for all
there is at least one
such that
.
- right-total:
for all
there is at least one
such that
.
- functional:
for all
there is at most one
such that
.
- surjective:
the same as right-total.
- injective:
for all
there is at most one
such that
.
- bijective:
left-total, right-total, functional and injective.
A crisp endorelation is called
- reflexive:
for all
.
- irreflexive:
there is no
such that
.
- coreflexive:
implies
.
- symmetric:
implies
.
- asymmetric:
implies that not
.
- antisymmetric:
and
imply that
.
- transitive:
and
imply that
.
- complete:
for all distinct
and
,
or
.
- strongly complete:
for all
and
,
or
(i.e., complete and reflexive).
- negatively transitive:
not
and not
imply that not
.
- Ferrers:
and
imply
or
.
- semitransitive:
and
imply
or
.
- quasitransitive:
-
and not
and
and not
imply
and not
(i.e., the asymmetric part of
is transitive).
- trichotomous:
exactly one of
,
, or
holds.
- Euclidean:
and
imply
.
- acyclic:
the transitive closure of R is antisymmetric.
- cyclic:
R is not acyclic.
Some combinations of these basic properties have special names because of their widespread use:
- preorder:
reflexive and transitive.
- quasiorder:
the same as preorder.
- equivalence:
a symmetric preorder (reflexive, symmetric, and transitive).
- weak order:
a complete preorder (complete, reflexive, and transitive).
- preference:
the same as weak order.
- partial order:
an antisymmetric preorder (reflexive, antisymmetric, and transitive).
- strict partial order:
irreflexive, antisymmetric, and transitive, or equivalently: asymmetric and transitive).
- linear order:
a complete partial order.
- strict linear order:
a complete strict partial order.
- match:
strongly complete.
- tournament:
complete and asymmetric.
- interval order:
complete and Ferrers.
- semiorder:
a semitransitive interval order.
If is a weak order (“(weak) preference relation”),
defined by
iff
and
is an equivalence, the indifference relation corresponding to
.
There seem to be no commonly agreed definitions for order relations: e.g., Fishburn (1972) requires these to be irreflexive.
For a fuzzy binary relation , let
denote the
membership of
in the relation. Write
and
for the fuzzy t-norm (intersection) and t-conorm (disjunction),
respectively (min and max for the “standard” Zadeh family).
Then generalizations of the above basic endorelation predicates are as
follows.
- reflexive:
for all
.
- irreflexive:
for all
.
- coreflexive:
implies
.
- symmetric:
-
for all
.
- asymmetric:
-
for all
.
- antisymmetric:
-
for all
.
- transitive:
for all
.
- complete:
-
for all
.
- strongly complete:
-
for all
.
- negatively transitive:
-
for all
.
- Ferrers:
-
for all
.
- semitransitive:
-
for all
.
The combined predicates are obtained by combining the basic predicates as for crisp endorelations (see above).
A relation has missings iff at least one cell in the incidence matrix
is NA
. In addition to relation_has_missings()
, an
is.na
method for relations is available, returning a matrix of
logicals corresponding to the incidences tested for missingness.
References
P. C. Fishburn (1972), Mathematics of decision theory. Methods and Models in the Social Sciences 3. Mouton: The Hague.
H. R. Varian (2002), Intermediate Microeconomics: A Modern Approach. 6th Edition. W. W. Norton & Company.
Examples
require("sets")
R <- relation(domain = c(1, 2, 3), graph = set(c(1, 2), c(2, 3)))
summary(R)
## Note the possible effects of NA-handling:
relation_incidence(R)
relation_is(R, "transitive") ## clearly FALSE
relation_incidence(R)[1, 2] <- NA
relation_incidence(R)
relation_is(R, "transitive") ## clearly NA
## The following gives TRUE, since NA gets replaced with 0:
relation_is(R, "transitive", na.rm = TRUE)