I'm trying to define a homomorphism between modules over a ring as a special case of abelian group homomorphisms. I'm trying to imitate the definition of abelian_group_hom in https://isabelle.in.tum.de/library/HOL/HOL-Algebra/outline.pdf (page 127), but it's not going so well.
Here's my non-working version:
locale module_hom = R?: cring + M?: module R M + N?: module R N + φ?: abelian_group_hom
for M (structure) and N (structure) +
assumes "⟦m ∈ carrier M; r ∈ carrier R⟧ ⟹ r ⊙⇩N (φ.h m) = φ.h (r ⊙⇩M m)"
Can someone help me fix this mess?
If not so sure, I usually prefer to write down all the locale arguments explicitly. The following snippet at least compiles:
locale module_hom = R?: cring R + M?: module R M + N?: module R N
+ φ:abelian_group_hom M N h
for R and M and N and h +
assumes "⟦m ∈ carrier M; r ∈ carrier R⟧ ⟹ r ⊙⇘N⇙ (h m) = h (r ⊙⇘M⇙ m)"
Thanks! What do the slanted arrows ⇘N⇙
mean, and how do they differ from ⇩N
(which was represented in the editor as an N in the subscript)?
X⇘N⇙
has a special meaning: it means the operation X
on some structure (record) N. In contrast, X⇩N
as a whole is a variable name (i.e., just like ordinary strings).
Last updated: Dec 21 2024 at 16:20 UTC