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 #
InitialSeg r s
: Type of initial segment embeddings ofr
intos
, denoted byr ≼i s
.PrincipalSeg r s
: Type of principal segment embeddings ofr
intos
, denoted byr ≺i s
.
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.
r ≼i s
: the type of initial segment embeddings ofr
intos
.r ≺i s
: the type of principal segment embeddings ofr
intos
.α ≤i β
is an abbreviation for(· < ·) ≼i (· < ·)
.α <i β
is an abbreviation for(· < ·) ≺i (· < ·)
.
Initial segment embeddings #
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 : α → β
- inj' : Function.Injective self.toFun
- 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
- «term_≼i_» = Lean.ParserDescr.trailingNode `«term_≼i_» 25 25 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ≼i ") (Lean.ParserDescr.cat `term 26))
Instances For
An InitialSeg
between the <
relations of two types.
Equations
- «term_≤i_» = Lean.ParserDescr.trailingNode `«term_≤i_» 25 24 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ≤i ") (Lean.ParserDescr.cat `term 25))
Instances For
Equations
An initial segment embedding between the <
relations of two partial orders is an order
embedding.
Equations
- f.toOrderEmbedding = f.orderEmbeddingOfLTEmbedding
Instances For
Alias of InitialSeg.mem_range_of_rel
.
Alias of RelIso.toInitialSeg
.
A relation isomorphism is an initial segment embedding
Equations
Instances For
The identity function shows that ≼i
is reflexive
Equations
- InitialSeg.refl r = (RelIso.refl r).toInitialSeg
Instances For
Equations
- InitialSeg.instInhabited r = { default := InitialSeg.refl r }
Composition of functions shows that ≼i
is transitive
Equations
- f.trans g = { toRelEmbedding := f.trans g.toRelEmbedding, mem_range_of_rel' := ⋯ }
Instances For
Given a well order s
, there is at most one initial segment embedding of r
into s
.
Alias of InitialSeg.eq_relIso
.
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
An initial segment embedding is either an isomorphism, or a principal segment embedding.
See also InitialSeg.ltOrEq
.
Restrict the codomain of an initial segment
Equations
- InitialSeg.codRestrict p f H = { toRelEmbedding := RelEmbedding.codRestrict p f.toRelEmbedding H, mem_range_of_rel' := ⋯ }
Instances For
Initial segment embedding from an empty type.
Equations
- InitialSeg.ofIsEmpty r s = { toRelEmbedding := RelEmbedding.ofIsEmpty r s, mem_range_of_rel' := ⋯ }
Instances For
Initial segment embedding of an order r
into the disjoint union of r
and s
.
Equations
- InitialSeg.leAdd r s = { toFun := Sum.inl, inj' := ⋯, map_rel_iff' := ⋯, mem_range_of_rel' := ⋯ }
Instances For
Principal segments #
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 : α → β
- inj' : Function.Injective self.toFun
- top : β
The supremum of the principal segment
The range of the order embedding is the set of elements
b
such thats 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
- «term_≺i_» = Lean.ParserDescr.trailingNode `«term_≺i_» 25 25 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ≺i ") (Lean.ParserDescr.cat `term 26))
Instances For
A PrincipalSeg
between the <
relations of two types.
Equations
- «term_<i_» = Lean.ParserDescr.trailingNode `«term_<i_» 25 24 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " <i ") (Lean.ParserDescr.cat `term 25))
Instances For
Equations
Alias of PrincipalSeg.mem_range_of_rel
.
A principal segment embedding is in particular an initial segment embedding.
Equations
- PrincipalSeg.hasCoeInitialSeg = { coe := fun (f : r ≺i s) => { toRelEmbedding := f.toRelEmbedding, mem_range_of_rel' := ⋯ } }
Alias of InitialSeg.eq_principalSeg
.
Alias of PrincipalSeg.exists_eq_iff_rel
.
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
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
Alias of PrincipalSeg.transInitial
.
Composition of a principal segment embedding with an initial segment embedding, as a principal segment embedding
Instances For
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
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
Alias of PrincipalSeg.relIsoTrans
.
Composition of an order isomorphism with a principal segment embedding, as a principal segment embedding
Instances For
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
Alias of PrincipalSeg.transRelIso
.
Composition of a principal segment embedding with a relation isomorphism, as a principal segment embedding
Instances For
Given a well order s
, there is a most one principal segment embedding of r
into s
.
Alias of PrincipalSeg.top_rel_top
.
Any element of a well order yields a principal segment.
Equations
- PrincipalSeg.ofElement r a = { toRelEmbedding := Subrel.relEmbedding r fun (x : α) => r x a, top := a, mem_range_iff_rel' := ⋯ }
Instances For
For any principal segment r ≺i s
, there is a Subrel
of s
order isomorphic to r
.
Equations
- f.subrelIso = { toEquiv := (Equiv.ofInjective ⇑f.toRelEmbedding ⋯).trans (Equiv.setCongr ⋯), map_rel_iff' := ⋯ }.symm
Instances For
Restrict the codomain of a principal segment embedding.
Equations
- PrincipalSeg.codRestrict p f H H₂ = { toRelEmbedding := RelEmbedding.codRestrict p f.toRelEmbedding H, top := ⟨f.top, H₂⟩, mem_range_iff_rel' := ⋯ }
Instances For
Principal segment from an empty type into a type with a minimal element.
Equations
- PrincipalSeg.ofIsEmpty r H = { toRelEmbedding := RelEmbedding.ofIsEmpty r s, top := b, mem_range_iff_rel' := ⋯ }
Instances For
Properties of initial and principal segments #
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
- f.principalSumRelIso = if h : Function.Surjective ⇑f then Sum.inr (RelIso.ofSurjective f.toRelEmbedding h) else Sum.inl (f.toPrincipalSeg h)
Instances For
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.
Instances For
Composition of an initial segment embedding and a principal segment embedding as a principal segment embedding
Equations
- f.transPrincipal g = match f.principalSumRelIso with | Sum.inl f' => f'.trans g | Sum.inr f' => PrincipalSeg.relIsoTrans f' g
Instances For
Alias of InitialSeg.transPrincipal
.
Composition of an initial segment embedding and a principal segment embedding as a principal segment embedding
Equations
Instances For
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
- f.collapse = { toRelEmbedding := RelEmbedding.ofMonotone (fun (a : α) => ↑(collapseF✝ f a)) ⋯, mem_range_of_rel' := ⋯ }
Instances For
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 <
#
Alias of the reverse direction of InitialSeg.isMin_apply_iff
.
Alias of the reverse direction of PrincipalSeg.isMin_apply_iff
.