latte-sets.rel
A relation from elements of a given type T
to elements of U
is formalized with type (==> T U :type)
.
This namespace provides some important properties about such relations.
dom
(dom [R (rel T U)])
(set-of [x T] (exists [y U] (R x y)))
Definition: The domain of relation R
.
emptyrel
(emptyrel [T :type] [U :type])
(lambda [x T] (lambda [y U] p/absurd))
Definition: The empty relation.
emptyrel-prop
(emptyrel-prop [T :type] [U :type])
(forall [x T] (forall [y U] (not ((emptyrel T U) x y))))
Theorem:
fetch-rel-type
(fetch-rel-type def-env ctx r-type)
fullrel
(fullrel [T :type] [U :type])
(lambda [x T] (lambda [y U] p/truth))
Definition: The full (total) relation between T
and U
.
fullrel-prop
(fullrel-prop [T :type] [U :type])
(forall [x T] (forall [y U] ((fullrel T U) x y)))
Theorem:
functional
(functional [R (rel T U)])
(forall [x T] (q/unique (lambda [y U] (R x y))))
Definition:
funrel
(funrel [f (==> T U)])
(lambda [x T] (lambda [y U] (equal (f x) y)))
Definition: The relation corresponding to function f
.
funrel-functional
(funrel-functional [f (==> T U)])
(functional (funrel f))
Theorem:
ident-refl
(ident-refl [T :type])
(reflexive (identity T))
Theorem:
ident-sym
(ident-sym [T :type])
(symmetric (identity T))
Theorem:
ident-trans
(ident-trans [T :type])
(transitive (identity T))
Theorem:
identity
(identity [T :type])
(lambda [x y T] (equal x y))
Definition: The indentity relation on T
.
prod
(prod [s1 (set T)] [s2 (set U)])
(lambda [x T] (lambda [y U] (and (elem x s1) (elem y s2))))
Definition: The cartersian product of sets s1
and s2
, i.e. s1
⨯s2
.
psubrel
(psubrel [R1 (rel T U)] [R2 (rel T U)])
(and (subrel R1 R2) (not (releq R1 R2)))
Definition: The anti-reflexive variant of subrel.
psubrel-antirefl
(psubrel-antirefl [R (rel T U)])
(not (psubrel R R))
Theorem:
psubrel-antisym
(psubrel-antisym [R1 (rel T U)] [R2 (rel T U)])
(not (and (psubrel R1 R2) (psubrel R2 R1)))
Theorem:
psubrel-emptyrel
(psubrel-emptyrel [R (rel T U)])
(==> (psubrel (emptyrel T U) R) (not (releq R (emptyrel T U))))
Theorem:
psubrel-emptyrel-conv
(psubrel-emptyrel-conv [R (rel T U)])
(==> (not (releq R (emptyrel T U))) (psubrel (emptyrel T U) R))
Theorem:
psubrel-emptyrel-equiv
(psubrel-emptyrel-equiv [R (rel T U)])
(<=> (psubrel (emptyrel T U) R) (not (releq R (emptyrel T U))))
Theorem:
psubrel-trans
(psubrel-trans [R1 (rel T U)] [R2 (rel T U)] [R3 (rel T U)])
(==> (psubrel R1 R2) (psubrel R2 R3) (psubrel R1 R3))
Theorem:
ran
(ran [R (rel T U)])
(set-of [y U] (exists [x T] (R x y)))
Definition: The range of relation R
.
rcomp
(rcomp [R1 (rel T U)] [R2 (rel U V)])
(lambda [x T] (lambda [z V] (exists [y U] (and (R1 x y) (R2 y z)))))
Definition: Sequential relational composition.
rcomp-assoc
(rcomp-assoc [R1 (rel T U)] [R2 (rel U V)] [R3 (rel V W)])
(releq (rcomp R1 (rcomp R2 R3)) (rcomp (rcomp R1 R2) R3))
Theorem: Relational composition is associative.
rcomp-assoc-subrel
(rcomp-assoc-subrel [R1 (rel T U)] [R2 (rel U V)] [R3 (rel V W)])
(subrel (rcomp R1 (rcomp R2 R3)) (rcomp (rcomp R1 R2) R3))
Theorem:
rcomp-assoc-suprel
(rcomp-assoc-suprel [R1 (rel T U)] [R2 (rel U V)] [R3 (rel V W)])
(subrel (rcomp (rcomp R1 R2) R3) (rcomp R1 (rcomp R2 R3)))
Theorem:
refl-closure
(refl-closure [R (rel T T)])
(lambda [x y T] (or (R x y) (equal x y)))
Definition: The reflexive closure of relation R
.
refl-closure-smallest
(refl-closure-smallest [R (rel T T)])
(forall
[S (rel T T)]
(==> (subrel R S) (reflexive S) (subrel (refl-closure R) S)))
Theorem:
refl-closure-sub
(refl-closure-sub [R (rel T T)])
(subrel R (refl-closure R))
Theorem:
reflexive
(reflexive [R (rel T T)])
(forall [x T] (R x x))
Definition: A reflexive relation.
reflexive-refl-closure
(reflexive-refl-closure [R (rel T T)])
(reflexive (refl-closure R))
Theorem:
rel
(rel [T :type] [U :type])
(==> T U :type)
Definition: The type of relations.
rel-equal
(rel-equal [R1 (rel T U)] [R2 (rel T U)])
(forall [P (==> (rel T U) :type)] (<=> (P R1) (P R2)))
Definition: A Leibniz-stype equality for relations.
It says that two relations R1
and R2
are equal iff for any predicate P
then (P R1)
if and only if (P R2)
.
Note that the identification with seteq is non-trivial, and requires an axiom.
rel-equal-implies-releq
(rel-equal-implies-releq [R1 (rel T U)] [R2 (rel T U)])
(==> (rel-equal R1 R2) (releq R1 R2))
Theorem:
rel-equal-implies-subrel
(rel-equal-implies-subrel [R1 (rel T U)] [R2 (rel T U)])
(==> (rel-equal R1 R2) (subrel R1 R2))
Theorem:
rel-equal-prop
(rel-equal-prop [R1 (rel T U)] [R2 (rel T U)] [P (==> (rel T U) :type)])
(==> (rel-equal R1 R2) (P R1) (P R2))
Theorem:
rel-equal-refl
(rel-equal-refl [R (rel T U)])
(rel-equal R R)
Theorem:
rel-equal-releq
(rel-equal-releq [R1 (rel T U)] [R2 (rel T U)])
(<=> (rel-equal R1 R2) (releq R1 R2))
Theorem: Coincidence of Leibniz-style and subset-based equality for relations.
rel-equal-sym
(rel-equal-sym [R1 (rel T U)] [R2 (rel T U)])
(==> (rel-equal R1 R2) (rel-equal R2 R1))
Theorem:
rel-equal-trans
(rel-equal-trans [R1 (rel T U)] [R2 (rel T U)] [R3 (rel T U)])
(==> (rel-equal R1 R2) (rel-equal R2 R3) (rel-equal R1 R3))
Theorem:
releq
(releq [R1 (rel T U)] [R2 (rel T U)])
(and (subrel R1 R2) (subrel R2 R1))
Definition: Subset-based equality on relations.
releq-implies-rel-equal
(releq-implies-rel-equal [R1 (rel T U)] [R2 (rel T U)])
(==> (releq R1 R2) (rel-equal R1 R2))
Axiom: As for the set case (cf. sets/seteq-implies-set-equal), going from the subset-based equality to the (thus more general) leibniz-style one requires an axiom.
releq-refl
(releq-refl [R (rel T U)])
(releq R R)
Theorem:
releq-sym
(releq-sym [R1 (rel T U)] [R2 (rel T U)])
(==> (releq R1 R2) (releq R2 R1))
Theorem:
releq-trans
(releq-trans [R1 (rel T U)] [R2 (rel T U)] [R3 (rel T U)])
(==> (releq R1 R2) (releq R2 R3) (releq R1 R3))
Theorem:
relfun
(relfun [R (rel T U)] [fproof (functional R)])
(lambda [x T] (q/the (fproof x)))
Definition: The function corresponding to a total, functional relation.
relfun-img
(relfun-img [R (rel T U)] [fproof (functional R)])
(forall
[x T]
(forall [y U] (==> (R x y) (equal ((relfun R fproof) x) y))))
Theorem: The image of a functional relation
relfun-img-prop
(relfun-img-prop [R (rel T U)] [fproof (functional R)])
(forall [x T] (R x ((relfun R fproof) x)))
Theorem: The property of the relational/functional image.
relfunrel-equal
(relfunrel-equal [f (==> T U)])
(equal f (relfun (funrel f) (funrel-functional f)))
Theorem: This is the intentional variant of relfunrel-ext-equal.
relfunrel-ext-equal
(relfunrel-ext-equal [f (==> T U)])
(forall
[x T]
(equal (f x) ((relfun (funrel f) (funrel-functional f)) x)))
Theorem: This is the extensional equality of a function f
and its relational characterization.
subrel
(subrel [R1 (rel T U)] [R2 (rel T U)])
(forall [x T] (forall [y U] (==> (R1 x y) (R2 x y))))
Definition: The subset ordering for relations, i.e. R1
⊆R2
subrel-emptyrel-lower-bound
(subrel-emptyrel-lower-bound [R (rel T U)])
(subrel (emptyrel T U) R)
Theorem: The empty relation is a subset of every other relations.
subrel-fullrel-upper-bound
(subrel-fullrel-upper-bound [R (rel T U)])
(subrel R (fullrel T U))
Theorem: The full relation is a superset of every other relations.
subrel-prop
(subrel-prop [P (==> T U :type)] [R1 (rel T U)] [R2 (rel T U)])
(==>
(forall [x T] (forall [y U] (==> (R2 x y) (P x y))))
(subrel R1 R2)
(forall [x T] (forall [y U] (==> (R1 x y) (P x y)))))
Theorem: Preservation of properties on relational subsets.
subrel-refl
(subrel-refl [R (rel T U)])
(subrel R R)
Theorem:
subrel-trans
(subrel-trans [R1 (rel T U)] [R2 (rel T U)] [R3 (rel T U)])
(==> (subrel R1 R2) (subrel R2 R3) (subrel R1 R3))
Theorem:
symm-closure
(symm-closure [R (rel T T)])
(lambda [x y T] (or (R x y) (R y x)))
Definition: The symmetric closure of relation R
.
symm-closure-smallest
(symm-closure-smallest [R (rel T T)])
(forall
[S (rel T T)]
(==> (subrel R S) (symmetric S) (subrel (symm-closure R) S)))
Theorem:
symm-closure-sub
(symm-closure-sub [R (rel T T)])
(subrel R (symm-closure R))
Theorem:
symmetric
(symmetric [R (rel T T)])
(forall [x y T] (==> (R x y) (R y x)))
Definition: A symmetric relation.
symmetric-symm-closure
(symmetric-symm-closure [R (rel T T)])
(symmetric (symm-closure R))
Theorem:
transitive
(transitive [R (rel T T)])
(forall [x y z T] (==> (R x y) (R y z) (R x z)))
Definition: A transitive relation.