HepLean Documentation

Plausible.Gen

Gen Monad #

This monad is used to formulate randomized computations with a parameter to specify the desired size of the result.

Main definitions #

References #

@[reducible, inline]
abbrev Plausible.Gen (α : Type u) :

Monad to generate random examples to test properties with. It has a Nat parameter so that the caller can decide on the size of the examples.

Equations
Instances For
    @[inline]
    Equations
    Instances For
      @[inline]
      Equations
      Instances For

        Lift Random.random to the Gen monad.

        Equations
        Instances For
          def Plausible.Gen.choose (α : Type u) [LE α] [Plausible.BoundedRandom Id α] (lo hi : α) (h : lo hi) :
          Plausible.Gen { a : α // lo a a hi }

          Lift BoundedRandom.randomR to the Gen monad.

          Equations
          Instances For
            def Plausible.Gen.chooseNatLt (lo hi : Nat) (h : lo < hi) :
            Plausible.Gen { a : Nat // lo a a < hi }

            Generate a Nat example between lo and hi (exclusively).

            Equations
            Instances For

              Get access to the size parameter of the Gen monad.

              Equations
              Instances For
                def Plausible.Gen.resize {α : Type u_1} (f : NatNat) (x : Plausible.Gen α) :

                Apply a function to the size parameter.

                Equations
                Instances For

                  Choose a Nat between 0 and getSize.

                  Equations
                  Instances For

                    Create an Array of examples using x. The size is controlled by the size parameter of Gen.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      Create a List of examples using x. The size is controlled by the size parameter of Gen.

                      Equations
                      • x.listOf = do let arrx.arrayOf pure arr.toList
                      Instances For
                        def Plausible.Gen.oneOf {α : Type u} (xs : Array (Plausible.Gen α)) (pos : 0 < xs.size := by decide) :

                        Given a list of example generators, choose one to create an example.

                        Equations
                        Instances For
                          def Plausible.Gen.elements {α : Type u} (xs : List α) (pos : 0 < xs.length) :

                          Given a list of examples, choose one to create an example.

                          Equations
                          Instances For
                            def Plausible.Gen.permutationOf {α : Type u} (xs : List α) :
                            Plausible.Gen { ys : List α // xs.Perm ys }

                            Generate a random permutation of a given list.

                            Equations
                            Instances For
                              def Plausible.Gen.prodOf {α : Type u} {β : Type v} (x : Plausible.Gen α) (y : Plausible.Gen β) :

                              Given two generators produces a tuple consisting out of the result of both

                              Equations
                              • x.prodOf y = do let __discrx.up match __discr with | { down := a } => do let __discry.up match __discr with | { down := b } => pure (a, b)
                              Instances For
                                def Plausible.Gen.run {α : Type} (x : Plausible.Gen α) (size : Nat) :

                                Execute a Gen inside the IO monad using size as the example size

                                Equations
                                Instances For