Documentation

Mathlib.Order.InitialSeg

Initial and principal segments #

This file defines initial and principal segment embeddings. Though these definitions make sense for arbitrary relations, they're intended for use with well orders.

An initial segment is simply a lower set, i.e. if x belongs to the range, then any y < x also belongs to the range. A principal segment is a set of the form Set.Iio x for some x.

An initial segment embedding r ≼i s is an order embedding r ↪ s such that its range is an initial segment. Likewise, a principal segment embedding r ≺i s has a principal segment for a range.

Main definitions #

The lemmas Ordinal.type_le_iff and Ordinal.type_lt_iff tell us that ≼i corresponds to the relation on ordinals, while ≺i corresponds to the < relation. This prompts us to think of PrincipalSeg as a "strict" version of InitialSeg.

Notations #

These notations belong to the InitialSeg locale.

Initial segment embeddings #

structure InitialSeg {α : Type u_4} {β : Type u_5} (r : ααProp) (s : ββProp) extends r ↪r s :
Type (max u_4 u_5)

If r is a relation on α and s in a relation on β, then f : r ≼i s is an order embedding whose Set.range is a lower set. That is, whenever b < f a in β then b is in the range of f.

  • toFun : αβ
  • map_rel_iff' {a b : α} : s (self.toEmbedding a) (self.toEmbedding b) r a b
  • mem_range_of_rel' (a : α) (b : β) : s b (self.toRelEmbedding a)b Set.range self.toRelEmbedding

    The order embedding is an initial segment

