Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit cb1b6d9

Browse files
committed
feat(algebra/order/floor): adds some missing floor API (#11336)
1 parent bfe9515 commit cb1b6d9

File tree

1 file changed

+32
-14
lines changed

1 file changed

+32
-14
lines changed

src/algebra/order/floor.lean

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ lemma pos_of_floor_pos (h : 0 < ⌊a⌋₊) : 0 < a :=
131131
lemma lt_of_lt_floor (h : n < ⌊a⌋₊) : ↑n < a :=
132132
(nat.cast_lt.2 h).trans_le $ floor_le (pos_of_floor_pos $ (nat.zero_le n).trans_lt h).le
133133

134+
lemma floor_le_of_le (h : a ≤ n) : ⌊a⌋₊ ≤ n := le_imp_le_iff_lt_imp_lt.2 lt_of_lt_floor h
135+
134136
@[simp] lemma floor_eq_zero : ⌊a⌋₊ = 0 ↔ a < 1 :=
135137
by { rw [←lt_one_iff, ←@cast_one α], exact floor_lt' nat.one_ne_zero }
136138

@@ -590,20 +592,6 @@ cast_lt.1 $ (floor_le a).trans_lt $ h.trans_le $ le_ceil b
590592
@[simp] lemma preimage_ceil_singleton (m : ℤ) : (ceil : α → ℤ) ⁻¹' {m} = Ioc (m - 1) m :=
591593
ext $ λ x, ceil_eq_iff
592594

593-
/-! #### A floor ring as a floor semiring -/
594-
595-
@[priority 100] -- see Note [lower instance priority]
596-
instance _root_.floor_ring.to_floor_semiring : floor_semiring α :=
597-
{ floor := λ a, ⌊a⌋.to_nat,
598-
ceil := λ a, ⌈a⌉.to_nat,
599-
floor_of_neg := λ a ha, int.to_nat_of_nonpos (int.floor_nonpos ha.le),
600-
gc_floor := λ a n ha, by { rw [int.le_to_nat_iff (int.floor_nonneg.2 ha), int.le_floor], refl },
601-
gc_ceil := λ a n, by { rw [int.to_nat_le, int.ceil_le], refl } }
602-
603-
lemma floor_to_nat (a : α) : ⌊a⌋.to_nat = ⌊a⌋₊ := rfl
604-
605-
lemma ceil_to_nat (a : α) : ⌈a⌉.to_nat = ⌈a⌉₊ := rfl
606-
607595
/-! #### Intervals -/
608596

609597
@[simp] lemma preimage_Ioo {a b : α} : ((coe : ℤ → α) ⁻¹' (set.Ioo a b)) = set.Ioo ⌊a⌋ ⌈b⌉ :=
@@ -632,6 +620,36 @@ by { ext, simp [le_floor] }
632620

633621
end int
634622

623+
variables {α} [linear_ordered_ring α] [floor_ring α]
624+
625+
/-! #### A floor ring as a floor semiring -/
626+
627+
@[priority 100] -- see Note [lower instance priority]
628+
instance _root_.floor_ring.to_floor_semiring : floor_semiring α :=
629+
{ floor := λ a, ⌊a⌋.to_nat,
630+
ceil := λ a, ⌈a⌉.to_nat,
631+
floor_of_neg := λ a ha, int.to_nat_of_nonpos (int.floor_nonpos ha.le),
632+
gc_floor := λ a n ha, by { rw [int.le_to_nat_iff (int.floor_nonneg.2 ha), int.le_floor], refl },
633+
gc_ceil := λ a n, by { rw [int.to_nat_le, int.ceil_le], refl } }
634+
635+
lemma int.floor_to_nat (a : α) : ⌊a⌋.to_nat = ⌊a⌋₊ := rfl
636+
637+
lemma int.ceil_to_nat (a : α) : ⌈a⌉.to_nat = ⌈a⌉₊ := rfl
638+
639+
variables {a : α}
640+
641+
lemma nat.cast_floor_eq_int_floor (ha : 0 ≤ a) : (⌊a⌋₊ : ℤ) = ⌊a⌋ :=
642+
by rw [←int.floor_to_nat, int.to_nat_of_nonneg (int.floor_nonneg.2 ha)]
643+
644+
lemma nat.cast_floor_eq_cast_int_floor (ha : 0 ≤ a) : (⌊a⌋₊ : α) = ⌊a⌋ :=
645+
by rw [←nat.cast_floor_eq_int_floor ha, int.cast_coe_nat]
646+
647+
lemma nat.cast_ceil_eq_int_ceil (ha : 0 ≤ a) : (⌈a⌉₊ : ℤ) = ⌈a⌉ :=
648+
by { rw [←int.ceil_to_nat, int.to_nat_of_nonneg (int.ceil_nonneg ha)] }
649+
650+
lemma nat.cast_ceil_eq_cast_int_ceil (ha : 0 ≤ a) : (⌈a⌉₊ : α) = ⌈a⌉ :=
651+
by rw [←nat.cast_ceil_eq_int_ceil ha, int.cast_coe_nat]
652+
635653
/-- There exists at most one `floor_ring` structure on a given linear ordered ring. -/
636654
lemma subsingleton_floor_ring {α} [linear_ordered_ring α] :
637655
subsingleton (floor_ring α) :=

0 commit comments

Comments
 (0)