Skip to content

Commit 4bf8505

Browse files
committed

File tree

1 file changed

+102
-7
lines changed

1 file changed

+102
-7
lines changed

Mathlib/Data/Set/Semiring.lean

Lines changed: 102 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Floris van Doorn
55
66
! This file was ported from Lean 3 source module data.set.semiring
7-
! leanprover-community/mathlib commit 9003f28797c0664a49e4179487267c494477d853
7+
! leanprover-community/mathlib commit 27b54c47c3137250a521aa64e9f1db90be5f6a26
88
! Please do not edit these lines, except to modify the commit id
99
! if you have ported upstream changes.
1010
-/
11+
import Mathlib.Algebra.Order.Kleene
1112
import Mathlib.Data.Set.Pointwise.SMul
1213

1314
/-!
@@ -53,6 +54,10 @@ protected def down : SetSemiring α ≃ Set α :=
5354
Equiv.refl _
5455
#align set_semiring.down SetSemiring.down
5556

57+
--Porting note: new, since dot notation doesn't work
58+
open SetSemiring (down)
59+
open Set (up)
60+
5661
--Porting note: dot notation no longer works
5762
@[simp]
5863
protected theorem down_up (s : Set α) : SetSemiring.down (Set.up s) = s :=
@@ -97,6 +102,34 @@ instance : AddCommMonoid (SetSemiring α) where
97102
add_zero := union_empty
98103
add_comm := union_comm
99104

105+
theorem zero_def : (0 : SetSemiring α) = Set.up ∅ :=
106+
rfl
107+
#align set_semiring.zero_def SetSemiring.zero_def
108+
109+
@[simp]
110+
theorem down_zero : down (0 : SetSemiring α) = ∅ :=
111+
rfl
112+
#align set_semiring.down_zero SetSemiring.down_zero
113+
114+
@[simp]
115+
theorem _root_.Set.up_empty : Set.up (∅ : Set α) = 0 :=
116+
rfl
117+
#align set.up_empty Set.up_empty
118+
119+
theorem add_def (s t : SetSemiring α) : s + t = up (down s ∪ down t) :=
120+
rfl
121+
#align set_semiring.add_def SetSemiring.add_def
122+
123+
@[simp]
124+
theorem down_add (s t : SetSemiring α) : down (s + t) = down s ∪ down t :=
125+
rfl
126+
#align set_semiring.down_add SetSemiring.down_add
127+
128+
@[simp]
129+
theorem _root_.Set.up_union (s t : Set α) : up (s ∪ t) = up s + up t :=
130+
rfl
131+
#align set.up_union Set.up_union
132+
100133
/- Since addition on `SetSemiring` is commutative (it is set union), there is no need
101134
to also have the instance `CovariantClass (SetSemiring α) (SetSemiring α) (swap (+)) (≤)`. -/
102135
instance covariantClass_add : CovariantClass (SetSemiring α) (SetSemiring α) (· + ·) (· ≤ ·) :=
@@ -116,6 +149,21 @@ instance : NonUnitalNonAssocSemiring (SetSemiring α) :=
116149
left_distrib := fun _ _ _ => mul_union
117150
right_distrib := fun _ _ _ => union_mul }
118151

152+
-- TODO: port
153+
theorem mul_def (s t : SetSemiring α) : s * t = up (down s * down t) :=
154+
rfl
155+
#align set_semiring.mul_def SetSemiring.mul_def
156+
157+
@[simp]
158+
theorem down_mul (s t : SetSemiring α) : down (s * t) = down s * down t :=
159+
rfl
160+
#align set_semiring.down_mul SetSemiring.down_mul
161+
162+
@[simp]
163+
theorem _root_.Set.up_mul (s t : Set α) : up (s * t) = up s * up t :=
164+
rfl
165+
#align set.up_mul Set.up_mul
166+
119167
instance : NoZeroDivisors (SetSemiring α) :=
120168
fun {a b} ab =>
121169
a.eq_empty_or_nonempty.imp_right fun ha =>
@@ -134,23 +182,51 @@ instance covariantClass_mul_right :
134182

135183
end Mul
136184