Instances For

    If r is a relation on α and s in a relation on β, then f : r ≼i s is an order embedding whose Set.range is a lower set. That is, whenever b < f a in β then b is in the range of f.

    Equations
    Instances For

      An InitialSeg between the < relations of two types.

      Equations
      Instances For
        instance InitialSeg.instCoeRelEmbedding {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
        Coe (r ≼i s) (r ↪r s)
        Equations
        instance InitialSeg.instFunLike {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
        FunLike (r ≼i s) α β
        Equations
        instance InitialSeg.instEmbeddingLike {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
        EmbeddingLike (r ≼i s) α β
        instance InitialSeg.instRelHomClass {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
        RelHomClass (r ≼i s) r s
        def InitialSeg.toOrderEmbedding {α : Type u_1} {β : Type u_2} [PartialOrder α] [PartialOrder β] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
        α ↪o β

        An initial segment embedding between the < relations of two partial orders is an order embedding.

        Equations
        • f.toOrderEmbedding = f.orderEmbeddingOfLTEmbedding
        Instances For
          @[simp]
          theorem InitialSeg.toOrderEmbedding_apply {α : Type u_1} {β : Type u_2} [PartialOrder α] [PartialOrder β] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) (x : α) :
          f.toOrderEmbedding x = f x
          @[simp]
          theorem InitialSeg.coe_toOrderEmbedding {α : Type u_1} {β : Type u_2} [PartialOrder α] [PartialOrder β] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
          f.toOrderEmbedding = f
          instance InitialSeg.instOrderHomClassLt {α : Type u_1} {β : Type u_2} [PartialOrder α] [PartialOrder β] :
          OrderHomClass ((fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) α β
          theorem InitialSeg.ext {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f g : r ≼i s} (h : ∀ (x : α), f x = g x) :
          f = g
          @[simp]
          theorem InitialSeg.coe_coe_fn {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≼i s) :
          f.toRelEmbedding = f
          theorem InitialSeg.mem_range_of_rel {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≼i s) {a : α} {b : β} :
          s b (f a)b Set.range f
          @[deprecated InitialSeg.mem_range_of_rel (since := "2024-09-21")]
          theorem InitialSeg.init {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≼i s) {a : α} {b : β} :
          s b (f a)b Set.range f

          Alias of InitialSeg.mem_range_of_rel.

          theorem InitialSeg.map_rel_iff {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {a b : α} (f : r ≼i s) :
          s (f a) (f b) r a b
          theorem InitialSeg.inj {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≼i s) {a b : α} :
          f a = f b a = b
          theorem InitialSeg.exists_eq_iff_rel {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≼i s) {a : α} {b : β} :
          s b (f a) ∃ (a' : α), f a' = b r a' a
          @[deprecated InitialSeg.exists_eq_iff_rel (since := "2024-09-21")]
          theorem InitialSeg.init_iff {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≼i s) {a : α} {b : β} :
          s b (f a) ∃ (a' : α), f a' = b r a' a

          Alias of InitialSeg.exists_eq_iff_rel.

          def RelIso.toInitialSeg {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≃r s) :
          r ≼i s

          A relation isomorphism is an initial segment embedding

          Equations
          • f.toInitialSeg = { toRelEmbedding := f.toRelEmbedding, mem_range_of_rel' := }
          Instances For
            @[simp]
            theorem RelIso.toInitialSeg_toFun {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≃r s) (a : α) :
            f.toInitialSeg a = f a
            @[deprecated RelIso.toInitialSeg (since := "2024-10-22")]
            def InitialSeg.ofIso {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≃r s) :
            r ≼i s

            Alias of RelIso.toInitialSeg.


            A relation isomorphism is an initial segment embedding

            Equations
            Instances For
              def InitialSeg.refl {α : Type u_1} (r : ααProp) :
              r ≼i r

              The identity function shows that ≼i is reflexive

              Equations
              Instances For
                instance InitialSeg.instInhabited {α : Type u_1} (r : ααProp) :
                Equations
                def InitialSeg.trans {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≼i s) (g : s ≼i t) :
                r ≼i t

                Composition of functions shows that ≼i is transitive

                Equations
                • f.trans g = { toRelEmbedding := f.trans g.toRelEmbedding, mem_range_of_rel' := }
                Instances For
                  @[simp]
                  theorem InitialSeg.refl_apply {α : Type u_1} {r : ααProp} (x : α) :
                  @[simp]
                  theorem InitialSeg.trans_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≼i s) (g : s ≼i t) (a : α) :
                  (f.trans g) a = g (f a)
                  instance InitialSeg.subsingleton_of_trichotomous_of_irrefl {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrichotomous β s] [IsIrrefl β s] [IsWellFounded α r] :
                  instance InitialSeg.instSubsingletonOfIsWellOrder {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] :

                  Given a well order s, there is at most one initial segment embedding of r into s.

                  theorem InitialSeg.eq {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f g : r ≼i s) (a : α) :
                  f a = g a
                  theorem InitialSeg.eq_relIso {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) (g : r ≃r s) (a : α) :
                  g a = f a
                  @[deprecated InitialSeg.eq_relIso (since := "2024-10-20")]
                  theorem InitialSeg.ltOrEq_apply_right {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) (g : r ≃r s) (a : α) :
                  g a = f a

                  Alias of InitialSeg.eq_relIso.

                  def InitialSeg.antisymm {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) (g : s ≼i r) :
                  r ≃r s

                  If we have order embeddings between α and β whose ranges are initial segments, and β is a well order, then α and β are order-isomorphic.

                  Equations
                  • f.antisymm g = { toFun := f, invFun := g, left_inv := , right_inv := , map_rel_iff' := }
                  Instances For
                    @[simp]
                    theorem InitialSeg.antisymm_toFun {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) (g : s ≼i r) :
                    (f.antisymm g) = f
                    @[simp]
                    theorem InitialSeg.antisymm_symm {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder α r] [IsWellOrder β s] (f : r ≼i s) (g : s ≼i r) :
                    (f.antisymm g).symm = g.antisymm f
                    theorem InitialSeg.eq_or_principal {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) :
                    Function.Surjective f ∃ (b : β), ∀ (x : β), x Set.range f s x b

                    An initial segment embedding is either an isomorphism, or a principal segment embedding.

                    See also InitialSeg.ltOrEq.

                    def InitialSeg.codRestrict {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (p : Set β) (f : r ≼i s) (H : ∀ (a : α), f a p) :
                    r ≼i Subrel s fun (x : β) => x p

                    Restrict the codomain of an initial segment

                    Equations
                    Instances For
                      @[simp]
                      theorem InitialSeg.codRestrict_apply {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (p : Set β) (f : r ≼i s) (H : ∀ (a : α), f a p) (a : α) :
                      (InitialSeg.codRestrict p f H) a = f a,
                      def InitialSeg.ofIsEmpty {α : Type u_1} {β : Type u_2} (r : ααProp) (s : ββProp) [IsEmpty α] :
                      r ≼i s

                      Initial segment embedding from an empty type.

                      Equations
                      Instances For
                        def InitialSeg.leAdd {α : Type u_1} {β : Type u_2} (r : ααProp) (s : ββProp) :

                        Initial segment embedding of an order r into the disjoint union of r and s.

                        Equations
                        Instances For
                          @[simp]
                          theorem InitialSeg.leAdd_apply {α : Type u_1} {β : Type u_2} (r : ααProp) (s : ββProp) (a : α) :
                          theorem InitialSeg.acc {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≼i s) (a : α) :
                          Acc r a Acc s (f a)

                          Principal segments #

                          structure PrincipalSeg {α : Type u_4} {β : Type u_5} (r : ααProp) (s : ββProp) extends r ↪r s :
                          Type (max u_4 u_5)

                          If r is a relation on α and s in a relation on β, then f : r ≺i s is an initial segment embedding whose range is Set.Iio x for some element x. If β is a well order, this is equivalent to the embedding not being surjective.

                          • toFun : αβ
                          • map_rel_iff' {a b : α} : s (self.toEmbedding a) (self.toEmbedding b) r a b
                          • top : β

                            The supremum of the principal segment

                          • mem_range_iff_rel' (b : β) : b Set.range self.toRelEmbedding s b self.top

                            The range of the order embedding is the set of elements b such that s b top

                          Instances For

                            If r is a relation on α and s in a relation on β, then f : r ≺i s is an initial segment embedding whose range is Set.Iio x for some element x. If β is a well order, this is equivalent to the embedding not being surjective.

                            Equations
                            Instances For

                              A PrincipalSeg between the < relations of two types.

                              Equations
                              Instances For
                                instance PrincipalSeg.instCoeOutRelEmbedding {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
                                CoeOut (r ≺i s) (r ↪r s)
                                Equations
                                instance PrincipalSeg.instCoeFunForall {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
                                CoeFun (r ≺i s) fun (x : r ≺i s) => αβ
                                Equations
                                theorem PrincipalSeg.toRelEmbedding_injective {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsIrrefl β s] [IsTrichotomous β s] :
                                @[simp]
                                theorem PrincipalSeg.toRelEmbedding_inj {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsIrrefl β s] [IsTrichotomous β s] {f g : r ≺i s} :
                                f.toRelEmbedding = g.toRelEmbedding f = g
                                theorem PrincipalSeg.ext {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsIrrefl β s] [IsTrichotomous β s] {f g : r ≺i s} (h : ∀ (x : α), f.toRelEmbedding x = g.toRelEmbedding x) :
                                f = g
                                @[simp]
                                theorem PrincipalSeg.coe_fn_mk {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ↪r s) (t : β) (o : ∀ (b : β), b Set.range f s b t) :
                                { toRelEmbedding := f, top := t, mem_range_iff_rel' := o }.toRelEmbedding = f
                                theorem PrincipalSeg.mem_range_iff_rel {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≺i s) {b : β} :
                                b Set.range f.toRelEmbedding s b f.top
                                @[deprecated PrincipalSeg.mem_range_iff_rel (since := "2024-10-07")]
                                theorem PrincipalSeg.down {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≺i s) {b : β} :
                                s b f.top ∃ (a : α), f.toRelEmbedding a = b
                                theorem PrincipalSeg.lt_top {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≺i s) (a : α) :
                                s (f.toRelEmbedding a) f.top
                                theorem PrincipalSeg.mem_range_of_rel_top {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≺i s) {b : β} (h : s b f.top) :
                                b Set.range f.toRelEmbedding
                                theorem PrincipalSeg.mem_range_of_rel {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β s] (f : r ≺i s) {a : α} {b : β} (h : s b (f.toRelEmbedding a)) :
                                b Set.range f.toRelEmbedding
                                @[deprecated PrincipalSeg.mem_range_of_rel (since := "2024-09-21")]
                                theorem PrincipalSeg.init {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β s] (f : r ≺i s) {a : α} {b : β} (h : s b (f.toRelEmbedding a)) :
                                b Set.range f.toRelEmbedding

                                Alias of PrincipalSeg.mem_range_of_rel.

                                theorem PrincipalSeg.surjOn {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≺i s) :
                                Set.SurjOn (⇑f.toRelEmbedding) Set.univ {b : β | s b f.top}
                                instance PrincipalSeg.hasCoeInitialSeg {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β s] :
                                Coe (r ≺i s) (r ≼i s)

                                A principal segment embedding is in particular an initial segment embedding.

                                Equations
                                theorem PrincipalSeg.coe_coe_fn' {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β s] (f : r ≺i s) :
                                { toRelEmbedding := f.toRelEmbedding, mem_range_of_rel' := } = f.toRelEmbedding
                                theorem InitialSeg.eq_principalSeg {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) (g : r ≺i s) (a : α) :
                                g.toRelEmbedding a = f a
                                @[deprecated InitialSeg.eq_principalSeg (since := "2024-10-20")]
                                theorem InitialSeg.ltOrEq_apply_left {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) (g : r ≺i s) (a : α) :
                                g.toRelEmbedding a = f a

                                Alias of InitialSeg.eq_principalSeg.

                                theorem PrincipalSeg.exists_eq_iff_rel {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β s] (f : r ≺i s) {a : α} {b : β} :
                                s b (f.toRelEmbedding a) ∃ (a' : α), f.toRelEmbedding a' = b r a' a
                                @[deprecated PrincipalSeg.exists_eq_iff_rel (since := "2024-09-21")]
                                theorem PrincipalSeg.init_iff {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β s] (f : r ≺i s) {a : α} {b : β} :
                                s b (f.toRelEmbedding a) ∃ (a' : α), f.toRelEmbedding a' = b r a' a

                                Alias of PrincipalSeg.exists_eq_iff_rel.

                                noncomputable def InitialSeg.toPrincipalSeg {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) (hf : ¬Function.Surjective f) :
                                r ≺i s

                                A principal segment is the same as a non-surjective initial segment.

                                Equations
                                • f.toPrincipalSeg hf = { toRelEmbedding := f.toRelEmbedding, top := Classical.choose , mem_range_iff_rel' := }
                                Instances For
                                  @[simp]
                                  theorem InitialSeg.toPrincipalSeg_apply {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) (hf : ¬Function.Surjective f) (x : α) :
                                  (f.toPrincipalSeg hf).toRelEmbedding x = f x
                                  theorem PrincipalSeg.irrefl {α : Type u_1} {r : ααProp} [IsWellOrder α r] (f : r ≺i r) :
                                  instance PrincipalSeg.instIsEmptyOfIsWellOrder {α : Type u_1} (r : ααProp) [IsWellOrder α r] :
                                  def PrincipalSeg.transInitial {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≼i t) :
                                  r ≺i t

                                  Composition of a principal segment embedding with an initial segment embedding, as a principal segment embedding

                                  Equations
                                  • f.transInitial g = { toRelEmbedding := f.trans g.toRelEmbedding, top := g f.top, mem_range_iff_rel' := }
                                  Instances For
                                    @[simp]
                                    theorem PrincipalSeg.transInitial_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≼i t) (a : α) :
                                    (f.transInitial g).toRelEmbedding a = g (f.toRelEmbedding a)
                                    @[simp]
                                    theorem PrincipalSeg.transInitial_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≼i t) :
                                    (f.transInitial g).top = g f.top
                                    @[deprecated PrincipalSeg.transInitial (since := "2024-10-20")]
                                    def PrincipalSeg.ltLe {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≼i t) :
                                    r ≺i t

                                    Alias of PrincipalSeg.transInitial.


                                    Composition of a principal segment embedding with an initial segment embedding, as a principal segment embedding

                                    Equations
                                    Instances For
                                      @[deprecated PrincipalSeg.transInitial_apply (since := "2024-10-20")]
                                      theorem PrincipalSeg.lt_le_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≼i t) (a : α) :
                                      (f.ltLe g).toRelEmbedding a = g (f.toRelEmbedding a)
                                      @[deprecated PrincipalSeg.transInitial_top (since := "2024-10-20")]
                                      theorem PrincipalSeg.lt_le_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≼i t) :
                                      (f.ltLe g).top = g f.top
                                      def PrincipalSeg.trans {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsTrans γ t] (f : r ≺i s) (g : s ≺i t) :
                                      r ≺i t

                                      Composition of two principal segment embeddings as a principal segment embedding

                                      Equations
                                      • f.trans g = f.transInitial { toRelEmbedding := g.toRelEmbedding, mem_range_of_rel' := }
                                      Instances For
                                        @[simp]
                                        theorem PrincipalSeg.trans_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsTrans γ t] (f : r ≺i s) (g : s ≺i t) (a : α) :
                                        (f.trans g).toRelEmbedding a = g.toRelEmbedding (f.toRelEmbedding a)
                                        @[simp]
                                        theorem PrincipalSeg.trans_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsTrans γ t] (f : r ≺i s) (g : s ≺i t) :
                                        (f.trans g).top = g.toRelEmbedding f.top
                                        def PrincipalSeg.relIsoTrans {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≃r s) (g : s ≺i t) :
                                        r ≺i t

                                        Composition of an order isomorphism with a principal segment embedding, as a principal segment embedding

                                        Equations
                                        • PrincipalSeg.relIsoTrans f g = { toRelEmbedding := f.toRelEmbedding.trans g.toRelEmbedding, top := g.top, mem_range_iff_rel' := }
                                        Instances For
                                          @[simp]
                                          theorem PrincipalSeg.relIsoTrans_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≃r s) (g : s ≺i t) (a : α) :
                                          (PrincipalSeg.relIsoTrans f g).toRelEmbedding a = g.toRelEmbedding (f a)
                                          @[simp]
                                          theorem PrincipalSeg.relIsoTrans_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≃r s) (g : s ≺i t) :
                                          (PrincipalSeg.relIsoTrans f g).top = g.top
                                          @[deprecated PrincipalSeg.relIsoTrans (since := "2024-10-20")]
                                          def PrincipalSeg.equivLT {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≃r s) (g : s ≺i t) :
                                          r ≺i t

                                          Alias of PrincipalSeg.relIsoTrans.


                                          Composition of an order isomorphism with a principal segment embedding, as a principal segment embedding

                                          Equations
                                          Instances For
                                            @[deprecated PrincipalSeg.transInitial_top (since := "2024-10-20")]
                                            theorem PrincipalSeg.equivLT_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≃r s) (g : s ≺i t) (a : α) :
                                            (PrincipalSeg.equivLT f g).toRelEmbedding a = g.toRelEmbedding (f a)
                                            @[deprecated PrincipalSeg.transInitial_top (since := "2024-10-20")]
                                            theorem PrincipalSeg.equivLT_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≃r s) (g : s ≺i t) :
                                            (PrincipalSeg.equivLT f g).top = g.top
                                            def PrincipalSeg.transRelIso {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≃r t) :
                                            r ≺i t

                                            Composition of a principal segment embedding with a relation isomorphism, as a principal segment embedding

                                            Equations
                                            • f.transRelIso g = f.transInitial g.toInitialSeg
                                            Instances For
                                              @[deprecated PrincipalSeg.transRelIso (since := "2024-10-20")]
                                              def PrincipalSeg.ltEquiv {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≃r t) :
                                              r ≺i t

                                              Alias of PrincipalSeg.transRelIso.


                                              Composition of a principal segment embedding with a relation isomorphism, as a principal segment embedding

                                              Equations
                                              Instances For
                                                @[simp]
                                                theorem PrincipalSeg.transRelIso_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≃r t) (a : α) :
                                                (f.transRelIso g).toRelEmbedding a = g (f.toRelEmbedding a)
                                                @[simp]
                                                theorem PrincipalSeg.transRelIso_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≺i s) (g : s ≃r t) :
                                                (f.transRelIso g).top = g f.top
                                                instance PrincipalSeg.instSubsingletonOfIsWellOrder {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] :

                                                Given a well order s, there is a most one principal segment embedding of r into s.

                                                theorem PrincipalSeg.eq {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f g : r ≺i s) (a : α) :
                                                f.toRelEmbedding a = g.toRelEmbedding a
                                                theorem PrincipalSeg.top_eq {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsWellOrder γ t] (e : r ≃r s) (f : r ≺i t) (g : s ≺i t) :
                                                f.top = g.top
                                                theorem PrincipalSeg.top_rel_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsWellOrder γ t] (f : r ≺i s) (g : s ≺i t) (h : r ≺i t) :
                                                t h.top g.top
                                                @[deprecated PrincipalSeg.top_rel_top (since := "2024-10-10")]
                                                theorem PrincipalSeg.topLTTop {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsWellOrder γ t] (f : r ≺i s) (g : s ≺i t) (h : r ≺i t) :
                                                t h.top g.top

                                                Alias of PrincipalSeg.top_rel_top.

                                                def PrincipalSeg.ofElement {α : Type u_4} (r : ααProp) (a : α) :
                                                (Subrel r fun (x : α) => r x a) ≺i r

                                                Any element of a well order yields a principal segment.

                                                Equations
                                                Instances For
                                                  @[simp]
                                                  theorem PrincipalSeg.ofElement_top {α : Type u_4} (r : ααProp) (a : α) :
                                                  @[simp]
                                                  theorem PrincipalSeg.ofElement_toFun {α : Type u_4} (r : ααProp) (a : α) (self : { x : α // r x a }) :
                                                  (PrincipalSeg.ofElement r a).toFun self = self
                                                  @[simp]
                                                  theorem PrincipalSeg.ofElement_apply {α : Type u_4} (r : ααProp) (a : α) (b : { x : α // r x a }) :
                                                  (PrincipalSeg.ofElement r a).toRelEmbedding b = b
                                                  noncomputable def PrincipalSeg.subrelIso {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≺i s) :
                                                  (Subrel s fun (x : β) => s x f.top) ≃r r

                                                  For any principal segment r ≺i s, there is a Subrel of s order isomorphic to r.

                                                  Equations
                                                  Instances For
                                                    @[simp]
                                                    theorem PrincipalSeg.subrelIso_symm_apply {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≺i s) (a✝ : α) :
                                                    f.subrelIso.symm a✝ = (Equiv.setCongr ) f.toRelEmbedding a✝,
                                                    @[simp]
                                                    theorem PrincipalSeg.apply_subrelIso {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≺i s) (b : { b : β // s b f.top }) :
                                                    f.toRelEmbedding (f.subrelIso b) = b
                                                    @[simp]
                                                    theorem PrincipalSeg.subrelIso_apply {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≺i s) (a : α) :
                                                    f.subrelIso f.toRelEmbedding a, = a
                                                    def PrincipalSeg.codRestrict {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (p : Set β) (f : r ≺i s) (H : ∀ (a : α), f.toRelEmbedding a p) (H₂ : f.top p) :
                                                    r ≺i Subrel s fun (x : β) => x p

                                                    Restrict the codomain of a principal segment embedding.

                                                    Equations
                                                    Instances For
                                                      @[simp]
                                                      theorem PrincipalSeg.codRestrict_apply {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (p : Set β) (f : r ≺i s) (H : ∀ (a : α), f.toRelEmbedding a p) (H₂ : f.top p) (a : α) :
                                                      (PrincipalSeg.codRestrict p f H H₂).toRelEmbedding a = f.toRelEmbedding a,
                                                      @[simp]
                                                      theorem PrincipalSeg.codRestrict_top {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (p : Set β) (f : r ≺i s) (H : ∀ (a : α), f.toRelEmbedding a p) (H₂ : f.top p) :
                                                      (PrincipalSeg.codRestrict p f H H₂).top = f.top, H₂
                                                      def PrincipalSeg.ofIsEmpty {α : Type u_1} {β : Type u_2} {s : ββProp} (r : ααProp) [IsEmpty α] {b : β} (H : ∀ (b' : β), ¬s b' b) :
                                                      r ≺i s

                                                      Principal segment from an empty type into a type with a minimal element.

                                                      Equations
                                                      Instances For
                                                        @[simp]
                                                        theorem PrincipalSeg.ofIsEmpty_top {α : Type u_1} {β : Type u_2} {s : ββProp} (r : ααProp) [IsEmpty α] {b : β} (H : ∀ (b' : β), ¬s b' b) :
                                                        @[reducible, inline]

                                                        Principal segment from the empty relation on PEmpty to the empty relation on PUnit.

                                                        Equations
                                                        Instances For
                                                          theorem PrincipalSeg.acc {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β s] (f : r ≺i s) (a : α) :
                                                          Acc r a Acc s (f.toRelEmbedding a)
                                                          theorem wellFounded_iff_principalSeg {β : Type u} {s : ββProp} [IsTrans β s] :
                                                          WellFounded s ∀ (α : Type u) (r : ααProp), r ≺i sWellFounded r

                                                          Properties of initial and principal segments #

                                                          noncomputable def InitialSeg.principalSumRelIso {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) :
                                                          (r ≺i s) (r ≃r s)

                                                          Every initial segment embedding into a well order can be turned into an isomorphism if surjective, or into a principal segment embedding if not.

                                                          Equations
                                                          Instances For
                                                            @[deprecated InitialSeg.principalSumRelIso (since := "2024-10-20")]
                                                            def InitialSeg.ltOrEq {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ≼i s) :
                                                            (r ≺i s) (r ≃r s)

                                                            Alias of InitialSeg.principalSumRelIso.


                                                            Every initial segment embedding into a well order can be turned into an isomorphism if surjective, or into a principal segment embedding if not.

                                                            Equations
                                                            Instances For
                                                              noncomputable def InitialSeg.transPrincipal {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsWellOrder β s] [IsTrans γ t] (f : r ≼i s) (g : s ≺i t) :
                                                              r ≺i t

                                                              Composition of an initial segment embedding and a principal segment embedding as a principal segment embedding

                                                              Equations
                                                              Instances For
                                                                @[simp]
                                                                theorem InitialSeg.transPrincipal_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsWellOrder β s] [IsTrans γ t] (f : r ≼i s) (g : s ≺i t) (a : α) :
                                                                (f.transPrincipal g).toRelEmbedding a = g.toRelEmbedding (f a)
                                                                @[deprecated InitialSeg.transPrincipal (since := "2024-10-20")]
                                                                def InitialSeg.leLT {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsWellOrder β s] [IsTrans γ t] (f : r ≼i s) (g : s ≺i t) :
                                                                r ≺i t

                                                                Alias of InitialSeg.transPrincipal.


                                                                Composition of an initial segment embedding and a principal segment embedding as a principal segment embedding

                                                                Equations
                                                                Instances For
                                                                  @[deprecated InitialSeg.transPrincipal_apply (since := "2024-10-20")]
                                                                  theorem InitialSeg.leLT_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsWellOrder β s] [IsTrans γ t] (f : r ≼i s) (g : s ≺i t) (a : α) :
                                                                  (f.leLT g).toRelEmbedding a = g.toRelEmbedding (f a)
                                                                  noncomputable def RelEmbedding.collapse {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ↪r s) :
                                                                  r ≼i s

                                                                  Construct an initial segment embedding r ≼i s by "filling in the gaps". That is, each subsequent element in α is mapped to the least element in β that hasn't been used yet.

                                                                  This construction is guaranteed to work as long as there exists some relation embedding r ↪r s.

                                                                  Equations
                                                                  Instances For
                                                                    noncomputable def InitialSeg.total {α : Type u_1} {β : Type u_2} (r : ααProp) (s : ββProp) [IsWellOrder α r] [IsWellOrder β s] :
                                                                    (r ≼i s) (s ≼i r)

                                                                    For any two well orders, one is an initial segment of the other.

                                                                    Equations
                                                                    • One or more equations did not get rendered due to their size.
                                                                    Instances For

                                                                      Initial or principal segments with < #

                                                                      def OrderIso.toInitialSeg {α : Type u_1} {β : Type u_2} [Preorder α] [Preorder β] (f : α ≃o β) :
                                                                      (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2

                                                                      An order isomorphism is an initial segment

                                                                      Equations
                                                                      • f.toInitialSeg = f.toRelIsoLT.toInitialSeg
                                                                      Instances For
                                                                        @[simp]
                                                                        theorem OrderIso.toInitialSeg_toFun {α : Type u_1} {β : Type u_2} [Preorder α] [Preorder β] (f : α ≃o β) (a : α) :
                                                                        f.toInitialSeg a = f a
                                                                        theorem InitialSeg.mem_range_of_le {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} {b : β} [Preorder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) (h : b f a) :
                                                                        b Set.range f
                                                                        theorem InitialSeg.isLowerSet_range {α : Type u_1} {β : Type u_2} [PartialOrder β] [Preorder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        @[simp]
                                                                        theorem InitialSeg.le_iff_le {α : Type u_1} {β : Type u_2} [PartialOrder β] {a a' : α} [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        f a f a' a a'
                                                                        @[simp]
                                                                        theorem InitialSeg.lt_iff_lt {α : Type u_1} {β : Type u_2} [PartialOrder β] {a a' : α} [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        f a < f a' a < a'
                                                                        theorem InitialSeg.monotone {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        theorem InitialSeg.strictMono {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        @[simp]
                                                                        theorem InitialSeg.isMin_apply_iff {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        IsMin (f a) IsMin a
                                                                        theorem InitialSeg.map_isMin {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        IsMin aIsMin (f a)

                                                                        Alias of the reverse direction of InitialSeg.isMin_apply_iff.

                                                                        @[simp]
                                                                        theorem InitialSeg.map_bot {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] [OrderBot α] [OrderBot β] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        theorem InitialSeg.image_Iio {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) (a : α) :
                                                                        f '' Set.Iio a = Set.Iio (f a)
                                                                        theorem InitialSeg.le_apply_iff {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} {b : β} [LinearOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        b f a ca, f c = b
                                                                        theorem InitialSeg.lt_apply_iff {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} {b : β} [LinearOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≼i fun (x1 x2 : β) => x1 < x2) :
                                                                        b < f a a' < a, f a' = b
                                                                        theorem PrincipalSeg.mem_range_of_le {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} {b : β} [Preorder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) (h : b f.toRelEmbedding a) :
                                                                        b Set.range f.toRelEmbedding
                                                                        theorem PrincipalSeg.isLowerSet_range {α : Type u_1} {β : Type u_2} [PartialOrder β] [Preorder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        IsLowerSet (Set.range f.toRelEmbedding)
                                                                        @[simp]
                                                                        theorem PrincipalSeg.le_iff_le {α : Type u_1} {β : Type u_2} [PartialOrder β] {a a' : α} [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        f.toRelEmbedding a f.toRelEmbedding a' a a'
                                                                        @[simp]
                                                                        theorem PrincipalSeg.lt_iff_lt {α : Type u_1} {β : Type u_2} [PartialOrder β] {a a' : α} [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        f.toRelEmbedding a < f.toRelEmbedding a' a < a'
                                                                        theorem PrincipalSeg.monotone {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        Monotone f.toRelEmbedding
                                                                        theorem PrincipalSeg.strictMono {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        StrictMono f.toRelEmbedding
                                                                        @[simp]
                                                                        theorem PrincipalSeg.isMin_apply_iff {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        IsMin (f.toRelEmbedding a) IsMin a
                                                                        theorem PrincipalSeg.map_isMin {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        IsMin aIsMin (f.toRelEmbedding a)

                                                                        Alias of the reverse direction of PrincipalSeg.isMin_apply_iff.

                                                                        @[simp]
                                                                        theorem PrincipalSeg.map_bot {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] [OrderBot α] [OrderBot β] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        f.toRelEmbedding =
                                                                        theorem PrincipalSeg.image_Iio {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) (a : α) :
                                                                        f.toRelEmbedding '' Set.Iio a = Set.Iio (f.toRelEmbedding a)
                                                                        theorem PrincipalSeg.le_apply_iff {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} {b : β} [LinearOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        b f.toRelEmbedding a ca, f.toRelEmbedding c = b
                                                                        theorem PrincipalSeg.lt_apply_iff {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} {b : β} [LinearOrder α] (f : (fun (x1 x2 : α) => x1 < x2) ≺i fun (x1 x2 : β) => x1 < x2) :
                                                                        b < f.toRelEmbedding a a' < a, f.toRelEmbedding a' = b