Extra facts about Prod
#
This file defines Prod.swap : α × β → β × α
and proves various simple lemmas about Prod
.
@[simp]
theorem
Prod.fst_comp_mk
{α : Type u_1}
{β : Type u_2}
(x : α)
:
Prod.fst ∘ Prod.mk x = Function.const β x
theorem
Prod.mk.inj_right
{α : Type u_5}
{β : Type u_6}
(b : β)
:
Function.Injective fun a => (a, b)
theorem
Prod.fst_surjective
{α : Type u_1}
{β : Type u_2}
[h : Nonempty β]
:
Function.Surjective Prod.fst
theorem
Prod.snd_surjective
{α : Type u_1}
{β : Type u_2}
[h : Nonempty α]
:
Function.Surjective Prod.snd
theorem
Prod.fst_injective
{α : Type u_1}
{β : Type u_2}
[Subsingleton β]
:
Function.Injective Prod.fst
theorem
Prod.snd_injective
{α : Type u_1}
{β : Type u_2}
[Subsingleton α]
:
Function.Injective Prod.snd
@[simp]
theorem
Prod.swap_leftInverse
{α : Type u_1}
{β : Type u_2}
:
Function.LeftInverse Prod.swap Prod.swap
@[simp]
theorem
Prod.swap_rightInverse
{α : Type u_1}
{β : Type u_2}
:
Function.RightInverse Prod.swap Prod.swap
instance
Prod.Lex.decidable
{α : Type u_1}
{β : Type u_2}
[DecidableEq α]
(r : α → α → Prop)
(s : β → β → Prop)
[DecidableRel r]
[DecidableRel s]
:
DecidableRel (Prod.Lex r s)
Equations
- Prod.Lex.decidable r s x x = decidable_of_decidable_of_iff (_ : r x.fst x.fst ∨ x.fst = x.fst ∧ s x.snd x.snd ↔ Prod.Lex r s x x)
instance
Prod.instIsAntisymmProdLex
{α : Type u_1}
{β : Type u_2}
{r : α → α → Prop}
{s : β → β → Prop}
[IsStrictOrder α r]
[IsAntisymm β s]
:
IsAntisymm (α × β) (Prod.Lex r s)
instance
Prod.isTotal_right
{α : Type u_1}
{β : Type u_2}
{r : α → α → Prop}
{s : β → β → Prop}
[IsTrichotomous α r]
[IsTotal β s]
:
instance
Prod.IsTrichotomous
{α : Type u_1}
{β : Type u_2}
{r : α → α → Prop}
{s : β → β → Prop}
[IsTrichotomous α r]
[IsTrichotomous β s]
:
IsTrichotomous (α × β) (Prod.Lex r s)
theorem
Function.Injective.Prod_map
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{δ : Type u_4}
{f : α → γ}
{g : β → δ}
(hf : Function.Injective f)
(hg : Function.Injective g)
:
Function.Injective (Prod.map f g)
theorem
Function.Surjective.Prod_map
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{δ : Type u_4}
{f : α → γ}
{g : β → δ}
(hf : Function.Surjective f)
(hg : Function.Surjective g)
:
Function.Surjective (Prod.map f g)
theorem
Function.Bijective.Prod_map
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{δ : Type u_4}
{f : α → γ}
{g : β → δ}
(hf : Function.Bijective f)
(hg : Function.Bijective g)
:
Function.Bijective (Prod.map f g)
theorem
Function.LeftInverse.Prod_map
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{δ : Type u_4}
{f₁ : α → β}
{g₁ : γ → δ}
{f₂ : β → α}
{g₂ : δ → γ}
(hf : Function.LeftInverse f₁ f₂)
(hg : Function.LeftInverse g₁ g₂)
:
Function.LeftInverse (Prod.map f₁ g₁) (Prod.map f₂ g₂)
theorem
Function.RightInverse.Prod_map
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{δ : Type u_4}
{f₁ : α → β}
{g₁ : γ → δ}
{f₂ : β → α}
{g₂ : δ → γ}
:
Function.RightInverse f₁ f₂ → Function.RightInverse g₁ g₂ → Function.RightInverse (Prod.map f₁ g₁) (Prod.map f₂ g₂)
theorem
Function.Involutive.Prod_map
{α : Type u_1}
{β : Type u_2}
{f : α → α}
{g : β → β}
:
Function.Involutive f → Function.Involutive g → Function.Involutive (Prod.map f g)
@[simp]
theorem
Prod.map_leftInverse
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{δ : Type u_4}
[Nonempty β]
[Nonempty δ]
{f₁ : α → β}
{g₁ : γ → δ}
{f₂ : β → α}
{g₂ : δ → γ}
:
Function.LeftInverse (Prod.map f₁ g₁) (Prod.map f₂ g₂) ↔ Function.LeftInverse f₁ f₂ ∧ Function.LeftInverse g₁ g₂
@[simp]
theorem
Prod.map_rightInverse
{α : Type u_1}
{β : Type u_2}
{γ : Type u_3}
{δ : Type u_4}
[Nonempty α]
[Nonempty γ]
{f₁ : α → β}
{g₁ : γ → δ}
{f₂ : β → α}
{g₂ : δ → γ}
:
Function.RightInverse (Prod.map f₁ g₁) (Prod.map f₂ g₂) ↔ Function.RightInverse f₁ f₂ ∧ Function.RightInverse g₁ g₂
@[simp]
theorem
Prod.map_involutive
{α : Type u_1}
{β : Type u_2}
[Nonempty α]
[Nonempty β]
{f : α → α}
{g : β → β}
: