48 lines
984 B
Plaintext
48 lines
984 B
Plaintext
|
import Common.Set.OrderedPair
|
|||
|
import Mathlib.Data.Set.Basic
|
|||
|
import Mathlib.Data.Set.Prod
|
|||
|
|
|||
|
/-! # Relations
|
|||
|
|
|||
|
A representation of a relation, i.e. a set of ordered pairs. Like `Set`, it is
|
|||
|
assumed a relation is homogeneous.
|
|||
|
-/
|
|||
|
|
|||
|
namespace Set
|
|||
|
|
|||
|
/--
|
|||
|
A relation type as defined by Enderton.
|
|||
|
|
|||
|
We choose to use tuples to represent our ordered pairs, as opposed to
|
|||
|
Kuratowski's definition of a set.
|
|||
|
|
|||
|
Not to be confused with the Lean-provided `Rel`.
|
|||
|
-/
|
|||
|
abbrev Relation (α : Type _) := Set (α × α)
|
|||
|
|
|||
|
namespace Relation
|
|||
|
|
|||
|
/--
|
|||
|
The domain of a `Relation`.
|
|||
|
-/
|
|||
|
def dom (R : Relation α) : Set α := Prod.fst '' R
|
|||
|
|
|||
|
/--
|
|||
|
The range of a `Relation`.
|
|||
|
-/
|
|||
|
def ran (R : Relation α) : Set α := Prod.snd '' R
|
|||
|
|
|||
|
/--
|
|||
|
The field of a `Relation`.
|
|||
|
-/
|
|||
|
def fld (R : Relation α) : Set α := dom R ∪ ran R
|
|||
|
|
|||
|
/--
|
|||
|
Convert a `Relation` into an equivalent representation using `OrderedPair`s.
|
|||
|
-/
|
|||
|
def toOrderedPairs (R : Relation α) : Set (Set (Set α)) :=
|
|||
|
R.image (fun (x, y) => OrderedPair x y)
|
|||
|
|
|||
|
end Relation
|
|||
|
|
|||
|
end Set
|