Skip to content

Commit

Permalink
feat(linear_algebra/multilinear/basic): add dependent version of `mul…
Browse files Browse the repository at this point in the history
…tilinear_map.dom_dom_congr_linear_equiv` (#10474)

Formalized as part of the Sphere Eversion project.
  • Loading branch information
ocfnash committed Dec 31, 2021
1 parent 9a38c19 commit c4caf0e
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/data/equiv/basic.lean
Expand Up @@ -2054,4 +2054,19 @@ lemma update_apply_equiv_apply {α β α' : Sort*} [decidable_eq α'] [decidable
update f a v (g a') = update (f ∘ g) (g.symm a) v a' :=
congr_fun (update_comp_equiv f g a v) a'

lemma Pi_congr_left'_update [decidable_eq α] [decidable_eq β]
(P : α → Sort*) (e : α ≃ β) (f : Π a, P a) (b : β) (x : P (e.symm b)) :
e.Pi_congr_left' P (update f (e.symm b) x) = update (e.Pi_congr_left' P f) b x :=
begin
ext b',
rcases eq_or_ne b' b with rfl | h,
{ simp, },
{ simp [h], },
end

lemma Pi_congr_left'_symm_update [decidable_eq α] [decidable_eq β]
(P : α → Sort*) (e : α ≃ β) (f : Π b, P (e.symm b)) (b : β) (x : P (e.symm b)) :
(e.Pi_congr_left' P).symm (update f b x) = update ((e.Pi_congr_left' P).symm f) (e.symm b) x :=
by simp [(e.Pi_congr_left' P).symm_apply_eq, Pi_congr_left'_update]

end function
37 changes: 37 additions & 0 deletions src/linear_algebra/multilinear/basic.lean
Expand Up @@ -713,6 +713,43 @@ def dom_dom_congr_linear_equiv {ι₁ ι₂} [decidable_eq ι₁] [decidable_eq
.. (dom_dom_congr_equiv σ : multilinear_map A (λ i : ι₁, M₂) M₃ ≃+
multilinear_map A (λ i : ι₂, M₂) M₃) }

/-- The dependent version of `multilinear_map.dom_dom_congr_linear_equiv`. -/
@[simps apply symm_apply]
def dom_dom_congr_linear_equiv' {ι' : Type*} [decidable_eq ι'] (σ : ι ≃ ι') :
multilinear_map R M₁ M₂ ≃ₗ[R] multilinear_map R (λ i, M₁ (σ.symm i)) M₂ :=
{ to_fun := λ f,
{ to_fun := f ∘ (σ.Pi_congr_left' M₁).symm,
map_add' := λ m i,
begin
rw ← σ.apply_symm_apply i,
intros x y,
simp only [comp_app, Pi_congr_left'_symm_update, f.map_add],
end,
map_smul' := λ m i c,
begin
rw ← σ.apply_symm_apply i,
intros x,
simp only [comp_app, Pi_congr_left'_symm_update, f.map_smul],
end, },
inv_fun := λ f,
{ to_fun := f ∘ (σ.Pi_congr_left' M₁),
map_add' := λ m i,
begin
rw ← σ.symm_apply_apply i,
intros x y,
simp only [comp_app, Pi_congr_left'_update, f.map_add],
end,
map_smul' := λ m i c,
begin
rw ← σ.symm_apply_apply i,
intros x,
simp only [comp_app, Pi_congr_left'_update, f.map_smul],
end, },
map_add' := λ f₁ f₂, by { ext, simp only [comp_app, coe_mk, add_apply], },
map_smul' := λ c f, by { ext, simp only [comp_app, coe_mk, smul_apply, ring_hom.id_apply], },
left_inv := λ f, by { ext, simp only [comp_app, coe_mk, equiv.symm_apply_apply], },
right_inv := λ f, by { ext, simp only [comp_app, coe_mk, equiv.apply_symm_apply], }, }

/-- The space of constant maps is equivalent to the space of maps that are multilinear with respect
to an empty family. -/
@[simps] def const_linear_equiv_of_is_empty [is_empty ι] : M₂ ≃ₗ[R] multilinear_map R M₁ M₂ :=
Expand Down

0 comments on commit c4caf0e

Please sign in to comment.