@@ -159,6 +159,15 @@ def equiv_empty (h : α → false) : α ≃ empty :=
159
159
def false_equiv_empty : false ≃ empty :=
160
160
equiv_empty _root_.id
161
161
162
+ def equiv_pempty (h : α → false) : α ≃ pempty :=
163
+ ⟨λ x, (h x).elim, λ e, e.rec _, λ x, (h x).elim, λ e, e.rec _⟩
164
+
165
+ def false_equiv_pempty : false ≃ pempty :=
166
+ equiv_pempty _root_.id
167
+
168
+ def pempty_equiv_pempty : pempty.{v} ≃ pempty.{w} :=
169
+ equiv_pempty (pempty.elim)
170
+
162
171
def empty_of_not_nonempty {α : Sort *} (h : ¬ nonempty α) : α ≃ empty :=
163
172
⟨assume a, (h ⟨a⟩).elim, assume e, e.rec_on _, assume a, (h ⟨a⟩).elim, assume e, e.rec_on _⟩
164
173
@@ -188,13 +197,13 @@ section
188
197
@[simp] def empty_arrow_equiv_unit (α : Sort *) : (empty → α) ≃ punit.{u} :=
189
198
⟨λ f, punit.star, λ u e, e.rec _, λ f, funext $ λ x, x.rec _, λ u, by cases u; refl⟩
190
199
200
+ @[simp] def pempty_arrow_equiv_unit (α : Sort *) : (pempty → α) ≃ punit.{u} :=
201
+ ⟨λ f, punit.star, λ u e, e.rec _, λ f, funext $ λ x, x.rec _, λ u, by cases u; refl⟩
202
+
191
203
@[simp] def false_arrow_equiv_unit (α : Sort *) : (false → α) ≃ punit.{u} :=
192
204
calc (false → α) ≃ (empty → α) : arrow_congr false_equiv_empty (equiv.refl _)
193
205
... ≃ punit : empty_arrow_equiv_unit _
194
206
195
- def arrow_empty_unit {α : Sort *} : (empty → α) ≃ punit.{u} :=
196
- ⟨λf, punit.star, λu e, e.rec_on _, assume f, funext $ assume e, e.rec_on _, assume u, punit_eq _ _⟩
197
-
198
207
end
199
208
200
209
@[congr] def prod_congr {α₁ β₁ α₂ β₂ : Sort *} : α₁ ≃ α₂ → β₁ ≃ β₂ → (α₁ × β₁) ≃ (α₂ × β₂)
@@ -233,6 +242,12 @@ equiv_empty (λ ⟨_, e⟩, e.rec _)
233
242
234
243
@[simp] def empty_prod (α : Sort *) : (empty × α) ≃ empty :=
235
244
equiv_empty (λ ⟨e, _⟩, e.rec _)
245
+
246
+ @[simp] def prod_pempty (α : Sort *) : (α × pempty) ≃ pempty :=
247
+ equiv_pempty (λ ⟨_, e⟩, e.rec _)
248
+
249
+ @[simp] def pempty_prod (α : Sort *) : (pempty × α) ≃ pempty :=
250
+ equiv_pempty (λ ⟨e, _⟩, e.rec _)
236
251
end
237
252
238
253
section
@@ -293,6 +308,15 @@ noncomputable def Prop_equiv_bool : Prop ≃ bool :=
293
308
@[simp] def empty_sum (α : Sort *) : (empty ⊕ α) ≃ α :=
294
309
(sum_comm _ _).trans $ sum_empty _
295
310
311
+ @[simp] def sum_pempty (α : Sort *) : (α ⊕ pempty) ≃ α :=
312
+ ⟨λ s, match s with inl a := a | inr e := pempty.rec _ e end ,
313
+ inl,
314
+ λ s, by rcases s with _ | ⟨⟨⟩⟩; refl,
315
+ λ a, rfl⟩
316
+
317
+ @[simp] def pempty_sum (α : Sort *) : (pempty ⊕ α) ≃ α :=
318
+ (sum_comm _ _).trans $ sum_pempty _
319
+
296
320
@[simp] def option_equiv_sum_unit (α : Sort *) : option α ≃ (α ⊕ punit.{u+1 }) :=
297
321
⟨λ o, match o with none := inr punit.star | some a := inl a end ,
298
322
λ s, match s with inr _ := none | inl a := some a end ,
@@ -450,6 +474,9 @@ protected def univ (α) : @univ α ≃ α :=
450
474
protected def empty (α) : (∅ : set α) ≃ empty :=
451
475
equiv_empty $ λ ⟨x, h⟩, not_mem_empty x h
452
476
477
+ protected def pempty (α) : (∅ : set α) ≃ pempty :=
478
+ equiv_pempty $ λ ⟨x, h⟩, not_mem_empty x h
479
+
453
480
protected def union {α} {s t : set α} [decidable_pred s] (H : s ∩ t = ∅) :
454
481
(s ∪ t : set α) ≃ (s ⊕ t) :=
455
482
⟨λ ⟨x, h⟩, if hs : x ∈ s then sum.inl ⟨_, hs⟩ else sum.inr ⟨_, h.resolve_left hs⟩,
0 commit comments