@@ -131,6 +131,8 @@ lemma pos_of_floor_pos (h : 0 < ⌊a⌋₊) : 0 < a :=
131
131
lemma lt_of_lt_floor (h : n < ⌊a⌋₊) : ↑n < a :=
132
132
(nat.cast_lt.2 h).trans_le $ floor_le (pos_of_floor_pos $ (nat.zero_le n).trans_lt h).le
133
133
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
+
134
136
@[simp] lemma floor_eq_zero : ⌊a⌋₊ = 0 ↔ a < 1 :=
135
137
by { rw [←lt_one_iff, ←@cast_one α], exact floor_lt' nat.one_ne_zero }
136
138
@@ -590,20 +592,6 @@ cast_lt.1 $ (floor_le a).trans_lt $ h.trans_le $ le_ceil b
590
592
@[simp] lemma preimage_ceil_singleton (m : ℤ) : (ceil : α → ℤ) ⁻¹' {m} = Ioc (m - 1 ) m :=
591
593
ext $ λ x, ceil_eq_iff
592
594
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
-
607
595
/-! #### Intervals -/
608
596
609
597
@[simp] lemma preimage_Ioo {a b : α} : ((coe : ℤ → α) ⁻¹' (set.Ioo a b)) = set.Ioo ⌊a⌋ ⌈b⌉ :=
@@ -632,6 +620,36 @@ by { ext, simp [le_floor] }
632
620
633
621
end int
634
622
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
+
635
653
/-- There exists at most one `floor_ring` structure on a given linear ordered ring. -/
636
654
lemma subsingleton_floor_ring {α} [linear_ordered_ring α] :
637
655
subsingleton (floor_ring α) :=
0 commit comments