Starting with just types, we will seek top unknowns as goals.

In [1]:
import $cp.bin.`provingground-core-jvm-a6ae52a.fat.jar`
Out[1]:
import $cp.$                                           
In [2]:
import provingground._ , interface._, HoTT._, learning._
Out[2]:
import provingground._ , interface._, HoTT._, learning._ 
In [3]:
repl.pprinter() = {
  val p = repl.pprinter()
  p.copy(
    additionalHandlers = p.additionalHandlers.orElse {
      translation.FansiShow.fansiHandler
    }
  )
}
In [4]:
val terms = FiniteDistribution.unif[Term](Type, Unit, Zero, Star)
val typs = FiniteDistribution.unif[Typ[Term]](Type, Unit, Zero)
val ts = TermState(terms, typs)
Out[4]:
terms: FiniteDistribution[Term] = FiniteDistribution(
  Vector(
    Weighted(𝒰 , 0.25),
    Weighted(Unit, 0.25),
    Weighted(Zero, 0.25),
    Weighted(Star, 0.25)
  )
)
typs: FiniteDistribution[Typ[Term]] = FiniteDistribution(
  Vector(
    Weighted(𝒰 , 0.3333333333333333),
    Weighted(Unit, 0.3333333333333333),
    Weighted(Zero, 0.3333333333333333)
  )
)
ts: TermState = TermState(
  FiniteDistribution(
    Vector(
      Weighted(𝒰 , 0.25),
      Weighted(Unit, 0.25),
      Weighted(Zero, 0.25),
      Weighted(Star, 0.25)
    )
  ),
  FiniteDistribution(
    Vector(
      Weighted(𝒰 , 0.3333333333333333),
      Weighted(Unit, 0.3333333333333333),
      Weighted(Zero, 0.3333333333333333)
    )
  ),
  Vector(),
  FiniteDistribution(Vector()),
  FiniteDistribution(Vector()),
  Empty
)
In [5]:
import monix.execution.Scheduler.Implicits.global
val lp = LocalProver(ts).sharpen(10)
val thmsT = lp.theoremsByStatement 
val thmsF = thmsT.runToFuture
In [10]:
val unknownsT = lp.unknownStatements.map(_.entropyVec.map(_.elem)).memoize
val unF = unknownsT.runToFuture
In [12]:
def seekGoals(typ: Typ[Term]) = lp.addGoals(typ -> 0.5, negate(typ) -> 0.5).successes
Out[12]:
defined function seekGoals
In [13]:
def topGoals(n: Int) = (0 until n).map{j => unknownsT.flatMap(v => seekGoals(v(j)))}
Out[13]:
defined function topGoals
In [14]:
val top20 = topGoals(20)
top20.map(_.runToFuture)

While a very modest task, this has been a success in both workflow and results.