Documentation

Mathlib.GroupTheory.FreeGroup.IsFreeGroup

Free groups structures on arbitrary types #

This file defines the notion of free basis of a group, which induces an isomorphism between the group and the free group generated by the basis.

It also introduced a type class for groups which are free groups, i.e., for which some free basis exists.

For the explicit construction of free groups, see GroupTheory/FreeGroup.

Main definitions #

Main results #

structure FreeAddGroupBasis (ι : Type u_1) (G : Type u_2) [AddGroup G] :
Type (max u_1 u_2)

A free group basis FreeAddGroupBasis ι G is a structure recording the isomorphism between an additive group G and the additive free group over ι. One may think of such a basis as a function from ι to G (which is registered through a FunLike instance) together with the fact that the morphism induced by this function from FreeAddGroup ι to G is an isomorphism.

  • ofRepr :: (
    • repr : G ≃+ FreeAddGroup ι

      repr is the isomorphism between the additive group G and the additive free group generated by ι.

  • )
Instances For
    structure FreeGroupBasis (ι : Type u_1) (G : Type u_2) [Group G] :
    Type (max u_1 u_2)

    A free group basis FreeGroupBasis ι G is a structure recording the isomorphism between a group G and the free group over ι. One may think of such a basis as a function from ι to G (which is registered through a FunLike instance) together with the fact that the morphism induced by this function from FreeGroup ι to G is an isomorphism.

    • ofRepr :: (
      • repr : G ≃* FreeGroup ι

        repr is the isomorphism between the group G and the free group generated by ι.

    • )
    Instances For
      class IsFreeAddGroup (G : Type u) [AddGroup G] :

      An additive group is free if it admits an additive free group basis. In the definition, we require the basis to be in the same universe as G, although this property follows from the existence of a basis in any universe, see FreeAddGroupBasis.isFreeAddGroup.

      Instances
        class IsFreeGroup (G : Type u) [Group G] :

        A group is free if it admits a free group basis. In the definition, we require the basis to be in the same universe as G, although this property follows from the existence of a basis in any universe, see FreeGroupBasis.isFreeGroup.

        Instances
          @[instance_reducible]
          instance FreeGroupBasis.instFunLike {ι : Type u_1} {G : Type u_3} [Group G] :

          A free group basis for G over ι is associated to a map ι → G recording the images of the generators.

          Equations
          @[instance_reducible]
          instance FreeAddGroupBasis.instFunLike {ι : Type u_1} {G : Type u_3} [AddGroup G] :

          An additive free group basis for G over ι is associated to a map ι → G recording the images of the generators.

          Equations
          @[simp]
          theorem FreeGroupBasis.repr_apply_coe {ι : Type u_1} {G : Type u_3} [Group G] (b : FreeGroupBasis ι G) (i : ι) :
          b.repr (b i) = FreeGroup.of i
          @[simp]
          theorem FreeAddGroupBasis.repr_apply_coe {ι : Type u_1} {G : Type u_3} [AddGroup G] (b : FreeAddGroupBasis ι G) (i : ι) :

          The canonical basis of the free group over X.

          Equations
          Instances For

            The canonical basis of the additive free group over X.

            Equations
            Instances For
              @[simp]
              def FreeGroupBasis.reindex {ι : Type u_1} {ι' : Type u_2} {G : Type u_3} [Group G] (b : FreeGroupBasis ι G) (e : ι ι') :

              Reindex a free group basis through a bijection of the indexing sets.

              Equations
              Instances For
                def FreeAddGroupBasis.reindex {ι : Type u_1} {ι' : Type u_2} {G : Type u_3} [AddGroup G] (b : FreeAddGroupBasis ι G) (e : ι ι') :

                Reindex an additive free group basis through a bijection of the indexing sets.

                Equations
                Instances For
                  @[simp]
                  theorem FreeGroupBasis.reindex_apply {ι : Type u_1} {ι' : Type u_2} {G : Type u_3} [Group G] (b : FreeGroupBasis ι G) (e : ι ι') (x : ι') :
                  (b.reindex e) x = b (e.symm x)
                  @[simp]
                  theorem FreeAddGroupBasis.reindex_apply {ι : Type u_1} {ι' : Type u_2} {G : Type u_3} [AddGroup G] (b : FreeAddGroupBasis ι G) (e : ι ι') (x : ι') :
                  (b.reindex e) x = b (e.symm x)
                  def FreeGroupBasis.map {ι : Type u_1} {G : Type u_3} {H : Type u_4} [Group G] [Group H] (b : FreeGroupBasis ι G) (e : G ≃* H) :

                  Pushing a free group basis through a group isomorphism.

                  Equations
                  Instances For
                    def FreeAddGroupBasis.map {ι : Type u_1} {G : Type u_3} {H : Type u_4} [AddGroup G] [AddGroup H] (b : FreeAddGroupBasis ι G) (e : G ≃+ H) :

                    Pushing an additive free group basis through a group isomorphism.

                    Equations
                    Instances For
                      @[simp]
                      theorem FreeGroupBasis.map_apply {ι : Type u_1} {G : Type u_3} {H : Type u_4} [Group G] [Group H] (b : FreeGroupBasis ι G) (e : G ≃* H) (x : ι) :
                      (b.map e) x = e (b x)
                      @[simp]
                      theorem FreeAddGroupBasis.map_apply {ι : Type u_1} {G : Type u_3} {H : Type u_4} [AddGroup G] [AddGroup H] (b : FreeAddGroupBasis ι G) (e : G ≃+ H) (x : ι) :
                      (b.map e) x = e (b x)
                      theorem FreeGroupBasis.injective {ι : Type u_1} {G : Type u_3} [Group G] (b : FreeGroupBasis ι G) :
                      theorem FreeGroupBasis.isFreeGroup {ι : Type u_1} {G : Type u_3} [Group G] (b : FreeGroupBasis ι G) :

                      A group admitting a free group basis is a free group.

                      An additive group admitting an additive free group basis is an additive free group.

                      def FreeGroupBasis.lift {ι : Type u_1} {G : Type u_3} {H : Type u_4} [Group G] [Group H] (b : FreeGroupBasis ι G) :
                      (ιH) (G →* H)

                      Given a free group basis of G over ι, there is a canonical bijection between maps from ι to a group H and morphisms from G to H.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        def FreeAddGroupBasis.lift {ι : Type u_1} {G : Type u_3} {H : Type u_4} [AddGroup G] [AddGroup H] (b : FreeAddGroupBasis ι G) :
                        (ιH) (G →+ H)

                        Given an additive free group basis of G over ι, there is a canonical bijection between maps from ι to an additive group H and morphisms from G to H.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          @[simp]
                          theorem FreeGroupBasis.lift_apply_apply {ι : Type u_1} {G : Type u_3} {H : Type u_4} [Group G] [Group H] (b : FreeGroupBasis ι G) (a✝ : ιH) (x : G) :
                          (b.lift a✝) x = (FreeGroup.lift a✝) (b.repr x)
                          @[simp]
                          theorem FreeGroupBasis.lift_symm_apply {ι : Type u_1} {G : Type u_3} {H : Type u_4} [Group G] [Group H] (b : FreeGroupBasis ι G) (a✝ : G →* H) (a✝¹ : ι) :
                          b.lift.symm a✝ a✝¹ = a✝ (b.repr.symm (FreeGroup.of a✝¹))
                          @[simp]
                          theorem FreeAddGroupBasis.lift_apply_apply {ι : Type u_1} {G : Type u_3} {H : Type u_4} [AddGroup G] [AddGroup H] (b : FreeAddGroupBasis ι G) (a✝ : ιH) (x : G) :
                          (b.lift a✝) x = (FreeAddGroup.lift a✝) (b.repr x)
                          @[simp]
                          theorem FreeAddGroupBasis.lift_symm_apply {ι : Type u_1} {G : Type u_3} {H : Type u_4} [AddGroup G] [AddGroup H] (b : FreeAddGroupBasis ι G) (a✝ : G →+ H) (a✝¹ : ι) :
                          b.lift.symm a✝ a✝¹ = a✝ (b.repr.symm (FreeAddGroup.of a✝¹))
                          theorem FreeGroupBasis.ext_hom {ι : Type u_1} {G : Type u_3} {H : Type u_4} [Group G] [Group H] (b : FreeGroupBasis ι G) (f g : G →* H) (h : ∀ (i : ι), f (b i) = g (b i)) :
                          f = g

                          If two morphisms on G coincide on the elements of a basis, then they coincide.

                          theorem FreeAddGroupBasis.ext_hom {ι : Type u_1} {G : Type u_3} {H : Type u_4} [AddGroup G] [AddGroup H] (b : FreeAddGroupBasis ι G) (f g : G →+ H) (h : ∀ (i : ι), f (b i) = g (b i)) :
                          f = g

                          If two morphisms on G coincide on the elements of a basis, then they coincide.

                          def FreeGroupBasis.ofLift {G : Type u} [Group G] (X : Type u) (of : XG) (lift : {H : Type u} → [inst : Group H] → (XH) (G →* H)) (lift_of : ∀ {H : Type u} [inst : Group H] (f : XH) (a : X), (lift f) (of a) = f a) :

                          If a group satisfies the universal property of a free group with respect to a given type, then it admits a free group basis based on this type. Here, the universal property is expressed as in IsFreeGroup.lift and its properties.

                          Equations
                          Instances For
                            def FreeAddGroupBasis.ofLift {G : Type u} [AddGroup G] (X : Type u) (of : XG) (lift : {H : Type u} → [inst : AddGroup H] → (XH) (G →+ H)) (lift_of : ∀ {H : Type u} [inst : AddGroup H] (f : XH) (a : X), (lift f) (of a) = f a) :

                            If an additive group satisfies the universal property of an additive free group with respect to a given type, then it admits an additive free group basis based on this type. Here, the universal property is expressed as in IsFreeAddGroup.lift and its properties.

                            Equations
                            Instances For
                              noncomputable def FreeGroupBasis.ofUniqueLift {G : Type u} [Group G] (X : Type u) (of : XG) (h : ∀ {H : Type u} [inst : Group H] (f : XH), ∃! F : G →* H, ∀ (a : X), F (of a) = f a) :

                              If a group satisfies the universal property of a free group with respect to a given type, then it admits a free group basis based on this type. Here the universal property is expressed as in IsFreeGroup.unique_lift.

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                noncomputable def FreeAddGroupBasis.ofUniqueLift {G : Type u} [AddGroup G] (X : Type u) (of : XG) (h : ∀ {H : Type u} [inst : AddGroup H] (f : XH), ∃! F : G →+ H, ∀ (a : X), F (of a) = f a) :

                                If an additive group satisfies the universal property of an additive free group with respect to a given type, then it admits an additive free group basis based on this type. Here the universal property is expressed as in IsFreeAddGroup.unique_lift.

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For
                                  def IsFreeGroup.Generators (G : Type u_1) [Group G] [IsFreeGroup G] :
                                  Type u_1

                                  A set of generators of a free group, chosen arbitrarily

                                  Equations
                                  Instances For

                                    A set of generators of an additive free group, chosen arbitrarily

                                    Equations
                                    Instances For
                                      @[irreducible]
                                      noncomputable def IsFreeGroup.mulEquiv (G : Type u_2) [Group G] [IsFreeGroup G] :

                                      Any free group is isomorphic to "the" free group.

                                      Equations
                                      Instances For

                                        Any additive free group is isomorphic to "the" additive free group.

                                        Equations
                                        Instances For

                                          Any additive free group is isomorphic to "the" additive free group.

                                          noncomputable def IsFreeGroup.basis (G : Type u_1) [Group G] [IsFreeGroup G] :

                                          A free group basis of a free group G, over the set Generators G.

                                          Equations
                                          Instances For

                                            An additive free group basis of an additive free group G, over the set Generators G.

                                            Equations
                                            Instances For
                                              noncomputable def IsFreeGroup.toFreeGroup (G : Type u_1) [Group G] [IsFreeGroup G] :

                                              Any free group is isomorphic to "the" free group.

                                              Equations
                                              Instances For

                                                Any additive free group is isomorphic to "the" additive free group.

                                                Equations
                                                Instances For
                                                  @[simp]
                                                  theorem IsFreeAddGroup.toFreeAddGroup_apply (G : Type u_1) [AddGroup G] [IsFreeAddGroup G] (a✝ : G) :
                                                  (toFreeAddGroup G) a✝ = (addEquiv G).symm a✝
                                                  @[simp]
                                                  theorem IsFreeGroup.toFreeGroup_symm_apply (G : Type u_1) [Group G] [IsFreeGroup G] (a✝ : FreeGroup (Generators G)) :
                                                  (toFreeGroup G).symm a✝ = (mulEquiv G) a✝
                                                  @[simp]
                                                  theorem IsFreeGroup.toFreeGroup_apply (G : Type u_1) [Group G] [IsFreeGroup G] (a✝ : G) :
                                                  (toFreeGroup G) a✝ = (mulEquiv G).symm a✝
                                                  noncomputable def IsFreeGroup.of {G : Type u_1} [Group G] [IsFreeGroup G] :
                                                  Generators GG

                                                  The canonical injection of G's generators into G

                                                  Equations
                                                  Instances For
                                                    noncomputable def IsFreeAddGroup.of {G : Type u_1} [AddGroup G] [IsFreeAddGroup G] :
                                                    Generators GG

                                                    The canonical injection of G's generators into G

                                                    Equations
                                                    Instances For
                                                      noncomputable def IsFreeGroup.lift {G : Type u_1} [Group G] [IsFreeGroup G] {H : Type u_2} [Group H] :
                                                      (Generators GH) (G →* H)

                                                      The equivalence between functions on the generators and group homomorphisms from a free group given by those generators.

                                                      Equations
                                                      Instances For
                                                        noncomputable def IsFreeAddGroup.lift {G : Type u_1} [AddGroup G] [IsFreeAddGroup G] {H : Type u_2} [AddGroup H] :
                                                        (Generators GH) (G →+ H)

                                                        The equivalence between functions on the generators and additive group homomorphisms from an additive free group given by those generators.

                                                        Equations
                                                        Instances For
                                                          @[simp]
                                                          theorem IsFreeGroup.lift_of {G : Type u_1} [Group G] [IsFreeGroup G] {H : Type u_2} [Group H] (f : Generators GH) (a : Generators G) :
                                                          (lift f) (of a) = f a
                                                          @[simp]
                                                          theorem IsFreeAddGroup.lift_of {G : Type u_1} [AddGroup G] [IsFreeAddGroup G] {H : Type u_2} [AddGroup H] (f : Generators GH) (a : Generators G) :
                                                          (lift f) (of a) = f a
                                                          @[simp]
                                                          theorem IsFreeGroup.lift_symm_apply {G : Type u_1} [Group G] [IsFreeGroup G] {H : Type u_2} [Group H] (f : G →* H) (a : Generators G) :
                                                          lift.symm f a = f (of a)
                                                          @[simp]
                                                          theorem IsFreeAddGroup.lift_symm_apply {G : Type u_1} [AddGroup G] [IsFreeAddGroup G] {H : Type u_2} [AddGroup H] (f : G →+ H) (a : Generators G) :
                                                          lift.symm f a = f (of a)
                                                          theorem IsFreeGroup.ext_hom {G : Type u_1} [Group G] [IsFreeGroup G] {H : Type u_2} [Group H] f g : G →* H (h : ∀ (a : Generators G), f (of a) = g (of a)) :
                                                          f = g
                                                          theorem IsFreeAddGroup.ext_hom {G : Type u_1} [AddGroup G] [IsFreeAddGroup G] {H : Type u_2} [AddGroup H] f g : G →+ H (h : ∀ (a : Generators G), f (of a) = g (of a)) :
                                                          f = g
                                                          theorem IsFreeGroup.unique_lift {G : Type u_1} [Group G] [IsFreeGroup G] {H : Type u_2} [Group H] (f : Generators GH) :
                                                          ∃! F : G →* H, ∀ (a : Generators G), F (of a) = f a

                                                          The universal property of a free group: A function from the generators of G to another group extends in a unique way to a homomorphism from G.

                                                          Note that since IsFreeGroup.lift is expressed as a bijection, it already expresses the universal property.

                                                          theorem IsFreeAddGroup.unique_lift {G : Type u_1} [AddGroup G] [IsFreeAddGroup G] {H : Type u_2} [AddGroup H] (f : Generators GH) :
                                                          ∃! F : G →+ H, ∀ (a : Generators G), F (of a) = f a

                                                          The universal property of an additive free group: A function from the generators of G to another additive group extends in a unique way to a homomorphism from G.

                                                          Note that since IsFreeAddGroup.lift is expressed as a bijection, it already expresses the universal property.

                                                          theorem IsFreeGroup.ofLift {G : Type u} [Group G] (X : Type u) (of : XG) (lift : {H : Type u} → [inst : Group H] → (XH) (G →* H)) (lift_of : ∀ {H : Type u} [inst : Group H] (f : XH) (a : X), (lift f) (of a) = f a) :

                                                          If a group satisfies the universal property of a free group with respect to a given type, then it is free. Here, the universal property is expressed as in IsFreeGroup.lift and its properties.

                                                          theorem IsFreeAddGroup.ofLift {G : Type u} [AddGroup G] (X : Type u) (of : XG) (lift : {H : Type u} → [inst : AddGroup H] → (XH) (G →+ H)) (lift_of : ∀ {H : Type u} [inst : AddGroup H] (f : XH) (a : X), (lift f) (of a) = f a) :

                                                          If an additive group satisfies the universal property of an additive free group with respect to a given type, then it is free. Here, the universal property is expressed as in IsFreeAddGroup.lift and its properties.

                                                          theorem IsFreeGroup.ofUniqueLift {G : Type u} [Group G] (X : Type u) (of : XG) (h : ∀ {H : Type u} [inst : Group H] (f : XH), ∃! F : G →* H, ∀ (a : X), F (of a) = f a) :

                                                          If a group satisfies the universal property of a free group with respect to a given type, then it is free. Here the universal property is expressed as in IsFreeGroup.unique_lift.

                                                          theorem IsFreeAddGroup.ofUniqueLift {G : Type u} [AddGroup G] (X : Type u) (of : XG) (h : ∀ {H : Type u} [inst : AddGroup H] (f : XH), ∃! F : G →+ H, ∀ (a : X), F (of a) = f a) :

                                                          If an additive group satisfies the universal property of an additive free group with respect to a given type, then it is free. Here the universal property is expressed as in IsFreeAddGroup.unique_lift.

                                                          theorem IsFreeGroup.ofMulEquiv {G : Type u_1} [Group G] [IsFreeGroup G] {H : Type u_2} [Group H] (e : G ≃* H) :
                                                          theorem IsFreeAddGroup.ofAddEquiv {G : Type u_1} [AddGroup G] [IsFreeAddGroup G] {H : Type u_2} [AddGroup H] (e : G ≃+ H) :