src/HOL/Algebra/Exact_Sequence.thy
author wenzelm
Sun, 12 Aug 2018 14:28:28 +0200
changeset 68743 91162dd89571
parent 68582 b9b9e2985878
child 70041 2b23dd163c7f
permissions -rw-r--r--
proper session dirs;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68582
b9b9e2985878 more standard headers;
wenzelm
parents: 68578
diff changeset
     1
(*  Title:      HOL/Algebra/Exact_Sequence.thy
b9b9e2985878 more standard headers;
wenzelm
parents: 68578
diff changeset
     2
    Author:     Martin Baillon
b9b9e2985878 more standard headers;
wenzelm
parents: 68578
diff changeset
     3
*)
68578
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     4
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     5
theory Exact_Sequence
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     6
  imports Group Coset Solvable_Groups
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     7
begin
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     8
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
     9
section \<open>Exact Sequences\<close>
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    10
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    11
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    12
subsection \<open>Definitions\<close>
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    13
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    14
inductive exact_seq :: "'a monoid list \<times> ('a \<Rightarrow> 'a) list \<Rightarrow> bool"  where
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    15
unity:     " group_hom G1 G2 f \<Longrightarrow> exact_seq ([G2, G1], [f])" |
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    16
extension: "\<lbrakk> exact_seq ((G # K # l), (g # q)); group H ; h \<in> hom G H ;
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    17
              kernel G H h = image g (carrier K) \<rbrakk> \<Longrightarrow> exact_seq (H # G # K # l, h # g # q)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    18
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    19
abbreviation exact_seq_arrow ::
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    20
  "('a \<Rightarrow> 'a) \<Rightarrow> 'a monoid list \<times> ('a \<Rightarrow> 'a) list \<Rightarrow>  'a monoid \<Rightarrow> 'a monoid list \<times> ('a \<Rightarrow> 'a) list"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    21
  ("(3_ / \<longlongrightarrow>\<index> _)" [1000, 60])
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    22
  where "exact_seq_arrow  f t G \<equiv> (G # (fst t), f # (snd t))"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    23
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    24
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    25
subsection \<open>Basic Properties\<close>
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    26
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    27
lemma exact_seq_length1: "exact_seq t \<Longrightarrow> length (fst t) = Suc (length (snd t))"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    28
  by (induct t rule: exact_seq.induct) auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    29
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    30
lemma exact_seq_length2: "exact_seq t \<Longrightarrow> length (snd t) \<ge> Suc 0"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    31
  by (induct t rule: exact_seq.induct) auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    32
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    33
lemma dropped_seq_is_exact_seq:
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    34
  assumes "exact_seq (G, F)" and "(i :: nat) < length F"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    35
  shows "exact_seq (drop i G, drop i F)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    36
proof-
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    37
  { fix t i assume "exact_seq t" "i < length (snd t)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    38
    hence "exact_seq (drop i (fst t), drop i (snd t))"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    39
    proof (induction arbitrary: i)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    40
      case (unity G1 G2 f) thus ?case
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    41
        by (simp add: exact_seq.unity)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    42
    next
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    43
      case (extension G K l g q H h) show ?case
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    44
      proof (cases)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    45
        assume "i = 0" thus ?case
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    46
          using exact_seq.extension[OF extension.hyps] by simp
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    47
      next
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    48
        assume "i \<noteq> 0" hence "i \<ge> Suc 0" by simp
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    49
        then obtain k where "k < length (snd (G # K # l, g # q))" "i = Suc k"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    50
          using Suc_le_D extension.prems by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    51
        thus ?thesis using extension.IH by simp 
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    52
      qed
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    53
    qed }
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    54
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    55
  thus ?thesis using assms by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    56
qed
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    57
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    58
lemma truncated_seq_is_exact_seq:
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    59
  assumes "exact_seq (l, q)" and "length l \<ge> 3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    60
  shows "exact_seq (tl l, tl q)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    61
  using exact_seq_length1[OF assms(1)] dropped_seq_is_exact_seq[OF assms(1), of "Suc 0"]
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    62
        exact_seq_length2[OF assms(1)] assms(2) by (simp add: drop_Suc)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    63
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    64
lemma exact_seq_imp_exact_hom:
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    65
   assumes "exact_seq (G1 # l,q) \<longlongrightarrow>\<^bsub>g1\<^esub> G2 \<longlongrightarrow>\<^bsub>g2\<^esub> G3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    66
   shows "g1 ` (carrier G1) = kernel G2 G3 g2"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    67
proof-
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    68
  { fix t assume "exact_seq t" and "length (fst t) \<ge> 3 \<and> length (snd t) \<ge> 2"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    69
    hence "(hd (tl (snd t))) ` (carrier (hd (tl (tl (fst t))))) =
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    70
            kernel (hd (tl (fst t))) (hd (fst t)) (hd (snd t))"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    71
    proof (induction)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    72
      case (unity G1 G2 f)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    73
      then show ?case by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    74
    next
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    75
      case (extension G l g q H h)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    76
      then show ?case by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    77
    qed }
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    78
  thus ?thesis using assms by fastforce
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    79
qed
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    80
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    81
lemma exact_seq_imp_exact_hom_arbitrary:
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    82
   assumes "exact_seq (G, F)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    83
     and "Suc i < length F"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    84
   shows "(F ! (Suc i)) ` (carrier (G ! (Suc (Suc i)))) = kernel (G ! (Suc i)) (G ! i) (F ! i)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    85
proof -
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    86
  have "length (drop i F) \<ge> 2" "length (drop i G) \<ge> 3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    87
    using assms(2) exact_seq_length1[OF assms(1)] by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    88
  then obtain l q
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    89
    where "drop i G = (G ! i) # (G ! (Suc i)) # (G ! (Suc (Suc i))) # l"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    90
     and  "drop i F = (F ! i) # (F ! (Suc i)) # q"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    91
    by (metis Cons_nth_drop_Suc Suc_less_eq assms exact_seq_length1 fst_conv
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    92
        le_eq_less_or_eq le_imp_less_Suc prod.sel(2))
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    93
  thus ?thesis
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    94
  using dropped_seq_is_exact_seq[OF assms(1), of i] assms(2)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    95
        exact_seq_imp_exact_hom[of "G ! i" "G ! (Suc i)" "G ! (Suc (Suc i))" l q] by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    96
qed
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    97
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    98
lemma exact_seq_imp_group_hom :
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
    99
  assumes "exact_seq ((G # l, q)) \<longlongrightarrow>\<^bsub>g\<^esub> H"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   100
  shows "group_hom G H g"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   101
proof-
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   102
  { fix t assume "exact_seq t"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   103
    hence "group_hom (hd (tl (fst t))) (hd (fst t)) (hd(snd t))"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   104
    proof (induction)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   105
      case (unity G1 G2 f)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   106
      then show ?case by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   107
    next
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   108
      case (extension G l g q H h)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   109
      then show ?case unfolding group_hom_def group_hom_axioms_def by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   110
    qed }
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   111
  note aux_lemma = this
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   112
  show ?thesis using aux_lemma[OF assms]
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   113
    by simp
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   114
qed
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   115
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   116
lemma exact_seq_imp_group_hom_arbitrary:
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   117
  assumes "exact_seq (G, F)" and "(i :: nat) < length F"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   118
  shows "group_hom (G ! (Suc i)) (G ! i) (F ! i)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   119
proof -
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   120
  have "length (drop i F) \<ge> 1" "length (drop i G) \<ge> 2"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   121
    using assms(2) exact_seq_length1[OF assms(1)] by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   122
  then obtain l q
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   123
    where "drop i G = (G ! i) # (G ! (Suc i)) # l"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   124
     and  "drop i F = (F ! i) # q"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   125
    by (metis Cons_nth_drop_Suc Suc_leI assms exact_seq_length1 fst_conv
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   126
        le_eq_less_or_eq le_imp_less_Suc prod.sel(2))
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   127
  thus ?thesis
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   128
  using dropped_seq_is_exact_seq[OF assms(1), of i] assms(2)
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   129
        exact_seq_imp_group_hom[of "G ! i" "G ! (Suc i)" l q "F ! i"] by simp
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   130
qed
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   131
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   132
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   133
subsection \<open>Link Between Exact Sequences and Solvable Conditions\<close>
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   134
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   135
lemma exact_seq_solvable_imp :
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   136
  assumes "exact_seq ([G1],[]) \<longlongrightarrow>\<^bsub>g1\<^esub> G2 \<longlongrightarrow>\<^bsub>g2\<^esub> G3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   137
    and "inj_on g1 (carrier G1)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   138
    and "g2 ` (carrier G2) = carrier G3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   139
  shows "solvable G2 \<Longrightarrow> (solvable G1) \<and> (solvable G3)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   140
proof -
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   141
  assume G2: "solvable G2"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   142
  have "group_hom G1 G2 g1"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   143
    using exact_seq_imp_group_hom_arbitrary[OF assms(1), of "Suc 0"] by simp
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   144
  hence "solvable G1"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   145
    using group_hom.inj_hom_imp_solvable[of G1 G2 g1] assms(2) G2 by simp
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   146
  moreover have "group_hom G2 G3 g2"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   147
    using exact_seq_imp_group_hom_arbitrary[OF assms(1), of 0] by simp
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   148
  hence "solvable G3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   149
    using group_hom.surj_hom_imp_solvable[of G2 G3 g2] assms(3) G2 by simp
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   150
  ultimately show ?thesis by simp
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   151
qed
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   152
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   153
lemma exact_seq_solvable_recip :
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   154
  assumes "exact_seq ([G1],[]) \<longlongrightarrow>\<^bsub>g1\<^esub> G2 \<longlongrightarrow>\<^bsub>g2\<^esub> G3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   155
    and "inj_on g1 (carrier G1)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   156
    and "g2 ` (carrier G2) = carrier G3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   157
  shows "(solvable G1) \<and> (solvable G3) \<Longrightarrow> solvable G2"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   158
proof -
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   159
  assume "(solvable G1) \<and> (solvable G3)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   160
  hence G1: "solvable G1" and G3: "solvable G3" by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   161
  have g1: "group_hom G1 G2 g1" and g2: "group_hom G2 G3 g2"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   162
    using exact_seq_imp_group_hom_arbitrary[OF assms(1), of "Suc 0"]
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   163
          exact_seq_imp_group_hom_arbitrary[OF assms(1), of 0] by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   164
  show ?thesis
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   165
    using solvable_condition[OF g1 g2 assms(3)]
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   166
          exact_seq_imp_exact_hom[OF assms(1)] G1 G3 by auto
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   167
qed
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   168
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   169
proposition exact_seq_solvable_iff :
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   170
  assumes "exact_seq ([G1],[]) \<longlongrightarrow>\<^bsub>g1\<^esub> G2 \<longlongrightarrow>\<^bsub>g2\<^esub> G3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   171
    and "inj_on g1 (carrier G1)"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   172
    and "g2 ` (carrier G2) = carrier G3"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   173
  shows "(solvable G1) \<and> (solvable G3) \<longleftrightarrow>  solvable G2"
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   174
  using exact_seq_solvable_recip exact_seq_solvable_imp assms by blast
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   175
1f86a092655b more algebra
paulson <lp15@cam.ac.uk>
parents:
diff changeset
   176
end