support of a permutation #
Main definitions #
In the following, f g : Equiv.Perm α
.
Equiv.Perm.Disjoint
: two permutationsf
andg
areDisjoint
if every element is fixed either byf
, or byg
. Equivalently,f
andg
areDisjoint
iff theirsupport
are disjoint.Equiv.Perm.IsSwap
:f = swap x y
forx ≠ y
.Equiv.Perm.support
: the elementsx : α
that are not fixed byf
.
Assume α
is a Fintype:
Equiv.Perm.fixed_point_card_lt_of_ne_one f
says thatf
has strictly less thanFintype.card α - 1
fixed points, unlessf = 1
. (Equivalently,f.support
has at least 2 elements.)
Two permutations f
and g
are Disjoint
if their supports are disjoint, i.e.,
every element is fixed either by f
, or by g
.
Instances For
Equations
- ⋯ = ⋯
theorem
Equiv.Perm.Disjoint.commute
{α : Type u_1}
{f g : Equiv.Perm α}
(h : f.Disjoint g)
:
Commute f g
@[simp]
@[simp]
theorem
Equiv.Perm.Disjoint.inv_left
{α : Type u_1}
{f g : Equiv.Perm α}
(h : f.Disjoint g)
:
f⁻¹.Disjoint g
theorem
Equiv.Perm.Disjoint.inv_right
{α : Type u_1}
{f g : Equiv.Perm α}
(h : f.Disjoint g)
:
f.Disjoint g⁻¹
@[simp]
@[simp]
theorem
Equiv.Perm.Disjoint.mul_left
{α : Type u_1}
{f g h : Equiv.Perm α}
(H1 : f.Disjoint h)
(H2 : g.Disjoint h)
:
(f * g).Disjoint h
theorem
Equiv.Perm.Disjoint.mul_right
{α : Type u_1}
{f g h : Equiv.Perm α}
(H1 : f.Disjoint g)
(H2 : f.Disjoint h)
:
f.Disjoint (g * h)
theorem
Equiv.Perm.Disjoint.conj
{α : Type u_1}
{f g : Equiv.Perm α}
(H : f.Disjoint g)
(h : Equiv.Perm α)
:
theorem
Equiv.Perm.disjoint_prod_right
{α : Type u_1}
{f : Equiv.Perm α}
(l : List (Equiv.Perm α))
(h : ∀ g ∈ l, f.Disjoint g)
:
f.Disjoint l.prod
theorem
Equiv.Perm.disjoint_noncommProd_right
{α : Type u_1}
{g : Equiv.Perm α}
{ι : Type u_2}
{k : ι → Equiv.Perm α}
{s : Finset ι}
(hs : (↑s).Pairwise fun (i j : ι) => Commute (k i) (k j))
(hg : ∀ i ∈ s, g.Disjoint (k i))
:
g.Disjoint (s.noncommProd k hs)
theorem
Equiv.Perm.disjoint_prod_perm
{α : Type u_1}
{l₁ l₂ : List (Equiv.Perm α)}
(hl : List.Pairwise Equiv.Perm.Disjoint l₁)
(hp : l₁.Perm l₂)
:
l₁.prod = l₂.prod
theorem
Equiv.Perm.nodup_of_pairwise_disjoint
{α : Type u_1}
{l : List (Equiv.Perm α)}
(h1 : 1 ∉ l)
(h2 : List.Pairwise Equiv.Perm.Disjoint l)
:
l.Nodup
theorem
Equiv.Perm.pow_apply_eq_self_of_apply_eq_self
{α : Type u_1}
{f : Equiv.Perm α}
{x : α}
(hfx : f x = x)
(n : ℕ)
:
theorem
Equiv.Perm.zpow_apply_eq_self_of_apply_eq_self
{α : Type u_1}
{f : Equiv.Perm α}
{x : α}
(hfx : f x = x)
(n : ℤ)
:
theorem
Equiv.Perm.Disjoint.mul_apply_eq_iff
{α : Type u_1}
{σ τ : Equiv.Perm α}
(hστ : σ.Disjoint τ)
{a : α}
:
theorem
Equiv.Perm.Disjoint.mul_eq_one_iff
{α : Type u_1}
{σ τ : Equiv.Perm α}
(hστ : σ.Disjoint τ)
:
theorem
Equiv.Perm.Disjoint.zpow_disjoint_zpow
{α : Type u_1}
{σ τ : Equiv.Perm α}
(hστ : σ.Disjoint τ)
(m n : ℤ)
:
theorem
Equiv.Perm.Disjoint.pow_disjoint_pow
{α : Type u_1}
{σ τ : Equiv.Perm α}
(hστ : σ.Disjoint τ)
(m n : ℕ)
:
@[simp]
theorem
Equiv.Perm.ofSubtype_swap_eq
{α : Type u_1}
[DecidableEq α]
{p : α → Prop}
[DecidablePred p]
(x y : Subtype p)
:
Equiv.Perm.ofSubtype (Equiv.swap x y) = Equiv.swap ↑x ↑y
theorem
Equiv.Perm.IsSwap.of_subtype_isSwap
{α : Type u_1}
[DecidableEq α]
{p : α → Prop}
[DecidablePred p]
{f : Equiv.Perm (Subtype p)}
(h : f.IsSwap)
:
(Equiv.Perm.ofSubtype f).IsSwap
theorem
Equiv.Perm.ne_and_ne_of_swap_mul_apply_ne_self
{α : Type u_1}
[DecidableEq α]
{f : Equiv.Perm α}
{x y : α}
(hy : (Equiv.swap x (f x) * f) y ≠ y)
:
@[simp]
@[simp]
The Finset
of nonfixed points of a permutation.
Equations
- f.support = Finset.filter (fun (x : α) => f x ≠ x) Finset.univ
Instances For
@[simp]
theorem
Equiv.Perm.mem_support
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
{x : α}
:
theorem
Equiv.Perm.not_mem_support
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
{x : α}
:
theorem
Equiv.Perm.coe_support_eq_set_support
{α : Type u_1}
[DecidableEq α]
[Fintype α]
(f : Equiv.Perm α)
:
@[simp]
theorem
Equiv.Perm.support_eq_empty_iff
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{σ : Equiv.Perm α}
:
@[simp]
@[simp]
theorem
Equiv.Perm.support_congr
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f g : Equiv.Perm α}
(h : f.support ⊆ g.support)
(h' : ∀ x ∈ g.support, f x = g x)
:
f = g
theorem
Equiv.Perm.mem_support_iff_of_commute
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{g c : Equiv.Perm α}
(hgc : Commute g c)
(x : α)
:
If g and c commute, then g stabilizes the support of c
theorem
Equiv.Perm.exists_mem_support_of_mem_support_prod
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{l : List (Equiv.Perm α)}
{x : α}
(hx : x ∈ l.prod.support)
:
∃ f ∈ l, x ∈ f.support
theorem
Equiv.Perm.support_pow_le
{α : Type u_1}
[DecidableEq α]
[Fintype α]
(σ : Equiv.Perm α)
(n : ℕ)
:
@[simp]
theorem
Equiv.Perm.apply_mem_support
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
{x : α}
:
theorem
Equiv.Perm.isInvariant_of_support_le
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{c : Equiv.Perm α}
{s : Finset α}
(hcs : c.support ≤ s)
(x : α)
:
The support of a permutation is invariant
theorem
Equiv.Perm.ofSubtype_eq_iff
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{g c : Equiv.Perm α}
{s : Finset α}
(hg : ∀ (x : α), x ∈ s ↔ g x ∈ s)
:
A permutation c is the extension of a restriction of g to s iff its support is contained in s and its restriction is that of g
theorem
Equiv.Perm.support_ofSubtype
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{p : α → Prop}
[DecidablePred p]
(u : Equiv.Perm (Subtype p))
:
(Equiv.Perm.ofSubtype u).support = Finset.map (Function.Embedding.subtype p) u.support
theorem
Equiv.Perm.pow_apply_mem_support
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
{n : ℕ}
{x : α}
:
theorem
Equiv.Perm.zpow_apply_mem_support
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
{n : ℤ}
{x : α}
:
theorem
Equiv.Perm.pow_eq_on_of_mem_support
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f g : Equiv.Perm α}
(h : ∀ x ∈ f.support ∩ g.support, f x = g x)
(k : ℕ)
(x : α)
:
theorem
Equiv.Perm.disjoint_iff_disjoint_support
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f g : Equiv.Perm α}
:
theorem
Equiv.Perm.Disjoint.disjoint_support
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f g : Equiv.Perm α}
(h : f.Disjoint g)
:
Disjoint f.support g.support
theorem
Equiv.Perm.Disjoint.support_mul
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f g : Equiv.Perm α}
(h : f.Disjoint g)
:
theorem
Equiv.Perm.support_prod_of_pairwise_disjoint
{α : Type u_1}
[DecidableEq α]
[Fintype α]
(l : List (Equiv.Perm α))
(h : List.Pairwise Equiv.Perm.Disjoint l)
:
theorem
Equiv.Perm.support_noncommProd
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{ι : Type u_2}
{k : ι → Equiv.Perm α}
{s : Finset ι}
(hs : (↑s).Pairwise fun (i j : ι) => (k i).Disjoint (k j))
:
(s.noncommProd k ⋯).support = s.biUnion fun (i : ι) => (k i).support
theorem
Equiv.Perm.support_prod_le
{α : Type u_1}
[DecidableEq α]
[Fintype α]
(l : List (Equiv.Perm α))
:
theorem
Equiv.Perm.support_zpow_le
{α : Type u_1}
[DecidableEq α]
[Fintype α]
(σ : Equiv.Perm α)
(n : ℤ)
:
@[simp]
theorem
Equiv.Perm.support_swap
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{x y : α}
(h : x ≠ y)
:
(Equiv.swap x y).support = {x, y}
theorem
Equiv.Perm.support_swap_iff
{α : Type u_1}
[DecidableEq α]
[Fintype α]
(x y : α)
:
(Equiv.swap x y).support = {x, y} ↔ x ≠ y
theorem
Equiv.Perm.support_swap_mul_swap
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{x y z : α}
(h : [x, y, z].Nodup)
:
(Equiv.swap x y * Equiv.swap y z).support = {x, y, z}
theorem
Equiv.Perm.support_swap_mul_ge_support_diff
{α : Type u_1}
[DecidableEq α]
[Fintype α]
(f : Equiv.Perm α)
(x y : α)
:
f.support \ {x, y} ≤ (Equiv.swap x y * f).support
theorem
Equiv.Perm.support_swap_mul_eq
{α : Type u_1}
[DecidableEq α]
[Fintype α]
(f : Equiv.Perm α)
(x : α)
(h : f (f x) ≠ x)
:
(Equiv.swap x (f x) * f).support = f.support \ {x}
theorem
Equiv.Perm.mem_support_swap_mul_imp_mem_support_ne
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
{x y : α}
(hy : y ∈ (Equiv.swap x (f x) * f).support)
:
theorem
Equiv.Perm.Disjoint.mem_imp
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f g : Equiv.Perm α}
(h : f.Disjoint g)
{x : α}
(hx : x ∈ f.support)
:
x ∉ g.support
theorem
Equiv.Perm.eq_on_support_mem_disjoint
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
{l : List (Equiv.Perm α)}
(h : f ∈ l)
(hl : List.Pairwise Equiv.Perm.Disjoint l)
(x : α)
:
theorem
Equiv.Perm.Disjoint.mono
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f g x y : Equiv.Perm α}
(h : f.Disjoint g)
(hf : x.support ≤ f.support)
(hg : y.support ≤ g.support)
:
x.Disjoint y
theorem
Equiv.Perm.support_le_prod_of_mem
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
{l : List (Equiv.Perm α)}
(h : f ∈ l)
(hl : List.Pairwise Equiv.Perm.Disjoint l)
:
f.support ≤ l.prod.support
@[simp]
theorem
Equiv.Perm.support_extend_domain
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{β : Type u_2}
[DecidableEq β]
[Fintype β]
{p : β → Prop}
[DecidablePred p]
(f : α ≃ Subtype p)
{g : Equiv.Perm α}
:
(g.extendDomain f).support = Finset.map f.asEmbedding g.support
theorem
Equiv.Perm.card_support_extend_domain
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{β : Type u_2}
[DecidableEq β]
[Fintype β]
{p : β → Prop}
[DecidablePred p]
(f : α ≃ Subtype p)
{g : Equiv.Perm α}
:
(g.extendDomain f).support.card = g.support.card
theorem
Equiv.Perm.card_support_eq_zero
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
:
theorem
Equiv.Perm.one_lt_card_support_of_ne_one
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
(h : f ≠ 1)
:
1 < f.support.card
theorem
Equiv.Perm.card_support_ne_one
{α : Type u_1}
[DecidableEq α]
[Fintype α]
(f : Equiv.Perm α)
:
f.support.card ≠ 1
@[simp]
theorem
Equiv.Perm.card_support_le_one
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
:
theorem
Equiv.Perm.two_le_card_support_of_ne_one
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
(h : f ≠ 1)
:
2 ≤ f.support.card
theorem
Equiv.Perm.card_support_swap_mul
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
{x : α}
(hx : f x ≠ x)
:
(Equiv.swap x (f x) * f).support.card < f.support.card
theorem
Equiv.Perm.card_support_swap
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{x y : α}
(hxy : x ≠ y)
:
(Equiv.swap x y).support.card = 2
@[simp]
theorem
Equiv.Perm.card_support_eq_two
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f : Equiv.Perm α}
:
theorem
Equiv.Perm.Disjoint.card_support_mul
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{f g : Equiv.Perm α}
(h : f.Disjoint g)
:
theorem
Equiv.Perm.card_support_prod_list_of_pairwise_disjoint
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{l : List (Equiv.Perm α)}
(h : List.Pairwise Equiv.Perm.Disjoint l)
:
@[simp]
theorem
Equiv.Perm.support_subtype_perm
{α : Type u_1}
[DecidableEq α]
{s : Finset α}
(f : Equiv.Perm α)
(h : ∀ (x : α), x ∈ s ↔ f x ∈ s)
:
(f.subtypePerm h).support = Finset.filter (fun (x : { x : α // x ∈ s }) => f ↑x ≠ ↑x) Finset.univ
Fixed points #
theorem
Equiv.Perm.fixed_point_card_lt_of_ne_one
{α : Type u_1}
[DecidableEq α]
[Fintype α]
{σ : Equiv.Perm α}
(h : σ ≠ 1)
:
(Finset.filter (fun (x : α) => σ x = x) Finset.univ).card < Fintype.card α - 1
@[simp]
theorem
Equiv.Perm.support_conj
{α : Type u_1}
[Fintype α]
[DecidableEq α]
{σ τ : Equiv.Perm α}
:
(σ * τ * σ⁻¹).support = Finset.map (Equiv.toEmbedding σ) τ.support
theorem
Equiv.Perm.card_support_conj
{α : Type u_1}
[Fintype α]
[DecidableEq α]
{σ τ : Equiv.Perm α}
: