Documentation

Mathlib.RingTheory.Regular.RegularSequence

Regular sequences and weakly regular sequences #

The notion of a regular sequence is fundamental in commutative algebra. Properties of regular sequences encode information about singularities of a ring and regularity of a sequence can be tested homologically. However the notion of a regular sequence is only really sensible for Noetherian local rings.

TODO: Koszul regular sequences, H_1-regular sequences, quasi-regular sequences, depth.

Tags #

module, regular element, regular sequence, commutative algebra

@[reducible, inline]
abbrev Ideal.ofList {R : Type u_1} [Semiring R] (rs : List R) :

The ideal generated by a list of elements.

Equations
    Instances For
      @[simp]
      theorem Ideal.ofList_append {R : Type u_1} [Semiring R] (rsโ‚ rsโ‚‚ : List R) :
      ofList (rsโ‚ ++ rsโ‚‚) = ofList rsโ‚ โŠ” ofList rsโ‚‚
      @[simp]
      theorem Ideal.ofList_cons {R : Type u_1} [Semiring R] (r : R) (rs : List R) :
      ofList (r :: rs) = span {r} โŠ” ofList rs
      @[simp]
      theorem Ideal.map_ofList {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (f : R โ†’+* S) (rs : List R) :
      map f (ofList rs) = ofList (List.map (โ‡‘f) rs)
      theorem Ideal.ofList_cons_smul {R : Type u_7} [CommSemiring R] (r : R) (rs : List R) {M : Type u_8} [AddCommMonoid M] [Module R M] (N : Submodule R M) :
      ofList (r :: rs) โ€ข N = r โ€ข N โŠ” ofList rs โ€ข N
      theorem Submodule.smul_top_le_comap_smul_top {R : Type u_1} {M : Type u_3} {Mโ‚‚ : Type u_4} [Semiring R] [AddCommMonoid M] [AddCommMonoid Mโ‚‚] [Module R M] [Module R Mโ‚‚] (I : Ideal R) (f : M โ†’โ‚—[R] Mโ‚‚) :

      The equivalence between M โงธ (rโ‚€, rโ‚, โ€ฆ, rโ‚™)M and (M โงธ rโ‚€M) โงธ (rโ‚, โ€ฆ, rโ‚™) (M โงธ rโ‚€M).

      Equations
        Instances For

          The equivalence between M โงธ (rโ‚€, rโ‚, โ€ฆ, rโ‚™)M and (M โงธ (rโ‚, โ€ฆ, rโ‚™)) โงธ rโ‚€ (M โงธ (rโ‚, โ€ฆ, rโ‚™)).

          Equations
            Instances For
              structure RingTheory.Sequence.IsWeaklyRegular {R : Type u_1} (M : Type u_3) [CommRing R] [AddCommGroup M] [Module R M] (rs : List R) :

              A sequence [rโ‚, โ€ฆ, rโ‚™] is weakly regular on M iff rแตข is regular on Mโงธ(rโ‚, โ€ฆ, rแตขโ‚‹โ‚)M for all 1 โ‰ค i โ‰ค n.

              Instances For
                structure RingTheory.Sequence.IsRegular {R : Type u_1} (M : Type u_3) [CommRing R] [AddCommGroup M] [Module R M] (rs : List R) extends RingTheory.Sequence.IsWeaklyRegular M rs :

                A weakly regular sequence rs on M is regular if also M/rsM โ‰  0.

                Instances For
                  theorem AddEquiv.isWeaklyRegular_congr {R : Type u_1} {S : Type u_2} {M : Type u_3} {Mโ‚‚ : Type u_4} [CommRing R] [CommRing S] [AddCommGroup M] [AddCommGroup Mโ‚‚] [Module R M] [Module S Mโ‚‚] {e : M โ‰ƒ+ Mโ‚‚} {as : List R} {bs : List S} (h : List.Forallโ‚‚ (fun (r : R) (s : S) => โˆ€ (x : M), e (r โ€ข x) = s โ€ข e x) as bs) :
                  theorem LinearEquiv.isWeaklyRegular_congr' {R : Type u_1} {S : Type u_2} {M : Type u_3} {Mโ‚‚ : Type u_4} [CommRing R] [CommRing S] [AddCommGroup M] [AddCommGroup Mโ‚‚] [Module R M] [Module S Mโ‚‚] {ฯƒ : R โ†’+* S} {ฯƒ' : S โ†’+* R} [RingHomInvPair ฯƒ ฯƒ'] [RingHomInvPair ฯƒ' ฯƒ] (e : M โ‰ƒโ‚›โ‚—[ฯƒ] Mโ‚‚) (rs : List R) :
                  theorem LinearEquiv.isWeaklyRegular_congr {R : Type u_1} {M : Type u_3} {Mโ‚‚ : Type u_4} [CommRing R] [AddCommGroup M] [AddCommGroup Mโ‚‚] [Module R M] [Module R Mโ‚‚] (e : M โ‰ƒโ‚—[R] Mโ‚‚) (rs : List R) :
                  theorem AddEquiv.isRegular_congr {R : Type u_1} {S : Type u_2} {M : Type u_3} {Mโ‚‚ : Type u_4} [CommRing R] [CommRing S] [AddCommGroup M] [AddCommGroup Mโ‚‚] [Module R M] [Module S Mโ‚‚] {e : M โ‰ƒ+ Mโ‚‚} {as : List R} {bs : List S} (h : List.Forallโ‚‚ (fun (r : R) (s : S) => โˆ€ (x : M), e (r โ€ข x) = s โ€ข e x) as bs) :
                  theorem LinearEquiv.isRegular_congr' {R : Type u_1} {S : Type u_2} {M : Type u_3} {Mโ‚‚ : Type u_4} [CommRing R] [CommRing S] [AddCommGroup M] [AddCommGroup Mโ‚‚] [Module R M] [Module S Mโ‚‚] {ฯƒ : R โ†’+* S} {ฯƒ' : S โ†’+* R} [RingHomInvPair ฯƒ ฯƒ'] [RingHomInvPair ฯƒ' ฯƒ] (e : M โ‰ƒโ‚›โ‚—[ฯƒ] Mโ‚‚) (rs : List R) :
                  theorem LinearEquiv.isRegular_congr {R : Type u_1} {M : Type u_3} {Mโ‚‚ : Type u_4} [CommRing R] [AddCommGroup M] [AddCommGroup Mโ‚‚] [Module R M] [Module R Mโ‚‚] (e : M โ‰ƒโ‚—[R] Mโ‚‚) (rs : List R) :
                  theorem RingTheory.Sequence.IsWeaklyRegular.cons {R : Type u_1} {M : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] {r : R} {rs : List R} (h1 : IsSMulRegular M r) (h2 : IsWeaklyRegular (QuotSMulTop r M) rs) :
                  theorem RingTheory.Sequence.IsWeaklyRegular.cons' {R : Type u_1} {M : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] {r : R} {rs : List R} (h1 : IsSMulRegular M r) (h2 : IsWeaklyRegular (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs)) :
                  def RingTheory.Sequence.IsWeaklyRegular.recIterModByRegular {R : Type u_1} [CommRing R] {motive : (M : Type v) โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ (rs : List R) โ†’ IsWeaklyRegular M rs โ†’ Sort u_7} (nil : (M : Type v) โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ motive M [] โ‹ฏ) (cons : {M : Type v} โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ (r : R) โ†’ (rs : List R) โ†’ (h1 : IsSMulRegular M r) โ†’ (h2 : IsWeaklyRegular (QuotSMulTop r M) rs) โ†’ motive (QuotSMulTop r M) rs h2 โ†’ motive M (r :: rs) โ‹ฏ) {M : Type v} [AddCommGroup M] [Module R M] {rs : List R} (h : IsWeaklyRegular M rs) :
                  motive M rs h

                  Weakly regular sequences can be inductively characterized by:

                  • The empty sequence is weakly regular on any module.
                  • If r is regular on M and rs is a weakly regular sequence on MโงธrM then the sequence obtained from rs by prepending r is weakly regular on M.

                  This is the induction principle produced by the inductive definition above. The motive will usually be valued in Prop, but Sort* works too.

                  Equations
                    Instances For
                      def RingTheory.Sequence.IsWeaklyRegular.ndrecIterModByRegular {R : Type u_1} [CommRing R] {motive : (M : Type v) โ†’ [inst : AddCommGroup M] โ†’ [Module R M] โ†’ List R โ†’ Sort u_7} (nil : (M : Type v) โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ motive M []) (cons : {M : Type v} โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ (r : R) โ†’ (rs : List R) โ†’ IsSMulRegular M r โ†’ IsWeaklyRegular (QuotSMulTop r M) rs โ†’ motive (QuotSMulTop r M) rs โ†’ motive M (r :: rs)) {M : Type v} [AddCommGroup M] [Module R M] {rs : List R} :
                      IsWeaklyRegular M rs โ†’ motive M rs

                      A simplified version of IsWeaklyRegular.recIterModByRegular where the motive is not allowed to depend on the proof of IsWeaklyRegular.

                      Equations
                        Instances For
                          @[irreducible]
                          def RingTheory.Sequence.IsWeaklyRegular.recIterModByRegularWithRing {motive : (R : Type u) โ†’ [inst : CommRing R] โ†’ (M : Type v) โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ (rs : List R) โ†’ IsWeaklyRegular M rs โ†’ Sort u_7} (nil : (R : Type u) โ†’ [inst : CommRing R] โ†’ (M : Type v) โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ motive R M [] โ‹ฏ) (cons : {R : Type u} โ†’ [inst : CommRing R] โ†’ {M : Type v} โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ (r : R) โ†’ (rs : List R) โ†’ (h1 : IsSMulRegular M r) โ†’ (h2 : IsWeaklyRegular (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs)) โ†’ motive (R โงธ Ideal.span {r}) (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs) h2 โ†’ motive R M (r :: rs) โ‹ฏ) {R : Type u} [CommRing R] {M : Type v} [AddCommGroup M] [Module R M] {rs : List R} (h : IsWeaklyRegular M rs) :
                          motive R M rs h

                          An alternate induction principle from IsWeaklyRegular.recIterModByRegular where we mod out by successive elements in both the module and the base ring. This is useful for propagating certain properties of the initial M, e.g. faithfulness or freeness, throughout the induction.

                          Equations
                            Instances For
                              def RingTheory.Sequence.IsWeaklyRegular.ndrecWithRing {motive : (R : Type u) โ†’ [inst : CommRing R] โ†’ (M : Type v) โ†’ [inst_1 : AddCommGroup M] โ†’ [Module R M] โ†’ List R โ†’ Sort u_7} (nil : (R : Type u) โ†’ [inst : CommRing R] โ†’ (M : Type v) โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ motive R M []) (cons : {R : Type u} โ†’ [inst : CommRing R] โ†’ {M : Type v} โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ (r : R) โ†’ (rs : List R) โ†’ IsSMulRegular M r โ†’ IsWeaklyRegular (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs) โ†’ motive (R โงธ Ideal.span {r}) (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs) โ†’ motive R M (r :: rs)) {R : Type u} [CommRing R] {M : Type v} [AddCommGroup M] [Module R M] {rs : List R} :
                              IsWeaklyRegular M rs โ†’ motive R M rs

                              A simplified version of IsWeaklyRegular.recIterModByRegularWithRing where the motive is not allowed to depend on the proof of IsWeaklyRegular.

                              Equations
                                Instances For
                                  theorem RingTheory.Sequence.isWeaklyRegular_append_iff {R : Type u_1} (M : Type u_3) [CommRing R] [AddCommGroup M] [Module R M] (rsโ‚ rsโ‚‚ : List R) :
                                  IsWeaklyRegular M (rsโ‚ ++ rsโ‚‚) โ†” IsWeaklyRegular M rsโ‚ โˆง IsWeaklyRegular (M โงธ Ideal.ofList rsโ‚ โ€ข โŠค) rsโ‚‚
                                  theorem RingTheory.Sequence.isWeaklyRegular_append_iff' {R : Type u_1} (M : Type u_3) [CommRing R] [AddCommGroup M] [Module R M] (rsโ‚ rsโ‚‚ : List R) :
                                  IsWeaklyRegular M (rsโ‚ ++ rsโ‚‚) โ†” IsWeaklyRegular M rsโ‚ โˆง IsWeaklyRegular (M โงธ Ideal.ofList rsโ‚ โ€ข โŠค) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.ofList rsโ‚))) rsโ‚‚)
                                  theorem RingTheory.Sequence.IsRegular.cons {R : Type u_1} {M : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] {r : R} {rs : List R} (h1 : IsSMulRegular M r) (h2 : IsRegular (QuotSMulTop r M) rs) :
                                  IsRegular M (r :: rs)
                                  theorem RingTheory.Sequence.IsRegular.cons' {R : Type u_1} {M : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] {r : R} {rs : List R} (h1 : IsSMulRegular M r) (h2 : IsRegular (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs)) :
                                  IsRegular M (r :: rs)
                                  def RingTheory.Sequence.IsRegular.recIterModByRegular {R : Type u_1} [CommRing R] {motive : (M : Type v) โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ (rs : List R) โ†’ IsRegular M rs โ†’ Sort u_7} (nil : (M : Type v) โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ [inst_2 : Nontrivial M] โ†’ motive M [] โ‹ฏ) (cons : {M : Type v} โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ (r : R) โ†’ (rs : List R) โ†’ (h1 : IsSMulRegular M r) โ†’ (h2 : IsRegular (QuotSMulTop r M) rs) โ†’ motive (QuotSMulTop r M) rs h2 โ†’ motive M (r :: rs) โ‹ฏ) {M : Type v} [AddCommGroup M] [Module R M] {rs : List R} (h : IsRegular M rs) :
                                  motive M rs h

                                  Regular sequences can be inductively characterized by:

                                  • The empty sequence is regular on any nonzero module.
                                  • If r is regular on M and rs is a regular sequence on MโงธrM then the sequence obtained from rs by prepending r is regular on M.

                                  This is the induction principle produced by the inductive definition above. The motive will usually be valued in Prop, but Sort* works too.

                                  Equations
                                    Instances For
                                      def RingTheory.Sequence.IsRegular.ndrecIterModByRegular {R : Type u_1} [CommRing R] {motive : (M : Type v) โ†’ [inst : AddCommGroup M] โ†’ [Module R M] โ†’ List R โ†’ Sort u_7} (nil : (M : Type v) โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ [Nontrivial M] โ†’ motive M []) (cons : {M : Type v} โ†’ [inst : AddCommGroup M] โ†’ [inst_1 : Module R M] โ†’ (r : R) โ†’ (rs : List R) โ†’ IsSMulRegular M r โ†’ IsRegular (QuotSMulTop r M) rs โ†’ motive (QuotSMulTop r M) rs โ†’ motive M (r :: rs)) {M : Type v} [AddCommGroup M] [Module R M] {rs : List R} :
                                      IsRegular M rs โ†’ motive M rs

                                      A simplified version of IsRegular.recIterModByRegular where the motive is not allowed to depend on the proof of IsRegular.

                                      Equations
                                        Instances For
                                          def RingTheory.Sequence.IsRegular.recIterModByRegularWithRing {motive : (R : Type u) โ†’ [inst : CommRing R] โ†’ (M : Type v) โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ (rs : List R) โ†’ IsRegular M rs โ†’ Sort u_7} (nil : (R : Type u) โ†’ [inst : CommRing R] โ†’ (M : Type v) โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ [inst_3 : Nontrivial M] โ†’ motive R M [] โ‹ฏ) (cons : {R : Type u} โ†’ [inst : CommRing R] โ†’ {M : Type v} โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ (r : R) โ†’ (rs : List R) โ†’ (h1 : IsSMulRegular M r) โ†’ (h2 : IsRegular (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs)) โ†’ motive (R โงธ Ideal.span {r}) (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs) h2 โ†’ motive R M (r :: rs) โ‹ฏ) {R : Type u} [CommRing R] {M : Type v} [AddCommGroup M] [Module R M] {rs : List R} (h : IsRegular M rs) :
                                          motive R M rs h

                                          An alternate induction principle from IsRegular.recIterModByRegular where we mod out by successive elements in both the module and the base ring. This is useful for propagating certain properties of the initial M, e.g. faithfulness or freeness, throughout the induction.

                                          Equations
                                            Instances For
                                              def RingTheory.Sequence.IsRegular.ndrecIterModByRegularWithRing {motive : (R : Type u) โ†’ [inst : CommRing R] โ†’ (M : Type v) โ†’ [inst_1 : AddCommGroup M] โ†’ [Module R M] โ†’ List R โ†’ Sort u_7} (nil : (R : Type u) โ†’ [inst : CommRing R] โ†’ (M : Type v) โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ [Nontrivial M] โ†’ motive R M []) (cons : {R : Type u} โ†’ [inst : CommRing R] โ†’ {M : Type v} โ†’ [inst_1 : AddCommGroup M] โ†’ [inst_2 : Module R M] โ†’ (r : R) โ†’ (rs : List R) โ†’ IsSMulRegular M r โ†’ IsRegular (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs) โ†’ motive (R โงธ Ideal.span {r}) (QuotSMulTop r M) (List.map (โ‡‘(Ideal.Quotient.mk (Ideal.span {r}))) rs) โ†’ motive R M (r :: rs)) {R : Type u} [CommRing R] {M : Type v} [AddCommGroup M] [Module R M] {rs : List R} :
                                              IsRegular M rs โ†’ motive R M rs

                                              A simplified version of IsRegular.recIterModByRegularWithRing where the motive is not allowed to depend on the proof of IsRegular.

                                              Equations
                                                Instances For
                                                  theorem RingTheory.Sequence.eq_nil_of_isRegular_on_artinian {R : Type u_1} {M : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] [IsArtinian R M] {rs : List R} :
                                                  IsRegular M rs โ†’ rs = []
                                                  theorem RingTheory.Sequence.IsWeaklyRegular.isWeaklyRegular_lTensor {R : Type u_1} {M : Type u_3} {Mโ‚‚ : Type u_4} [CommRing R] [AddCommGroup M] [AddCommGroup Mโ‚‚] [Module R M] [Module R Mโ‚‚] [Module.Flat R Mโ‚‚] {rs : List R} (h : IsWeaklyRegular M rs) :
                                                  IsWeaklyRegular (TensorProduct R Mโ‚‚ M) rs
                                                  theorem RingTheory.Sequence.IsWeaklyRegular.isWeaklyRegular_rTensor {R : Type u_1} {M : Type u_3} {Mโ‚‚ : Type u_4} [CommRing R] [AddCommGroup M] [AddCommGroup Mโ‚‚] [Module R M] [Module R Mโ‚‚] [Module.Flat R Mโ‚‚] {rs : List R} (h : IsWeaklyRegular M rs) :
                                                  IsWeaklyRegular (TensorProduct R M Mโ‚‚) rs
                                                  theorem RingTheory.Sequence.map_first_exact_on_four_term_right_exact_of_isSMulRegular_last {R : Type u_1} {M : Type u_3} {Mโ‚‚ : Type u_4} {Mโ‚ƒ : Type u_5} {Mโ‚„ : Type u_6} [CommRing R] [AddCommGroup M] [AddCommGroup Mโ‚‚] [AddCommGroup Mโ‚ƒ] [AddCommGroup Mโ‚„] [Module R M] [Module R Mโ‚‚] [Module R Mโ‚ƒ] [Module R Mโ‚„] {rs : List R} {fโ‚ : M โ†’โ‚—[R] Mโ‚‚} {fโ‚‚ : Mโ‚‚ โ†’โ‚—[R] Mโ‚ƒ} {fโ‚ƒ : Mโ‚ƒ โ†’โ‚—[R] Mโ‚„} (hโ‚โ‚‚ : Function.Exact โ‡‘fโ‚ โ‡‘fโ‚‚) (hโ‚‚โ‚ƒ : Function.Exact โ‡‘fโ‚‚ โ‡‘fโ‚ƒ) (hโ‚ƒ : Function.Surjective โ‡‘fโ‚ƒ) (hโ‚„ : IsWeaklyRegular Mโ‚„ rs) :
                                                  theorem RingTheory.Sequence.IsWeaklyRegular.prototype_perm {R : Type u_1} {M : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] {rs : List R} (h : IsWeaklyRegular M rs) {rs' : List R} (h'' : rs.Perm rs') (h' : โˆ€ (a b : R) (rs' : List R), (a :: b :: rs').Subperm rs โ†’ have K := Submodule.torsionBy R (M โงธ Ideal.ofList rs' โ€ข โŠค) b; K = a โ€ข K โ†’ K = โŠฅ) :
                                                  theorem RingTheory.Sequence.IsWeaklyRegular.of_perm_of_subset_jacobson_annihilator {R : Type u_1} {M : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] [IsNoetherian R M] {rs rs' : List R} (h1 : IsWeaklyRegular M rs) (h2 : rs.Perm rs') (h3 : โˆ€ r โˆˆ rs, r โˆˆ (Module.annihilator R M).jacobson) :
                                                  theorem RingTheory.Sequence.IsRegular.of_perm_of_subset_jacobson_annihilator {R : Type u_1} {M : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] [IsNoetherian R M] {rs rs' : List R} (h1 : IsRegular M rs) (h2 : rs.Perm rs') (h3 : โˆ€ r โˆˆ rs, r โˆˆ (Module.annihilator R M).jacobson) :
                                                  IsRegular M rs'
                                                  theorem IsLocalRing.isRegular_of_perm {R : Type u_1} {M : Type u_3} [CommRing R] [AddCommGroup M] [Module R M] [IsLocalRing R] [IsNoetherian R M] {rs rs' : List R} (h1 : RingTheory.Sequence.IsRegular M rs) (h2 : rs.Perm rs') :