Skip to main content
Mathematics LibreTexts

5.4: Equivalence

  • Page ID
    181196
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    A relation on a set is called an equivalence relation if it is reflexive, symmetric, and transitive. The equivalence class of an element \(a\) in a set \(A\) is the set of all elements in \(A\) that are related to a by this relation, denoted by:

    \[[a]=\{x \in A \mid x R a\} \nonumber \]

    Here, \([a]\) represents the equivalence class of \(a\), comprising all elements in \(A\) that are related to \(a\) through the relation \(R\). This illustrates the grouping of elements into equivalence classes.

    Consider a set \(A\) defined as:

    \[A=\{x \mid x \text { is a person living in a given building }\} \nonumber\]

    # Define the set of people
    A = Set(['p_1', 'p_2', 'p_3', 'p_4', 'p_5', 'p_6', 'p_7', 'p_8', 'p_9', 'p_10'])
    A
    {'p_8', 'p_6', 'p_1', 'p_2', 'p_10', 'p_7', 'p_9', 'p_3', 'p_4', 'p_5'}

    Create sets for the people living on each floor of the building:

    import pprint
    
    # Define the floors as a dictionary, mapping floor names to sets of people
    floors = {
        'first_floor': Set(['p_1', 'p_2', 'p_3', 'p_4']),
        'second_floor': Set(['p_5', 'p_6', 'p_7']),
        'third_floor': Set(['p_8', 'p_9', 'p_10'])
    }
    
    pprint.pprint(floors)
    {'first_floor': {'p_3', 'p_4', 'p_1', 'p_2'},
     'second_floor': {'p_6', 'p_5', 'p_7'},
     'third_floor': {'p_10', 'p_8', 'p_9'}}
    
    Let \(R\) be the relation on \(A\) described as follows:

    \[x R y \text { iff } x \text { and } y \text { live in the same floor of the building. } \nonumber \]

    # Define the relation R based on living on the same floor
    R = Set([(x, y) for x in A for y in A if any(x in floors[floor] and y in floors[floor] for floor in floors)])
    R
    {('p_3', 'p_1'), ('p_7', 'p_7'), ('p_4', 'p_1'), ('p_4', 'p_3'), ('p_6', 'p_5'), ('p_9', 'p_9'), ('p_10', 'p_10'), ('p_5', 'p_7'), ('p_1', 'p_3'), ('p_6', 'p_6'), ('p_2', 'p_3'), ('p_1', 'p_1'), ('p_2', 'p_1'), ('p_3', 'p_4'), ('p_10', 'p_8'), ('p_8', 'p_9'), ('p_9', 'p_10'), ('p_4', 'p_4'), ('p_9', 'p_8'), ('p_1', 'p_4'), ('p_7', 'p_5'), ('p_8', 'p_10'), ('p_2', 'p_4'), ('p_7', 'p_6'), ('p_3', 'p_2'), ('p_5', 'p_5'), ('p_8', 'p_8'), ('p_6', 'p_7'), ('p_4', 'p_2'), ('p_5', 'p_6'), ('p_1', 'p_2'), ('p_2', 'p_2'), ('p_10', 'p_9'), ('p_3', 'p_3')}

    This relation demonstrates the properties of an equivalence relation:

    Reflexive: A person lives in the same floor as themselves.

    def is_reflexive_set(A, R):
        reflexive_pairs = Set([(a, a) for a in A])
        return reflexive_pairs.issubset(R)
    
    is_reflexive_set(A, R)
    True

    Symmetric: If person \(a\) lives in the same floor as person \(b\), then person \(b\) lives in the same floor as person \(a\).

    def is_symmetric_set(relation_R):
        inverse_R = Set([(b, a) for (a, b) in relation_R])
        return relation_R == inverse_R
    
    is_symmetric_set(R)
    True
    Transitive: If person \(a\) lives in the same floor as person \(b\) and person \(b\) lives in the same floor as person \(c\), then person \(a\) lives in the same floor as person \(c\).
    G = DiGraph(list(R), loops=true)
    G.is_transitive()
    True

    5.4: Equivalence is shared under a CC BY 4.0 license and was authored, remixed, and/or curated by LibreTexts.

    • Was this article helpful?