137-
-- Porting note: this was `one := 1`
185+
186+
section One
187+
188+
variable [One α]
189+
190+
-- porting note: noncomputable?
191+
noncomputable instance : One (SetSemiring α) where one := Set.up (1 : Set α)
192+
193+
theorem one_def : (1 : SetSemiring α) = Set.up 1 :=
194+
rfl
195+
#align set_semiring.one_def SetSemiring.one_def
196+
197+
@[simp]
198+
theorem down_one : down (1 : SetSemiring α) = 1 :=
199+
rfl
200+
#align set_semiring.down_one SetSemiring.down_one
201+
202+
@[simp]
203+
theorem _root_.Set.up_one : up (1 : Set α) = 1 :=
204+
rfl
205+
#align set.up_one Set.up_one
206+
207+
end One
208+
138209
instance [MulOneClass α] : NonAssocSemiring (SetSemiring α) :=
139210
{ (inferInstance : NonUnitalNonAssocSemiring (SetSemiring α)),
140211
Set.mulOneClass with
141-
one := Set.up ({1} : Set α)
212+
one := 1
142213
mul := (· * ·) }
143214

144215
instance [Semigroup α] : NonUnitalSemiring (SetSemiring α) :=
145216
{ (inferInstance : NonUnitalNonAssocSemiring (SetSemiring α)), Set.semigroup with }
146217

147-
instance [Monoid α] : Semiring (SetSemiring α) :=
218+
instance [Monoid α] : IdemSemiring (SetSemiring α) :=
148219
{ (inferInstance : NonAssocSemiring (SetSemiring α)),
149-
(inferInstance : NonUnitalSemiring (SetSemiring α)) with }
220+
(inferInstance : NonUnitalSemiring (SetSemiring α)),
221+
(inferInstance : CompleteBooleanAlgebra (Set α)) with }
150222

151223
instance [CommSemigroup α] : NonUnitalCommSemiring (SetSemiring α) :=
152224
{ (inferInstance : NonUnitalSemiring (SetSemiring α)), Set.commSemigroup with }
153225

226+
instance [CommMonoid α] : IdemCommSemiring (SetSemiring α) :=
227+
{ (inferInstance : IdemSemiring (SetSemiring α)),
228+
(inferInstance : CommMonoid (Set α)) with }
229+
154230
instance [CommMonoid α] : CommMonoid (SetSemiring α) :=
155231
{ (inferInstance : Monoid (SetSemiring α)), Set.commSemigroup with }
156232

@@ -166,11 +242,30 @@ instance [CommMonoid α] : CanonicallyOrderedCommSemiring (SetSemiring α) :=
166242
with respect to the pointwise operations on sets. -/
167243
def imageHom [MulOneClass α] [MulOneClass β] (f : α →* β) : SetSemiring α →+* SetSemiring β
168244
where
169-
toFun := image f
245+
toFun s := up (image f (down s))
170246
map_zero' := image_empty _
171-
map_one' := by rw [image_one, map_one, singleton_one]
247+
map_one' := by
248+
dsimp only -- porting note: structures do not do this automatically any more
249+
rw [down_one, image_one, map_one, singleton_one, up_one]
172250
map_add' := image_union _
173251
map_mul' _ _ := image_mul f
174252
#align set_semiring.image_hom SetSemiring.imageHom
175253

254+
lemma imageHom_def [MulOneClass α] [MulOneClass β] (f : α →* β) (s : SetSemiring α) :
255+
imageHom f s = up (image f (down s)) :=
256+
rfl
257+
#align set_semiring.image_hom_def SetSemiring.imageHom_def
258+
259+
@[simp]
260+
lemma down_imageHom [MulOneClass α] [MulOneClass β] (f : α →* β) (s : SetSemiring α) :
261+
down (imageHom f s) = f '' down s :=
262+
rfl
263+
#align set_semiring.down_image_hom SetSemiring.down_imageHom
264+
265+
@[simp]
266+
lemma _root_.Set.up_image [MulOneClass α] [MulOneClass β] (f : α →* β) (s : Set α) :
267+
up (f '' s) = imageHom f (up s) :=
268+
rfl
269+
#align set.up_image Set.up_image
270+
176271
end SetSemiring

0 commit comments

Comments
 (0)