Skip to content

Commit efb5cfc

Browse files
committed
feat(Fin): conversion lemmas between Finset.Ixx (leanprover-community#33127)
This PR adds lemmas relating the various `Finset.Ixx` over `Fin n` when the endpoints differ by one.
1 parent c8a8a81 commit efb5cfc

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

Mathlib/Order/Interval/Finset/Fin.lean

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,4 +896,79 @@ theorem card_Iio : #(Iio b) = b := by rw [← Nat.card_Iio b, ← map_valEmbeddi
896896

897897
end card
898898

899+
/-! ### Perturbations of endpoints by one -/
900+
901+
/-
902+
Note: the `haveI`s in the statements below are needed for `0` and `1`
903+
to be defined in `Fin n`. One could instead add `[NeZero n]` at the
904+
top of this section, but then this instance would be required to
905+
rewrite using the lemmas.
906+
-/
907+
908+
section pm_one
909+
910+
lemma Iio_add_one_eq_Iic {n : ℕ} {b : Fin n} (hb : b + 1 < n) :
911+
haveI := b.neZero
912+
Iio (b + 1) = Iic b := by
913+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_add_one_of_lt']
914+
915+
lemma Iic_sub_one_eq_Iio {n : ℕ} {b : Fin n} :
916+
haveI := b.neZero
917+
(hb : 0 < b) → Iic (b - 1) = Iio b := by
918+
haveI := b.neZero
919+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_sub_one_of_ne_zero]
920+
921+
lemma Ici_add_one_eq_Ioi {n : ℕ} {a : Fin n} (ha : a + 1 < n) :
922+
haveI := a.neZero
923+
Ici (a + 1) = Ioi a := by
924+
haveI := a.neZero
925+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_add_one_of_lt']
926+
927+
lemma Ioi_sub_one_eq_Ici {n : ℕ} {a : Fin n} :
928+
haveI := a.neZero
929+
(ha : 0 < a) → Ioi (a - 1) = Ici a := by
930+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_sub_one_of_ne_zero]
931+
932+
lemma Ioc_sub_one_eq_Icc {n : ℕ} {a b : Fin n} :
933+
haveI := a.neZero
934+
(ha : 0 < a) → Ioc (a - 1) b = Icc a b := by
935+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_sub_one_of_ne_zero]
936+
937+
lemma Icc_add_one_eq_Ioc {n : ℕ} {a b : Fin n} (ha : a + 1 < n) :
938+
haveI := a.neZero
939+
Icc (a + 1) b = Ioc a b := by
940+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_add_one_of_lt']
941+
942+
lemma Ioo_sub_one_eq_Ico {n : ℕ} {a b : Fin n} :
943+
haveI := a.neZero
944+
(ha : 0 < a) → Ioo (a - 1) b = Ico a b := by
945+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_sub_one_of_ne_zero]
946+
947+
lemma Ico_add_one_eq_Ioo {n : ℕ} {a b : Fin n} (ha : a + 1 < n) :
948+
haveI := a.neZero
949+
Ico (a + 1) b = Ioo a b := by
950+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_add_one_of_lt']
951+
952+
lemma Icc_sub_one_eq_Ico {n : ℕ} {a b : Fin n} :
953+
haveI := a.neZero
954+
(hb : 0 < b) → Icc a (b - 1) = Ico a b := by
955+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_sub_one_of_ne_zero]
956+
957+
lemma Ico_add_one_eq_Icc {n : ℕ} {a b : Fin n} (hb : b + 1 < n) :
958+
haveI := a.neZero
959+
Ico a (b + 1) = Icc a b := by
960+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_add_one_of_lt']
961+
962+
lemma Ioc_sub_one_eq_Ioo {n : ℕ} {a b : Fin n} :
963+
haveI := a.neZero
964+
(hb : 0 < b) → Ioc a (b - 1) = Ioo a b := by
965+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_sub_one_of_ne_zero]
966+
967+
lemma Ioo_add_one_eq_Ioc {n : ℕ} {a b : Fin n} (hb : b + 1 < n) :
968+
haveI := a.neZero
969+
Ioo a (b + 1) = Ioc a b := by
970+
grind [= Fin.lt_def, = Fin.le_def, = Fin.val_add_one_of_lt']
971+
972+
end pm_one
973+
899974
end Fin

0 commit comments

Comments
 (0)