Documentation

Mathlib.Data.TwoPointing

Two-pointings #

This file defines TwoPointing α, the type of two pointings of α. A two-pointing is the data of two distinct terms.

This is morally a Type-valued Nontrivial. Another type which is quite close in essence is Sym2. Categorically speaking, prod is a cospan in the category of types. This forms the category of bipointed types. Two-pointed types form a full subcategory of those.

References #

structure TwoPointing (α : Type u_3) extends α × α :
Type u_3

Two-pointing of a type. This is a Type-valued termed Nontrivial.

  • fst : α
  • snd : α
  • fst_ne_snd : self.fst self.snd

    fst and snd are distinct terms

Instances For
    theorem TwoPointing.ext {α : Type u_3} {x y : TwoPointing α} (fst : x.fst = y.fst) (snd : x.snd = y.snd) :
    x = y
    theorem TwoPointing.ext_iff {α : Type u_3} {x y : TwoPointing α} :
    x = y x.fst = y.fst x.snd = y.snd
    instance instDecidableEqTwoPointing {α✝ : Type u_3} [DecidableEq α✝] :
    Equations
      theorem TwoPointing.snd_ne_fst {α : Type u_1} (p : TwoPointing α) :
      p.snd p.fst
      def TwoPointing.swap {α : Type u_1} (p : TwoPointing α) :

      Swaps the two pointed elements.

      Equations
        Instances For
          @[simp]
          theorem TwoPointing.swap_toProd {α : Type u_1} (p : TwoPointing α) :
          theorem TwoPointing.swap_fst {α : Type u_1} (p : TwoPointing α) :
          theorem TwoPointing.swap_snd {α : Type u_1} (p : TwoPointing α) :
          @[simp]
          theorem TwoPointing.swap_swap {α : Type u_1} (p : TwoPointing α) :
          p.swap.swap = p
          def TwoPointing.pi (α : Type u_1) {β : Type u_2} (q : TwoPointing β) [Nonempty α] :
          TwoPointing (αβ)

          The two-pointing of constant functions.

          Equations
            Instances For
              @[simp]
              theorem TwoPointing.pi_fst (α : Type u_1) {β : Type u_2} (q : TwoPointing β) [Nonempty α] :
              (pi α q).fst = Function.const α q.fst
              @[simp]
              theorem TwoPointing.pi_snd (α : Type u_1) {β : Type u_2} (q : TwoPointing β) [Nonempty α] :
              (pi α q).snd = Function.const α q.snd
              def TwoPointing.prod {α : Type u_1} {β : Type u_2} (p : TwoPointing α) (q : TwoPointing β) :
              TwoPointing (α × β)

              The product of two two-pointings.

              Equations
                Instances For
                  @[simp]
                  theorem TwoPointing.prod_fst {α : Type u_1} {β : Type u_2} (p : TwoPointing α) (q : TwoPointing β) :
                  (p.prod q).fst = (p.fst, q.fst)
                  @[simp]
                  theorem TwoPointing.prod_snd {α : Type u_1} {β : Type u_2} (p : TwoPointing α) (q : TwoPointing β) :
                  (p.prod q).snd = (p.snd, q.snd)
                  def TwoPointing.sum {α : Type u_1} {β : Type u_2} (p : TwoPointing α) (q : TwoPointing β) :

                  The sum of two pointings. Keeps the first point from the left and the second point from the right.

                  Equations
                    Instances For
                      @[simp]
                      theorem TwoPointing.sum_fst {α : Type u_1} {β : Type u_2} (p : TwoPointing α) (q : TwoPointing β) :
                      (p.sum q).fst = Sum.inl p.fst
                      @[simp]
                      theorem TwoPointing.sum_snd {α : Type u_1} {β : Type u_2} (p : TwoPointing α) (q : TwoPointing β) :
                      (p.sum q).snd = Sum.inr q.snd

                      The false, true two-pointing of Bool.

                      Equations
                        Instances For

                          The False, True two-pointing of Prop.

                          Equations
                            Instances For