static void Main(string[] args) { WriteLine("D4: {0}\n", D4); D4.ShowOperationTableColored(); WriteLine(); foreach (var N in D4.NormalProperSubgroups()) { WriteLine("normal subgroup: N = {0}", N); } WriteLine(); foreach (var N in D4.NormalProperSubgroups()) { WriteLine("normal subgroup: N = {0}", N); var D4_N = D4.QuotientGroup(N, "N"); WriteLine(" quotient group: D4/N = {0}", D4_N);; WriteLine(" isomorphic image: {0}", D4_N.IsomorphicImage()); WriteLine(" homomorphisms:"); foreach (var f in D4.GenerateHomomorphisms(D4_N)) { WriteLine(" {0}", String.Join(" ", D4.Set.Select(elt => (D4.Lookup(elt), f(elt))))); } // HomomorphismToString(G, f) WriteLine(); D4_N.ShowOperationTableColored(); WriteLine(); } ZxZ(2, 2).ShowOperationTableColored(); }
static void Main(string[] args) { WriteLine("normal subgroups: \n"); foreach (var elt in D4.NormalSubgroups()) { WriteLine(" {0}", elt); } WriteLine("----------------------------------------------------------------------"); foreach (var H in D4.NormalSubgroups()) { WriteLine("normal subgroup: H = {0}", H); WriteLine(" coset grouping:"); foreach (var elt in D4.CosetGrouping(H, "H")) { WriteLine(" each of these: {0} are equal to: {1}", elt.ToMathSet(), elt.Key.ConvertAll(D4.Lookup)); } WriteLine(" quotient group: D4/H = {0}\n", D4.QuotientGroup(H)); D4.QuotientGroup(H).ShowOperationTableColored(); WriteLine("----------------------------------------------------------------------"); } WriteLine("NORMAL SUBGROUP QUOTIENT GROUP"); foreach (var H in D4.NormalSubgroups()) { WriteLine("H = {0,-30} D4/H = {1}", H, D4.QuotientGroup(H)); } }