theory"FreeGroups" imports "HOL-Algebra.Group"
Cancelation
Generators begin
text‹
on the work in @{theory "Free-Groups.Cancelation"}, the free group is now easily defined
the set of fully canceled words with the corresponding operations. ›
subsection‹Inversion›
text‹
define the inverse of a word, we first create a helper function that inverts
single generator, and show that it is self-inverse. ›
text‹
inverse of a word is obtained by reversing the order of the generators and
each generator using @{term inv1}. Some properties of @{term inv_fg}
noted. ›
definition inv_fg :: "'a word_g_i ==> 'a word_g_i" where"inv_fg l = rev (map inv1 l)"
lemma cancelling_inf[simp]: "canceling (inv1 a) (inv1 b) = canceling a b" by(simp add: canceling_def inv1_def)
text‹Free Groups are important due to their universal property: Every map of
set of generators to another group can be extended uniquely to an
from the Free Group.›
definition insert (‹ι›) where"ι g = [(False, g)]"
lemma insert_closed: "g ∈ gens ==> ι g ∈ carrier F" by (auto simp add:insert_def free_group_def)
definition (in group) lift_gi where"lift_gi f gi = (if fst gi then inv (f (snd gi)) else f (snd gi))"
lemma (in group) lift_gi_closed: assumes cl: "f ∈ gens → carrier G" and"snd gi ∈ gens" shows"lift_gi f gi ∈ carrier G" using assms by (auto simp add:lift_gi_def)
definition (in group) lift where"lift f w = m_concat (map (lift_gi f) w)"
lemma (in group) lift_nil[simp]: "lift f [] = 1" by (auto simp add:lift_def)
lemma (in group) lift_closed[simp]: assumes cl: "f ∈ gens → carrier G" and"x ∈ lists (UNIV × gens)" shows"lift f x ∈ carrier G" proof- have"set (map (lift_gi f) x) ⊆ carrier G" using‹x ∈ lists (UNIV × gens)› by (auto simp add:lift_gi_closed[OF cl]) thus"lift f x ∈ carrier G" by (auto simp add:lift_def) qed
lemma (in group) lift_append[simp]: assumes cl: "f ∈ gens → carrier G" and"x ∈ lists (UNIV × gens)" and"y ∈ lists (UNIV × gens)" shows"lift f (x @ y) = lift f x ⊗ lift f y" proof- from‹x ∈ lists (UNIV × gens)› have"set (map snd x) ⊆ gens"by auto hence"set (map (lift_gi f) x) ⊆ carrier G" by (induct x)(auto simp add:lift_gi_closed[OF cl]) moreover from‹y ∈ lists (UNIV × gens)› have"set (map snd y) ⊆ gens"by auto hence"set (map (lift_gi f) y) ⊆ carrier G" by (induct y)(auto simp add:lift_gi_closed[OF cl]) ultimately show"lift f (x @ y) = lift f x ⊗ lift f y" by (auto simp add:lift_def m_assoc simp del:set_map foldr_append) qed
lemma (in group) lift_cancels_to: assumes"cancels_to x y" and"x ∈ lists (UNIV × gens)" and cl: "f ∈ gens → carrier G" shows"lift f x = lift f y" using assms unfolding cancels_to_def proof(induct rule:rtranclp_induct) case (step y z) from‹cancels_to_1** x y› and‹x ∈ lists (UNIV × gens)› have"y ∈ lists (UNIV × gens)" by -(rule cancels_to_preserves_generators, simp add:cancels_to_def) hence"lift f x = lift f y" using step by auto also from‹cancels_to_1 y z› obtain ys1 y1 y2 ys2 where y: "y = ys1 @ y1 # y2 # ys2" and"z = ys1 @ ys2" and"canceling y1 y2" by (rule cancels_to_1_unfold) have"lift f y = lift f (ys1 @ [y1] @ [y2] @ ys2)" using y by simp also from y and cl and‹y ∈ lists (UNIV × gens)› have"lift f (ys1 @ [y1] @ [y2] @ ys2) = lift f ys1 ⊗ (lift f [y1] ⊗ lift f [y2]) ⊗ lift f ys2" by (auto intro:lift_append[OF cl] simp del: append_Cons simp add:m_assoc iff:lists_eq_set) also from cl[THEN funcset_image] and y and‹y ∈ lists (UNIV × gens)› and‹canceling y1 y2› have"(lift f [y1] ⊗ lift f [y2]) = 1" by (auto simp add:lift_def lift_gi_def canceling_def iff:lists_eq_set) hence"lift f ys1 ⊗ (lift f [y1] ⊗ lift f [y2]) ⊗ lift f ys2 = lift f ys1 ⊗1⊗ lift f ys2" by simp also from y and‹y ∈ lists (UNIV × gens)› and cl have"lift f ys1 ⊗1⊗ lift f ys2 = lift f (ys1 @ ys2)" by (auto intro:lift_append iff:lists_eq_set) also from‹z = ys1 @ ys2› have"lift f (ys1 @ ys2) = lift f z"by simp finallyshow"lift f x = lift f z" . qed auto
lemma (in group) lift_is_hom: assumes cl: "f ∈ gens → carrier G" shows"lift f ∈ hom F G" proof-
{ fix x assume"x ∈ carrier F" hence"x ∈ lists (UNIV × gens)" unfolding free_group_def by simp hence"lift f x ∈ carrier G" by (induct x, auto simp add:lift_def lift_gi_closed[OF cl])
} moreover
{ fix x assume"x ∈ carrier F" fix y assume"y ∈ carrier F"
have"cancels_to (x @ y) (normalize (x @ y))"by simp from‹x ∈ lists (UNIV × gens)›and‹y ∈ lists (UNIV × gens)› and lift_cancels_to[THEN sym, OF ‹cancels_to (x @ y) (normalize (x @ y))›] and cl have"lift f (x ⊗<F> y) = lift f (x @ y)" by (auto simp add:free_group_def iff:lists_eq_set) also from‹x ∈ lists (UNIV × gens)›and‹y ∈ lists (UNIV × gens)›and cl have"lift f (x @ y) = lift f x ⊗ lift f y" by simp finally have"lift f (x ⊗<F> y) = lift f x ⊗ lift f y" .
} ultimately show"lift f ∈ hom F G" by auto qed
show"carrier F⊆⟨ι ` gens⟩<F>" proof fix x show"x ∈ carrier F==> x ∈⟨ι ` gens⟩<F>" proof(induct x) case Nil have"one F∈⟨ι ` gens⟩<F>" by simp thus"[] ∈⟨ι ` gens⟩<F>" by (simp add:free_group_def) next case (Cons a x) from‹a # x ∈ carrier F› have"x ∈ carrier F" by (auto intro:cons_canceled simp add:free_group_def) hence"x ∈⟨ι ` gens⟩<F>" using Cons by simp moreover
from‹a # x ∈ carrier F› have"snd a ∈ gens" by (auto simp add:free_group_def) hence isa: "ι (snd a) ∈⟨ι ` gens⟩<F>" by (auto simp add:insert_def intro:gen_gens) have"[a] ∈⟨ι ` gens⟩<F>" proof(cases "fst a") case False hence"[a] = ι (snd a)"by (cases a, auto simp add:insert_def) with isa show"[a] ∈⟨ι ` gens⟩<F>"by simp next case True from‹snd a ∈ gens› have"ι (snd a) ∈ carrier F" by (auto simp add:free_group_def insert_def) with True have"[a] = inv<F> (ι (snd a))" by (cases a, auto simp add:insert_def inv_fg_def inv1_def) moreover from isa have"inv<F> (ι (snd a)) ∈⟨ι ` gens⟩<F>" by (auto intro:gen_inv) ultimately show"[a] ∈⟨ι ` gens⟩<F>" by simp qed ultimately have"mult F [a] x ∈⟨ι ` gens⟩<F>" by (auto intro:gen_mult) with ‹a # x ∈ carrier F› show"a # x ∈⟨ι ` gens⟩<F>"by (simp add:free_group_def) qed qed qed
lemma (in group) lift_is_unique: assumes"group G" and cl: "f ∈ gens → carrier G" and"h ∈ hom F G" and"∀ g ∈ gens. h (ι g) = f g" shows"∀x ∈ carrier F. h x = lift f x" unfolding gens_span_free_group[THEN sym] proof(rule hom_unique_on_span[of "F" G]) show"group F"by (rule free_group_is_group) next show"group G"by fact next show"ι ` gens ⊆ carrier F" by(auto intro:insert_closed) next show"h ∈ hom F G"by fact next show"lift f ∈ hom F G"by (rule lift_is_hom[OF cl]) next from‹∀g∈ gens. h (ι g) = f g›and cl[THEN funcset_image] show"∀g∈ ι ` gens. h g = lift f g" by(auto simp add:insert_def lift_def lift_gi_def) qed
end
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.14Angebot
¤
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.