data.set.pointwise.finite
⟷
Mathlib.Data.Set.Pointwise.Finite
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
s ×ˢ t
is finite (#18674)
The one non-trivial result is infinite_image2
, because it requires only injectivity of the f a
and λ a, f a b
rather than of the uncurrying of f
.
@@ -6,10 +6,12 @@ Authors: Johan Commelin, Floris van Doorn
import data.set.finite
import data.set.pointwise.smul
-/-! # Finiteness lemmas for pointwise operations on sets
+/-!
+# Finiteness lemmas for pointwise operations on sets
> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
-> Any changes to this file require a corresponding PR to mathlib4.-/
+> Any changes to this file require a corresponding PR to mathlib4.
+-/
open_locale pointwise
@@ -74,6 +76,7 @@ section has_smul_set
variables [has_smul α β] {s : set β} {a : α}
@[to_additive] lemma finite.smul_set : s.finite → (a • s).finite := finite.image _
+@[to_additive] lemma infinite.of_smul_set : (a • s).infinite → s.infinite := infinite.of_image _
end has_smul_set
@@ -85,6 +88,30 @@ lemma finite.vsub (hs : s.finite) (ht : t.finite) : set.finite (s -ᵥ t) := hs.
end vsub
+section cancel
+variables [has_mul α] [is_left_cancel_mul α] [is_right_cancel_mul α] {s t : set α}
+
+@[to_additive] lemma infinite_mul :
+ (s * t).infinite ↔ s.infinite ∧ t.nonempty ∨ t.infinite ∧ s.nonempty :=
+infinite_image2 (λ _ _, (mul_left_injective _).inj_on _) (λ _ _, (mul_right_injective _).inj_on _)
+
+end cancel
+
+section group
+variables [group α] [mul_action α β] {a : α} {s : set β}
+
+@[simp, to_additive] lemma finite_smul_set : (a • s).finite ↔ s.finite :=
+finite_image_iff $ (mul_action.injective _).inj_on _
+
+@[simp, to_additive] lemma infinite_smul_set : (a • s).infinite ↔ s.infinite :=
+infinite_image_iff $ (mul_action.injective _).inj_on _
+
+alias finite_smul_set ↔ finite.of_smul_set _
+alias infinite_smul_set ↔ _ infinite.smul_set
+
+attribute [to_additive] finite.of_smul_set infinite.smul_set
+
+end group
end set
open set
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
s ∩ t * s ∪ t ⊆ s * t
(#17961)
and distributivity of set.to_finset
/set.finite.to_finset
over algebraic operations.
@@ -16,6 +16,12 @@ open_locale pointwise
variables {F α β γ : Type*}
namespace set
+section has_one
+variables [has_one α]
+
+@[simp, to_additive] lemma finite_one : (1 : set α).finite := finite_singleton _
+
+end has_one
section has_involutive_inv
variables [has_involutive_inv α] {s : set α}
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Floris van Doorn
-/
import Data.Set.Finite
-import Data.Set.Pointwise.Smul
+import Data.Set.Pointwise.SMul
#align_import data.set.pointwise.finite from "leanprover-community/mathlib"@"c941bb9426d62e266612b6d99e6c9fc93e7a1d07"
@@ -91,7 +91,7 @@ instance decidableMemPow [Fintype α] [DecidableEq α] [DecidablePred (· ∈ s)
DecidablePred (· ∈ s ^ n) := by
induction' n with n ih
· simp_rw [pow_zero, mem_one]; infer_instance
- · letI := ih; rw [pow_succ]; infer_instance
+ · letI := ih; rw [pow_succ']; infer_instance
#align set.decidable_mem_pow Set.decidableMemPow
#align set.decidable_mem_nsmul Set.decidableMemNSMul
-/
@@ -225,7 +225,7 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
· refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
· exact mul_subset_mul (set.singleton_subset_iff.mpr ha) Set.Subset.rfl
· convert key a (S ^ n) ({a} * S ^ n) fun b hb => Set.mul_mem_mul (Set.mem_singleton a) hb
- rw [pow_succ', ← h, mul_assoc, ← pow_succ', h]
+ rw [pow_succ, ← h, mul_assoc, ← pow_succ, h]
rintro _ ⟨b, c, hb, hc, rfl⟩
rwa [set.mem_singleton_iff.mp hb, inv_mul_cancel_left]
#align group.card_pow_eq_card_pow_card_univ Group.card_pow_eq_card_pow_card_univ
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2019 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Floris van Doorn
-/
-import Mathbin.Data.Set.Finite
-import Mathbin.Data.Set.Pointwise.Smul
+import Data.Set.Finite
+import Data.Set.Pointwise.Smul
#align_import data.set.pointwise.finite from "leanprover-community/mathlib"@"c941bb9426d62e266612b6d99e6c9fc93e7a1d07"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -181,10 +181,10 @@ theorem infinite_smul_set : (a • s).Infinite ↔ s.Infinite :=
#align set.infinite_vadd_set Set.infinite_vadd_set
-/
-alias finite_smul_set ↔ finite.of_smul_set _
+alias ⟨finite.of_smul_set, _⟩ := finite_smul_set
#align set.finite.of_smul_set Set.Finite.of_smul_set
-alias infinite_smul_set ↔ _ infinite.smul_set
+alias ⟨_, infinite.smul_set⟩ := infinite_smul_set
#align set.infinite.smul_set Set.Infinite.smul_set
attribute [to_additive] finite.of_smul_set infinite.smul_set
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2019 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Floris van Doorn
-
-! This file was ported from Lean 3 source module data.set.pointwise.finite
-! leanprover-community/mathlib commit c941bb9426d62e266612b6d99e6c9fc93e7a1d07
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Set.Finite
import Mathbin.Data.Set.Pointwise.Smul
+#align_import data.set.pointwise.finite from "leanprover-community/mathlib"@"c941bb9426d62e266612b6d99e6c9fc93e7a1d07"
+
/-!
# Finiteness lemmas for pointwise operations on sets
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -43,11 +43,13 @@ section InvolutiveInv
variable [InvolutiveInv α] {s : Set α}
+#print Set.Finite.inv /-
@[to_additive]
theorem Finite.inv (hs : s.Finite) : s⁻¹.Finite :=
hs.Preimage <| inv_injective.InjOn _
#align set.finite.inv Set.Finite.inv
#align set.finite.neg Set.Finite.neg
+-/
end InvolutiveInv
@@ -78,12 +80,15 @@ section Monoid
variable [Monoid α] {s t : Set α}
+#print Set.decidableMemMul /-
@[to_additive]
instance decidableMemMul [Fintype α] [DecidableEq α] [DecidablePred (· ∈ s)]
[DecidablePred (· ∈ t)] : DecidablePred (· ∈ s * t) := fun _ => decidable_of_iff _ mem_mul.symm
#align set.decidable_mem_mul Set.decidableMemMul
#align set.decidable_mem_add Set.decidableMemAdd
+-/
+#print Set.decidableMemPow /-
@[to_additive]
instance decidableMemPow [Fintype α] [DecidableEq α] [DecidablePred (· ∈ s)] (n : ℕ) :
DecidablePred (· ∈ s ^ n) := by
@@ -92,6 +97,7 @@ instance decidableMemPow [Fintype α] [DecidableEq α] [DecidablePred (· ∈ s)
· letI := ih; rw [pow_succ]; infer_instance
#align set.decidable_mem_pow Set.decidableMemPow
#align set.decidable_mem_nsmul Set.decidableMemNSMul
+-/
end Monoid
@@ -99,11 +105,13 @@ section SMul
variable [SMul α β] {s : Set α} {t : Set β}
+#print Set.Finite.smul /-
@[to_additive]
theorem Finite.smul : s.Finite → t.Finite → (s • t).Finite :=
Finite.image2 _
#align set.finite.smul Set.Finite.smul
#align set.finite.vadd Set.Finite.vadd
+-/
end SMul
@@ -133,8 +141,6 @@ section Vsub
variable [VSub α β] {s t : Set β}
-include α
-
#print Set.Finite.vsub /-
theorem Finite.vsub (hs : s.Finite) (ht : t.Finite) : Set.Finite (s -ᵥ t) :=
hs.image2 _ ht
@@ -196,6 +202,7 @@ namespace Group
variable {G : Type _} [Group G] [Fintype G] (S : Set G)
+#print Group.card_pow_eq_card_pow_card_univ /-
@[to_additive]
theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k)] :
∀ k, Fintype.card G ≤ k → Fintype.card ↥(S ^ k) = Fintype.card ↥(S ^ Fintype.card G) :=
@@ -226,6 +233,7 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
rwa [set.mem_singleton_iff.mp hb, inv_mul_cancel_left]
#align group.card_pow_eq_card_pow_card_univ Group.card_pow_eq_card_pow_card_univ
#align add_group.card_nsmul_eq_card_nsmul_card_univ AddGroup.card_nsmul_eq_card_nsmul_card_univ
+-/
end Group
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -213,8 +213,9 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
exact Subtype.ext (mul_left_cancel (subtype.ext_iff.mp hbc))
have mono : Monotone (fun n => Fintype.card ↥(S ^ n) : ℕ → ℕ) :=
monotone_nat_of_le_succ fun n => key a _ _ fun b hb => Set.mul_mem_mul ha hb
- convert card_pow_eq_card_pow_card_univ_aux mono (fun n => set_fintype_card_le_univ (S ^ n))
- fun n h => le_antisymm (mono (n + 1).le_succ) (key a⁻¹ _ _ _)
+ convert
+ card_pow_eq_card_pow_card_univ_aux mono (fun n => set_fintype_card_le_univ (S ^ n)) fun n h =>
+ le_antisymm (mono (n + 1).le_succ) (key a⁻¹ _ _ _)
· simp only [Finset.filter_congr_decidable, Fintype.card_ofFinset]
replace h : {a} * S ^ n = S ^ (n + 1)
· refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -215,7 +215,7 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
monotone_nat_of_le_succ fun n => key a _ _ fun b hb => Set.mul_mem_mul ha hb
convert card_pow_eq_card_pow_card_univ_aux mono (fun n => set_fintype_card_le_univ (S ^ n))
fun n h => le_antisymm (mono (n + 1).le_succ) (key a⁻¹ _ _ _)
- · simp only [[anonymous], Fintype.card_ofFinset]
+ · simp only [Finset.filter_congr_decidable, Fintype.card_ofFinset]
replace h : {a} * S ^ n = S ^ (n + 1)
· refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
· exact mul_subset_mul (set.singleton_subset_iff.mpr ha) Set.Subset.rfl
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -19,7 +19,7 @@ import Mathbin.Data.Set.Pointwise.Smul
-/
-open Pointwise
+open scoped Pointwise
variable {F α β γ : Type _}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -43,12 +43,6 @@ section InvolutiveInv
variable [InvolutiveInv α] {s : Set α}
-/- warning: set.finite.inv -> Set.Finite.inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : InvolutiveInv.{u1} α] {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α (Inv.inv.{u1} (Set.{u1} α) (Set.inv.{u1} α (InvolutiveInv.toHasInv.{u1} α _inst_1)) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : InvolutiveInv.{u1} α] {s : Set.{u1} α}, (Set.Finite.{u1} α s) -> (Set.Finite.{u1} α (Inv.inv.{u1} (Set.{u1} α) (Set.inv.{u1} α (InvolutiveInv.toInv.{u1} α _inst_1)) s))
-Case conversion may be inaccurate. Consider using '#align set.finite.inv Set.Finite.invₓ'. -/
@[to_additive]
theorem Finite.inv (hs : s.Finite) : s⁻¹.Finite :=
hs.Preimage <| inv_injective.InjOn _
@@ -84,24 +78,12 @@ section Monoid
variable [Monoid α] {s t : Set α}
-/- warning: set.decidable_mem_mul -> Set.decidableMemMul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} [_inst_2 : Fintype.{u1} α] [_inst_3 : DecidableEq.{succ u1} α] [_inst_4 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x s)] [_inst_5 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x t)], DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x (HMul.hMul.{u1, u1, u1} (Set.{u1} α) (Set.{u1} α) (Set.{u1} α) (instHMul.{u1} (Set.{u1} α) (Set.mul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {s : Set.{u1} α} {t : Set.{u1} α} [_inst_2 : Fintype.{u1} α] [_inst_3 : DecidableEq.{succ u1} α] [_inst_4 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) _x s)] [_inst_5 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) _x t)], DecidablePred.{succ u1} α (fun (_x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) _x (HMul.hMul.{u1, u1, u1} (Set.{u1} α) (Set.{u1} α) (Set.{u1} α) (instHMul.{u1} (Set.{u1} α) (Set.mul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))) s t))
-Case conversion may be inaccurate. Consider using '#align set.decidable_mem_mul Set.decidableMemMulₓ'. -/
@[to_additive]
instance decidableMemMul [Fintype α] [DecidableEq α] [DecidablePred (· ∈ s)]
[DecidablePred (· ∈ t)] : DecidablePred (· ∈ s * t) := fun _ => decidable_of_iff _ mem_mul.symm
#align set.decidable_mem_mul Set.decidableMemMul
#align set.decidable_mem_add Set.decidableMemAdd
-/- warning: set.decidable_mem_pow -> Set.decidableMemPow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {s : Set.{u1} α} [_inst_2 : Fintype.{u1} α] [_inst_3 : DecidableEq.{succ u1} α] [_inst_4 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x s)] (n : Nat), DecidablePred.{succ u1} α (fun (_x : α) => Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) _x (HPow.hPow.{u1, 0, u1} (Set.{u1} α) Nat (Set.{u1} α) (instHPow.{u1, 0} (Set.{u1} α) Nat (Set.NPow.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))) s n))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Monoid.{u1} α] {s : Set.{u1} α} [_inst_2 : Fintype.{u1} α] [_inst_3 : DecidableEq.{succ u1} α] [_inst_4 : DecidablePred.{succ u1} α (fun (_x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) _x s)] (n : Nat), DecidablePred.{succ u1} α (fun (_x : α) => Membership.mem.{u1, u1} α (Set.{u1} α) (Set.instMembershipSet.{u1} α) _x (HPow.hPow.{u1, 0, u1} (Set.{u1} α) Nat (Set.{u1} α) (instHPow.{u1, 0} (Set.{u1} α) Nat (Set.NPow.{u1} α (Monoid.toOne.{u1} α _inst_1) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_1)))) s n))
-Case conversion may be inaccurate. Consider using '#align set.decidable_mem_pow Set.decidableMemPowₓ'. -/
@[to_additive]
instance decidableMemPow [Fintype α] [DecidableEq α] [DecidablePred (· ∈ s)] (n : ℕ) :
DecidablePred (· ∈ s ^ n) := by
@@ -117,12 +99,6 @@ section SMul
variable [SMul α β] {s : Set α} {t : Set β}
-/- warning: set.finite.smul -> Set.Finite.smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] {s : Set.{u1} α} {t : Set.{u2} β}, (Set.Finite.{u1} α s) -> (Set.Finite.{u2} β t) -> (Set.Finite.{u2} β (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_1) s t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] {s : Set.{u2} α} {t : Set.{u1} β}, (Set.Finite.{u2} α s) -> (Set.Finite.{u1} β t) -> (Set.Finite.{u1} β (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_1)) s t))
-Case conversion may be inaccurate. Consider using '#align set.finite.smul Set.Finite.smulₓ'. -/
@[to_additive]
theorem Finite.smul : s.Finite → t.Finite → (s • t).Finite :=
Finite.image2 _
@@ -220,12 +196,6 @@ namespace Group
variable {G : Type _} [Group G] [Fintype G] (S : Set G)
-/- warning: group.card_pow_eq_card_pow_card_univ -> Group.card_pow_eq_card_pow_card_univ is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] [_inst_2 : Fintype.{u1} G] (S : Set.{u1} G) [_inst_3 : forall (k : Nat), DecidablePred.{succ u1} G (fun (_x : G) => Membership.Mem.{u1, u1} G (Set.{u1} G) (Set.hasMem.{u1} G) _x (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (MulOneClass.toHasOne.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S k))] (k : Nat), (LE.le.{0} Nat Nat.hasLe (Fintype.card.{u1} G _inst_2) k) -> (Eq.{1} Nat (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} G) Type.{u1} (Set.hasCoeToSort.{u1} G) (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (MulOneClass.toHasOne.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S k)) (Subtype.fintype.{u1} G (fun (x : G) => Membership.Mem.{u1, u1} G (Set.{u1} G) (Set.hasMem.{u1} G) x (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (MulOneClass.toHasOne.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S k)) (fun (a : G) => _inst_3 k a) _inst_2)) (Fintype.card.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} G) Type.{u1} (Set.hasCoeToSort.{u1} G) (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (MulOneClass.toHasOne.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S (Fintype.card.{u1} G _inst_2))) (Subtype.fintype.{u1} G (fun (x : G) => Membership.Mem.{u1, u1} G (Set.{u1} G) (Set.hasMem.{u1} G) x (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (MulOneClass.toHasOne.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S (Fintype.card.{u1} G _inst_2))) (fun (a : G) => _inst_3 (Fintype.card.{u1} G _inst_2) a) _inst_2)))
-but is expected to have type
- forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] [_inst_2 : Fintype.{u1} G] (S : Set.{u1} G) [_inst_3 : forall (k : Nat), DecidablePred.{succ u1} G (fun (_x : G) => Membership.mem.{u1, u1} G (Set.{u1} G) (Set.instMembershipSet.{u1} G) _x (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S k))] (k : Nat), (LE.le.{0} Nat instLENat (Fintype.card.{u1} G _inst_2) k) -> (Eq.{1} Nat (Fintype.card.{u1} (Set.Elem.{u1} G (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S k)) (Subtype.fintype.{u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Set.{u1} G) (Set.instMembershipSet.{u1} G) x (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S k)) (fun (a : G) => _inst_3 k a) _inst_2)) (Fintype.card.{u1} (Set.Elem.{u1} G (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S (Fintype.card.{u1} G _inst_2))) (Subtype.fintype.{u1} G (fun (x : G) => Membership.mem.{u1, u1} G (Set.{u1} G) (Set.instMembershipSet.{u1} G) x (HPow.hPow.{u1, 0, u1} (Set.{u1} G) Nat (Set.{u1} G) (instHPow.{u1, 0} (Set.{u1} G) Nat (Set.NPow.{u1} G (InvOneClass.toOne.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))))) S (Fintype.card.{u1} G _inst_2))) (fun (a : G) => _inst_3 (Fintype.card.{u1} G _inst_2) a) _inst_2)))
-Case conversion may be inaccurate. Consider using '#align group.card_pow_eq_card_pow_card_univ Group.card_pow_eq_card_pow_card_univₓ'. -/
@[to_additive]
theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k)] :
∀ k, Fintype.card G ≤ k → Fintype.card ↥(S ^ k) = Fintype.card ↥(S ^ Fintype.card G) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -106,11 +106,8 @@ Case conversion may be inaccurate. Consider using '#align set.decidable_mem_pow
instance decidableMemPow [Fintype α] [DecidableEq α] [DecidablePred (· ∈ s)] (n : ℕ) :
DecidablePred (· ∈ s ^ n) := by
induction' n with n ih
- · simp_rw [pow_zero, mem_one]
- infer_instance
- · letI := ih
- rw [pow_succ]
- infer_instance
+ · simp_rw [pow_zero, mem_one]; infer_instance
+ · letI := ih; rw [pow_succ]; infer_instance
#align set.decidable_mem_pow Set.decidableMemPow
#align set.decidable_mem_nsmul Set.decidableMemNSMul
mathlib commit https://github.com/leanprover-community/mathlib/commit/172bf2812857f5e56938cc148b7a539f52f84ca9
@@ -146,11 +146,13 @@ theorem Finite.smul_set : s.Finite → (a • s).Finite :=
#align set.finite.vadd_set Set.Finite.vadd_set
-/
+#print Set.Infinite.of_smul_set /-
@[to_additive]
theorem Infinite.of_smul_set : (a • s).Infinite → s.Infinite :=
Infinite.of_image _
#align set.infinite.of_smul_set Set.Infinite.of_smul_set
#align set.infinite.of_vadd_set Set.Infinite.of_vadd_set
+-/
end HasSmulSet
@@ -172,12 +174,14 @@ section Cancel
variable [Mul α] [IsLeftCancelMul α] [IsRightCancelMul α] {s t : Set α}
+#print Set.infinite_mul /-
@[to_additive]
theorem infinite_mul : (s * t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
infinite_image2 (fun _ _ => (mul_left_injective _).InjOn _) fun _ _ =>
(mul_right_injective _).InjOn _
#align set.infinite_mul Set.infinite_mul
#align set.infinite_add Set.infinite_add
+-/
end Cancel
@@ -185,17 +189,21 @@ section Group
variable [Group α] [MulAction α β] {a : α} {s : Set β}
+#print Set.finite_smul_set /-
@[simp, to_additive]
theorem finite_smul_set : (a • s).Finite ↔ s.Finite :=
finite_image_iff <| (MulAction.injective _).InjOn _
#align set.finite_smul_set Set.finite_smul_set
#align set.finite_vadd_set Set.finite_vadd_set
+-/
+#print Set.infinite_smul_set /-
@[simp, to_additive]
theorem infinite_smul_set : (a • s).Infinite ↔ s.Infinite :=
infinite_image_iff <| (MulAction.injective _).InjOn _
#align set.infinite_smul_set Set.infinite_smul_set
#align set.infinite_vadd_set Set.infinite_vadd_set
+-/
alias finite_smul_set ↔ finite.of_smul_set _
#align set.finite.of_smul_set Set.Finite.of_smul_set
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
@@ -4,17 +4,19 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Floris van Doorn
! This file was ported from Lean 3 source module data.set.pointwise.finite
-! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
+! leanprover-community/mathlib commit c941bb9426d62e266612b6d99e6c9fc93e7a1d07
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Data.Set.Finite
import Mathbin.Data.Set.Pointwise.Smul
-/-! # Finiteness lemmas for pointwise operations on sets
+/-!
+# Finiteness lemmas for pointwise operations on sets
> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
-> Any changes to this file require a corresponding PR to mathlib4.-/
+> Any changes to this file require a corresponding PR to mathlib4.
+-/
open Pointwise
@@ -144,6 +146,12 @@ theorem Finite.smul_set : s.Finite → (a • s).Finite :=
#align set.finite.vadd_set Set.Finite.vadd_set
-/
+@[to_additive]
+theorem Infinite.of_smul_set : (a • s).Infinite → s.Infinite :=
+ Infinite.of_image _
+#align set.infinite.of_smul_set Set.Infinite.of_smul_set
+#align set.infinite.of_vadd_set Set.Infinite.of_vadd_set
+
end HasSmulSet
section Vsub
@@ -160,6 +168,45 @@ theorem Finite.vsub (hs : s.Finite) (ht : t.Finite) : Set.Finite (s -ᵥ t) :=
end Vsub
+section Cancel
+
+variable [Mul α] [IsLeftCancelMul α] [IsRightCancelMul α] {s t : Set α}
+
+@[to_additive]
+theorem infinite_mul : (s * t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
+ infinite_image2 (fun _ _ => (mul_left_injective _).InjOn _) fun _ _ =>
+ (mul_right_injective _).InjOn _
+#align set.infinite_mul Set.infinite_mul
+#align set.infinite_add Set.infinite_add
+
+end Cancel
+
+section Group
+
+variable [Group α] [MulAction α β] {a : α} {s : Set β}
+
+@[simp, to_additive]
+theorem finite_smul_set : (a • s).Finite ↔ s.Finite :=
+ finite_image_iff <| (MulAction.injective _).InjOn _
+#align set.finite_smul_set Set.finite_smul_set
+#align set.finite_vadd_set Set.finite_vadd_set
+
+@[simp, to_additive]
+theorem infinite_smul_set : (a • s).Infinite ↔ s.Infinite :=
+ infinite_image_iff <| (MulAction.injective _).InjOn _
+#align set.infinite_smul_set Set.infinite_smul_set
+#align set.infinite_vadd_set Set.infinite_vadd_set
+
+alias finite_smul_set ↔ finite.of_smul_set _
+#align set.finite.of_smul_set Set.Finite.of_smul_set
+
+alias infinite_smul_set ↔ _ infinite.smul_set
+#align set.infinite.smul_set Set.Infinite.smul_set
+
+attribute [to_additive] finite.of_smul_set infinite.smul_set
+
+end Group
+
end Set
open Set
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -27,11 +27,13 @@ section One
variable [One α]
+#print Set.finite_one /-
@[simp, to_additive]
theorem finite_one : (1 : Set α).Finite :=
finite_singleton _
#align set.finite_one Set.finite_one
#align set.finite_zero Set.finite_zero
+-/
end One
mathlib commit https://github.com/leanprover-community/mathlib/commit/55d771df074d0dd020139ee1cd4b95521422df9f
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Floris van Doorn
! This file was ported from Lean 3 source module data.set.pointwise.finite
-! leanprover-community/mathlib commit 68d1483e8a718ec63219f0e227ca3f0140361086
+! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -23,6 +23,18 @@ variable {F α β γ : Type _}
namespace Set
+section One
+
+variable [One α]
+
+@[simp, to_additive]
+theorem finite_one : (1 : Set α).Finite :=
+ finite_singleton _
+#align set.finite_one Set.finite_one
+#align set.finite_zero Set.finite_zero
+
+end One
+
section InvolutiveInv
variable [InvolutiveInv α] {s : Set α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -177,9 +177,8 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
exact Subtype.ext (mul_left_cancel (subtype.ext_iff.mp hbc))
have mono : Monotone (fun n => Fintype.card ↥(S ^ n) : ℕ → ℕ) :=
monotone_nat_of_le_succ fun n => key a _ _ fun b hb => Set.mul_mem_mul ha hb
- convert
- card_pow_eq_card_pow_card_univ_aux mono (fun n => set_fintype_card_le_univ (S ^ n)) fun n h =>
- le_antisymm (mono (n + 1).le_succ) (key a⁻¹ _ _ _)
+ convert card_pow_eq_card_pow_card_univ_aux mono (fun n => set_fintype_card_le_univ (S ^ n))
+ fun n h => le_antisymm (mono (n + 1).le_succ) (key a⁻¹ _ _ _)
· simp only [[anonymous], Fintype.card_ofFinset]
replace h : {a} * S ^ n = S ^ (n + 1)
· refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -194,7 +194,7 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
fun n h ↦ le_antisymm (mono (n + 1).le_succ) (key a⁻¹ (S ^ (n + 2)) (S ^ (n + 1)) _)
replace h₂ : S ^ n * {a} = S ^ (n + 1) := by
have : Fintype (S ^ n * Set.singleton a) := by
- classical!
+ classical
apply fintypeMul
refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
· exact mul_subset_mul Set.Subset.rfl (Set.singleton_subset_iff.mpr ha)
We change the following field in the definition of an additive commutative monoid:
nsmul_succ : ∀ (n : ℕ) (x : G),
- AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+ AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x
where the latter is more natural
We adjust the definitions of ^
in monoids, groups, etc.
Originally there was a warning comment about why this natural order was preferred
use
x * npowRec n x
and notnpowRec n x * x
in the definition to make sure that definitional unfolding ofnpowRec
is blocked, to avoid deep recursion issues.
but it seems to no longer apply.
Remarks on the PR :
pow_succ
and pow_succ'
have switched their meanings.Ideal.IsPrime.mul_mem_pow
which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul
.@@ -184,24 +184,24 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
· refine' fun k hk ↦ Fintype.card_congr _
rw [empty_pow (hG.trans_le hk).ne', empty_pow (ne_of_gt hG)]
have key : ∀ (a) (s t : Set G) [Fintype s] [Fintype t],
- (∀ b : G, b ∈ s → a * b ∈ t) → Fintype.card s ≤ Fintype.card t := by
- refine' fun a s t _ _ h ↦ Fintype.card_le_of_injective (fun ⟨b, hb⟩ ↦ ⟨a * b, h b hb⟩) _
+ (∀ b : G, b ∈ s → b * a ∈ t) → Fintype.card s ≤ Fintype.card t := by
+ refine' fun a s t _ _ h ↦ Fintype.card_le_of_injective (fun ⟨b, hb⟩ ↦ ⟨b * a, h b hb⟩) _
rintro ⟨b, hb⟩ ⟨c, hc⟩ hbc
- exact Subtype.ext (mul_left_cancel (Subtype.ext_iff.mp hbc))
+ exact Subtype.ext (mul_right_cancel (Subtype.ext_iff.mp hbc))
have mono : Monotone (fun n ↦ Fintype.card (↥(S ^ n)) : ℕ → ℕ) :=
- monotone_nat_of_le_succ fun n ↦ key a _ _ fun b hb ↦ Set.mul_mem_mul ha hb
+ monotone_nat_of_le_succ fun n ↦ key a _ _ fun b hb ↦ Set.mul_mem_mul hb ha
refine' card_pow_eq_card_pow_card_univ_aux mono (fun n ↦ set_fintype_card_le_univ (S ^ n))
fun n h ↦ le_antisymm (mono (n + 1).le_succ) (key a⁻¹ (S ^ (n + 2)) (S ^ (n + 1)) _)
- replace h₂ : {a} * S ^ n = S ^ (n + 1) := by
- have : Fintype (Set.singleton a * S ^ n) := by
- classical
+ replace h₂ : S ^ n * {a} = S ^ (n + 1) := by
+ have : Fintype (S ^ n * Set.singleton a) := by
+ classical!
apply fintypeMul
refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
- · exact mul_subset_mul (Set.singleton_subset_iff.mpr ha) Set.Subset.rfl
- · convert key a (S ^ n) ({a} * S ^ n) fun b hb ↦ Set.mul_mem_mul (Set.mem_singleton a) hb
- rw [pow_succ', ← h₂, mul_assoc, ← pow_succ', h₂, singleton_mul, forall_mem_image]
+ · exact mul_subset_mul Set.Subset.rfl (Set.singleton_subset_iff.mpr ha)
+ · convert key a (S ^ n) (S ^ n * {a}) fun b hb ↦ Set.mul_mem_mul hb (Set.mem_singleton a)
+ rw [pow_succ', ← h₂, ← mul_assoc, ← pow_succ', h₂, mul_singleton, forall_mem_image]
intro x hx
- rwa [inv_mul_cancel_left]
+ rwa [mul_inv_cancel_right]
#align group.card_pow_eq_card_pow_card_univ Group.card_pow_eq_card_pow_card_univ
#align add_group.card_nsmul_eq_card_nsmul_card_univ AddGroup.card_nsmul_eq_card_nsmul_card_univ
@@ -194,7 +194,7 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
fun n h ↦ le_antisymm (mono (n + 1).le_succ) (key a⁻¹ (S ^ (n + 2)) (S ^ (n + 1)) _)
replace h₂ : {a} * S ^ n = S ^ (n + 1) := by
have : Fintype (Set.singleton a * S ^ n) := by
- classical!
+ classical
apply fintypeMul
refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
· exact mul_subset_mul (Set.singleton_subset_iff.mpr ha) Set.Subset.rfl
ball
and bex
from lemma names (#10816)
ball
for "bounded forall" and bex
for "bounded exists" are from experience very confusing abbreviations. This PR renames them to forall_mem
and exists_mem
in the few Set
lemma names that mention them.
Also deprecate ball_image_of_ball
, mem_image_elim
, mem_image_elim_on
since those lemmas are duplicates of the renamed lemmas (apart from argument order and implicitness, which I am also fixing by making the binder in the RHS of forall_mem_image
semi-implicit), have obscure names and are completely unused.
@@ -199,7 +199,7 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
· exact mul_subset_mul (Set.singleton_subset_iff.mpr ha) Set.Subset.rfl
· convert key a (S ^ n) ({a} * S ^ n) fun b hb ↦ Set.mul_mem_mul (Set.mem_singleton a) hb
- rw [pow_succ', ← h₂, mul_assoc, ← pow_succ', h₂, singleton_mul, ball_image_iff]
+ rw [pow_succ', ← h₂, mul_assoc, ← pow_succ', h₂, singleton_mul, forall_mem_image]
intro x hx
rwa [inv_mul_cancel_left]
#align group.card_pow_eq_card_pow_card_univ Group.card_pow_eq_card_pow_card_univ
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -192,8 +192,8 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
monotone_nat_of_le_succ fun n ↦ key a _ _ fun b hb ↦ Set.mul_mem_mul ha hb
refine' card_pow_eq_card_pow_card_univ_aux mono (fun n ↦ set_fintype_card_le_univ (S ^ n))
fun n h ↦ le_antisymm (mono (n + 1).le_succ) (key a⁻¹ (S ^ (n + 2)) (S ^ (n + 1)) _)
- replace h₂ : {a} * S ^ n = S ^ (n + 1)
- · have : Fintype (Set.singleton a * S ^ n) := by
+ replace h₂ : {a} * S ^ n = S ^ (n + 1) := by
+ have : Fintype (Set.singleton a * S ^ n) := by
classical!
apply fintypeMul
refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
@@ -179,11 +179,10 @@ variable {G : Type*} [Group G] [Fintype G] (S : Set G)
@[to_additive]
theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k)] :
∀ k, Fintype.card G ≤ k → Fintype.card (↥(S ^ k)) = Fintype.card (↥(S ^ Fintype.card G)) := by
- have hG : 0 < Fintype.card G := Fintype.card_pos_iff.mpr ⟨1⟩
- by_cases hS : S = ∅
+ have hG : 0 < Fintype.card G := Fintype.card_pos
+ rcases S.eq_empty_or_nonempty with (rfl | ⟨a, ha⟩)
· refine' fun k hk ↦ Fintype.card_congr _
- rw [hS, empty_pow (ne_of_gt (lt_of_lt_of_le hG hk)), empty_pow (ne_of_gt hG)]
- obtain ⟨a, ha⟩ := Set.nonempty_iff_ne_empty.2 hS
+ rw [empty_pow (hG.trans_le hk).ne', empty_pow (ne_of_gt hG)]
have key : ∀ (a) (s t : Set G) [Fintype s] [Fintype t],
(∀ b : G, b ∈ s → a * b ∈ t) → Fintype.card s ≤ Fintype.card t := by
refine' fun a s t _ _ h ↦ Fintype.card_le_of_injective (fun ⟨b, hb⟩ ↦ ⟨a * b, h b hb⟩) _
@@ -200,9 +199,9 @@ theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k
refine' Set.eq_of_subset_of_card_le _ (le_trans (ge_of_eq h) _)
· exact mul_subset_mul (Set.singleton_subset_iff.mpr ha) Set.Subset.rfl
· convert key a (S ^ n) ({a} * S ^ n) fun b hb ↦ Set.mul_mem_mul (Set.mem_singleton a) hb
- rw [pow_succ', ← h₂, mul_assoc, ← pow_succ', h₂]
- rintro _ ⟨b, c, hb, hc, rfl⟩
- rwa [Set.mem_singleton_iff.mp hb, inv_mul_cancel_left]
+ rw [pow_succ', ← h₂, mul_assoc, ← pow_succ', h₂, singleton_mul, ball_image_iff]
+ intro x hx
+ rwa [inv_mul_cancel_left]
#align group.card_pow_eq_card_pow_card_univ Group.card_pow_eq_card_pow_card_univ
#align add_group.card_nsmul_eq_card_nsmul_card_univ AddGroup.card_nsmul_eq_card_nsmul_card_univ
@@ -135,6 +135,11 @@ theorem infinite_mul : (s * t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infi
#align set.infinite_mul Set.infinite_mul
#align set.infinite_add Set.infinite_add
+@[to_additive]
+lemma finite_mul : (s * t).Finite ↔ s.Finite ∧ t.Finite ∨ s = ∅ ∨ t = ∅ :=
+ finite_image2 (fun _ _ ↦ (mul_left_injective _).injOn _)
+ fun _ _ ↦ (mul_right_injective _).injOn _
+
end Cancel
section Group
Nsmul
-> NSMul
, Zpow
-> ZPow
, etc (#9067)
Normalising to naming convention rule number 6.
@@ -96,7 +96,7 @@ theorem Finite.smul : s.Finite → t.Finite → (s • t).Finite :=
end SMul
-section HasSmulSet
+section HasSMulSet
variable [SMul α β] {s : Set β} {a : α}
@@ -112,7 +112,7 @@ theorem Infinite.of_smul_set : (a • s).Infinite → s.Infinite :=
#align set.infinite.of_smul_set Set.Infinite.of_smul_set
#align set.infinite.of_vadd_set Set.Infinite.of_vadd_set
-end HasSmulSet
+end HasSMulSet
section Vsub
@@ -153,10 +153,10 @@ theorem infinite_smul_set : (a • s).Infinite ↔ s.Infinite :=
#align set.infinite_smul_set Set.infinite_smul_set
#align set.infinite_vadd_set Set.infinite_vadd_set
-alias finite_smul_set ↔ Finite.of_smul_set _
+alias ⟨Finite.of_smul_set, _⟩ := finite_smul_set
#align set.finite.of_smul_set Set.Finite.of_smul_set
-alias infinite_smul_set ↔ _ Infinite.smul_set
+alias ⟨_, Infinite.smul_set⟩ := infinite_smul_set
#align set.infinite.smul_set Set.Infinite.smul_set
attribute [to_additive] Finite.of_smul_set Infinite.smul_set
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -13,7 +13,7 @@ import Mathlib.Data.Set.Pointwise.SMul
open Pointwise
-variable {F α β γ : Type _}
+variable {F α β γ : Type*}
namespace Set
@@ -169,7 +169,7 @@ open Set
namespace Group
-variable {G : Type _} [Group G] [Fintype G] (S : Set G)
+variable {G : Type*} [Group G] [Fintype G] (S : Set G)
@[to_additive]
theorem card_pow_eq_card_pow_card_univ [∀ k : ℕ, DecidablePred (· ∈ S ^ k)] :
@@ -2,15 +2,12 @@
Copyright (c) 2019 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Floris van Doorn
-
-! This file was ported from Lean 3 source module data.set.pointwise.finite
-! leanprover-community/mathlib commit c941bb9426d62e266612b6d99e6c9fc93e7a1d07
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Set.Finite
import Mathlib.Data.Set.Pointwise.SMul
+#align_import data.set.pointwise.finite from "leanprover-community/mathlib"@"c941bb9426d62e266612b6d99e6c9fc93e7a1d07"
+
/-! # Finiteness lemmas for pointwise operations on sets -/
s ×ˢ t
is finite (#3214)
Match https://github.com/leanprover-community/mathlib/pull/18674
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Floris van Doorn
! This file was ported from Lean 3 source module data.set.pointwise.finite
-! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
+! leanprover-community/mathlib commit c941bb9426d62e266612b6d99e6c9fc93e7a1d07
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -109,6 +109,12 @@ theorem Finite.smul_set : s.Finite → (a • s).Finite :=
#align set.finite.smul_set Set.Finite.smul_set
#align set.finite.vadd_set Set.Finite.vadd_set
+@[to_additive]
+theorem Infinite.of_smul_set : (a • s).Infinite → s.Infinite :=
+ Infinite.of_image _
+#align set.infinite.of_smul_set Set.Infinite.of_smul_set
+#align set.infinite.of_vadd_set Set.Infinite.of_vadd_set
+
end HasSmulSet
section Vsub
@@ -121,6 +127,45 @@ theorem Finite.vsub (hs : s.Finite) (ht : t.Finite) : Set.Finite (s -ᵥ t) :=
end Vsub
+section Cancel
+
+variable [Mul α] [IsLeftCancelMul α] [IsRightCancelMul α] {s t : Set α}
+
+@[to_additive]
+theorem infinite_mul : (s * t).Infinite ↔ s.Infinite ∧ t.Nonempty ∨ t.Infinite ∧ s.Nonempty :=
+ infinite_image2 (fun _ _ => (mul_left_injective _).injOn _) fun _ _ =>
+ (mul_right_injective _).injOn _
+#align set.infinite_mul Set.infinite_mul
+#align set.infinite_add Set.infinite_add
+
+end Cancel
+
+section Group
+
+variable [Group α] [MulAction α β] {a : α} {s : Set β}
+
+@[to_additive (attr := simp)]
+theorem finite_smul_set : (a • s).Finite ↔ s.Finite :=
+ finite_image_iff <| (MulAction.injective _).injOn _
+#align set.finite_smul_set Set.finite_smul_set
+#align set.finite_vadd_set Set.finite_vadd_set
+
+@[to_additive (attr := simp)]
+theorem infinite_smul_set : (a • s).Infinite ↔ s.Infinite :=
+ infinite_image_iff <| (MulAction.injective _).injOn _
+#align set.infinite_smul_set Set.infinite_smul_set
+#align set.infinite_vadd_set Set.infinite_vadd_set
+
+alias finite_smul_set ↔ Finite.of_smul_set _
+#align set.finite.of_smul_set Set.Finite.of_smul_set
+
+alias infinite_smul_set ↔ _ Infinite.smul_set
+#align set.infinite.smul_set Set.Infinite.smul_set
+
+attribute [to_additive] Finite.of_smul_set Infinite.smul_set
+
+end Group
+
end Set
open Set
s ∩ t * s ∪ t ⊆ s * t
(#1619)
Match https://github.com/leanprover-community/mathlib/pull/17961
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Floris van Doorn
! This file was ported from Lean 3 source module data.set.pointwise.finite
-! leanprover-community/mathlib commit 0a0ec35061ed9960bf0e7ffb0335f44447b58977
+! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -20,6 +20,18 @@ variable {F α β γ : Type _}
namespace Set
+section One
+
+variable [One α]
+
+@[to_additive (attr := simp)]
+theorem finite_one : (1 : Set α).Finite :=
+ finite_singleton _
+#align set.finite_one Set.finite_one
+#align set.finite_zero Set.finite_zero
+
+end One
+
section InvolutiveInv
variable [InvolutiveInv α] {s : Set α}
This PR resyncs the first 28 entries of https://leanprover-community.github.io/mathlib-port-status/out-of-sync.html after sorting by diff size.
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Floris van Doorn
! This file was ported from Lean 3 source module data.set.pointwise.finite
-! leanprover-community/mathlib commit f93c11933efbc3c2f0299e47b8ff83e9b539cbf6
+! leanprover-community/mathlib commit 0a0ec35061ed9960bf0e7ffb0335f44447b58977
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
The unported dependencies are