Documentation

LeanPool.IrisAlgebra.Algebra.COFESolver

A guarded recursive domain equation solver.

Copyright (c) The Iris-Lean Contributors.

def Iris.COFE.OFunctor.Fix.Impl.A' (F : (α β : Type u) → [COFE α] → [COFE β] → Type u) [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] :
Nat → (α : Type u) × COFE α

The approximation carriers bundled with their complete space structures.

Equations
Instances For
    @[implicit_reducible]
    def Iris.COFE.OFunctor.Fix.Impl.A (F : (α β : Type u) → [COFE α] → [COFE β] → Type u) [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] (n : Nat) :

    The carrier at one level of the recursive-domain approximation.

    Equations
    Instances For
      @[instance_reducible]
      instance Iris.COFE.OFunctor.Fix.Impl.instA' {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] (n : Nat) :
      COFE (A' F n).fst
      Equations
      @[instance_reducible]
      instance Iris.COFE.OFunctor.Fix.Impl.instA {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] (n : Nat) :
      COFE (A F n)
      Equations
      def Iris.COFE.OFunctor.Fix.Impl.updown (F : (α β : Type u) → [COFE α] → [COFE β] → Type u) [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (k : Nat) :
      (A F k -n> A F (k + 1)) × (A F (k + 1) -n> A F k)

      The section/retraction pair at every level, computed by a single recursion so that evaluating either component at level k costs O(k) (the naive mutual recursion recomputes both branches at every level, which is 2^k).

      Equations
      Instances For
        def Iris.COFE.OFunctor.Fix.Impl.up (F : (α β : Type u) → [COFE α] → [COFE β] → Type u) [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (k : Nat) :
        A F k -n> A F (k + 1)

        The section from one approximation level to its successor.

        Equations
        Instances For
          def Iris.COFE.OFunctor.Fix.Impl.down (F : (α β : Type u) → [COFE α] → [COFE β] → Type u) [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (k : Nat) :
          A F (k + 1) -n> A F k

          The retraction from a successor approximation to its predecessor.

          Equations
          Instances For
            theorem Iris.COFE.OFunctor.Fix.Impl.down_up {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (x : A F k) :
            (down F k).f ((up F k).f x) = x
            theorem Iris.COFE.OFunctor.Fix.Impl.up_down {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (x : A F (k + 1 + 1)) :
            OFE.Dist k ((up F (k + 1)).f ((down F (k + 1)).f x)) x
            structure Iris.COFE.OFunctor.Fix.Impl.Tower (F : (α β : Type u) → [COFE α] → [COFE β] → Type u) [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :

            A family of approximations compatible with all one-step retractions.

            • val (k : Nat) : A F k

              The approximation at each tower level.

            • down {k : Nat} : (down F k).f (self.val (k + 1)) = self.val k
            Instances For
              theorem Iris.COFE.OFunctor.Fix.Impl.Tower.ext {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} {inst✝ : OFunctorContractive F} {inst✝¹ : (α : Type u) → [inst : COFE α] → IsCOFE (F α α)} {inh : Inhabited (F (ULift Unit) (ULift Unit))} {x y : Tower F} (val : x.val = y.val) :
              x = y
              theorem Iris.COFE.OFunctor.Fix.Impl.Tower.ext_iff {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} {inst✝ : OFunctorContractive F} {inst✝¹ : (α : Type u) → [inst : COFE α] → IsCOFE (F α α)} {inh : Inhabited (F (ULift Unit) (ULift Unit))} {x y : Tower F} :
              x = y ↔ x.val = y.val
              @[instance_reducible]
              instance Iris.COFE.OFunctor.Fix.Impl.instCoeFunTowerForallA {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
              CoeFun (Tower F) fun (x : Tower F) => (k : Nat) → A F k
              Equations
              @[instance_reducible]
              instance Iris.COFE.OFunctor.Fix.Impl.instOFETower {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
              Equations
              • One or more equations did not get rendered due to their size.
              def Iris.COFE.OFunctor.Fix.Impl.towerChain {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (c : Chain (Tower F)) (k : Nat) :
              Chain (A F k)

              Evaluate a chain of coherent towers at one level.

              Equations
              Instances For
                @[instance_reducible]
                instance Iris.COFE.OFunctor.Fix.Impl.instTower {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
                Equations
                • One or more equations did not get rendered due to their size.
                def Iris.COFE.OFunctor.Fix.Impl.upN (F : (α β : Type u) → [COFE α] → [COFE β] → Type u) [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (n : Nat) :
                A F k -n> A F (k + n)

                Compose the sections through a specified number of approximation levels.

                Equations
                Instances For
                  def Iris.COFE.OFunctor.Fix.Impl.downN (F : (α β : Type u) → [COFE α] → [COFE β] → Type u) [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (n : Nat) :
                  A F (k + n) -n> A F k

                  Compose the retractions through a specified number of approximation levels.

                  Equations
                  Instances For
                    theorem Iris.COFE.OFunctor.Fix.Impl.downN_upN {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (x : A F k) {i : Nat} :
                    (downN F i).f ((upN F i).f x) = x
                    theorem Iris.COFE.OFunctor.Fix.Impl.Tower.up {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (X : Tower F) :
                    OFE.Dist k ((up F (k + 1)).f (X.val (k + 1))) (X.val (k + 2))
                    theorem Iris.COFE.OFunctor.Fix.Impl.Tower.upN {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (X : Tower F) (i : Nat) :
                    OFE.Dist k ((upN F i).f (X.val (k + 1))) (X.val (k + 1 + i))
                    theorem Iris.COFE.OFunctor.Fix.Impl.Tower.downN {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (X : Tower F) (i : Nat) :
                    (downN F i).f (X.val (k + i)) = X.val k
                    instance Iris.COFE.OFunctor.Fix.Impl.instNonExpansiveTowerAVal {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (k : Nat) :
                    OFE.NonExpansive fun (X : Tower F) => X.val k
                    def Iris.COFE.OFunctor.Fix.Impl.Tower.proj {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (k : Nat) :
                    Tower F -n> A F k

                    Project a coherent tower to one approximation level.

                    Equations
                    Instances For
                      def Iris.COFE.OFunctor.Fix.Impl.eqToHom {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] {i k : Nat} (e : i = k) :
                      A F i -n> A F k

                      Transport an approximation along an equality of its level indices.

                      Equations
                      Instances For
                        theorem Iris.COFE.OFunctor.Fix.Impl.eqToHom_up {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k k' : Nat} {x : A F k} (e : k = k') :
                        (eqToHom ⋯).f ((up F k).f x) = (up F k').f ((eqToHom e).f x)
                        theorem Iris.COFE.OFunctor.Fix.Impl.down_eqToHom {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k k' : Nat} {x : A F (k + 1)} (e : k = k') :
                        (down F k').f ((eqToHom ⋯).f x) = (eqToHom e).f ((down F k).f x)
                        def Iris.COFE.OFunctor.Fix.Impl.embed {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k i : Nat} :
                        A F k -n> A F i

                        Embed or retract between any two approximation levels.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          def Iris.COFE.OFunctor.Fix.Impl.Tower.embed {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (k : Nat) :
                          A F k -n> Tower F

                          Extend one approximation to a coherent tower.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            theorem Iris.COFE.OFunctor.Fix.Impl.Tower.embed_up {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (x : A F k) :
                            (Tower.embed (k + 1)).f ((up F k).f x) = (Tower.embed k).f x
                            theorem Iris.COFE.OFunctor.Fix.Impl.Tower.embed_self {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] {k : Nat} (X : Tower F) :
                            OFE.Dist k ((Tower.embed (k + 1)).f (X.val (k + 1))) X
                            @[instance_reducible]
                            instance Iris.COFE.OFunctor.Fix.Impl.instInhabitedTower {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
                            Equations
                            def Iris.COFE.OFunctor.Fix.Impl.unfoldChain {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (X : Tower F) :
                            Chain (F (Tower F) (Tower F))

                            The Cauchy chain of functor images used to unfold a coherent tower.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              def Iris.COFE.OFunctor.Fix.Impl.Tower.isoAux {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
                              OFE.Iso (F (Tower F) (Tower F)) (Tower F)

                              The explicit isomorphism between a coherent tower and its functor image.

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                @[irreducible]
                                def Iris.COFE.OFunctor.Fix.Impl.Tower.iso {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
                                OFE.Iso (F (Tower F) (Tower F)) (Tower F)

                                The tower isomorphism, kept irreducible during elaboration.

                                Equations
                                Instances For
                                  @[irreducible]
                                  def Iris.COFE.OFunctor.Fix (F : (α β : Type u) → [COFE α] → [COFE β] → Type u) [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :

                                  The recursive domain constructed as a tower of finite approximations.

                                  Equations
                                  Instances For
                                    @[instance_reducible]
                                    instance Iris.COFE.OFunctor.instInhabitedFix {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
                                    Equations
                                    @[instance_reducible]
                                    instance Iris.COFE.OFunctor.instFix {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
                                    COFE (Fix F)
                                    Equations
                                    @[irreducible]
                                    def Iris.COFE.OFunctor.Fix.iso {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
                                    OFE.Iso (F (Fix F) (Fix F)) (Fix F)

                                    The isomorphism from the functor image to the constructed recursive domain.

                                    Equations
                                    Instances For
                                      @[irreducible]
                                      def Iris.COFE.OFunctor.Fix.fold {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
                                      F (Fix F) (Fix F) -n> Fix F

                                      Fold a functor value into the constructed recursive domain.

                                      Equations
                                      Instances For
                                        @[irreducible]
                                        def Iris.COFE.OFunctor.Fix.unfold {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] :
                                        Fix F -n> F (Fix F) (Fix F)

                                        Unfold a recursive-domain value into its functor image.

                                        Equations
                                        Instances For
                                          theorem Iris.COFE.OFunctor.Fix.fold_unfold {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (X : Fix F) :
                                          fold.f (unfold.f X) = X
                                          theorem Iris.COFE.OFunctor.Fix.unfold_fold {F : (α β : Type u) → [COFE α] → [COFE β] → Type u} [OFunctorContractive F] [(α : Type u) → [inst : COFE α] → IsCOFE (F α α)] [inh : Inhabited (F (ULift Unit) (ULift Unit))] (X : F (Fix F) (Fix F)) :
                                          unfold.f (fold.f X) = X