Skip to content

Commit bea414c

Browse files
committed
Merge branch 'nightly-testing' of https://github.com/leanprover-community/mathlib4-nightly-testing into nightly-testing
2 parents 365191c + d49f1ed commit bea414c

94 files changed

Lines changed: 2091 additions & 1044 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Mathlib.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,7 @@ public import Mathlib.Algebra.Order.Antidiag.Pi
899899
public import Mathlib.Algebra.Order.Antidiag.Prod
900900
public import Mathlib.Algebra.Order.Archimedean.Basic
901901
public import Mathlib.Algebra.Order.Archimedean.Class
902+
public import Mathlib.Algebra.Order.Archimedean.Defs
902903
public import Mathlib.Algebra.Order.Archimedean.Hom
903904
public import Mathlib.Algebra.Order.Archimedean.IndicatorCard
904905
public import Mathlib.Algebra.Order.Archimedean.Submonoid
@@ -1493,6 +1494,7 @@ public import Mathlib.AlgebraicTopology.SimplexCategory.GeneratorsRelations.EpiM
14931494
public import Mathlib.AlgebraicTopology.SimplexCategory.GeneratorsRelations.NormalForms
14941495
public import Mathlib.AlgebraicTopology.SimplexCategory.MorphismProperty
14951496
public import Mathlib.AlgebraicTopology.SimplexCategory.Rev
1497+
public import Mathlib.AlgebraicTopology.SimplexCategory.SemiSimplexCategory
14961498
public import Mathlib.AlgebraicTopology.SimplexCategory.ToMkOne
14971499
public import Mathlib.AlgebraicTopology.SimplexCategory.Truncated
14981500
public import Mathlib.AlgebraicTopology.SimplicialCategory.Basic
@@ -1536,8 +1538,10 @@ public import Mathlib.AlgebraicTopology.SimplicialSet.NerveAdjunction
15361538
public import Mathlib.AlgebraicTopology.SimplicialSet.NerveNondegenerate
15371539
public import Mathlib.AlgebraicTopology.SimplicialSet.NonDegenerateSimplices
15381540
public import Mathlib.AlgebraicTopology.SimplicialSet.NonDegenerateSimplicesSubcomplex
1541+
public import Mathlib.AlgebraicTopology.SimplicialSet.Nonempty
15391542
public import Mathlib.AlgebraicTopology.SimplicialSet.Op
15401543
public import Mathlib.AlgebraicTopology.SimplicialSet.Path
1544+
public import Mathlib.AlgebraicTopology.SimplicialSet.PiZero
15411545
public import Mathlib.AlgebraicTopology.SimplicialSet.Presentable
15421546
public import Mathlib.AlgebraicTopology.SimplicialSet.ProdStdSimplex
15431547
public import Mathlib.AlgebraicTopology.SimplicialSet.ProdStdSimplexOne
@@ -6229,6 +6233,7 @@ public import Mathlib.RingTheory.AlgebraicIndependent.RankAndCardinality
62296233
public import Mathlib.RingTheory.AlgebraicIndependent.TranscendenceBasis
62306234
public import Mathlib.RingTheory.AlgebraicIndependent.Transcendental
62316235
public import Mathlib.RingTheory.Artinian.Algebra
6236+
public import Mathlib.RingTheory.Artinian.Defs
62326237
public import Mathlib.RingTheory.Artinian.Instances
62336238
public import Mathlib.RingTheory.Artinian.Module
62346239
public import Mathlib.RingTheory.Artinian.Ring
@@ -6243,6 +6248,7 @@ public import Mathlib.RingTheory.Binomial
62436248
public import Mathlib.RingTheory.ChainOfDivisors
62446249
public import Mathlib.RingTheory.ClassGroup
62456250
public import Mathlib.RingTheory.Coalgebra.Basic
6251+
public import Mathlib.RingTheory.Coalgebra.CoassocSimps
62466252
public import Mathlib.RingTheory.Coalgebra.Convolution
62476253
public import Mathlib.RingTheory.Coalgebra.Equiv
62486254
public import Mathlib.RingTheory.Coalgebra.GroupLike

