@@ -433,17 +433,6 @@ def sigmaAssocProd {α β : Type*} {γ : α → β → Type*} :
433433 (ab : α × β) × γ ab.1 ab.2 ≃ (a : α) × (b : β) × γ a b :=
434434 sigmaCongrLeft' (sigmaEquivProd _ _).symm |>.trans <| sigmaAssoc γ
435435
436- /-- A subtype of a sigma which pins down the base of the sigma is equivalent to
437- the respective fiber. -/
438- @[simps]
439- def sigmaSubtype {α : Type *} {β : α → Type *} (a : α) :
440- {s : Sigma β // s.1 = a} ≃ β a where
441- toFun := fun ⟨⟨_, b⟩, h⟩ => h ▸ b
442- invFun b := ⟨⟨a, b⟩, rfl⟩
443- left_inv := fun ⟨a, h⟩ ↦ by cases h; simp
444- right_inv b := by simp
445-
446-
447436section
448437attribute [local simp] Trans.trans sigmaAssoc subtypeSigmaEquiv uniqueSigma eqRec_eq_cast
449438
@@ -489,40 +478,6 @@ lemma sigmaSigmaSubtypeEq_symm_apply {α β : Type*} {γ : α → β → Type*}
489478 simp [sigmaSigmaSubtypeEq]
490479
491480end
492-
493- /-- A sigma of a sigma whose second base does not depend on the first is equivalent
494- to a sigma whose base is a product. -/
495- @[simps!]
496- def sigmaAssocProd {α β : Type *} {γ : α → β → Type *} :
497- (ab : α × β) × γ ab.1 ab.2 ≃ (a : α) × (b : β) × γ a b :=
498- sigmaCongrLeft' (sigmaEquivProd _ _).symm |>.trans <| sigmaAssoc γ
499-
500-
501- /-- A subtype of a dependent triple which pins down both bases is equivalent to the
502- respective fiber. -/
503- @ [simps! (config := {simpRhs := true })]
504- def sigmaSigmaSubtype {α : Type *} {β : α → Type *} {γ : (a : α) → β a → Type *}
505- (p : (a : α) × β a → Prop ) [uniq : Unique {ab // p ab}] (a : α) (b : β a) (h : p ⟨a, b⟩) :
506- {s : (a : α) × (b : β a) × γ a b // p ⟨s.1 , s.2 .1 ⟩} ≃ γ a b := by
507- calc {s : (a : α) × (b : β a) × γ a b // p ⟨s.1 , s.2 .1 ⟩}
508- _ ≃ _ := subtypeEquiv (p := fun ⟨a, b, c⟩ ↦ p ⟨a, b⟩) (q := (p ·.1 ))
509- (sigmaAssoc γ).symm fun s ↦ by simp [sigmaAssoc]
510- _ ≃ _ := subtypeSigmaEquiv _ _
511- _ ≃ _ := uniqueSigma (fun ab ↦ γ (Sigma.fst <| Subtype.val ab) (Sigma.snd <| Subtype.val ab))
512- _ ≃ γ a b := by rw [ ← show ⟨⟨a, b⟩, h⟩ = uniq.default from uniq.uniq _]
513-
514- /-- A specialization of `sigmaSigmaSubtype` to the case where the second base
515- does not depend on the first, and the property being checked for is simple
516- equality. Useful for e.g. hom-types. -/
517- @[simps!]
518- def sigmaSigmaSubtypeEq {α β : Type *} {γ : α → β → Type *} (a : α) (b : β) :
519- {s : (a : α) × (b : β) × γ a b // s.1 = a ∧ s.2 .1 = b} ≃ γ a b :=
520- have : Unique (@Subtype ((_ : α) × β) (fun ⟨a', b'⟩ ↦ a' = a ∧ b' = b)) := {
521- default := ⟨⟨a, b⟩, ⟨rfl, rfl⟩⟩
522- uniq := by rintro ⟨⟨a', b'⟩, ⟨rfl, rfl⟩⟩; rfl
523- }
524- sigmaSigmaSubtype (fun ⟨a', b'⟩ ↦ a' = a ∧ b' = b) a b ⟨rfl, rfl⟩
525-
526481end
527482
528483section subtypeEquivCodomain
@@ -988,12 +943,6 @@ lemma eq_conj {α α' β β' : Sort*} (ε₁ : α ≃ α') (ε₂ : β' ≃ β)
988943 (f : α → β) (f' : α' → β') : ε₂.symm ∘ f ∘ ε₁.symm = f' ↔ f = ε₂ ∘ f' ∘ ε₁ := by
989944 rw [Equiv.symm_comp_eq, Equiv.comp_symm_eq, Function.comp_assoc]
990945
991- lemma eq_conj {α α' β β' : Type *} (ε₁ : α ≃ α') (ε₂ : β' ≃ β)
992- (f : α → β) (f' : α' → β') : f = ε₂ ∘ f' ∘ ε₁ ↔ ε₂.symm ∘ f ∘ ε₁.symm = f' := by
993- constructor <;> (intro h; ext)
994- · simp [h]
995- · simp [← h]
996-
997946section BinaryOp
998947
999948variable {α₁ β₁ : Type *} (e : α₁ ≃ β₁) (f : α₁ → α₁ → α₁)
0 commit comments