@@ -509,10 +509,13 @@ lemma span_eq_toSubmodule (s : NonUnitalSubalgebra R A) :
509
509
Submodule.span R (s : Set A) = s.toSubmodule := by
510
510
simp [SetLike.ext'_iff, Submodule.coe_span_eq_self]
511
511
512
- variable [IsScalarTower R A A] [SMulCommClass R A A]
513
- variable [NonUnitalNonAssocSemiring B] [Module R B] [IsScalarTower R B B] [SMulCommClass R B B]
512
+ variable [NonUnitalNonAssocSemiring B] [Module R B]
514
513
variable [FunLike F A B] [NonUnitalAlgHomClass F R A B]
515
514
515
+ section IsScalarTower
516
+
517
+ variable [IsScalarTower R A A] [SMulCommClass R A A]
518
+
516
519
/-- The minimal non-unital subalgebra that includes `s`. -/
517
520
def adjoin (s : Set A) : NonUnitalSubalgebra R A :=
518
521
{ Submodule.span R (NonUnitalSubsemiring.closure s : Set A) with
@@ -657,15 +660,15 @@ theorem adjoin_univ : adjoin R (Set.univ : Set A) = ⊤ :=
657
660
eq_top_iff.2 fun _x hx => subset_adjoin R hx
658
661
659
662
open NonUnitalSubalgebra in
660
- lemma _root_.NonUnitalAlgHom.map_adjoin (f : F) (s : Set A) :
661
- map f (adjoin R s) = adjoin R (f '' s) :=
663
+ lemma _root_.NonUnitalAlgHom.map_adjoin [IsScalarTower R B B] [SMulCommClass R B B]
664
+ (f : F) (s : Set A) : map f (adjoin R s) = adjoin R (f '' s) :=
662
665
Set.image_preimage.l_comm_of_u_comm (gc_map_comap f) NonUnitalAlgebra.gi.gc
663
666
NonUnitalAlgebra.gi.gc fun _t => rfl
664
667
665
668
open NonUnitalSubalgebra in
666
669
@[simp]
667
- lemma _root_.NonUnitalAlgHom.map_adjoin_singleton (f : F) (x : A) :
668
- map f (adjoin R {x}) = adjoin R {f x} := by
670
+ lemma _root_.NonUnitalAlgHom.map_adjoin_singleton [IsScalarTower R B B] [SMulCommClass R B B]
671
+ (f : F) (x : A) : map f (adjoin R {x}) = adjoin R {f x} := by
669
672
simp [NonUnitalAlgHom.map_adjoin]
670
673
671
674
variable {R A}
@@ -718,7 +721,8 @@ theorem mul_mem_sup {S T : NonUnitalSubalgebra R A} {x y : A} (hx : x ∈ S) (hy
718
721
x * y ∈ S ⊔ T :=
719
722
mul_mem (mem_sup_left hx) (mem_sup_right hy)
720
723
721
- theorem map_sup (f : F) (S T : NonUnitalSubalgebra R A) :
724
+ theorem map_sup [IsScalarTower R B B] [SMulCommClass R B B]
725
+ (f : F) (S T : NonUnitalSubalgebra R A) :
722
726
((S ⊔ T).map f : NonUnitalSubalgebra R B) = S.map f ⊔ T.map f :=
723
727
(NonUnitalSubalgebra.gc_map_comap f).l_sup
724
728
@@ -788,10 +792,6 @@ theorem coe_bot : ((⊥ : NonUnitalSubalgebra R A) : Set A) = {0} := by
788
792
theorem eq_top_iff {S : NonUnitalSubalgebra R A} : S = ⊤ ↔ ∀ x : A, x ∈ S :=
789
793
⟨fun h x => by rw [h]; exact mem_top, fun h => by ext x; exact ⟨fun _ => mem_top, fun _ => h x⟩⟩
790
794
791
- theorem range_top_iff_surjective (f : A →ₙₐ[R] B) :
792
- NonUnitalAlgHom.range f = (⊤ : NonUnitalSubalgebra R B) ↔ Function.Surjective f :=
793
- NonUnitalAlgebra.eq_top_iff
794
-
795
795
@[simp]
796
796
theorem range_id : NonUnitalAlgHom.range (NonUnitalAlgHom.id R A) = ⊤ :=
797
797
SetLike.coe_injective Set.range_id
@@ -801,17 +801,25 @@ theorem map_top (f : A →ₙₐ[R] B) : (⊤ : NonUnitalSubalgebra R A).map f =
801
801
SetLike.coe_injective Set.image_univ
802
802
803
803
@[simp]
804
- theorem map_bot (f : A →ₙₐ[R] B) : (⊥ : NonUnitalSubalgebra R A).map f = ⊥ :=
804
+ theorem map_bot [IsScalarTower R B B] [SMulCommClass R B B]
805
+ (f : A →ₙₐ[R] B) : (⊥ : NonUnitalSubalgebra R A).map f = ⊥ :=
805
806
SetLike.coe_injective <| by simp [NonUnitalAlgebra.coe_bot, NonUnitalSubalgebra.coe_map]
806
807
807
808
@[simp]
808
- theorem comap_top (f : A →ₙₐ[R] B) : (⊤ : NonUnitalSubalgebra R B).comap f = ⊤ :=
809
+ theorem comap_top [IsScalarTower R B B] [SMulCommClass R B B]
810
+ (f : A →ₙₐ[R] B) : (⊤ : NonUnitalSubalgebra R B).comap f = ⊤ :=
809
811
eq_top_iff.2 fun _ => mem_top
810
812
811
813
/-- `NonUnitalAlgHom` to `⊤ : NonUnitalSubalgebra R A`. -/
812
814
def toTop : A →ₙₐ[R] (⊤ : NonUnitalSubalgebra R A) :=
813
815
NonUnitalAlgHom.codRestrict (NonUnitalAlgHom.id R A) ⊤ fun _ => mem_top
814
816
817
+ end IsScalarTower
818
+
819
+ theorem range_top_iff_surjective [IsScalarTower R B B] [SMulCommClass R B B] (f : A →ₙₐ[R] B) :
820
+ NonUnitalAlgHom.range f = (⊤ : NonUnitalSubalgebra R B) ↔ Function.Surjective f :=
821
+ NonUnitalAlgebra.eq_top_iff
822
+
815
823
end NonUnitalAlgebra
816
824
817
825
namespace NonUnitalSubalgebra
@@ -831,9 +839,48 @@ theorem range_val : NonUnitalAlgHom.range (NonUnitalSubalgebraClass.subtype S) =
831
839
instance subsingleton_of_subsingleton [Subsingleton A] : Subsingleton (NonUnitalSubalgebra R A) :=
832
840
⟨fun B C => ext fun x => by simp only [Subsingleton.elim x 0 , zero_mem B, zero_mem C]⟩
833
841
834
- variable [IsScalarTower R A A] [SMulCommClass R A A]
835
842
variable [NonUnitalNonAssocSemiring B] [Module R B]
836
843
844
+ section Prod
845
+
846
+ variable (S₁ : NonUnitalSubalgebra R B)
847
+
848
+ /-- The product of two non-unital subalgebras is a non-unital subalgebra. -/
849
+ def prod : NonUnitalSubalgebra R (A × B) :=
850
+ { S.toNonUnitalSubsemiring.prod S₁.toNonUnitalSubsemiring with
851
+ carrier := S ×ˢ S₁
852
+ smul_mem' := fun r _x hx => ⟨SMulMemClass.smul_mem r hx.1 , SMulMemClass.smul_mem r hx.2 ⟩ }
853
+
854
+ @[simp]
855
+ theorem coe_prod : (prod S S₁ : Set (A × B)) = (S : Set A) ×ˢ S₁ :=
856
+ rfl
857
+
858
+ theorem prod_toSubmodule : (S.prod S₁).toSubmodule = S.toSubmodule.prod S₁.toSubmodule :=
859
+ rfl
860
+
861
+ @[simp]
862
+ theorem mem_prod {S : NonUnitalSubalgebra R A} {S₁ : NonUnitalSubalgebra R B} {x : A × B} :
863
+ x ∈ prod S S₁ ↔ x.1 ∈ S ∧ x.2 ∈ S₁ :=
864
+ Set.mem_prod
865
+
866
+ variable [IsScalarTower R A A] [SMulCommClass R A A] [IsScalarTower R B B] [SMulCommClass R B B]
867
+
868
+ @[simp]
869
+ theorem prod_top : (prod ⊤ ⊤ : NonUnitalSubalgebra R (A × B)) = ⊤ := by ext; simp
870
+
871
+ theorem prod_mono {S T : NonUnitalSubalgebra R A} {S₁ T₁ : NonUnitalSubalgebra R B} :
872
+ S ≤ T → S₁ ≤ T₁ → prod S S₁ ≤ prod T T₁ :=
873
+ Set.prod_mono
874
+
875
+ @[simp]
876
+ theorem prod_inf_prod {S T : NonUnitalSubalgebra R A} {S₁ T₁ : NonUnitalSubalgebra R B} :
877
+ S.prod S₁ ⊓ T.prod T₁ = (S ⊓ T).prod (S₁ ⊓ T₁) :=
878
+ SetLike.coe_injective Set.prod_inter_prod
879
+
880
+ end Prod
881
+
882
+ variable [IsScalarTower R A A] [SMulCommClass R A A]
883
+
837
884
instance _root_.NonUnitalAlgHom.subsingleton [Subsingleton (NonUnitalSubalgebra R A)] :
838
885
Subsingleton (A →ₙₐ[R] B) :=
839
886
⟨fun f g =>
@@ -880,44 +927,6 @@ theorem coe_inclusion {S T : NonUnitalSubalgebra R A} (h : S ≤ T) (s : S) :
880
927
(inclusion h s : A) = s :=
881
928
rfl
882
929
883
- section Prod
884
-
885
- variable (S₁ : NonUnitalSubalgebra R B)
886
-
887
- /-- The product of two non-unital subalgebras is a non-unital subalgebra. -/
888
- def prod : NonUnitalSubalgebra R (A × B) :=
889
- { S.toNonUnitalSubsemiring.prod S₁.toNonUnitalSubsemiring with
890
- carrier := S ×ˢ S₁
891
- smul_mem' := fun r _x hx => ⟨SMulMemClass.smul_mem r hx.1 , SMulMemClass.smul_mem r hx.2 ⟩ }
892
-
893
- @[simp]
894
- theorem coe_prod : (prod S S₁ : Set (A × B)) = (S : Set A) ×ˢ S₁ :=
895
- rfl
896
-
897
- theorem prod_toSubmodule : (S.prod S₁).toSubmodule = S.toSubmodule.prod S₁.toSubmodule :=
898
- rfl
899
-
900
- @[simp]
901
- theorem mem_prod {S : NonUnitalSubalgebra R A} {S₁ : NonUnitalSubalgebra R B} {x : A × B} :
902
- x ∈ prod S S₁ ↔ x.1 ∈ S ∧ x.2 ∈ S₁ :=
903
- Set.mem_prod
904
-
905
- variable [IsScalarTower R B B] [SMulCommClass R B B]
906
-
907
- @[simp]
908
- theorem prod_top : (prod ⊤ ⊤ : NonUnitalSubalgebra R (A × B)) = ⊤ := by ext; simp
909
-
910
- theorem prod_mono {S T : NonUnitalSubalgebra R A} {S₁ T₁ : NonUnitalSubalgebra R B} :
911
- S ≤ T → S₁ ≤ T₁ → prod S S₁ ≤ prod T T₁ :=
912
- Set.prod_mono
913
-
914
- @[simp]
915
- theorem prod_inf_prod {S T : NonUnitalSubalgebra R A} {S₁ T₁ : NonUnitalSubalgebra R B} :
916
- S.prod S₁ ⊓ T.prod T₁ = (S ⊓ T).prod (S₁ ⊓ T₁) :=
917
- SetLike.coe_injective Set.prod_inter_prod
918
-
919
- end Prod
920
-
921
930
section SuprLift
922
931
923
932
variable {ι : Type *}
0 commit comments