Mathlib/Algebra/Algebra/Equiv.lean

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,6 @@ def toAlgEquiv {F R A B : Type*} [CommSemiring R] [Semiring A] [Semiring B] [Alg
6969
[Algebra R B] [EquivLike F A B] [AlgEquivClass F R A B] (f : F) : A ≃ₐ[R] B :=
7070
{ (f : A ≃ B), (f : A ≃+* B) with commutes' := commutes f }
7171

72-
instance (F R A B : Type*) [CommSemiring R] [Semiring A] [Semiring B] [Algebra R A] [Algebra R B]
73-
[EquivLike F A B] [AlgEquivClass F R A B] : CoeTC F (A ≃ₐ[R] B) :=
74-
⟨toAlgEquiv⟩
7572
end AlgEquivClass
7673

7774
namespace AlgEquiv
@@ -137,7 +134,7 @@ theorem toEquiv_eq_coe : e.toEquiv = e :=
137134

138135
@[simp]
139136
protected theorem coe_coe {F : Type*} [EquivLike F A₁ A₂] [AlgEquivClass F R A₁ A₂] (f : F) :
140-
⇑(f : A₁ ≃ₐ[R] A₂) = f :=
137+
⇑(AlgEquivClass.toAlgEquiv f) = f :=
141138
rfl
142139

143140
theorem coe_fun_injective : @Function.Injective (A₁ ≃ₐ[R] A₂) (A₁ → A₂) fun e => (e : A₁ → A₂) :=
@@ -255,13 +252,13 @@ theorem invFun_eq_symm {e : A₁ ≃ₐ[R] A₂} : e.invFun = e.symm :=
255252
@[simp]
256253
theorem coe_apply_coe_coe_symm_apply {F : Type*} [EquivLike F A₁ A₂] [AlgEquivClass F R A₁ A₂]
257254
(f : F) (x : A₂) :
258-
f ((f : A₁ ≃ₐ[R] A₂).symm x) = x :=
255+
f ((AlgEquivClass.toAlgEquiv f).symm x) = x :=
259256
EquivLike.right_inv f x
260257

261258
@[simp]
262259
theorem coe_coe_symm_apply_coe_apply {F : Type*} [EquivLike F A₁ A₂] [AlgEquivClass F R A₁ A₂]
263260
(f : F) (x : A₁) :
264-
(f : A₁ ≃ₐ[R] A₂).symm (f x) = x :=
261+
(AlgEquivClass.toAlgEquiv f).symm (f x) = x :=
265262
EquivLike.left_inv f x
266263

267264
/-- `simp` normal form of `invFun_eq_symm` -/

Mathlib/Algebra/Algebra/Spectrum/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ theorem AlgEquiv.spectrum_eq {F R A B : Type*} [CommSemiring R] [Ring A] [Ring B
424424
spectrum R (f a) = spectrum R a :=
425425
Set.Subset.antisymm (AlgHom.spectrum_apply_subset _ _) <| by
426426
simpa only [AlgEquiv.coe_algHom, AlgEquiv.coe_coe_symm_apply_coe_apply] using
427-
AlgHom.spectrum_apply_subset (f : A ≃ₐ[R] B).symm (f a)
427+
AlgHom.spectrum_apply_subset (AlgEquivClass.toAlgEquiv f : A ≃ₐ[R] B).symm (f a)
428428

429429
section ConjugateUnits
430430

Mathlib/Algebra/BigOperators/Intervals.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ theorem prod_Icc_succ_top {a b : ℕ} (hab : a ≤ b + 1) (f : ℕ → M) :
7878
@[to_additive]
7979
theorem prod_range_mul_prod_Ico (f : ℕ → M) {m n : ℕ} (h : m ≤ n) :
8080
((∏ k ∈ range m, f k) * ∏ k ∈ Ico m n, f k) = ∏ k ∈ range n, f k :=
81-
Nat.Ico_zero_eq_range ▸ Nat.Ico_zero_eq_range ▸ prod_Ico_consecutive f m.zero_le h
81+
Nat.Ico_zero_eq_range m ▸ Nat.Ico_zero_eq_range n ▸ prod_Ico_consecutive f m.zero_le h
8282

8383
@[to_additive]
8484
theorem prod_range_eq_mul_Ico (f : ℕ → M) {n : ℕ} (hn : 0 < n) :
8585
∏ x ∈ Finset.range n, f x = f 0 * ∏ x ∈ Ico 1 n, f x :=
86-
Finset.range_eq_Ico ▸ Finset.prod_eq_prod_Ico_succ_bot hn f
86+
Finset.range_eq_Ico n ▸ Finset.prod_eq_prod_Ico_succ_bot hn f
8787

8888
@[to_additive]
8989
theorem prod_Ico_eq_mul_inv {δ : Type*} [CommGroup δ] (f : ℕ → δ) {m n : ℕ} (h : m ≤ n) :

Mathlib/Algebra/BigOperators/Module.lean

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ theorem sum_range_by_parts :
5959
f (n - 1) • G n - ∑ i ∈ range (n - 1), (f (i + 1) - f i) • G (i + 1) := by
6060
by_cases hn : n = 0
6161
· simp [hn]
62-
· rw [range_eq_Ico, sum_Ico_by_parts f g (Nat.pos_of_ne_zero hn), sum_range_zero, smul_zero,
63-
sub_zero, range_eq_Ico]
62+
· simp only [range_eq_Ico]
63+
rw [sum_Ico_by_parts f g (Nat.pos_of_ne_zero hn), sum_range_zero, smul_zero, sub_zero]
64+
simp only [← range_eq_Ico]
6465

6566
end Finset

Mathlib/Algebra/Exact.lean

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ lemma iff_rangeFactorization [One P] (hg : 1 ∈ Set.range g) :
9292
MulExact f g ↔ MulExact ((↑) : Set.range f → N) (Set.rangeFactorization g) := by
9393
letI : One (Set.range g) := ⟨⟨1, hg⟩⟩
9494
have : ((1 : Set.range g) : P) = 1 := rfl
95-
simp [MulExact, Set.rangeFactorization, Subtype.ext_iff, this]
95+
simp [MulExact, Subtype.ext_iff, this]
9696

9797
/-- If two maps `f : M → N` and `g : N → P` are exact, then the induced maps
9898
`Set.range f → N → Set.range g` are exact.
@@ -430,8 +430,7 @@ def Exact.splitInjectiveEquiv
430430
· intro x y e
431431
simp only [prod_apply, Pi.prod, Prod.mk.injEq] at e
432432
obtain ⟨z, hz⟩ := (h (x - y)).mp (by simpa [sub_eq_zero] using e.2)
433-
suffices z = 0 by rw [← sub_eq_zero, ← hz, this, map_zero]
434-
rw [← h₁ z, hz, map_sub, e.1, sub_self]
433+
rw [← sub_eq_zero, ← hz, ← h₁ z, hz, map_sub, e.1, sub_self, map_zero]
435434
· rintro ⟨x, y⟩
436435
obtain ⟨y, rfl⟩ := hg y
437436
refine ⟨f x + y - f (l.1 y), by ext <;> simp [h₁, h₂]⟩

Mathlib/Algebra/Module/Torsion/Basic.lean

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -534,9 +534,8 @@ namespace Module
534534
variable [Ring R] [AddCommGroup M] [Module R M]
535535
variable {I : Ideal R} {r : R}
536536

537-
-- adding `@[implicit_reducible]` causes downstream breakage
538-
set_option warn.classDefReducibility false in
539537
/-- can't be an instance because `hM` can't be inferred -/
538+
@[implicit_reducible]
540539
def IsTorsionBySet.hasSMul (hM : IsTorsionBySet R M I) : SMul (R ⧸ I) M where
541540
smul b := QuotientAddGroup.lift I.toAddSubgroup (smulAddHom R M)
542541
(by rwa [isTorsionBySet_iff_subset_annihilator] at hM) b
@@ -557,17 +556,16 @@ theorem IsTorsionBy.mk_smul [(Ideal.span {r}).IsTwoSided] (hM : IsTorsionBy R M
557556
Ideal.Quotient.mk (Ideal.span {r}) b • x = b • x :=
558557
rfl
559558

560-
-- adding `@[implicit_reducible]` causes downstream breakage
561-
set_option warn.classDefReducibility false in
562559
/-- An `(R ⧸ I)`-module is an `R`-module which `IsTorsionBySet R M I`. -/
560+
@[implicit_reducible]
563561
def IsTorsionBySet.module [I.IsTwoSided] (hM : IsTorsionBySet R M I) : Module (R ⧸ I) M :=
564-
letI := hM.hasSMul; I.mkQ_surjective.moduleLeft _ (IsTorsionBySet.mk_smul hM)
562+
letI := hM.hasSMul; fast_instance% I.mkQ_surjective.moduleLeft _ (IsTorsionBySet.mk_smul hM)
565563

566564
instance IsTorsionBySet.isScalarTower [I.IsTwoSided] (hM : IsTorsionBySet R M I)
567565
{S : Type*} [SMul S R] [SMul S M] [IsScalarTower S R M] [IsScalarTower S R R] :
568-
@IsScalarTower S (R ⧸ I) M _ (IsTorsionBySet.module hM).toSMul _ :=
566+
@IsScalarTower S (R ⧸ I) M _ hM.hasSMul _ :=
569567
-- Porting note: still needed to be fed the Module R / I M instance
570-
@IsScalarTower.mk S (R ⧸ I) M _ (IsTorsionBySet.module hM).toSMul _
568+
@IsScalarTower.mk S (R ⧸ I) M _ hM.hasSMul _
571569
(fun b d x => Quotient.inductionOn' d fun c => (smul_assoc b c x :))
572570

573571
/-- If an `R`-module `M` is annihilated by a two-sided ideal `I`, then the identity is a semilinear
@@ -580,20 +578,19 @@ def IsTorsionBySet.semilinearMap [I.IsTwoSided] (hM : IsTorsionBySet R M I) :
580578
map_smul' := fun _ _ ↦ rfl }
581579

582580
theorem IsTorsionBySet.isSemisimpleModule_iff [I.IsTwoSided]
583-
(hM : Module.IsTorsionBySet R M I) : let _ := hM.module
581+
(hM : Module.IsTorsionBySet R M I) : letI := hM.module
584582
IsSemisimpleModule (R ⧸ I) M ↔ IsSemisimpleModule R M :=
585-
let _ := hM.module
583+
letI := hM.module
586584
(hM.semilinearMap.isSemisimpleModule_iff_of_bijective Function.bijective_id).symm
587585

588586
/-- An `(R ⧸ Ideal.span {r})`-module is an `R`-module for which `IsTorsionBy R M r`. -/
589587
abbrev IsTorsionBy.module [h : (Ideal.span {r}).IsTwoSided] (hM : IsTorsionBy R M r) :
590588
Module (R ⧸ Ideal.span {r}) M := by
591589
rw [Ideal.span] at h; exact ((isTorsionBySet_span_singleton_iff r).mpr hM).module
592590

593-
-- adding `@[implicit_reducible]` causes downstream breakage
594-
set_option warn.classDefReducibility false in
595591
/-- Any module is also a module over the quotient of the ring by the annihilator.
596592
Not an instance because it causes synthesis failures / timeouts. -/
593+
@[implicit_reducible]
597594
def quotientAnnihilator : Module (R ⧸ Module.annihilator R M) M :=
598595
(isTorsionBySet_annihilator R M).module
599596

@@ -989,9 +986,8 @@ lemma torsionBy.mod_self_nsmul' (s : ℕ) {x : A} (h : x ∈ A[n]) :
989986
s • x = (s % n) • x :=
990987
nsmul_eq_mod_nsmul s (torsionBy.nsmul_iff.mp h)
991988

992-
-- adding `@[implicit_reducible]` causes downstream breakage
993-
set_option warn.classDefReducibility false in
994989
/-- For a natural number `n`, the `n`-torsion subgroup of `A` is a `ZMod n` module. -/
990+
@[implicit_reducible]
995991
def torsionBy.zmodModule : Module (ZMod n) A[n] :=
996992
AddCommGroup.zmodModule torsionBy.nsmul
997993

Mathlib/Algebra/Order/Archimedean/Basic.lean

Lines changed: 14 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,27 @@ Authors: Mario Carneiro
55
-/
66
module
77

8+
public import Mathlib.Algebra.Field.Defs
9+
public import Mathlib.Algebra.Order.Archimedean.Defs
810
public import Mathlib.Algebra.Order.Floor.Semiring
9-
public import Mathlib.Algebra.Order.Monoid.Units
10-
public import Mathlib.Algebra.Order.Ring.Pow
11-
public import Mathlib.Data.Int.LeastGreatest
11+
public import Mathlib.Order.Directed
1212
public import Mathlib.Data.Rat.Floor
13+
1314
import Mathlib.Algebra.Order.Group.Basic
15+
import Mathlib.Algebra.Order.Monoid.Units
16+
import Mathlib.Algebra.Order.Ring.Pow
17+
import Mathlib.Data.Int.LeastGreatest
1418

1519
/-!
16-
# Archimedean groups and fields.
20+
# Archimedean groups and fields
1721
18-
This file defines the archimedean property for ordered groups and proves several results connected
19-
to this notion. Being archimedean means that for all elements `x` and `y>0` there exists a natural
20-
number `n` such that `x ≤ n • y`.
22+
This file proves several results connected to the notion of Archimedean groups. Being Archimedean
23+
means that for all elements `x` and `y > 0` there exists a natural number `n` such that `x ≤ n • y`.
2124
2225
## Main definitions
2326
24-
* `Archimedean` is a typeclass for an ordered additive commutative monoid to have the archimedean
25-
property.
26-
* `MulArchimedean` is a typeclass for an ordered commutative monoid to have the "mul-archimedean
27-
property" where for `x` and `y > 1`, there exists a natural number `n` such that `x ≤ y ^ n`.
28-
* `Archimedean.floorRing` defines a floor function on an archimedean linearly ordered ring making
29-
it into a `floorRing`.
27+
* `Archimedean.floorRing` defines a floor function on an archimedean linearly ordered ring making it
28+
into a `floorRing`.
3029
3130
## Main statements
3231
@@ -41,25 +40,6 @@ open Int Set
4140

4241
variable {G M R K : Type*}
4342

44-
/-- An ordered additive commutative monoid is called `Archimedean` if for any two elements `x`, `y`
45-
such that `0 < y`, there exists a natural number `n` such that `x ≤ n • y`. -/
46-
class Archimedean (M) [AddCommMonoid M] [PartialOrder M] : Prop where
47-
/-- For any two elements `x`, `y` such that `0 < y`, there exists a natural number `n`
48-
such that `x ≤ n • y`. -/
49-
arch : ∀ (x : M) {y : M}, 0 < y → ∃ n : ℕ, x ≤ n • y
50-
51-
section MulArchimedean
52-
53-
/-- An ordered commutative monoid is called `MulArchimedean` if for any two elements `x`, `y`
54-
such that `1 < y`, there exists a natural number `n` such that `x ≤ y ^ n`. -/
55-
@[to_additive Archimedean]
56-
class MulArchimedean (M) [CommMonoid M] [PartialOrder M] : Prop where
57-
/-- For any two elements `x`, `y` such that `1 < y`, there exists a natural number `n`
58-
such that `x ≤ y ^ n`. -/
59-
arch : ∀ (x : M) {y : M}, 1 < y → ∃ n : ℕ, x ≤ y ^ n
60-
61-
end MulArchimedean
62-
6343
@[to_additive]
6444
lemma MulArchimedean.comap [CommMonoid G] [LinearOrder G] [CommMonoid M] [PartialOrder M]
6545
[MulArchimedean M] (f : G →* M) (hf : StrictMono f) :
@@ -85,13 +65,7 @@ instance Multiplicative.instMulArchimedean [AddCommGroup G] [PartialOrder G] [Ar
8565
MulArchimedean (Multiplicative G) :=
8666
fun x _ hy ↦ Archimedean.arch x.toAdd hy⟩
8767

88-
@[to_additive]
89-
theorem exists_lt_pow [CommMonoid M] [PartialOrder M] [MulArchimedean M] [MulLeftStrictMono M]
90-
{a : M} (ha : 1 < a) (b : M) : ∃ n : ℕ, b < a ^ n :=
91-
let ⟨k, hk⟩ := MulArchimedean.arch b ha
92-
⟨k + 1, hk.trans_lt <| pow_lt_pow_right' ha k.lt_succ_self⟩
93-
94-
section LinearOrderedCommGroup
68+
section IsOrderedMonoid
9569

9670
variable [CommGroup G] [LinearOrder G] [IsOrderedMonoid G] [MulArchimedean G]
9771

@@ -152,21 +126,12 @@ theorem existsUnique_sub_zpow_mem_Ioc {a : G} (ha : 1 < a) (b c : G) :
152126
simpa only [Equiv.neg_apply, zpow_neg, div_inv_eq_mul] using
153127
existsUnique_add_zpow_mem_Ioc ha b c
154128

155-
@[to_additive]
156-
theorem exists_pow_lt {a : G} (ha : a < 1) (b : G) : ∃ n : ℕ, a ^ n < b :=
157-
(exists_lt_pow (one_lt_inv'.mpr ha) b⁻¹).imp <| by simp
158-
159-
end LinearOrderedCommGroup
129+
end IsOrderedMonoid
160130

161131
section OrderedSemiring
162132

163133
variable [Semiring R] [PartialOrder R] [IsOrderedRing R] [Archimedean R]
164134

165-
theorem exists_nat_ge (x : R) :
166-
∃ n : ℕ, x ≤ n := by
167-
nontriviality R
168-
exact (Archimedean.arch x one_pos).imp fun n h => by rwa [← nsmul_one]
169-
170135
instance (priority := 100) : IsDirectedOrder R :=
171136
fun x y ↦
172137
let ⟨m, hm⟩ := exists_nat_ge x; let ⟨n, hn⟩ := exists_nat_ge y
@@ -178,9 +143,6 @@ end OrderedSemiring
178143
section StrictOrderedSemiring
179144
variable [Semiring R] [PartialOrder R] [IsStrictOrderedRing R] [Archimedean R] {y : R}
180145

181-
lemma exists_nat_gt (x : R) : ∃ n : ℕ, x < n :=
182-
(exists_lt_nsmul zero_lt_one x).imp fun n hn ↦ by rwa [← nsmul_one]
183-
184146
theorem add_one_pow_unbounded_of_pos (x : R) (hy : 0 < y) : ∃ n : ℕ, x < (y + 1) ^ n :=
185147
have : 01 + y := add_nonneg zero_le_one hy.le
186148
(Archimedean.arch x hy).imp fun n h ↦
@@ -204,11 +166,6 @@ section OrderedRing
204166

205167
variable [Ring R] [PartialOrder R] [IsOrderedRing R] [Archimedean R]
206168

207-
theorem exists_int_ge (x : R) : ∃ n : ℤ, x ≤ n := let ⟨n, h⟩ := exists_nat_ge x; ⟨n, mod_cast h⟩
208-
209-
theorem exists_int_le (x : R) : ∃ n : ℤ, n ≤ x :=
210-
let ⟨n, h⟩ := exists_int_ge (-x); ⟨-n, by simpa [neg_le] using h⟩
211-
212169
instance (priority := 100) : IsCodirectedOrder R where
213170
directed a b :=
214171
let ⟨m, hm⟩ := exists_int_le a; let ⟨n, hn⟩ := exists_int_le b
@@ -220,14 +177,6 @@ end OrderedRing
220177
section StrictOrderedRing
221178
variable [Ring R] [PartialOrder R] [IsStrictOrderedRing R] [Archimedean R]
222179

223-
theorem exists_int_gt (x : R) : ∃ n : ℤ, x < n :=
224-
let ⟨n, h⟩ := exists_nat_gt x
225-
⟨n, by rwa [Int.cast_natCast]⟩
226-
227-
theorem exists_int_lt (x : R) : ∃ n : ℤ, (n : R) < x :=
228-
let ⟨n, h⟩ := exists_int_gt (-x)
229-
⟨-n, by rw [Int.cast_neg]; exact neg_lt.1 h⟩
230-
231180
/-- See `exists_floor'` for a more general version which only assumes the element is bounded by
232181
two integers. -/
233182
theorem exists_floor (x : R) : ∃ fl : ℤ, ∀ z : ℤ, z ≤ fl ↔ (z : R) ≤ x := by

0 commit comments

Comments
 (0)