Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/Isabelle/HOL/Algebra/   (Beweissystem Isabelle Version 2025-1©)  Datei vom 16.11.2025 mit Größe 22 kB image not shown  

Quelle  Exact_Sequence.thy   Sprache: Isabelle

 

    Author    Author:     Martin Baillon (first part)*)
*)

section \<open>Exact Sequences\<close>

theory Exact_Sequence
  importsElementary_Groups
begin



ction \<open>Definitions\<close>

inductive exact_seq   imports Solvable_Groups
unity     " group_hom G2 f\java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
:
               G Hh  g carrier

inductive_simps exact_seq_end_iff [simp]: "exact_seq ([G,H], (g # q))"
inductive_simps exact_seq_cons_iff [simp]: java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
lemma
assumes
 ( G1 f thus
  (\<open>(\<open>indent=3 notation=\<open>mixfix exact_seq\<close>\<close>_ / \<longlongrightarrow>\<index> _)\<close> [1000, 60]).unity
  where " assume " \<noteq> 0" hence "i \<ge> Suc 0" by simp


subsection \<open>Basic Properties\<close>

lemma exact_seq_length1: "exact_seq t \ length (fst t) = Suc (length (snd t))"
  by (induct t rule: exact_seq.induct) auto

lemma exact_seq_length2: "exact_seq t \ length (snd t) \ Suc 0"
  by (induct t rule         Suc_le_D. by  ? using.IHsimp

lemma dropped_seq_is_exact_seqjava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
   "exact_seq (G ) "i:natlength
  shows "exact_seq (drop i G, drop i F)"
proof- :
    " ( # ,)\\<^bsub>g1\<^esub> G2 \\<^bsub>g2\<^esub> G3"
    using that
  proof " ` carrierG1) kernelG2G3"
    case(nity  f  ?java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
by add.)
  next
    case (extension ifand t
     ()
      assume "i = case( G1 G2 f)
        using exact_seq
    java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
      assume "i \ 0" hence "i \ Suc 0" by simp
then   "kk
        using Suc_le_D extension.
      thus andSuc
qed
  
  thus  )
qed

lemma (2 [OF()  auto
  assumes  q
  shows " i =G! G! ( i) #(G S ( i)) "
  using exact_seq_length1[OF assms(1)] dropped_seq_is_exact_seq
exact_seq_length2(]assms(simpdrop_Suc

lemma exact_seq_imp_exact_hom le_imp_less_Sucprod())
    "exact_seq (G1 #,)\\<^bsub>g1\<^esub> G2 \\<^bsub>g2\<^esub> G3"
    "g1 `(carrier G1) =k G2 G3 "
proof exact_seq_imp_exact_hom "G !i" " (Suc i)" "G ! (Suc(uci))" lq by uto
  have "(hd (tl (snd t))) ` (carrier (hd (tl (tl (fst t))))) =
            kernel 
    if " t" andjava.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 85
    usingproof()
  proof (    case (unity G1G2)
    case (unity G1 G2 f)
    then show ?  showcasebyauto
  next
    casecase( Gl Hh
     show  group_hom_axioms_def
  qed
  with assms 
qedshowthesisusingaux_lemma assms

lemma
   assumes
"
    "(F!( )) carrier(G!( (Suc )) kernel ( !(uci)! )( !i"
proof -
  have    exact_seq F  "i
using2[OF)byjava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
   obtain 
    where "drop i G = (G ! thenobtainl
a  dropF=F! i # F!Suc#q"
    by (metis Cons_nth_drop_Suc Suc_less_eq  " i F ( i #q"
        le_eq_less_or_eq prodsel)
  thus ?thesis
  using[OFassms, of]assms2)
        exact_seq_imp_exact_hom[of "G ! i" "G ! (Suc i)" "G ! (Suc (thus ?thesis
qed

lemma exact_seq_imp_group_hom :
  assumes "exact_seq ((G # l, q)) \\<^bsub>g\<^esub> H"
  shows "group_hom G H g"
proof-
  have aux_lemma: "group_hom (hd (tl (fst t))) usingdropped_seq_is_exact_seq[OF assms(1), of ] (2)
    sing
  proof (induction)
    subsection
    then  ?case  auto
  next
    case (extension G l g
    then ?caseunfolding  group_hom_axioms_def 
  qed
  show ?   "exact_seq ([G1][
    by simp
qed    andinj_onG1

a:
assumesexact_seq,F"and "( : )<length
 -
proofassumeG2 " G2"
  length i F 
    using assms2) [OFassmsauto
  then obtain l q[ (1),  " 0"]  
     drop =G! ) # java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
     and     [ assms),of by simp
    by metis Suc_leI exact_seq_length1
        le_eq_less_or_eq le_imp_less_Sucjava.lang.StringIndexOutOfBoundsException: Range [12, 2) out of bounds for length 33
   ?
  using dropped_seq_is_exact_seq " ( G2) carrier G3"
exact_seq_imp_group_hom G  i G Suc) lqFi" bybysimp
qed


subsectionsolvableand :" "byauto

lemma exact_seq_solvable_imp :
exact_seq][)\<\^bsub\<^esub> G2 \<longlongrightarrow>\<^bsub>g2\<^esub> G3"
    andg1carrier
    and "g2 ` (carrier G2) = carrier G3"
  showsG2
proof -
  assume G2 [OF g2 assms
  have "group_hom G1 G2exact_seq_imp_exact_hom[OF assms(1) G3 auto
    using java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
  hence "solvable G1"
    using "inj_on g1 (carrier )"
moreover" G2G2 G3 g2"
    using exact_seq_imp_group_hom_arbitrary[OF assms(1), ofshows( G1\<and> (solvable G3) \<longleftrightarrow>  solvable G2"
java.lang.StringIndexOutOfBoundsException: Range [62, 21) out of bounds for length 21
    using.surj_hom_imp_solvable G2 g2assmsG2 simp
  ultimately assumesCB]
qed

lemma exact_seq_solvable_recip :
  assumes "exact_seq ([G1],[]) \\<^bsub>g1\<^esub> G2 \\<^bsub>g2\<^esub> G3"
java.lang.StringIndexOutOfBoundsException: Range [29, 2) out of bounds for length 29
    and "g2 ` (carrier G2) = carrier G3"
  shows "(solvable G1) \ (solvable G3) \ solvable G2"
proof -
  assume "(solvable G1) \ (solvable G3)"
  hence      (auto : group_homimage_from_trivial_grouptrivial_group_def hom_one
   g1G1" g2 group_hom java.lang.StringIndexOutOfBoundsException: Range [57, 56) out of bounds for length 60
     [ ()  " 0"
apply( simp  hom_def)
  showdone
    using[  g2()java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
          [OF1 G1 by
qed

proposition
 exact_seq_imp_triviality:
    and "inj_on g1 (carrier G1)"
    and
  b (, lifting. bij_betw_def )
  using exact_seq_solvable_recip


 :
   "exact_seq ([ED,,,],[k,gf)java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
proof
  assume C: ex
 assms inj_on
    apply (x,)   
    apply (simp "ij\java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
    done f  GCf
  with Cshow
     auto.image_from_trivial_group)
     apply (auto simp by add group_hom_axioms_def
    done
next
  assume ?rhs
  with assms show "trivial_group C"
    applysimp:trivial_group_def
    by( group_hom.trivial_hom_iff group_hom_def
qed

lemma exact_seq_imp_triviality:
       'where"h
  by (metis (no_types, lifting .hh   ) " hjava.lang.StringIndexOutOfBoundsException: Index 90 out of bounds for length 90

lemma:
   "exact_seq ([D case_prod_unfold
  y(autotrivial_homomorphism_def

lemmae:
   "exact_seq homgf: ? \ hom G (C \\ D)"
u ex add

lemma exact_sequence_sum_lemmaij
  assumes( simp  homij
 java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
    and \<open>i \<in> hom A G\<close> \<open>h' \<in> hom C A\<close> have "x \<otimes>\<^bsub>G\<^esub> inv\<^bsub>G\<^esub>(i(h'(f x))) \<in> kernel G C f" ' )
    and gjk: "\x. x \ carrier B \ g(j x) = k x"
  shows "( have "i (h' (f x)) \\<^bsub>G\<^esub> (x \\<^bsub>G\<^esub> inv\<^bsub>G\<^esub> i (h' (f x))) = x \\<^bsub>G\<^esub> (i (h' (f x)) \\<^bsub>G\<^esub> inv\<^bsub>G\<^esub> i (h' (f x)))"
    (is " by java.lang.StringIndexOutOfBoundsException: Index 110 out of bounds for length 110
proofrule
  interpret comm_group G
    by (rule       <open>h' \<in> hom C A\<close> hom_in_carrier x by fastforce
  interpret      " \ (\(x, y). i x \\<^bsub>G\<^esub> j y) ` (carrier A \ carrier B)"
    using ex by (simp addusingapply( simp)
   : G g
    using ex rule_tac bexI)
  interpret i:  meson
    using ex by (simp add
  interpret j: group_hom B G j
    using ex by (simp apply( group [ f  java.lang.NullPointerException
  have: kernel  carrier group "i
    using ex by (auto simp metis . fih)
  then'h\java.lang.StringIndexOutOfBoundsException: Index 85 out of bounds for length 85
    and java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
    using h by (\openPorted
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    unfolding case_prod_unfold
    apply hom_group_mult
    using ex simp_allunfolded)
  show homgf: "?gf \ hom G (C \\ D)"
      by add
  show "applysimp: epi_iff_subset group_homintrogroup_hom.kernel_to_trivial_group group_hom_axioms.introjava.lang.StringIndexOutOfBoundsException: Index 107 out of bounds for length 107
   short_exact_sequence_iff
     java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
assumex xjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
     ( exI

    withthat add singleton_group_def
      by have" {
have '( )\
      by (meson \<open>h' \<in> hom C A\<close> x f.hom_closed hom_in_carrier i.hom_closed inv_closed m_lcomm)
    also have "\ = x"
      using \<open>h' \<in> hom C A\<close> hom_in_carrier x by fastforce add  group_hom_axioms_def)
    finally java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
      using x y apply (clarsimp
      java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
applyrule_tac java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
by ( \<open>h' \<in> hom C A\<close> f.hom_closed hom_in_carrier)
  apply imp
  show "(\z. (f z, g z)) \ (\(x, y). i x \\<^bsub>G\<^esub> j y) \ Group.iso (A \\ B) (C \\ D)"
    apply (rule group.iso_eq (, lifting.image_from_trivial_group.java.lang.StringIndexOutOfBoundsException: Index 84 out of bounds for length 84
    using
    apply (auto simp:java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
     pply . f. fih)
    applyandKB  1:"H\java.lang.StringIndexOutOfBoundsException: Index 103 out of bounds for length 103
done
qed

subsection \<open>Splitting lemmas and Short exact sequences\<close>: KB
text\<open>Ported from HOL Light by LCP\<close>

definition short_exact_sequence
  whereshort_exact_sequence Cfg\equiv>\<exists>T1 T2 e1 e2. exact_seq ([T1,A,B,C,T2], [e1,f,g,e2]) \<and> trivial_group T1 \<and> trivial_group T2"

lemma short_exact_sequenceD:
   " A BCf g " ([,,C,[,]) 
  using assms
  apply (auto simp: short_exact_sequence_def group_hom_def group_hom_axioms_def)
  apply( addepi_iff_subset group_hom group_hom. group_hom_axioms)
  by (metis (no_types, liftinghavegroup" B" groupC and:" BCg ` by (auto simp: group_hom_axioms_def)
hom_one  mem_Collect_eq trivial_group_def

lemma short_exact_sequence_iff have" H B
"java.lang.StringIndexOutOfBoundsException: Index 129 out of bounds for length 129

bmetis" ( B ) ( C(`carrier B)"
    if "exact_seq (metisassms3) fABHsubgroupE1) BCimg_is_subgroup .set_mult_ker_hom(2) ker_eq subgroup.carrier_subgroup_generated_subgroup)
 -
    show ?thesis simp group_hom_axioms_def
      unfolding short_exact_sequence_def
    proof exIjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
      have "kernel A (singleton_group \\<^bsub>A\<^esub>) (\x. \\<^bsub>A\<^esub>) = f ` carrier B"
        using that by (simp that.Hcarrier_subgroup_generated_subset
moreover CBg  \one
        using that group_hom.inj_iff_trivial_ker mon_def by fastforce
      ultimately show "exact_seq ([singleton_group (one A), A, B, C, singleton_group (one C)], [\x. \\<^bsub>A\<^esub>, f, g, id])"
        using that
        by (simp add: group_hom_def group_hom_axioms_def group.id_hom_singleton)
    qed auto
qed
  then show ?thesis
    using by blast
qed

lemma:
  assumesqed
  shows
  using assms"" gKBC byauto
  applysimp
  by (metis (no_types, lifting) group_hom.image_from_trivial_group group_hom.iso_iff
      group_hom.kernel_to_trivial_group group_hom.trivial_ker_imp_inj group_hom_axioms.intro group_hom_def hom_carrier inj_on_one_iff')

lemma splitting_sublemma_gen:
a exshort_exact_sequence "and:"`carrier
subgroup 1H
  shows "g \ iso (subgroup_generated B K) (subgroup_generated C(g ` carrier B))"
proof -
  interpret KB: subgroup K B
    proof
  interpretusing sh [ex
    using  java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
  interpreth C= C(  arrier
    ex add )
  have "group A" "group B" "group applyjava.lang.StringIndexOutOfBoundsException: Range [14, 10) out of bounds for length 14
      using  short_exact_sequenceD ex
: kernel
    using ex byjava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
  then assumes  [,,A,gf) and f:"f' \ hom B A" and iso: "(f' \ f) \ iso A A"
    using by simp: group_hom)
  show ?thesis
    unfoldingiso_iff
  proof (intro conjI)
    showg\<in> hom (subgroup_generated B K) (subgroup_generated C(g ` carrier B))"
by( ker_eq \<open>subgroup K B\<close> eq gBC.hom_between_subgroups gBC.set_mult_ker_hom(2) order_refl subgroup.subset)
    show "g ` carrier (subgroup_generated B K) = carrier (subgroup_generatedgroup_hom_axioms_def)
      by (metis assms(3) eq fAB.H   "group A" " B"" : " B Cg=f  A"
    interpret gKBC: group_hom "subgroup_generated have :"f  Ajava.lang.StringIndexOutOfBoundsException: Index 149 out of bounds for length 149
      apply (auto simp: group_hom_def group_hom_axioms_def  interpret ': B Af'
      by (simp add:     using assms by (auto: group_hom_def)
 x  \<one>\<^bsub>B\<^esub>"
       x:" carrier (subgroup_generated B K)" and "g x = \\<^bsub>C\<^esub>" for xin (subgroup_generated B ) "g x =x = \<one>\<^bsub>C\<^esub>" for x
    proof -java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
      have:"x
        using thatjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
      moreover have "x \ H"
          fimauto
      ultimately C
by 1 Int_iff KB subsetCE
    qed
    showusing  ( simp'.subgroup_kernel)
      using "*" gKBC
  qed
qed

lemma splitting_sublemma:
    assumes " ([C, g,)" and f' "f \ hom B A"
      and"subgroupK B"and" K \ {one B}" and eq: "set_mult B H K = carrier B"
    shows "f \ iso A (subgroup_generated B H)" (is ?f)
          g 
proof -
  show ?f
    using [OF]
    apply (clarsimp simp add"f \ iso A (subgroup_generated B H)" "g \ iso (subgroup_generated B K) C"
    using fim group.iso_onto_image by blast
  have "C = subgroup_generated C(g ` carrier B)"
    using short_exact_sequenceD [OF ex]
    apply simp
    by (metis epi_iff_subset group gBCgroup_homBCg
      using by ( addgroup_hom_defgroup_hom_axioms_def
    using [OF
    by (metis "1" \<open>subgroup K B\<close> eq fim splitting_sublemma_gen)using by(auto: group_hom_def)
qedusing by (uto simp  introgroup [OF

lemma  that [OF 'iso surj)
  assumes ex: "exact_seq ([C,B,A], [g,f]java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
    and injf: "inj_on f (carrier A)" and surj K java.lang.NullPointerException
 obtains
"\ iso A (subgroup_generated B H)" "g \ iso (subgroup_generated B K) C"
proof -
  interpret gBC: group_hom B C g
    using ex by      short_exact_sequenceD[ ex by(simp :  group_hom_axioms_def
  have "group A"   [OF] by( add group_hom_axioms_def
usingexsimp group_hom_axioms_def)
  then have " \bsub>B\<^esub> g' ` carrier C = carrier B"
    using" A"groupgroup
  interpretB  =  carrier"
    using assms by (autousinggroup_semidirect_sum_ker_image[f g g CCB]short_exact_sequenceDOF ex]
  let ?H = "f ` carrier A"
  letK  kernel  f
  show thesis
  proof
    show "?H \ B"
      by (simp add: gBC.normal_kernel flip "kernel B C \ (g' ` carrier C) \ {\\<^bsub>B\<^esub>}" "(kernel B C g) <#>\<^bsub>B\<^esub> (g' ` carrier C) = carrier B"
    show "?K \ B"
      by (rule f'by (auto simp: *)
show? <> ?K\<>java.lang.StringIndexOutOfBoundsException: Index 104 out of bounds for length 104
       * byjava.lang.StringIndexOutOfBoundsException: Range [21, 22) out of bounds for length 21
    show "f \ Group.iso A (subgroup_generated B ?H)"
      using ex by (simp add: by( add .His_group gBCgroup_homgroup_hom_axioms_def
    have C: "C = subgroup_generated C(g ` carrier B)"
       surj simp: gBC)
    show "g \ Group.iso (subgroup_generated B ?K) C"
      apply (subst C)
       splitting_sublemma_gen[ exrefl]
      using * by (auto ex short_exact_sequenceB f  g' g hom C B" and gg': "\z. z \ carrier C \ g(g' z) = z"in CBandgg java.lang.StringIndexOutOfBoundsException: Index 141 out of bounds for length 141
  qed
qed

lemma -
  assumes ex: " *: " A"" B"groupC"
    and inv: "(\x. x \ carrier A \ f'(f x) = x)"
    and injf: "inj_on f (carrier A)" and    by simp_all'java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
 obtains H K where "H \ B" "K \ B" "H \ K \ {one B}" "set_mult B H K = carrier B"
                   "f \ iso A (subgroup_generated B H)" "g \ iso (subgroup_generated B K) C"
proof
  interpret fAB: group_hom A B f
    using ex by simp
  interpret gBC: group_hom B C g
    using ex by (simp add: group_hom_def group_hom_axioms_def)
  have "group A" "group B" "group C" and kerg: "kernel B C g = f ` carrier A"
      using ex by (auto simp: group_hom_def group_hom_axioms_def)
  have iso: "f' \ f \ Group.iso A A"
    using ex by (auto simp: inv intro:  group.iso_eq [OF \<open>group A\<close> id_iso])
  show thesis
    by (metis that splitting_lemma_left_gen [OF ex f' iso injf surj])
qed

lemma splitting_lemma_right_gen:
  assumes ex: "short_exact_sequence C B A g f" and g': "g' \<in> hom C B" and iso: "(g \<circ> g') \<in> iso C C"
 obtains H K where "H \ B" "subgroup K B" "H \ K \ {one B}" "set_mult B H K = carrier B"
                   "f \ iso A (subgroup_generated B H)" "g \ iso (subgroup_generated B K) C"
proof
  interpret fAB: group_hom A B f
    using short_exact_sequenceD [OF ex] by (simp add: group_hom_def group_hom_axioms_def)
  interpret gBC: group_hom B C g
    using short_exact_sequenceD [OF ex] by (simp add: group_hom_def group_hom_axioms_def)
  have *: "f ` carrier A \ g' ` carrier C = {\\<^bsub>B\<^esub>}"
          "f ` carrier A <#>\<^bsub>B\<^esub> g' ` carrier C = carrier B"
          "group A" "group B" "group C"
          "kernel B C g = f ` carrier A"
    using group_semidirect_sum_ker_image [of g g' C C B] short_exact_sequenceD [OF ex]
    by (simp_all add: g' iso group_hom_def)
  show "kernel B C g \ B"
    by (simp add: gBC.normal_kernel)
  show "(kernel B C g) \ (g' ` carrier C) \ {\\<^bsub>B\<^esub>}" "(kernel B C g) <#>\<^bsub>B\<^esub> (g' ` carrier C) = carrier B"
    by (auto simp: *)
  show "f \ Group.iso A (subgroup_generated B (kernel B C g))"
    by (metis "*"(6) fAB.group_hom_axioms group.iso_onto_image group_hom_def short_exact_sequenceD [OF ex])
  show "subgroup (g' ` carrier C) B"
    using splitting_sublemma
    by (simp add: fAB.H.is_group g' gBC.is_group group_hom.img_is_subgroup group_hom_axioms_def group_hom_def)
  then show "g \ Group.iso (subgroup_generated B (g' ` carrier C)) C"
    by (metis (no_types, lifting) iso_iff fAB.H.hom_from_subgroup_generated gBC.homh image_comp inj_on_imageI iso subgroup.carrier_subgroup_generated_subgroup)
qed

lemma splitting_lemma_right:
  assumes ex: "short_exact_sequence C B A g f" and g': "g' \<in> hom C B" and gg': "\<And>z. z \<in> carrier C \<Longrightarrow> g(g' z) = z"
 obtains H K where "H \ B" "subgroup K B" "H \ K \ {one B}" "set_mult B H K = carrier B"
                   "f \ iso A (subgroup_generated B H)" "g \ iso (subgroup_generated B K) C"
proof -
  have *: "group A" "group B" "group C"
    using group_semidirect_sum_ker_image [of g g' C C B] short_exact_sequenceD [OF ex]
    by (simp_all add: g' group_hom_def)
  show thesis
    apply (rule splitting_lemma_right_gen [OF ex g' group.iso_eq [OF _ id_iso]])
    using * apply (auto simp: gg' intro: that)
    done
qed


end

100%


¤ Dauer der Verarbeitung: 0.17 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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 ist noch experimentell.