theory Algebra_On imports "HOL-Types_To_Sets.Linear_Algebra_On" "Jacobson_Basic_Algebra.Ring_Theory" begin
sectionβΉAbstract algebra locales over a πβΉfieldβΊβΊ textβΉ... with carrier set and some implicit operations
(only algebraic multiplication, scaling, and derived constants are not implicit).βΊ
textβΉFor full generality, one could define an algebra as a ring that is also a module
(rather than a vector space, i.e. have a (non/commutative) base ring instead of a base field).βΊ
subsectionβΉBilinearity, Jacobi identityβΊ
lemma (in module_hom_on) mem_hom: assumes"x β S1" shows"f x β S2" using scale[OF assms, of 1] m2.mem_scale[of "f x"1] m2.scale_one_on[of "f x"] oops
locale bilinear_on =
vector_space_pair_on V W scaleV scaleW +
vector_space_on X scaleX for V:: "'b::ab_group_add set"and W::"'c::ab_group_add set"and X::"'d::ab_group_add set" and scaleV::"'a::field==>'b==>'b" (infixrβΉπVβΊ75) and scaleW::"'a==>'c==>'c" (infixrβΉπWβΊ75) and scaleX::"'a==>'d==>'d" (infixrβΉπXβΊ75) + fixes f::"'b==>'c==>'d" assumes linearL: "wβW ==> linear_on V X scaleV scaleX (λv. f v w)" and linearR: "vβV ==> linear_on W X scaleW scaleX (λw. f v w)" begin
lemma linearL': "[vβV; wβW]==> f (a πV v) w = a πX (f v w)" "[vβV; v'βV; wβW]==> f (v + v') w = (f v w) + (f v' w)" using linearL unfolding linear_on_def module_hom_on_def module_hom_on_axioms_def by simp+
lemma linearR': "[vβV; wβW]==> f v (a πW w) = a πX (f v w)" "[vβV; wβW; w'βW]==> f v (w + w') = (f v w) + (f v w')" using linearR unfolding linear_on_def module_hom_on_def module_hom_on_axioms_def by simp+
lemma bilinear_zero [simp]: shows"wβW ==> f 0 w = 0""vβV ==> f v 0 = 0" using linearL'(2) m1.mem_zero linearR'(2) m2.mem_zero by fastforce+
lemma bilinear_uminus [simp]: assumes v: "vβV"and w: "wβW" shows"f (-v) w = - (f v w)""f v (-w) = - (f v w)" using v w linearL'(2) m1.mem_uminus bilinear_zero(1) ab_left_minus add_right_imp_eq apply metis using v w linearR'(2) m2.mem_uminus bilinear_zero(2) add_left_cancel add.right_inverse by metis
end
textβΉFor bilinear maps, "alternating" means the same as "skew-symmetric",
which is the same as "anti-symmetric".βΊ locale alternating_bilinear_on = bilinear_on S S S scale scale scale f for S scale f + assumes alternating: "xβS ==> f x x = 0" begin
lemma antisym: assumes"xβS""yβS" shows"(f x y) + (f y x) = 0" proof - have"f (x+y) (x+y) = (f x x) + (f x y) + (f y x) + (f y y)" using linearL'(2) linearR'(2) by (simp add: assms m1.mem_add) thus ?thesis using alternating by (simp add: assms m1.mem_add) qed
lemma antisym': assumes"xβS""yβS" shows"(f x y) = - (f y x)" using antisym[OF assms] by (simp add: eq_neg_iff_add_eq_0)
lemma antisym_uminus: assumes"xβS""yβS" shows"f (-x) y = f y x""f x (-y) = f y x" using bilinear_uminus by (metis antisym' assms)+
end
abbreviation (input) jacobi_identity_with::"'a ==> ('a==>'a==>'a) ==> ('a==>'a==>'a) ==> 'a ==> 'a ==> 'a ==> bool" where"jacobi_identity_with zero_add f_add f_mult x y z β‘ zero_add = f_add (f_add (f_mult x (f_mult y z)) (f_mult y (f_mult z x))) (f_mult z (f_mult x y))"
abbreviation (input) jacobi_identity::"('a::{monoid_add}==>'a==>'a) ==> 'a ==> 'a ==> 'a ==> bool" where"jacobi_identity f_mult x y z β‘ jacobi_identity_with 0 (+) f_mult x y z"
lemma (in module_hom_on) mapsto_zero: "f 0 = 0" using add m1.mem_zero by fastforce
lemma (in module_hom_on) mapsto_uminus: "aβS1 ==> f (-a) = - f a" by (metis add m1.mem_uminus neg_eq_iff_add_eq_0 mapsto_zero)
lemma (in module_hom_on) mapsto_closed: "aβS1 ==> f a β S2" using mapsto_zero add mapsto_uminus oops
subsectionβΉUnital and associative algebrasβΊ
locale algebra_on = bilinear_on S S S scale scale scale amult for S and scale :: "'a::field ==> 'b::ab_group_add ==> 'b" (infixrβΉ*SβΊ75) and amult (infixrβΉπβΊ74) + assumes amult_closed [simp]: "aβS ==> bβS ==> amult a b β S" begin
lemma shows distR: "[xβS; yβS; zβS]==> (x+y) π z = x π z + y π z" and distL: "[xβS; yβS; zβS]==> z π (x+y) = z π x + z π y" and scalar_compat (* [simp] *): "\<lbrakk>x\<in>S; y\<in>S\<rbrakk> \<Longrightarrow> (a *\<^sub>S x) \<Zspot> (b *\<^sub>S y) = (a*b) *\<^sub>S (x \<Zspot> y)" using algebra_on_axioms unfolding algebra_on_def bilinear_on_def bilinear_on_axioms_def
linear_on_def module_hom_on_def module_hom_on_axioms_def by (blast, blast, metis m1.mem_scale m1.scale_scale_on)
lemma scalar_compat' [simp]: shows"[xβS; yβS]==> (a *S x) π y = a *S (x π y)" and"[xβS; yβS]==> x π (a *S y) = a *S (x π y)" by (simp_all add: linearL' linearR')
end
textβΉ
Sometimes an associative algebra is defined as a ring that is also a module (over a comm. ring),
with the module and scalar multiplication being compatible, and the ring and module addition being the same.
That definition implies an associative algebra is also unital, i.e. there is a multiplicative identity;
in contrast, our definition doesn't. This is in agreement with how a πβΉ'a::ringβΊ needs no identity,
and an additional type class typ>βΉ'a::ring_1βΊ is provided (instead of the terminology of rng vs. ring).βΊ locale assoc_algebra_on = algebra_on + assumes amult_assoc: "[xβS; yβS; zβS]==> (xπy)πz = xπ(yπz)"
lemma id_neq_0_iff: "βaβS. βbβS. aβ b β· 0 β a_id" using amult_id(1) m1.mem_zero by blast
lemma id_neq_0_if: shows"aβS ==> bβS ==> aβ b ==> 0 β a_id" and"card S β₯ 2 ==> 0 β a_id" and"infinite S ==> 0 β a_id" proof -
(* Lifted from HOL-Analysis.Linear_Algebra, which I didn't want to import for one lemma. *) have ex_card: "βSβA. card S = n" if"n β€ card A" for n and A::"'a set" proof (cases "finite A") case True from ex_bij_betw_nat_finite[OF this] obtain f where f: "bij_betw f {0..<card A} A" .. moreoverfrom f βΉn β€ card AβΊhave"{..< n} β {..< card A}""inj_on f {..< n}" by (auto simp: bij_betw_def intro: inj_on_subset) ultimatelyhave"f ` {..< n} β A""card (f ` {..< n}) = n" by (auto simp: bij_betw_def card_image) thenshow ?thesis by blast next case False withβΉn β€ card AβΊshow ?thesis by force qed
show"aβS ==> bβS ==> aβ b ==> 0 β a_id" using amult_id(2) linearR' m1.mem_zero m1.scale_zero_left by metis thus"card S β₯ 2 ==> 0 β a_id" by (metis amult_id(2) card_2_iff' ex_card m1.mem_zero m1.scale_zero_left scalar_compat'(2) subset_iff) thus"infinite S ==> 0 β a_id" using infinite_arbitrarily_large by (metis amult_id(2) card_2_iff' linearR'(1) m1.mem_zero m1.scale_zero_left subset_iff) qed
lemma id_neq_0_implies_elements (* [simp] *): "\<exists>a\<in>S. \<exists>b\<in>S. a\<noteq>b" if "0 \<noteq> a_id" using amult_id(1) m1.mem_zero that by blast
lemma id_neq_0_implies_card: assumes"0 β a_id" obtains"card S β₯ 2" | "infinite S" using id_neq_0_implies_elements[OF assms] unfolding numeral_2_eq_2 using card_le_Suc0_iff_eq not_less_eq_eq by blast
lemma id_unique [simp]: fixes other_id assumes"other_idβS""β§a. aβS ==> aπother_id=a β§ other_idπa=a" shows"other_id = a_id" using assms amult_id by fastforce
end
locale assoc_algebra_1_on = assoc_algebra_on + unital_algebra_on + assumes id_neq_0 [simp]: "a_id β 0" β βΉthis is as in the class βΉring_1βΊ, and merely assures βΉSβΊ has at least two elementsβΊ begin
lemma is_ring_1_axioms: shows"β§a b c. aβS ==> bβS ==> cβS ==> a π b π c = a π (b π c)" and"β§a. aβS ==> a_id π a = a" and"β§a. aβS ==> a π a_id = a" and"β§a b c. aβS ==> bβS ==> cβS ==> (a + b) π c = a π c + b π c" and"β§a b c. aβS ==> bβS ==> cβS ==> a π (b + c) = a π b + a π c" by (simp_all add: distR distL algebra_simps)
lemma inverse_unique [simp]: assumes a: "aβS""aβ 0" and x: "xβS""aπx=a_id β§ xπa=a_id" and y: "yβS""aπy=a_id β§ yπa=a_id" shows"x = y" using amult_assoc[of x a x] amult_assoc[of x a y] by (simp add: assms)
lemma inverse_unique': assumes a: "aβS""aβ 0" and inv_ex: "βxβS. aπx=a_id β§ xπa=a_id" shows"β!xβS. aπx=a_id β§ xπa=a_id" using a inv_ex inverse_unique by (metis (no_types, lifting))
end
lemma algebra_onI [intro]: fixes scale :: "'a::field ==> 'b::ab_group_add ==> 'b" (infixrβΉ*SβΊ75) and amult (infixrβΉπβΊ74) assumes"vector_space_on S scale" and distR: "β§x y z. [xβS; yβS; zβS]==> (x+y) π z = x π z + y π z" and distL: "β§x y z. [xβS; yβS; zβS]==> z π (x+y) = z π x + z π y" and scalar_compat: "β§a x y. [xβS; yβS]==> (a *S x) π y = a *S (x π y) β§ x π (a *S y) = a *S (x π y)" and closure: "β§x y. [xβS; yβS]==> x π y β S" shows"algebra_on S scale amult" unfolding algebra_on_def bilinear_on_def vector_space_pair_on_def bilinear_on_axioms_def apply (intro conjI algebra_on_axioms.intro, simp_all add: assms(1)) unfolding linear_on_def module_hom_on_def module_hom_on_axioms_def by (auto simp: assms vector_space_on.axioms)
lemma (in vector_space_on) scalar_compat_iff: fixes scale_notation (infixrβΉ*SβΊ75) and amult (infixrβΉπβΊ74) defines"scale_notation β‘ scale" assumes distR: "β§x y z. [xβS; yβS; zβS]==> (x+y) π z = x π z + y π z" and distL: "β§x y z. [xβS; yβS; zβS]==> z π (x+y) = z π x + z π y" shows"(βa. βxβS. βyβS. (a *S x) π y = a *S (x π y) β§ x π (a *S y) = a *S (x ?? y)) β· (βa b. βxβS. βyβS. (a *S x) π (b *S y) = (a*b) *S (x π y))" proof (intro iffI)
{ assume asm: "β§a b x y. xβS ==> yβS ==> a *S x π b *S y = (a * b) *S (x π y)"
{ fix a x y assume S: "xβS""yβS" have"a *S x π y = a *S (x π y)""x π a *S y = a *S (x π y)" using asm[of x y a 1] S apply (simp add: scale_notation_def) using asm[of x y 1 a] S by (simp add: scale_notation_def) }} thus"βa b. βxβS. βyβS. a *S x π b *S y = (a * b) *S (x π y) ==> βa. βxβS. βyβS. a *S x π y = a *S (x π y) β§ x π a *S y = a *S (x π y)" by blast qed (metis mem_scale scale_notation_def scale_scale_on)
lemma (in vector_space_on) algebra_onI: fixes scale_notation (infixrβΉ*SβΊ75) and amult (infixrβΉπβΊ74) defines"scale_notation β‘ scale" assumes distR: "β§x y z. [xβS; yβS; zβS]==> (x+y) π z = x π z + y π z" and distL: "β§x y z. [xβS; yβS; zβS]==> z π (x+y) = z π x + z π y" and scalar_compat: "β§a x y. [xβS; yβS]==> (a *S x) π y = a *S (x π y) β§ x π (a *S y) = a *S (x π y)" and closure: "β§x y. [xβS; yβS]==> x π y β S" shows"algebra_on S scale amult" using algebra_onI[of S scale amult] assms scale_notation_def vector_space_on_axioms by simp
subsectionβΉLie algebra (locale)βΊ
textβΉ
List syntax interferes with the standard notation for the Lie bracket,
so it can be disabled it here. Instead, we add a delimiter to the notation for Lie brackets,
which also helps with unambiguous parsing. βΊ (*unbundle no list_syntax and no list_enumeration_syntax*) (*end*)
lemma (in algebra_on) lie_algebraI: assumes alternating: "βxβS. amult x x = 0" and jacobi: "βxβS. βyβS. βzβS. jacobi_identity amult x y z" shows"lie_algebra S scale amult" apply unfold_locales using assms by auto
lemma (in vector_space_on) lie_algebraI: fixes lie_bracket :: "'b ==> 'b ==> 'b" (βΉ[_;_]βΊ74) and scale_notation (infixrβΉ*SβΊ75) defines"scale_notation β‘ scale" assumes distributivity: "β§x y z. [xβS; yβS; zβS]==> [(x+y); z] = [x; z] + [y; z] β§ [z; (x+y)] = [z; x] + [z; y]" and scalar_compatibility: "β§a x y. [xβS; yβS]==> [(a *S x); y] = a *S ([x; y]) β§ [x; (a *S y)] = a *S ([x; y])" and closure: "β§x y. [xβS; yβS]==> [x; y] β S" and alternating: "βxβS. lie_bracket x x = 0" and jacobi: "βxβS. βyβS. βzβS. jacobi_identity lie_bracket x y z" shows"lie_algebra S scale lie_bracket" using assms(1,3,6) by (auto simp: assms(2,4,5) intro!: algebra_on.lie_algebraI algebra_onI)
context lie_algebra begin
lemma jacobi_alt: assumes x: "xβg"and y: "yβg"and z: "zβg" shows"[x;[y;z]] = [[x;y];z] + [y;[x;z]]" proof - have"[x;[y;z]] = - ([y;[z;x]]) + (- ([z;[x;y]]))" using jacobi[OF assms] add_implies_diff[of "[x;[y;z]]""[y;[z;x]] + [z;[x;y]]"0] by (simp add: add.commute add.left_commute) moreoverhave"[[x;y];z] = - ([z;[x;y]])""- ([y;[z;x]]) = [y;[x;z]]" using antisym'[OF amult_closed[OF x y] z] antisym'[OF z x] by (simp_all add: assms) ultimatelyshow"[x;[y;z]] = [[x;y];z] + [y;[x;z]]"by simp qed
lemma lie_subalgebra: assumes h: "hβg""m1.subspace h"and closed: "β§x y. x βh==> y βh==> lie_bracket x y βh" shows"lie_algebra h scale lie_bracket" proof - interpreth: vector_space_on h scale apply unfold_locales apply (meson h(1) m1.scale_right_distrib_on subset_iff) apply (meson h(1) in_mono m1.scale_left_distrib_on) using h(1) m1.scale_scale_on m1.scale_one_on apply auto[2] by (simp_all add: h m1.subspace_add m1.subspace_0 m1.subspace_scale)
show ?thesis apply (intro h.lie_algebraI) using alternating h(1) jacobi linearL' linearR' by (auto simp: closed subset_iff) qed
end
subsectionβΉDivision algebrasβΊ
abbreviation (in algebra_on) "is_left_divisor x a b β‘ x β S β§ a = amult x b" abbreviation (in algebra_on) "is_right_divisor x a b β‘ x β S β§ a = amult b x"
locale div_algebra_on = algebra_on + fixes divL::"'a==>'a==>'a"(* (infix "/\<^sub>L" 74) *) and divR::"'a==>'a==>'a"(* (infix "/\<^sub>R" 74) *) assumes divL: "[aβS; bβS; bβ 0]==> is_left_divisor (divL a b) a b" "[aβS; bβS; bβ 0]==> is_left_divisor y a b ==> y = (divL a b)" and divR: "[aβS; bβS; bβ 0]==> is_right_divisor (divR a b) a b" "[aβS; bβS; bβ 0]==> is_right_divisor y a b ==> y = (divR a b)" begin textβΉ In terms of the vocabulary of division rings,
the expression termβΉa = (divL a b) π bβΊ means that termβΉdivL a bβΊ is a left divisor of termβΉaβΊ,
and conversely that termβΉaβΊ is a right multiple of termβΉdivL a bβΊ.βΊ textβΉ
For termβΉb=0βΊ, the divisiors still exist as members of the correct type (necessarily),
but they have no properties. Similarly for correctly-typed input outside the algebra.βΊ
lemma [simp]: assumes"aβS""bβS""bβ 0" shows divL': "divL a b β S""(divL a b) π b = a""βyβS. a = y π b βΆ y = divL a b" and divR': "divR a b β S""b π (divR a b) = a""βyβS. a = b π y βΆ y = divR a b" using assms divL divR by simp_all end
lemma (in algebra_on) div_algebra_onI: assumes"βaβS. βbβS. bβ 0 βΆ (β!xβS. a=bπx) β§ (β!yβS. a=yπb)" shows"div_algebra_on S scale amult (λa b. THE y. yβS β§ a=yπb) (λa b. THE x. xβS β§ a=bπx)" proof (unfold div_algebra_on_def div_algebra_on_axioms_def, intro conjI allI impI) fix a b x assume"aβS""bβS""bβ 0" have exL: "β!xβS. a=xπb"by (simp add: βΉa β SβΊβΉb β SβΊβΉb β 0βΊ assms) from theI'[OF this] show L: "(THE y. y β S β§ a = y π b) β S""a = (THE y. y β S β§ a = y π b) π b" by simp+ have exR: "β!xβS. a=bπx"by (simp add: βΉa β SβΊβΉb β SβΊβΉb β 0βΊ assms) from theI'[OF this] show R: "(THE x. x β S β§ a = b π x) β S""a = b π (THE x. x β S β§ a = b π x)" by simp+
{ assume"x β S β§ a = x π b" thus"x = (THE y. y β S β§ a = y π b)"using L exL by auto
} { assume"x β S β§ a = b π x" thus"x = (THE x. x β S β§ a = b π x)"using R exR by auto
} qed (simp add: algebra_on_axioms)
lemma (in assoc_algebra_1_on) div_algebra_onI': fixes ainv adivL adivR defines"ainv a β‘ (THE x. xβS β§ a_id=xπa β§ a_id=aπx)" and"adivL b a β‘ b π (ainv a)" and"adivR b a β‘ (ainv a) π b" assumes"βaβS. aβ 0 βΆ (βxβS. a_id=xπa β§ a_id=aπx)" shows"div_algebra_on S scale amult adivL adivR" proof (unfold_locales) fix a b assume asm: "a β S""b β S""b β 0" have inv_ex: "β!xβS. a_id=xπb β§ a_id=bπx" using assms(4) inverse_unique' asm(2,3) by metis let ?a = "THE x. x β S β§ a_id = x π b β§ a_id = b π x" from theI'[OF inv_ex] show1: "adivR a b β S β§ a = b π adivR a b" unfolding adivR_def ainv_def apply (intro conjI) using asm(1) apply simp using amult_assoc amult_id(2) asm(1,2) is_ring_1_axioms(2) by (metis (no_types, lifting)) from theI'[OF inv_ex] show2: "adivL a b β S β§ a = adivL a b π b" unfolding adivL_def ainv_def apply (intro conjI) apply (simp add: asm(1)) using amult_assoc asm(1,2) is_ring_1_axioms(3) by presburger
{ fix y assume"y β S β§ a = y π b" thus"y = adivL a b" by (metis inv_ex 2 amult_assoc asm(2) amult_id(2))
} { fix y assume"y β S β§ a = b π y" thus"y = adivR a b" by (metis 1 amult_assoc asm(2) inv_ex is_ring_1_axioms(2)) } qed
lemma (in assoc_algebra_on) div_algebra_on_imp_inverse: assumes"div_algebra_on S scale amult divL divR""card S β₯ 2 β¨ infinite S" shows"βa_idβS. (βaβS. aπa_id=a β§ a_idπa=a) β§ (βaβS. aβ 0 βΆ divL a_id a = divR a_id a)" proof - obtain x where"xβ 0""xβS" using assms(2) unfolding numeral_2_eq_2 by (metis card_1_singleton_iff card_gt_0_iff card_le_Suc0_iff_eq insertI1 not_less_eq_eq
rev_finite_subset subsetI zero_less_Suc) let ?id = "divL x x" show ?thesis proof (intro bexI conjI ballI impI) show1: "?id β S" using assms unfolding div_algebra_on_def div_algebra_on_axioms_def usingβΉx β SβΊβΉx β 0βΊby blast fix a assume"aβS" show2: "a π ?id = a" by (smt (verit) 1βΉaβSβΊβΉxβSβΊβΉxβ 0βΊ amult_assoc amult_closed assms(1) div_algebra_on.divL) show3: "?id π a = a" by (smt (verit) βΉaβSβΊβΉxβSβΊβΉxβ 0βΊ amult_assoc assms(1) div_algebra_on.divL(1) div_algebra_on.divR') assume"aβ 0" show4: "divL ?id a = divR ?id a" by (smt (verit) 13βΉaβSβΊβΉaβ 0βΊ amult_assoc amult_closed assms(1) div_algebra_on.divL div_algebra_on.divR(2)) qed qed
lemma (in assoc_algebra_on) assoc_div_algebra_on_iff: assumes"card S β₯ 2 β¨ infinite S" shows"(βdivL divR. div_algebra_on S scale amult divL divR) β· (βid. unital_algebra_on S scale amult id β§ (βaβS. aβ 0 βΆ (βxβS. aπx=id β§ xπa=id)))" proof (intro iffI) assume"βid. unital_algebra_on S (*S) (π) id β§ (βaβS. a β 0 βΆ (βxβS. a π x = idβ§ x π a = id))" thenobtain id where id: "idβS""βaβS. aπid=a β§ idπa=a"and inv: "βaβS. aβ 0 βΆ (βxβS. aπx=id β§ xπa=id)" using unital_algebra_on.amult_id by blast thenhave unital: "unital_algebra_on S scale amult id" by (unfold_locales, simp_all) thenhave assoc_alg: "assoc_algebra_1_on S scale amult id" unfolding assoc_algebra_1_on_def assoc_algebra_1_on_axioms_def using assms unital_algebra_on.id_neq_0_if(2,3) assoc_algebra_on_axioms by blast show"βdivL divR. div_algebra_on S (*S) (π) divL divR" using assoc_algebra_1_on.div_algebra_onI'[OF assoc_alg] inv by fastforce next assume"βdivL divR. div_algebra_on S (*S) (π) divL divR" thenobtain divL divR where div_alg: "div_algebra_on S (*S) (π) divL divR"by blast show"βid. unital_algebra_on S (*S) (π) id β§ (βaβS. a β 0 βΆ (βxβS. a π x = id β§ x π a = id))" using div_algebra_on_imp_inverse[OF div_alg assms] unital_algebra_on_axioms.intro assoc_algebra_on_axioms unfolding unital_algebra_on_def unital_algebra_on_axioms_def assoc_algebra_on_def by (smt (verit) div_alg div_algebra_on.divL(1) div_algebra_on.divR(1)) qed
locale assoc_div_algebra_on =
assoc_algebra_1_on S scale amult a_id +
div_algebra_on S scale amult "λa b. amult a (a_inv b)""λa b. amult (a_inv b) a" for S and scale :: "'a::field ==> 'b::ab_group_add ==> 'b" (infixrβΉ*SβΊ75) and amult :: "'b==>'b==>'b" (infixrβΉπβΊ74) and a_id :: 'b(βΉ1βΊ) and a_inv :: "'b==>'b"(* (\<open>_\<^sup>\<Zspot>\<close> 73) *) begin textβΉ
The definition πβΉassoc_div_algebra_onβΊ is justified by @{thm assoc_div_algebra_on_iff} above:
If we have an associative algebra already, the only way it can be a division algebra
is to be unital as well. Since now left and right divisors can be defined through
multiplicative inverses, we take only the inverse as a locale parameter, and construct
the divisors.
The only case we miss here (due to the requirement termβΉa_idβ 0βΊ) is the trivial algebra,
which contains only the zero element (which acts as identity as well). This is for compatibility
with the standard Isabelle/HOL type classes, which are subclasses of πβΉzero_neq_oneβΊ. βΊ
abbreviation (input) divL :: "'b==>'b==>'b" where"divL a b β‘ amult a (a_inv b)"
abbreviation (input) divR :: "'b==>'b==>'b" where"divR a b β‘ amult (a_inv b) a"
lemma div_self_eq_id: assumes"aβS""aβ 0" shows"divL a a = a_id" and"divR a a = a_id" apply (metis amult_id(1,3) assms divL'(3)) by (metis amult_id(1,2) assms divR'(3))
end
locale finite_dimensional_assoc_div_algebra_on =
assoc_div_algebra_on S scale amult a_id a_inv +
finite_dimensional_vector_space_on S scale basis for S :: βΉ'b::ab_group_add setβΊ and scale :: βΉ'a::field ==> 'b ==> 'bβΊ (infixrβΉ*SβΊ75) and amult :: βΉ'b==>'b==>'bβΊ (infixrβΉπβΊ74) and a_id :: βΉ'bβΊ (βΉ1βΊ) and a_inv :: βΉ'b==>'bβΊ(*(\<open>_\<^sup>\<Zspot>\<close> 73)*) and basis :: βΉ'b setβΊ
lemma (in assoc_div_algebra_on) finite_dimensional_assoc_div_algebra_onI [intro]: fixes basis :: "'b set" assumes finite_Basis: "finite basis" and independent_Basis: "Β¬ m1.dependent basis" and span_Basis: "m1.span basis = S" and basis_subset: "basis β S" shows"finite_dimensional_assoc_div_algebra_on S scale amult a_id a_inv basis" by (unfold_locales, simp_all add: assms)
end
Messung V0.5 in Prozent
Β€ Dauer der Verarbeitung: 0.6 Sekunden
(vorverarbeitet am 2026-06-10)
Β€
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfΓ€ltig zusammengestellt. Es wird jedoch weder VollstΓ€ndigkeit, noch Richtigkeit,
noch QualitΓ€t der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.