Documentation

ConNF.Construction.NewAllowable

Allowable permutations #

In this file, we define the type of allowable permutations at level α, assuming that they exist for all type indices β < α.

Main declarations #

def ConNF.Derivatives [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] :

A collection of derivatives is a collection of allowable permutations at every type index β < α. The type of allowable permutations is a subtype of this type.

Equations
Instances For
    instance ConNF.instGroupDerivatives [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] :
    Group ConNF.Derivatives
    Equations
    • ConNF.instGroupDerivatives = Pi.group
    @[simp]
    theorem ConNF.Derivatives.one_apply [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (β : ConNF.TypeIndex) [ConNF.LtLevel β] :
    1 β = 1
    @[simp]
    theorem ConNF.Derivatives.mul_apply [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (β : ConNF.TypeIndex) [ConNF.LtLevel β] (ρ : ConNF.Derivatives) (ρ' : ConNF.Derivatives) :
    (ρ * ρ') β = ρ β * ρ' β
    @[simp]
    theorem ConNF.Derivatives.inv_apply [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (β : ConNF.TypeIndex) [ConNF.LtLevel β] (ρ : ConNF.Derivatives) :
    ρ⁻¹ β = (ρ β)⁻¹

    The bottom of a path can be easily manipulated with operations such as cons. We now need to introduce machinery for manipulating the top of a path. This allows us to convert collections of derivatives structural permutations, whose derivative maps are more naturally expressed in the other direction.

    def ConNF.Derivatives.pathTop {V : Type u_1} [Quiver V] {x : V} {y : V} :
    Quiver.Path x yV

    If the path is nonempty, extract the second element of the path. This requires induction over paths because paths in quivers are expressed with their cons operation at the end, not the start.

    Equations
    Instances For
      theorem ConNF.Derivatives.pathTop_toPath_comp {V : Type u_2} [Quiver V] {x : V} {y : V} {z : V} (e : x y) (p : Quiver.Path y z) :
      ConNF.Derivatives.pathTop (e.toPath.comp p) = y
      def ConNF.Derivatives.pathTop_hom {V : Type u_1} [Quiver V] {x : V} {y : V} (p : Quiver.Path x y) (h : p.length 0) :
      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        def ConNF.Derivatives.pathTail {V : Type u_1} [Quiver V] {x : V} {y : V} (p : Quiver.Path x y) :

        Extract the portion of the path after the first morphism.

        Equations
        Instances For
          theorem ConNF.Derivatives.pathTop_pathTail {V : Type u_2} [Quiver V] {x : V} {y : V} (p : Quiver.Path x y) (h : p.length 0) :

          We can remove the first morphism from a path and compose it back to form the original path.

          theorem ConNF.Derivatives.cons_heq {V : Type u_2} [Quiver V] {x₁ : V} {x₂ : V} {y : V} {z : V} (p₁ : Quiver.Path x₁ y) (p₂ : Quiver.Path x₂ y) (hx : x₁ = x₂) (hp : HEq p₁ p₂) (e : y z) :
          HEq (p₁.cons e) (p₂.cons e)
          theorem ConNF.Derivatives.pathTail_comp {V : Type u_2} [Quiver V] {x : V} {y : V} {z : V} (f : x y) (p : Quiver.Path y z) :
          HEq (ConNF.Derivatives.pathTail (f.toPath.comp p)) p

          Adding and removing a morphism from the top of a path doesn't change anything.

          def ConNF.Derivatives.toStructPerm' [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (ρ : ConNF.Derivatives) :
          ConNF.StructPerm ConNF.α

          Convert a collection of derivatives to a structural permutation. To work out the A-derivative, we extract the first morphism in the path A and use it to determine which of the β-allowable permutations in ρ we will use.

          Equations
          Instances For
            def ConNF.Derivatives.toStructPerm [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] :
            ConNF.Derivatives →* ConNF.StructPerm ConNF.α

            Convert a collection of derivatives to a structural permutation.

            Equations
            • ConNF.Derivatives.toStructPerm = { toFun := ConNF.Derivatives.toStructPerm', map_one' := , map_mul' := }
            Instances For
              theorem ConNF.Derivatives.toStructPerm_congr [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (ρ : ConNF.Derivatives) {β₁ : ConNF.TypeIndex} {β₂ : ConNF.TypeIndex} [ConNF.LtLevel β₁] [ConNF.LtLevel β₂] (hβ : β₁ = β₂) {A₁ : ConNF.ExtendedIndex β₁} {A₂ : ConNF.ExtendedIndex β₂} (hA : HEq A₁ A₂) :
              ConNF.Allowable.toStructPerm (ρ β₁) A₁ = ConNF.Allowable.toStructPerm (ρ β₂) A₂
              theorem ConNF.Derivatives.toStructPerm'_injective [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] :
              Function.Injective ConNF.Derivatives.toStructPerm'
              theorem ConNF.Derivatives.toStructPerm_injective [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] :
              Function.Injective ConNF.Derivatives.toStructPerm
              theorem ConNF.Derivatives.comp_toPath_toStructPerm [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (ρ : ConNF.Derivatives) (β : ConNF.TypeIndex) [i : ConNF.LtLevel β] :
              ConNF.Tree.comp (Quiver.Hom.toPath ) (ConNF.Derivatives.toStructPerm ρ) = ConNF.Allowable.toStructPerm (ρ β)
              theorem ConNF.Derivatives.coe_apply_bot [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (ρ : ConNF.Derivatives) :
              ρ = ConNF.Derivatives.toStructPerm ρ (Quiver.Hom.toPath )
              instance ConNF.Derivatives.instMulAction [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] {X : Type u_1} [MulAction (ConNF.StructPerm ConNF.α) X] :
              MulAction ConNF.Derivatives X
              Equations
              @[simp]
              theorem ConNF.Derivatives.toStructPerm_smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] {X : Type u_1} [MulAction (ConNF.StructPerm ConNF.α) X] (ρ : ConNF.Derivatives) (x : X) :
              ρ x = ConNF.Derivatives.toStructPerm ρ x
              instance ConNF.Derivatives.instMulActionCode [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] :
              MulAction ConNF.Derivatives ConNF.Code

              In the same way that structural permutations act on addresses, collections of derivatives act on codes.

              Equations
              @[simp]
              theorem ConNF.Derivatives.β_smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (ρ : ConNF.Derivatives) (c : ConNF.Code) :
              (ρ c) = c
              @[simp]
              theorem ConNF.Derivatives.members_smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (ρ : ConNF.Derivatives) (c : ConNF.Code) :
              (ρ c).members = ρ c c.members
              @[simp]
              theorem ConNF.Derivatives.smul_mk [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (f : ConNF.Derivatives) (γ : ConNF.TypeIndex) [ConNF.LtLevel γ] (s : Set (ConNF.TSet γ)) :
              f ConNF.Code.mk γ s = ConNF.Code.mk γ (f γ s)
              instance ConNF.Derivatives.instSMulNonemptyCode [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] :
              SMul ConNF.Derivatives ConNF.NonemptyCode
              Equations
              • ConNF.Derivatives.instSMulNonemptyCode = { smul := fun (ρ : ConNF.Derivatives) (c : ConNF.NonemptyCode) => ρ c, }
              @[simp]
              theorem ConNF.Derivatives.coe_smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (ρ : ConNF.Derivatives) (c : ConNF.NonemptyCode) :
              (ρ c) = ρ c
              instance ConNF.Derivatives.instMulActionNonemptyCode [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] :
              MulAction ConNF.Derivatives ConNF.NonemptyCode
              Equations
              def ConNF.Derivatives.IsAllowable [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.Derivatives) :

              We say that a collection of derivatives is allowable if its one-step derivatives commute with the fuzz maps.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                theorem ConNF.isAllowable_one [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                theorem ConNF.isAllowable_inv [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] {ρ : ConNF.Derivatives} (h : ρ.IsAllowable) :
                ρ⁻¹.IsAllowable
                theorem ConNF.isAllowable_mul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] {ρ : ConNF.Derivatives} {ρ' : ConNF.Derivatives} (h : ρ.IsAllowable) (h' : ρ'.IsAllowable) :
                (ρ * ρ').IsAllowable
                theorem ConNF.isAllowable_div [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] {ρ : ConNF.Derivatives} {ρ' : ConNF.Derivatives} (h : ρ.IsAllowable) (h' : ρ'.IsAllowable) :
                (ρ / ρ').IsAllowable
                theorem ConNF.isAllowable_pow [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] {ρ : ConNF.Derivatives} (h : ρ.IsAllowable) (n : ) :
                (ρ ^ n).IsAllowable
                theorem ConNF.isAllowable_zpow [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] {ρ : ConNF.Derivatives} (h : ρ.IsAllowable) (n : ) :
                (ρ ^ n).IsAllowable
                def ConNF.NewAllowable [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :

                An allowable permutation is a collection of derivatives that commutes with the fuzz maps.

                Equations
                • ConNF.NewAllowable = { ρ : ConNF.Derivatives // ρ.IsAllowable }
                Instances For
                  instance ConNF.NewAllowable.instCoeTCDerivatives [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  CoeTC ConNF.NewAllowable ConNF.Derivatives
                  Equations
                  • ConNF.NewAllowable.instCoeTCDerivatives = { coe := Subtype.val }
                  theorem ConNF.NewAllowable.coe_injective [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  Function.Injective Subtype.val
                  instance ConNF.NewAllowable.instOne [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  One ConNF.NewAllowable
                  Equations
                  • ConNF.NewAllowable.instOne = { one := 1, }
                  instance ConNF.NewAllowable.instInv [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  Inv ConNF.NewAllowable
                  Equations
                  • ConNF.NewAllowable.instInv = { inv := fun (ρ : ConNF.NewAllowable) => (ρ)⁻¹, }
                  instance ConNF.NewAllowable.instMul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  Mul ConNF.NewAllowable
                  Equations
                  • ConNF.NewAllowable.instMul = { mul := fun (ρ ρ' : ConNF.NewAllowable) => ρ * ρ', }
                  instance ConNF.NewAllowable.instDiv [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  Div ConNF.NewAllowable
                  Equations
                  • ConNF.NewAllowable.instDiv = { div := fun (ρ ρ' : ConNF.NewAllowable) => ρ / ρ', }
                  instance ConNF.NewAllowable.instPowNat [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  Pow ConNF.NewAllowable
                  Equations
                  • ConNF.NewAllowable.instPowNat = { pow := fun (ρ : ConNF.NewAllowable) (n : ) => ρ ^ n, }
                  instance ConNF.NewAllowable.instPowInt [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  Pow ConNF.NewAllowable
                  Equations
                  • ConNF.NewAllowable.instPowInt = { pow := fun (ρ : ConNF.NewAllowable) (n : ) => ρ ^ n, }
                  @[simp]
                  theorem ConNF.NewAllowable.coe_one [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  1 = 1
                  @[simp]
                  theorem ConNF.NewAllowable.coe_inv [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.NewAllowable) :
                  ρ⁻¹ = (ρ)⁻¹
                  @[simp]
                  theorem ConNF.NewAllowable.coe_mul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.NewAllowable) (ρ' : ConNF.NewAllowable) :
                  (ρ * ρ') = ρ * ρ'
                  @[simp]
                  theorem ConNF.NewAllowable.coe_div [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.NewAllowable) (ρ' : ConNF.NewAllowable) :
                  (ρ / ρ') = ρ / ρ'
                  @[simp]
                  theorem ConNF.NewAllowable.coe_pow [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.NewAllowable) (n : ) :
                  (ρ ^ n) = ρ ^ n
                  @[simp]
                  theorem ConNF.NewAllowable.coe_zpow [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.NewAllowable) (n : ) :
                  (ρ ^ n) = ρ ^ n
                  instance ConNF.NewAllowable.instGroup [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  Group ConNF.NewAllowable
                  Equations
                  @[simp]
                  theorem ConNF.NewAllowable.coeHom_apply [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (self : { ρ : ConNF.Derivatives // ρ.IsAllowable }) :
                  ConNF.NewAllowable.coeHom self = self
                  def ConNF.NewAllowable.coeHom [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                  ConNF.NewAllowable →* ConNF.Derivatives

                  The coercion from allowable permutations to their derivatives as a monoid homomorphism.

                  Equations
                  • ConNF.NewAllowable.coeHom = { toFun := Subtype.val, map_one' := , map_mul' := }
                  Instances For
                    def ConNF.NewAllowable.toStructPerm [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                    ConNF.NewAllowable →* ConNF.StructPerm ConNF.α

                    Turn an allowable permutation into a structural permutation.

                    Equations
                    • ConNF.NewAllowable.toStructPerm = ConNF.Derivatives.toStructPerm.comp ConNF.NewAllowable.coeHom
                    Instances For
                      theorem ConNF.NewAllowable.toStructPerm_injective [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] :
                      Function.Injective ConNF.NewAllowable.toStructPerm
                      theorem ConNF.NewAllowable.comp_toPath_toStructPerm [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.NewAllowable) (β : ConNF.TypeIndex) [i : ConNF.LtLevel β] :
                      ConNF.Tree.comp (Quiver.Hom.toPath ) (ConNF.NewAllowable.toStructPerm ρ) = ConNF.Allowable.toStructPerm (ρ β)
                      instance ConNF.NewAllowable.instMulAction [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] {X : Type u_1} [MulAction ConNF.Derivatives X] :
                      MulAction ConNF.NewAllowable X
                      Equations
                      @[simp]
                      theorem ConNF.NewAllowable.coe_smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] {X : Type u_1} [MulAction ConNF.Derivatives X] (ρ : ConNF.NewAllowable) (x : X) :
                      ρ x = ρ x
                      @[simp]
                      theorem ConNF.NewAllowable.smul_typedNearLitter [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] (γ : ConNF.Λ) [ConNF.LtLevel γ] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (ρ : ConNF.NewAllowable) (N : ConNF.NearLitter) :
                      ρ γ ConNF.typedNearLitter N = ConNF.typedNearLitter (ConNF.Allowable.toStructPerm (ρ γ) (Quiver.Hom.toPath ) N)
                      @[simp]
                      theorem ConNF.NewAllowable.β_smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.NewAllowable) (c : ConNF.Code) :
                      (ρ c) = c
                      @[simp]
                      theorem ConNF.NewAllowable.members_smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.NewAllowable) (c : ConNF.Code) :
                      (ρ c).members = ρ c c.members
                      @[simp]
                      theorem ConNF.NewAllowable.smul_mk [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] (ρ : ConNF.NewAllowable) (γ : ConNF.TypeIndex) [ConNF.LtLevel γ] (s : Set (ConNF.TSet γ)) :
                      ρ ConNF.Code.mk γ s = ConNF.Code.mk γ (ρ γ s)
                      theorem ConNF.NewAllowable.smul_cloud [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] {β : ConNF.TypeIndex} [ConNF.LtLevel β] {γ : ConNF.Λ} [ConNF.LtLevel γ] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (ρ : ConNF.NewAllowable) (s : Set (ConNF.TSet β)) (hβγ : β γ) :
                      ρ γ ConNF.cloud hβγ s = ConNF.cloud hβγ (ρ β s)

                      Allowable permutations commute with the cloud map.

                      theorem ConNF.NewAllowable.smul_cloudCode [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] {γ : ConNF.Λ} [ConNF.LtLevel γ] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {c : ConNF.Code} (ρ : ConNF.NewAllowable) (hc : c γ) :

                      Allowable permutations commute with the cloudCode map.

                      theorem ConNF.CloudRel.smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {ρ : ConNF.NewAllowable} {c : ConNF.Code} {d : ConNF.Code} :
                      c ↝₀ dρ c ↝₀ ρ d
                      @[simp]
                      theorem ConNF.smul_cloudRel [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {ρ : ConNF.NewAllowable} {c : ConNF.Code} {d : ConNF.Code} :
                      ρ c ↝₀ ρ d c ↝₀ d
                      @[irreducible]
                      theorem ConNF.Code.isEven_smul_nonempty [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] {ρ : ConNF.NewAllowable} (c : ConNF.NonemptyCode) :
                      (ρ c).IsEven (c).IsEven
                      @[simp]
                      theorem ConNF.Code.isEven_smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] {ρ : ConNF.NewAllowable} {c : ConNF.Code} :
                      (ρ c).IsEven c.IsEven
                      @[simp]
                      theorem ConNF.Code.isOdd_smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] {ρ : ConNF.NewAllowable} {c : ConNF.Code} :
                      (ρ c).IsOdd c.IsOdd
                      theorem ConNF.Code.isEven.smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] {ρ : ConNF.NewAllowable} {c : ConNF.Code} :
                      c.IsEven(ρ c).IsEven

                      Alias of the reverse direction of ConNF.Code.isEven_smul.

                      theorem ConNF.Code.isOdd.smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] {ρ : ConNF.NewAllowable} {c : ConNF.Code} :
                      c.IsOdd(ρ c).IsOdd

                      Alias of the reverse direction of ConNF.Code.isOdd_smul.

                      theorem ConNF.Code.Equiv.smul [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] {ρ : ConNF.NewAllowable} {c : ConNF.Code} {d : ConNF.Code} :
                      c dρ c ρ d
                      theorem ConNF.Code.smul_code [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] [ConNF.BasePositions] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] {ρ : ConNF.NewAllowable} {c : ConNF.Code} {d : ConNF.Code} :
                      ρ c ρ d c d

                      Allowable permutations preserve code equivalence.