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.

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 (InitialSeg r s) (r ↪r s)
        Equations
        instance InitialSeg.instFunLike {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
        FunLike (InitialSeg r s) α β
        Equations
        instance InitialSeg.instEmbeddingLike {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
        instance InitialSeg.instRelHomClass {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
        def InitialSeg.toOrderEmbedding {α : Type u_1} {β : Type u_2} [PartialOrder α] [PartialOrder β] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
        α ↪o β

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

        Equations
        Instances For
          @[simp]
          theorem InitialSeg.toOrderEmbedding_apply {α : Type u_1} {β : Type u_2} [PartialOrder α] [PartialOrder β] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) (x : α) :
          @[simp]
          theorem InitialSeg.coe_toOrderEmbedding {α : Type u_1} {β : Type u_2} [PartialOrder α] [PartialOrder β] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
          instance InitialSeg.instOrderHomClassLt {α : Type u_1} {β : Type u_2} [PartialOrder α] [PartialOrder β] :
          OrderHomClass (InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) α β
          theorem InitialSeg.ext {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f g : InitialSeg r s} (h : ∀ (x : α), f x = g x) :
          f = g
          theorem InitialSeg.ext_iff {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {f g : InitialSeg r s} :
          f = g ∀ (x : α), f x = g x
          @[simp]
          theorem InitialSeg.coe_coe_fn {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : InitialSeg r s) :
          f.toRelEmbedding = f
          theorem InitialSeg.mem_range_of_rel {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : InitialSeg r s) {a : α} {b : β} :
          s b (f a)b Set.range f
          theorem InitialSeg.map_rel_iff {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} {a b : α} (f : InitialSeg r s) :
          s (f a) (f b) r a b
          theorem InitialSeg.inj {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : InitialSeg r 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 : InitialSeg r s) {a : α} {b : β} :
          s b (f a) ∃ (a' : α), f a' = b r a' a
          def RelIso.toInitialSeg {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : r ≃r s) :

          A relation isomorphism is an initial segment embedding

          Equations
          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
            def InitialSeg.refl {α : Type u_1} (r : ααProp) :

            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 : InitialSeg r s) (g : InitialSeg s t) :

              Composition of functions shows that ≼i is transitive

              Equations
              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 : InitialSeg r s) (g : InitialSeg s 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 : InitialSeg r s) (a : α) :
                f a = g a
                theorem InitialSeg.eq_relIso {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : InitialSeg r s) (g : r ≃r s) (a : α) :
                g a = f a
                def InitialSeg.antisymm {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : InitialSeg r s) (g : InitialSeg s 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 : InitialSeg r s) (g : InitialSeg s 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 : InitialSeg r s) (g : InitialSeg s r) :
                  theorem InitialSeg.eq_or_principal {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : InitialSeg r 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 : InitialSeg r s) (H : ∀ (a : α), f a p) :
                  InitialSeg r (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 : InitialSeg r s) (H : ∀ (a : α), f a p) (a : α) :
                    (codRestrict p f H) a = f a,
                    def InitialSeg.ofIsEmpty {α : Type u_1} {β : Type u_2} (r : ααProp) (s : ββProp) [IsEmpty α] :

                    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 : α) :
                        (leAdd r s) a = Sum.inl a
                        theorem InitialSeg.acc {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : InitialSeg r 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.

                        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} :
                              Equations
                              instance PrincipalSeg.instCoeFunForall {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} :
                              CoeFun (PrincipalSeg r s) fun (x : PrincipalSeg r 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 : PrincipalSeg r s} :
                              theorem PrincipalSeg.ext {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsIrrefl β s] [IsTrichotomous β s] {f g : PrincipalSeg r s} (h : ∀ (x : α), f.toRelEmbedding x = g.toRelEmbedding x) :
                              f = g
                              theorem PrincipalSeg.ext_iff {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsIrrefl β s] [IsTrichotomous β s] {f g : PrincipalSeg r s} :
                              f = g ∀ (x : α), f.toRelEmbedding x = g.toRelEmbedding x
                              @[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 : PrincipalSeg r s) {b : β} :
                              theorem PrincipalSeg.lt_top {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : PrincipalSeg r s) (a : α) :
                              theorem PrincipalSeg.mem_range_of_rel_top {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : PrincipalSeg r s) {b : β} (h : s b f.top) :
                              theorem PrincipalSeg.mem_range_of_rel {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β s] (f : PrincipalSeg r s) {a : α} {b : β} (h : s b (f.toRelEmbedding a)) :
                              theorem PrincipalSeg.surjOn {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : PrincipalSeg r s) :
                              instance PrincipalSeg.hasCoeInitialSeg {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β 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 : PrincipalSeg r 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 : InitialSeg r s) (g : PrincipalSeg r s) (a : α) :
                              theorem PrincipalSeg.exists_eq_iff_rel {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsTrans β s] (f : PrincipalSeg r s) {a : α} {b : β} :
                              s b (f.toRelEmbedding a) ∃ (a' : α), f.toRelEmbedding a' = b r a' a
                              noncomputable def InitialSeg.toPrincipalSeg {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : InitialSeg r s) (hf : ¬Function.Surjective f) :

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

                              Equations
                              Instances For
                                @[simp]
                                theorem InitialSeg.toPrincipalSeg_apply {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : InitialSeg r s) (hf : ¬Function.Surjective f) (x : α) :
                                theorem PrincipalSeg.irrefl {α : Type u_1} {r : ααProp} [IsWellOrder α r] (f : PrincipalSeg r 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 : PrincipalSeg r s) (g : InitialSeg s t) :

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

                                Equations
                                Instances For
                                  @[simp]
                                  theorem PrincipalSeg.transInitial_apply {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : PrincipalSeg r s) (g : InitialSeg s t) (a : α) :
                                  @[simp]
                                  theorem PrincipalSeg.transInitial_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : PrincipalSeg r s) (g : InitialSeg s t) :
                                  (f.transInitial 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 : PrincipalSeg r s) (g : PrincipalSeg s t) :

                                  Composition of two principal segment embeddings as a principal segment embedding

                                  Equations
                                  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 : PrincipalSeg r s) (g : PrincipalSeg s t) (a : α) :
                                    @[simp]
                                    theorem PrincipalSeg.trans_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsTrans γ t] (f : PrincipalSeg r s) (g : PrincipalSeg s t) :
                                    def PrincipalSeg.relIsoTrans {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : r ≃r s) (g : PrincipalSeg s t) :

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

                                    Equations
                                    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 : PrincipalSeg s t) (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 : PrincipalSeg s t) :
                                      def PrincipalSeg.transRelIso {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : PrincipalSeg r s) (g : s ≃r t) :

                                      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 : PrincipalSeg r s) (g : s ≃r t) (a : α) :
                                        @[simp]
                                        theorem PrincipalSeg.transRelIso_top {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} (f : PrincipalSeg r 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 : PrincipalSeg r s) (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 : PrincipalSeg r t) (g : PrincipalSeg s 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 : PrincipalSeg r s) (g : PrincipalSeg s t) (h : PrincipalSeg r t) :
                                        t h.top g.top
                                        def PrincipalSeg.ofElement {α : Type u_4} (r : ααProp) (a : α) :
                                        PrincipalSeg (Subrel r fun (x : α) => r x a) 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 : α) :
                                          (ofElement r a).top = a
                                          @[simp]
                                          theorem PrincipalSeg.ofElement_toFun {α : Type u_4} (r : ααProp) (a : α) (self : { x : α // r x a }) :
                                          (ofElement r a).toFun self = self
                                          @[simp]
                                          theorem PrincipalSeg.ofElement_apply {α : Type u_4} (r : ααProp) (a : α) (b : { x : α // r x a }) :
                                          noncomputable def PrincipalSeg.subrelIso {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : PrincipalSeg r 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 : PrincipalSeg r s) (a✝ : α) :
                                            @[simp]
                                            theorem PrincipalSeg.apply_subrelIso {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : PrincipalSeg r s) (b : { b : β // s b f.top }) :
                                            @[simp]
                                            theorem PrincipalSeg.subrelIso_apply {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (f : PrincipalSeg r s) (a : α) :
                                            def PrincipalSeg.codRestrict {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (p : Set β) (f : PrincipalSeg r s) (H : ∀ (a : α), f.toRelEmbedding a p) (H₂ : f.top p) :
                                            PrincipalSeg r (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 : PrincipalSeg r s) (H : ∀ (a : α), f.toRelEmbedding a p) (H₂ : f.top p) (a : α) :
                                              @[simp]
                                              theorem PrincipalSeg.codRestrict_top {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} (p : Set β) (f : PrincipalSeg r s) (H : ∀ (a : α), f.toRelEmbedding a p) (H₂ : f.top p) :
                                              (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) :

                                              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) :
                                                (ofIsEmpty r H).top = 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 : PrincipalSeg r s) (a : α) :
                                                  theorem wellFounded_iff_principalSeg {β : Type u} {s : ββProp} [IsTrans β s] :
                                                  WellFounded s ∀ (α : Type u) (r : ααProp) (x : PrincipalSeg r s), WellFounded r

                                                  Properties of initial and principal segments #

                                                  noncomputable def InitialSeg.principalSumRelIso {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : InitialSeg 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
                                                    noncomputable def InitialSeg.transPrincipal {α : Type u_1} {β : Type u_2} {γ : Type u_3} {r : ααProp} {s : ββProp} {t : γγProp} [IsWellOrder β s] [IsTrans γ t] (f : InitialSeg r s) (g : PrincipalSeg s 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 : InitialSeg r s) (g : PrincipalSeg s t) (a : α) :
                                                      theorem InitialSeg.exists_sum_relIso {α : Type u_1} {r : ααProp} {β : Type u} {s : ββProp} [IsWellOrder β s] (f : InitialSeg r s) :
                                                      ∃ (γ : Type u) (t : γγProp), IsWellOrder γ t Nonempty (Sum.Lex r t ≃r s)

                                                      An initial segment can be extended to an isomorphism by joining a second well order to the domain.

                                                      noncomputable def RelEmbedding.collapse {α : Type u_1} {β : Type u_2} {r : ααProp} {s : ββProp} [IsWellOrder β s] (f : r ↪r 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] :

                                                        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 β) :
                                                          InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2

                                                          An order isomorphism is an initial segment

                                                          Equations
                                                          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 : β} [LT α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) (h : b f a) :
                                                            b Set.range f
                                                            theorem InitialSeg.isLowerSet_range {α : Type u_1} {β : Type u_2} [PartialOrder β] [LT α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            @[simp]
                                                            theorem InitialSeg.le_iff_le {α : Type u_1} {β : Type u_2} [PartialOrder β] {a a' : α} [PartialOrder α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) 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 : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            f a < f a' a < a'
                                                            theorem InitialSeg.monotone {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            theorem InitialSeg.strictMono {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            @[simp]
                                                            theorem InitialSeg.isMin_apply_iff {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} [PartialOrder α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            IsMin (f a) IsMin a
                                                            theorem InitialSeg.map_isMin {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} [PartialOrder α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) 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 : InitialSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            theorem InitialSeg.image_Iio {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) 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 : β} [PartialOrder α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) 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 : β} [PartialOrder α] (f : InitialSeg (fun (x1 x2 : α) => x1 < x2) 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 : β} [LT α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) (h : b f.toRelEmbedding a) :
                                                            theorem PrincipalSeg.isLowerSet_range {α : Type u_1} {β : Type u_2} [PartialOrder β] [LT α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            @[simp]
                                                            theorem PrincipalSeg.le_iff_le {α : Type u_1} {β : Type u_2} [PartialOrder β] {a a' : α} [PartialOrder α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            @[simp]
                                                            theorem PrincipalSeg.lt_iff_lt {α : Type u_1} {β : Type u_2} [PartialOrder β] {a a' : α} [PartialOrder α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            theorem PrincipalSeg.monotone {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            theorem PrincipalSeg.strictMono {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            @[simp]
                                                            theorem PrincipalSeg.isMin_apply_iff {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} [PartialOrder α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            theorem PrincipalSeg.map_isMin {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} [PartialOrder α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :

                                                            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 : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            theorem PrincipalSeg.image_Iio {α : Type u_1} {β : Type u_2} [PartialOrder β] [PartialOrder α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) (a : α) :
                                                            theorem PrincipalSeg.le_apply_iff {α : Type u_1} {β : Type u_2} [PartialOrder β] {a : α} {b : β} [PartialOrder α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) 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 : β} [PartialOrder α] (f : PrincipalSeg (fun (x1 x2 : α) => x1 < x2) fun (x1 x2 : β) => x1 < x2) :
                                                            b < f.toRelEmbedding a a' < a, f.toRelEmbedding a' = b