Documentation

ConNF.Construction.Cloud

The cloud map #

The cloud map from γ to β ≠ γ sends a set of t-sets of type γ to a set of t-sets of type β. Each t-set of type γ in the domain is sent to a "cloud" of β-typed near-litters, representing "junk" at level β. This map will used to identify codes that represent the same TTT object.

An important property for intuition is that the cloud maps have disjoint ranges (except on empty codes) and are each injective, so if we connect each code to its images under the cloud maps, we get a tree (except for empty codes, which form a complete graph).

Main declarations #

Notation #

def ConNF.cloud [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] (hγβ : γ β) (s : Set (ConNF.TSet γ)) :
Set (ConNF.TSet β)

The cloud map. We map each t-set to all typed near-litters near any fuzzed tangle with this t-set, and take the union over all t-sets in the input.

Equations
Instances For
    @[simp]
    theorem ConNF.cloud_empty [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {hγβ : γ β} :
    @[simp]
    theorem ConNF.cloud_singleton [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {hγβ : γ β} (t : ConNF.TSet γ) :
    ConNF.cloud hγβ {t} = {u : ConNF.TSet β | ∃ (t' : ConNF.Tangle γ), t'.set_lt = t ∃ (N : ConNF.NearLitter), N.fst = ConNF.fuzz hγβ t' u = ConNF.typedNearLitter N}
    theorem Set.Nonempty.cloud [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {hγβ : γ β} {s : Set (ConNF.TSet γ)} (h : s.Nonempty) :
    (ConNF.cloud hγβ s).Nonempty
    @[simp]
    theorem ConNF.cloud_eq_empty [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {s : Set (ConNF.TSet γ)} (hγβ : γ β) :
    ConNF.cloud hγβ s = s =
    @[simp]
    theorem ConNF.cloud_nonempty [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {s : Set (ConNF.TSet γ)} (hγβ : γ β) :
    (ConNF.cloud hγβ s).Nonempty s.Nonempty
    theorem ConNF.subset_cloud [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {hγβ : γ β} {s : Set (ConNF.TSet γ)} (t : ConNF.Tangle γ) (ht : t.set_lt s) :
    ConNF.typedNearLitter '' {N : ConNF.NearLitter | N.fst = ConNF.fuzz hγβ t} ConNF.cloud hγβ s
    theorem ConNF.μ_le_mk_cloud [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {hγβ : γ β} {s : Set (ConNF.TSet γ)} :
    s.NonemptyCardinal.mk ConNF.μ Cardinal.mk (ConNF.cloud hγβ s)
    theorem ConNF.subset_of_cloud_subset [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {hγβ : γ β} (s₁ : Set (ConNF.TSet γ)) (s₂ : Set (ConNF.TSet γ)) (h : ConNF.cloud hγβ s₁ ConNF.cloud hγβ s₂) :
    s₁ s₂
    theorem ConNF.cloud_injective [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {hγβ : γ β} :
    theorem ConNF.cloud_disjoint_range [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {hγβ : γ β} {δ : ConNF.TypeIndex} [ConNF.LtLevel δ] {hδβ : δ β} (c : Set (ConNF.TSet γ)) (d : Set (ConNF.TSet δ)) (hc : c.Nonempty) (h : ConNF.cloud hγβ c = ConNF.cloud hδβ d) :
    γ = δ

    We don't need to prove that the ranges of the cloud maps are disjoint for different β, since this holds at the type level.

    We now show that there are only finitely many iterated images under any inverse cloud map, in the case of nonempty sets.

    theorem ConNF.wellFounded_pos [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] :
    WellFounded fun (a b : ConNF.Tangle γ) => ConNF.pos a < ConNF.pos b
    noncomputable def ConNF.minTangle [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] (s : Set (ConNF.Tangle γ)) (hs : s.Nonempty) :

    The minimum tangle of a nonempty set of tangles.

    Equations
    Instances For
      theorem ConNF.minTangle_mem [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] (s : Set (ConNF.Tangle γ)) (hs : s.Nonempty) :
      theorem ConNF.minTangle_le [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] (s : Set (ConNF.Tangle γ)) (hs : s.Nonempty) {t : ConNF.Tangle γ} (ht : t s) :
      ConNF.pos (ConNF.minTangle s hs) ConNF.pos t
      theorem ConNF.set_invImage_nonempty [ConNF.Params] [ConNF.Level] [ConNF.ModelDataLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] (s : Set (ConNF.TSet γ)) (hs : s.Nonempty) :
      (ConNF.Tangle.set_lt ⁻¹' s).Nonempty
      noncomputable def ConNF.minTSet [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] (s : Set (ConNF.TSet γ)) (hs : s.Nonempty) :

      The minimum tangle with a t-set in s.

      Equations
      Instances For
        theorem ConNF.minTSet_lt_minTSet_cloud [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] {γ : ConNF.TypeIndex} [ConNF.LtLevel γ] {β : ConNF.Λ} [ConNF.LtLevel β] {hγβ : γ β} (s : Set (ConNF.TSet γ)) (hs : s.Nonempty) :
        ConNF.pos (ConNF.minTSet s hs) < ConNF.pos (ConNF.minTSet (ConNF.cloud hγβ s) )
        noncomputable def ConNF.codeMinMap [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] (c : ConNF.NonemptyCode) :
        ConNF.μ

        Tool that lets us use well-founded recursion on codes via μ. This maps a nonempty code to the least pos of a tangle in the extension of the code.

        Equations
        Instances For
          theorem ConNF.invImage_codeMinMap_wf [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] :
          WellFounded (InvImage (fun (x x_1 : ConNF.μ) => x < x_1) ConNF.codeMinMap)

          The pullback < relation on codes is well-founded.

          def ConNF.extension [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {β : ConNF.TypeIndex} [ConNF.LtLevel β] (s : Set (ConNF.TSet β)) (γ : ConNF.Λ) [ConNF.LtLevel γ] :
          Set (ConNF.TSet γ)

          The cloud map, phrased as a function on sets of γ-tangles, but if γ = β, this is the identity function.

          Equations
          Instances For
            @[simp]
            theorem ConNF.extension_self [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {γ : ConNF.Λ} [ConNF.LtLevel γ] (s : Set (ConNF.TSet γ)) :
            @[simp]
            theorem ConNF.extension_eq [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {β : ConNF.TypeIndex} [ConNF.LtLevel β] (s : Set (ConNF.TSet β)) (γ : ConNF.Λ) [ConNF.LtLevel γ] (hβγ : β = γ) :
            @[simp]
            theorem ConNF.extension_ne [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {β : ConNF.TypeIndex} [ConNF.LtLevel β] (s : Set (ConNF.TSet β)) (γ : ConNF.Λ) [ConNF.LtLevel γ] (hβγ : β γ) :
            def ConNF.cloudCode [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (β : ConNF.Λ) [ConNF.LtLevel β] (c : ConNF.Code) :
            ConNF.Code

            The cloud map, phrased as a function on α-codes, but if the code's level matches β, this is the identity function. This is written in a weird way in order to make (cloudCode β c).1 defeq to β.

            Equations
            Instances For
              theorem ConNF.cloudCode_eq [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (β : ConNF.Λ) [ConNF.LtLevel β] (c : ConNF.Code) (hcβ : c = β) :
              theorem ConNF.cloudCode_ne [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (β : ConNF.Λ) [ConNF.LtLevel β] (c : ConNF.Code) (hcβ : c β) :
              ConNF.cloudCode β c = ConNF.Code.mk (β) (ConNF.cloud hcβ c.members)
              @[simp]
              theorem ConNF.fst_cloudCode [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (β : ConNF.Λ) [ConNF.LtLevel β] (c : ConNF.Code) :
              (ConNF.cloudCode β c) = β
              @[simp]
              theorem ConNF.snd_cloudCode [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (β : ConNF.Λ) [ConNF.LtLevel β] (c : ConNF.Code) (hcβ : c β) :
              (ConNF.cloudCode β c).members = ConNF.cloud hcβ c.members
              @[simp]
              theorem ConNF.cloudCode_mk_eq [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (β : ConNF.Λ) [ConNF.LtLevel β] (s : Set (ConNF.TSet β)) :
              ConNF.cloudCode β (ConNF.Code.mk (β) s) = ConNF.Code.mk (β) s
              @[simp]
              theorem ConNF.cloudCode_mk_ne [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (γ : ConNF.TypeIndex) [ConNF.LtLevel γ] (β : ConNF.Λ) [ConNF.LtLevel β] (hγβ : γ β) (s : Set (ConNF.TSet γ)) :
              @[simp]
              theorem ConNF.cloudCode_isEmpty [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {β : ConNF.Λ} [ConNF.LtLevel β] {c : ConNF.Code} :
              (ConNF.cloudCode β c).IsEmpty c.IsEmpty
              @[simp]
              theorem ConNF.cloudCode_nonempty [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {β : ConNF.Λ} [ConNF.LtLevel β] {c : ConNF.Code} :
              (ConNF.cloudCode β c).members.Nonempty c.members.Nonempty
              theorem ConNF.Code.IsEmpty.cloudCode [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {β : ConNF.Λ} [ConNF.LtLevel β] {c : ConNF.Code} :
              c.IsEmpty(ConNF.cloudCode β c).IsEmpty

              Alias of the reverse direction of ConNF.cloudCode_isEmpty.

              theorem ConNF.cloudCode_injOn [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {β : ConNF.Λ} [ConNF.LtLevel β] :
              Set.InjOn (ConNF.cloudCode β) {c : ConNF.Code | c β c.members.Nonempty}
              theorem ConNF.μ_le_mk_cloudCode [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {β : ConNF.Λ} [ConNF.LtLevel β] (c : ConNF.Code) (hcβ : c β) :
              c.members.NonemptyCardinal.mk ConNF.μ Cardinal.mk (ConNF.cloudCode β c).members
              theorem ConNF.codeMinMap_lt_codeMinMap_cloudCode [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] (β : ConNF.Λ) [ConNF.LtLevel β] (c : ConNF.NonemptyCode) (hcβ : (c) β) :
              theorem ConNF.cloudRel_iff [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (c : ConNF.Code) :
              ∀ (a : ConNF.Code), c ↝₀ a ∃ (β : ConNF.Λ) (inst : ConNF.LtLevel β), c β a = ConNF.cloudCode β c
              inductive ConNF.CloudRel [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (c : ConNF.Code) :
              ConNF.CodeProp

              This relation on α-codes allows us to state that there are only finitely many iterated images under the inverse cloud map. Note that we require the map to actually change the data, by stipulating that c.1 ≠ β.

              • intro: ∀ [inst : ConNF.Params] [inst_1 : ConNF.Level] [inst_2 : ConNF.BasePositions] [inst_3 : ConNF.ModelDataLt] [inst_4 : ConNF.PositionedTanglesLt] [inst_5 : ConNF.TypedObjectsLt] {c : ConNF.Code} (β : ConNF.Λ) [inst_6 : ConNF.LtLevel β], c βc ↝₀ ConNF.cloudCode β c
              Instances For
                theorem ConNF.cloudRel_subsingleton [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {c : ConNF.Code} (hc : c.members.Nonempty) :
                {d : ConNF.Code | d ↝₀ c}.Subsingleton
                theorem ConNF.cloudRel_cloudCode [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (β : ConNF.Λ) [ConNF.LtLevel β] {c : ConNF.Code} {d : ConNF.Code} (hd : d.members.Nonempty) (hdβ : d β) :
                theorem ConNF.CloudRel.nonempty_iff [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {c : ConNF.Code} {d : ConNF.Code} :
                c ↝₀ d(c.members.Nonempty d.members.Nonempty)
                theorem ConNF.cloudRelEmptyEmpty [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (γ : ConNF.TypeIndex) [ConNF.LtLevel γ] (β : ConNF.Λ) [ConNF.LtLevel β] (hγβ : γ β) :
                theorem ConNF.eq_of_cloudCode [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {c : ConNF.Code} {d : ConNF.Code} {β : ConNF.Λ} {γ : ConNF.Λ} [ConNF.LtLevel β] [ConNF.LtLevel γ] (hc : c.members.Nonempty) (hcβ : c β) (hdγ : d γ) (h : ConNF.cloudCode β c = ConNF.cloudCode γ d) :
                c = d
                theorem ConNF.cloudRel'_iff [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (c : ConNF.NonemptyCode) :
                ∀ (a : ConNF.NonemptyCode), c a ∃ (β : ConNF.Λ) (inst : ConNF.LtLevel β), (c) β a = ConNF.cloudCode β c,
                inductive ConNF.CloudRel' [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (c : ConNF.NonemptyCode) :
                ConNF.NonemptyCodeProp

                This relation on α-codes allows us to state that there are only finitely many iterated images under the inverse cloud map.

                • intro: ∀ [inst : ConNF.Params] [inst_1 : ConNF.Level] [inst_2 : ConNF.BasePositions] [inst_3 : ConNF.ModelDataLt] [inst_4 : ConNF.PositionedTanglesLt] [inst_5 : ConNF.TypedObjectsLt] {c : ConNF.NonemptyCode} (β : ConNF.Λ) [inst_6 : ConNF.LtLevel β], (c) βc ConNF.cloudCode β c,
                Instances For
                  @[simp]
                  theorem ConNF.cloudRel_coe_coe [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] {c : ConNF.NonemptyCode} {d : ConNF.NonemptyCode} :
                  c ↝₀ d c d
                  theorem ConNF.cloud_subrelation [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] :
                  Subrelation (fun (x x_1 : ConNF.NonemptyCode) => x x_1) (InvImage (fun (x x_1 : ConNF.μ) => x < x_1) ConNF.codeMinMap)
                  theorem ConNF.cloudRel'_wellFounded [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] :
                  WellFounded fun (x x_1 : ConNF.NonemptyCode) => x x_1

                  There are only finitely many iterated images under any inverse cloud map.

                  instance ConNF.instWellFoundedRelationNonemptyCode [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] [ConNF.PositionedObjectsLt] :
                  WellFoundedRelation ConNF.NonemptyCode
                  Equations
                  • ConNF.instWellFoundedRelationNonemptyCode = { rel := fun (x x_1 : ConNF.NonemptyCode) => x x_1, wf := }
                  theorem ConNF.cloudRel'_subsingleton [ConNF.Params] [ConNF.Level] [ConNF.BasePositions] [ConNF.ModelDataLt] [ConNF.PositionedTanglesLt] [ConNF.TypedObjectsLt] (c : ConNF.NonemptyCode) :
                  {d : ConNF.NonemptyCode | d c}.Subsingleton

                  There is at most one inverse under an cloud map. This corresponds to the fact that there is only one code which is related (on the left) to any given code under the cloud map relation.