@@ -129,8 +129,6 @@ lemma eq_symm_apply {α β} (e : α ≃ β) {x y} : y = e.symm x ↔ e y = x :=
129
129
130
130
@[simp] theorem symm_symm (e : α ≃ β) : e.symm.symm = e := by { cases e, refl }
131
131
132
- @[simp] theorem symm_symm_apply (e : α ≃ β) (a : α) : e.symm.symm a = e a := by { cases e, refl }
133
-
134
132
@[simp] theorem trans_refl (e : α ≃ β) : e.trans (equiv.refl β) = e := by { cases e, refl }
135
133
136
134
@[simp] theorem refl_symm : (equiv.refl α).symm = equiv.refl α := rfl
@@ -322,20 +320,20 @@ def punit_equiv_punit : punit.{v} ≃ punit.{w} :=
322
320
⟨λ _, punit.star, λ _, punit.star, λ u, by { cases u, refl }, λ u, by { cases u, reflexivity }⟩
323
321
324
322
section
325
- @[simp] def arrow_punit_equiv_punit (α : Sort *) : (α → punit.{v}) ≃ punit.{w} :=
323
+ def arrow_punit_equiv_punit (α : Sort *) : (α → punit.{v}) ≃ punit.{w} :=
326
324
⟨λ f, punit.star, λ u f, punit.star,
327
325
λ f, by { funext x, cases f x, refl }, λ u, by { cases u, reflexivity }⟩
328
326
329
- @[simp] def punit_arrow_equiv (α : Sort *) : (punit.{u} → α) ≃ α :=
327
+ def punit_arrow_equiv (α : Sort *) : (punit.{u} → α) ≃ α :=
330
328
⟨λ f, f punit.star, λ a u, a, λ f, by { funext x, cases x, refl }, λ u, rfl⟩
331
329
332
- @[simp] def empty_arrow_equiv_punit (α : Sort *) : (empty → α) ≃ punit.{u} :=
330
+ def empty_arrow_equiv_punit (α : Sort *) : (empty → α) ≃ punit.{u} :=
333
331
⟨λ f, punit.star, λ u e, e.rec _, λ f, funext $ λ x, x.rec _, λ u, by { cases u, refl }⟩
334
332
335
- @[simp] def pempty_arrow_equiv_punit (α : Sort *) : (pempty → α) ≃ punit.{u} :=
333
+ def pempty_arrow_equiv_punit (α : Sort *) : (pempty → α) ≃ punit.{u} :=
336
334
⟨λ f, punit.star, λ u e, e.rec _, λ f, funext $ λ x, x.rec _, λ u, by { cases u, refl }⟩
337
335
338
- @[simp] def false_arrow_equiv_punit (α : Sort *) : (false → α) ≃ punit.{u} :=
336
+ def false_arrow_equiv_punit (α : Sort *) : (false → α) ≃ punit.{u} :=
339
337
calc (false → α) ≃ (empty → α) : arrow_congr false_equiv_empty (equiv.refl _)
340
338
... ≃ punit : empty_arrow_equiv_punit _
341
339
@@ -350,37 +348,39 @@ end
350
348
prod_congr e₁ e₂ (a, b) = (e₁ a, e₂ b) :=
351
349
rfl
352
350
353
- @[simp] def prod_comm (α β : Sort *) : α × β ≃ β × α :=
351
+ def prod_comm (α β : Sort *) : α × β ≃ β × α :=
354
352
⟨λ p, (p.2 , p.1 ), λ p, (p.2 , p.1 ), λ⟨a, b⟩, rfl, λ⟨a, b⟩, rfl⟩
355
353
356
- @[simp] def prod_assoc (α β γ : Sort *) : (α × β) × γ ≃ α × (β × γ) :=
354
+ @[simp] lemma prod_comm_apply {α β} (a b) : prod_comm α β ⟨a, b⟩ = ⟨b, a⟩ := rfl
355
+
356
+ def prod_assoc (α β γ : Sort *) : (α × β) × γ ≃ α × (β × γ) :=
357
357
⟨λ p, ⟨p.1 .1 , ⟨p.1 .2 , p.2 ⟩⟩, λp, ⟨⟨p.1 , p.2 .1 ⟩, p.2 .2 ⟩, λ ⟨⟨a, b⟩, c⟩, rfl, λ ⟨a, ⟨b, c⟩⟩, rfl⟩
358
358
359
359
@[simp] theorem prod_assoc_apply {α β γ : Sort *} (p : (α × β) × γ) :
360
360
prod_assoc α β γ p = ⟨p.1 .1 , ⟨p.1 .2 , p.2 ⟩⟩ := rfl
361
361
362
362
section
363
- @[simp] def prod_punit (α : Sort *) : α × punit.{u+1 } ≃ α :=
363
+ def prod_punit (α : Sort *) : α × punit.{u+1 } ≃ α :=
364
364
⟨λ p, p.1 , λ a, (a, punit.star), λ ⟨_, punit.star⟩, rfl, λ a, rfl⟩
365
365
366
366
@[simp] theorem prod_punit_apply {α : Sort *} (a : α × punit.{u+1 }) : prod_punit α a = a.1 := rfl
367
367
368
- @[simp] def punit_prod (α : Sort *) : punit.{u+1 } × α ≃ α :=
368
+ def punit_prod (α : Sort *) : punit.{u+1 } × α ≃ α :=
369
369
calc punit × α ≃ α × punit : prod_comm _ _
370
370
... ≃ α : prod_punit _
371
371
372
372
@[simp] theorem punit_prod_apply {α : Sort *} (a : punit.{u+1 } × α) : punit_prod α a = a.2 := rfl
373
373
374
- @[simp] def prod_empty (α : Sort *) : α × empty ≃ empty :=
374
+ def prod_empty (α : Sort *) : α × empty ≃ empty :=
375
375
equiv_empty (λ ⟨_, e⟩, e.rec _)
376
376
377
- @[simp] def empty_prod (α : Sort *) : empty × α ≃ empty :=
377
+ def empty_prod (α : Sort *) : empty × α ≃ empty :=
378
378
equiv_empty (λ ⟨e, _⟩, e.rec _)
379
379
380
- @[simp] def prod_pempty (α : Sort *) : α × pempty ≃ pempty :=
380
+ def prod_pempty (α : Sort *) : α × pempty ≃ pempty :=
381
381
equiv_pempty (λ ⟨_, e⟩, e.rec _)
382
382
383
- @[simp] def pempty_prod (α : Sort *) : pempty × α ≃ pempty :=
383
+ def pempty_prod (α : Sort *) : pempty × α ≃ pempty :=
384
384
equiv_pempty (λ ⟨e, _⟩, e.rec _)
385
385
end
386
386
@@ -421,13 +421,17 @@ noncomputable def Prop_equiv_bool : Prop ≃ bool :=
421
421
⟨λ p, @to_bool p (classical.prop_decidable _),
422
422
λ b, b, λ p, by simp, λ b, by simp⟩
423
423
424
- @[simp] def sum_comm (α β : Sort *) : α ⊕ β ≃ β ⊕ α :=
424
+ def sum_comm (α β : Sort *) : α ⊕ β ≃ β ⊕ α :=
425
425
⟨λ s, match s with inl a := inr a | inr b := inl b end ,
426
426
λ s, match s with inl b := inr b | inr a := inl a end ,
427
427
λ s, by cases s; refl,
428
428
λ s, by cases s; refl⟩
429
429
430
- @[simp] def sum_assoc (α β γ : Sort *) : (α ⊕ β) ⊕ γ ≃ α ⊕ (β ⊕ γ) :=
430
+ @[simp] lemma sum_comm_apply_inl (α β) (a) : sum_comm α β (sum.inl a) = sum.inr a := rfl
431
+ @[simp] lemma sum_comm_apply_inr (α β) (b) : sum_comm α β (sum.inr b) = sum.inl b := rfl
432
+ @[simp] lemma sum_comm_symm (α β) : (sum_comm α β).symm = sum_comm β α := by ext x; cases x; refl
433
+
434
+ def sum_assoc (α β γ : Sort *) : (α ⊕ β) ⊕ γ ≃ α ⊕ (β ⊕ γ) :=
431
435
⟨λ s, match s with inl (inl a) := inl a | inl (inr b) := inr (inl b) | inr c := inr (inr c) end ,
432
436
λ s, match s with inl a := inl (inl a) | inr (inl b) := inl (inr b) | inr (inr c) := inr c end ,
433
437
λ s, by rcases s with ⟨_ | _⟩ | _; refl,
@@ -437,30 +441,42 @@ noncomputable def Prop_equiv_bool : Prop ≃ bool :=
437
441
@[simp] theorem sum_assoc_apply_in2 {α β γ} (b) : sum_assoc α β γ (inl (inr b)) = inr (inl b) := rfl
438
442
@[simp] theorem sum_assoc_apply_in3 {α β γ} (c) : sum_assoc α β γ (inr c) = inr (inr c) := rfl
439
443
440
- @[simp] def sum_empty (α : Sort *) : α ⊕ empty ≃ α :=
444
+ def sum_empty (α : Sort *) : α ⊕ empty ≃ α :=
441
445
⟨λ s, match s with inl a := a | inr e := empty.rec _ e end ,
442
446
inl,
443
447
λ s, by { rcases s with _ | ⟨⟨⟩⟩, refl },
444
448
λ a, rfl⟩
445
449
446
- @[simp] def empty_sum (α : Sort *) : empty ⊕ α ≃ α :=
450
+ @[simp] lemma sum_empty_apply_inl {α} (a) : sum_empty α (sum.inl a) = a := rfl
451
+
452
+ def empty_sum (α : Sort *) : empty ⊕ α ≃ α :=
447
453
(sum_comm _ _).trans $ sum_empty _
448
454
449
- @[simp] def sum_pempty (α : Sort *) : α ⊕ pempty ≃ α :=
455
+ @[simp] lemma empty_sum_apply_inr {α} (a) : empty_sum α (sum.inr a) = a := rfl
456
+
457
+ def sum_pempty (α : Sort *) : α ⊕ pempty ≃ α :=
450
458
⟨λ s, match s with inl a := a | inr e := pempty.rec _ e end ,
451
459
inl,
452
460
λ s, by { rcases s with _ | ⟨⟨⟩⟩, refl },
453
461
λ a, rfl⟩
454
462
455
- @[simp] def pempty_sum (α : Sort *) : pempty ⊕ α ≃ α :=
463
+ @[simp] lemma sum_pempty_apply_inl {α} (a) : sum_pempty α (sum.inl a) = a := rfl
464
+
465
+ def pempty_sum (α : Sort *) : pempty ⊕ α ≃ α :=
456
466
(sum_comm _ _).trans $ sum_pempty _
457
467
458
- @[simp] def option_equiv_sum_punit (α : Sort *) : option α ≃ α ⊕ punit.{u+1 } :=
468
+ @[simp] lemma pempty_sum_apply_inr {α} (a) : pempty_sum α (sum.inr a) = a := rfl
469
+
470
+ def option_equiv_sum_punit (α : Sort *) : option α ≃ α ⊕ punit.{u+1 } :=
459
471
⟨λ o, match o with none := inr punit.star | some a := inl a end ,
460
472
λ s, match s with inr _ := none | inl a := some a end ,
461
473
λ o, by cases o; refl,
462
474
λ s, by rcases s with _ | ⟨⟨⟩⟩; refl⟩
463
475
476
+ @[simp] lemma option_equiv_sum_punit_none {α} : option_equiv_sum_punit α none = sum.inr () := rfl
477
+ @[simp] lemma option_equiv_sum_punit_some {α} (a) :
478
+ option_equiv_sum_punit α (some a) = sum.inl a := rfl
479
+
464
480
/-- The set of `x : option α` such that `is_some x` is equivalent to `α`. -/
465
481
def option_is_some_equiv (α : Type *) : {x : option α // x.is_some} ≃ α :=
466
482
{ to_fun := λ o, option.get o.2 ,
@@ -592,7 +608,7 @@ def nat_equiv_nat_sum_punit : ℕ ≃ ℕ ⊕ punit.{u+1} :=
592
608
λ n, begin cases n, repeat { refl } end ,
593
609
λ s, begin cases s with a u, { refl }, {cases u, { refl }} end ⟩
594
610
595
- @[simp] def nat_sum_punit_equiv_nat : ℕ ⊕ punit.{u+1 } ≃ ℕ :=
611
+ def nat_sum_punit_equiv_nat : ℕ ⊕ punit.{u+1 } ≃ ℕ :=
596
612
nat_equiv_nat_sum_punit.symm
597
613
598
614
def int_equiv_nat_sum_nat : ℤ ≃ ℕ ⊕ ℕ :=
0 commit comments