Zulip Chat Archive

Stream: maths

Topic: Algebras generated by a submodule


Eric Wieser (Aug 20 2021 at 08:31):

Do we have a canonical way to express (⨆ i : ℕ, ιS ^ i) = ⊤ when ιS is a submodule of generators of an algebra? I was able to prove this for clifford_algebra, exterior_algebra, and tensor_algebra, but I can't work out how to avoid copy-pasting the proof three times:

import linear_algebra.clifford_algebra.basic
import linear_algebra.dfinsupp
import algebra.algebra.subalgebra
import algebra.direct_sum_graded

open_locale direct_sum

namespace submodule
variables {R A : Type*} [comm_ring R] [semiring A] [algebra R A]

lemma to_add_submonoid_supr_nat_powers (S : submodule R A) :
  ( i : , S ^ i).to_add_submonoid =
  (direct_sum.to_semiring
    (λ i : , (S ^ i).subtype.to_add_monoid_hom) rfl (λ i j hi hj, rfl)).srange.to_add_submonoid :=
begin
  rw submodule.supr_eq_range_dfinsupp_lsum,
  exact set_like.coe_injective rfl
end

lemma supr_nat_powers_eq_top_iff (S : submodule R A) :
  ( i : , S ^ i) =  
  (direct_sum.to_semiring
    (λ i : , (S ^ i).subtype.to_add_monoid_hom) rfl (λ i j hi hj, rfl)).srange =  :=
begin
  rw submodule.supr_eq_range_dfinsupp_lsum,
  rw subsemiring.to_add_submonoid_injective.eq_iff,
  rw submodule.to_add_submonoid_injective.eq_iff,
  exact iff.rfl,
end

end submodule

namespace clifford_algebra
variables {R M : Type*} [comm_ring R] [add_comm_group M] [module R M]
variables {Q : quadratic_form R M}

lemma supr_ι_range_eq_top : ( i : , (ι Q).range ^ i) =  :=
begin
  rw [submodule.supr_nat_powers_eq_top_iff, subsemiring.eq_top_iff'],
  intro x,
  rw ring_hom.mem_srange,
  induction x using clifford_algebra.induction,
  case h_grade0 : r {
    refine direct_sum.of _ 0 _, _⟩,
    refine algebra_map _ _ r, _⟩,
    { simp only [pow_zero, submodule.mem_one, exists_apply_eq_apply], },
    rw [direct_sum.to_semiring_of],
    refl },
  case h_grade1 : m {
    refine direct_sum.of _ 1 _, _⟩,
    refine ι Q m, _⟩,
    { simp only [pow_one, linear_map.mem_range, exists_apply_eq_apply], },
    rw [direct_sum.to_semiring_of],
    refl },
  case h_add : x y hx hy {
    obtain fx, rfl := hx,
    obtain fy, rfl := hy,
    rw ring_hom.map_add,
    exact _, rfl⟩, },
  case h_mul : x y hx hy {
    obtain fx, rfl := hx,
    obtain fy, rfl := hy,
    rw ring_hom.map_mul,
    exact _, rfl⟩, },
end

end clifford_algebra

namespace exterior_algebra
variables {R M : Type*} [comm_ring R] [add_comm_monoid M] [module R M]

lemma supr_ι_range_eq_top : ( i : , (ι R : M →ₗ[_] _).range ^ i) =  :=
begin
  rw [submodule.supr_nat_powers_eq_top_iff, subsemiring.eq_top_iff'],
  intro x,
  rw ring_hom.mem_srange,
  induction x using exterior_algebra.induction,
  case h_grade0 : r {
    refine direct_sum.of _ 0 _, _⟩,
    refine algebra_map _ _ r, _⟩,
    { simp only [pow_zero, submodule.mem_one, exists_apply_eq_apply], },
    rw [direct_sum.to_semiring_of],
    refl },
  case h_grade1 : m {
    refine direct_sum.of _ 1 _, _⟩,
    refine ι R m, _⟩,
    { simp only [pow_one, linear_map.mem_range, exists_apply_eq_apply], },
    rw [direct_sum.to_semiring_of],
    refl },
  case h_add : x y hx hy {
    obtain fx, rfl := hx,
    obtain fy, rfl := hy,
    rw ring_hom.map_add,
    exact _, rfl⟩, },
  case h_mul : x y hx hy {
    obtain fx, rfl := hx,
    obtain fy, rfl := hy,
    rw ring_hom.map_mul,
    exact _, rfl⟩, },
end

end exterior_algebra

namespace tensor_algebra
variables {R M : Type*} [comm_ring R] [add_comm_monoid M] [module R M]

lemma supr_ι_range_eq_top : ( i : , (ι R : M →ₗ[_] _).range ^ i) =  :=
begin
  rw [submodule.supr_nat_powers_eq_top_iff, subsemiring.eq_top_iff'],
  intro x,
  rw ring_hom.mem_srange,
  induction x using tensor_algebra.induction,
  case h_grade0 : r {
    refine direct_sum.of _ 0 _, _⟩,
    refine algebra_map _ _ r, _⟩,
    { simp only [pow_zero, submodule.mem_one, exists_apply_eq_apply], },
    rw [direct_sum.to_semiring_of],
    refl },
  case h_grade1 : m {
    refine direct_sum.of _ 1 _, _⟩,
    refine ι R m, _⟩,
    { simp only [pow_one, linear_map.mem_range, exists_apply_eq_apply], },
    rw [direct_sum.to_semiring_of],
    refl },
  case h_add : x y hx hy {
    obtain fx, rfl := hx,
    obtain fy, rfl := hy,
    rw ring_hom.map_add,
    exact _, rfl⟩, },
  case h_mul : x y hx hy {
    obtain fx, rfl := hx,
    obtain fy, rfl := hy,
    rw ring_hom.map_mul,
    exact _, rfl⟩, },
end

end tensor_algebra

Eric Wieser (Aug 20 2021 at 20:36):

PR'd as #8781 for ease of reading, but I'm hoping for a trick to deduplicate it before considering merging


Last updated: Dec 20 2023 at 11:08 UTC