Module docstring
{"# The structure of Fintype (Fin n)
This file contains some basic results about the Fintype instance for Fin,
especially properties of Finset.univ : Finset (Fin n).
"}
{"# The structure of Fintype (Fin n)
This file contains some basic results about the Fintype instance for Fin,
especially properties of Finset.univ : Finset (Fin n).
"}
Fin.map_valEmbedding_univ
theorem
: (Finset.univ : Finset (Fin n)).map Fin.valEmbedding = Iio n
theorem map_valEmbedding_univ : (Finset.univ : Finset (Fin n)).map Fin.valEmbedding = Iio n := by
ext
simp [orderIsoSubtype.symm.surjective.exists, OrderIso.symm]
Fin.Ioi_zero_eq_map
theorem
: Ioi (0 : Fin n.succ) = univ.map (Fin.succEmb _)
@[simp]
theorem Ioi_zero_eq_map : Ioi (0 : Fin n.succ) = univ.map (Fin.succEmb _) :=
coe_injective <| by ext; simp [pos_iff_ne_zero]
Fin.Iio_last_eq_map
theorem
: Iio (Fin.last n) = Finset.univ.map Fin.castSuccEmb
@[simp]
theorem Iio_last_eq_map : Iio (Fin.last n) = Finset.univ.map Fin.castSuccEmb :=
coe_injective <| by ext; simp [lt_def]
Fin.Ioi_succ
theorem
(i : Fin n) : Ioi i.succ = (Ioi i).map (Fin.succEmb _)
Fin.Iio_castSucc
theorem
(i : Fin n) : Iio (castSucc i) = (Iio i).map Fin.castSuccEmb
theorem Iio_castSucc (i : Fin n) : Iio (castSucc i) = (Iio i).map Fin.castSuccEmb := by simp
Fin.card_filter_univ_succ
theorem
(p : Fin (n + 1) → Prop) [DecidablePred p] : #{x | p x} = if p 0 then #{x | p (.succ x)} + 1 else #{x | p (.succ x)}
theorem card_filter_univ_succ (p : Fin (n + 1) → Prop) [DecidablePred p] :
#{x | p x} = if p 0 then #{x | p (.succ x)} + 1 else #{x | p (.succ x)} := by
rw [Fin.univ_succ, filter_cons, apply_ite Finset.card, card_cons, filter_map, card_map]; rfl
Fin.card_filter_univ_succ'
theorem
(p : Fin (n + 1) → Prop) [DecidablePred p] : #{x | p x} = ite (p 0) 1 0 + #{x | p (.succ x)}
theorem card_filter_univ_succ' (p : Fin (n + 1) → Prop) [DecidablePred p] :
#{x | p x} = ite (p 0) 1 0 + #{x | p (.succ x)}:= by
rw [card_filter_univ_succ]; split_ifs <;> simp [add_comm]
Fin.card_filter_univ_eq_vector_get_eq_count
theorem
[DecidableEq α] (a : α) (v : List.Vector α n) : #{i | v.get i = a} = v.toList.count a
theorem card_filter_univ_eq_vector_get_eq_count [DecidableEq α] (a : α) (v : List.Vector α n) :
#{i | v.get i = a} = v.toList.count a := by
induction' v with n x xs hxs
· simp
· simp_rw [card_filter_univ_succ', Vector.get_cons_zero, Vector.toList_cons, Vector.get_cons_succ,
hxs, List.count_cons, add_comm (ite (x = a) 1 0), beq_iff_eq]