Testing depth bound

We test a new feature -- a bound on depth in addition to cutoff.

In [1]:
import $cp.bin.`provingground-core-jvm-3ed16ecda4.fat.jar`
import provingground._ , interface._, HoTT._, learning._ 
repl.pprinter() = {
  val p = repl.pprinter()
  p.copy(
    additionalHandlers = p.additionalHandlers.orElse {
      translation.FansiShow.fansiHandler
    }
  )
}
Out[1]:
import $cp.$                                              

import provingground._ , interface._, HoTT._, learning._ 
In [2]:
val M = "M" :: Type

val eqM = "eqM" :: M ->: M ->: Type

val a = "a" :: M
val b = "b" :: M
val c = "c" :: M

val m = "m" :: M

val n = "n" :: M

val mul = "mul" :: M ->: M ->: M
Out[2]:
M: Typ[Term] = M
eqM: Func[Term, Func[Term, Typ[Term]]] = eqM
a: Term = a
b: Term = b
c: Term = c
m: Term = m
n: Term = n
mul: Func[Term, Func[Term, Term]] = mul
In [3]:
val ts0 = TermState(FiniteDistribution(eqM -> 0.2, mul -> 0.35, m -> 0.15, n -> 0.15, mul(m)(n) -> 0.15), FiniteDistribution.unif(M))
val tg0 = TermGenParams.zero.copy(appW = 0.15, typAsCodW = 0.1)
val lp0 = LocalProver(ts0, tg = tg0, genMaxDepth = Some(3)).noIsles
Out[3]:
ts0: TermState = TermState(
  FiniteDistribution(
    Vector(
      Weighted(eqM, 0.2),
      Weighted(mul, 0.35),
      Weighted(m, 0.15),
      Weighted(n, 0.15),
      Weighted(mul(m)(n), 0.15)
    )
  ),
  FiniteDistribution(Vector(Weighted(M, 1.0))),
  Vector(),
  FiniteDistribution(Vector()),
  FiniteDistribution(Vector()),
  Empty
)
tg0: TermGenParams = TermGenParams(
  0.15,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.1,
  0.0,
  0.3,
  0.7,
  0.5,
  0.0,
  0.0,
  0.0,
  OrElse(
    OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
    <function1>
  )
)
lp0: LocalProver = LocalProver(
  TermState(
    FiniteDistribution(
      Vector(
        Weighted(eqM, 0.2),
        Weighted(mul, 0.35),
        Weighted(m, 0.15),
        Weighted(n, 0.15),
        Weighted(mul(m)(n), 0.15)
      )
    ),
    FiniteDistribution(Vector(Weighted(M, 1.0))),
    Vector(),
    FiniteDistribution(Vector()),
    FiniteDistribution(Vector()),
    Empty
  ),
  TermGenParams(
    0.15,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.1,
    0.0,
    0.3,
    0.7,
    0.5,
    0.0,
    0.0,
    0.0,
    OrElse(
      OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
...
In [4]:
val typs0T = lp0.nextState.map(_.typs).memoize
Out[4]:
typs0T: monix.eval.Task[FiniteDistribution[Typ[Term]]] = Async(
  <function2>,
  false,
  true,
  true
)
In [5]:
import monix.execution.Scheduler.Implicits.global
val typs0F = typs0T.runToFuture
In [6]:
val lp1 = LocalProver(ts0, tg = tg0, genMaxDepth = Some(1)).noIsles
val typs1T = lp1.nextState.map(_.typs).memoize
Out[6]:
lp1: LocalProver = LocalProver(
  TermState(
    FiniteDistribution(
      Vector(
        Weighted(eqM, 0.2),
        Weighted(mul, 0.35),
        Weighted(m, 0.15),
        Weighted(n, 0.15),
        Weighted(mul(m)(n), 0.15)
      )
    ),
    FiniteDistribution(Vector(Weighted(M, 1.0))),
    Vector(),
    FiniteDistribution(Vector()),
    FiniteDistribution(Vector()),
    Empty
  ),
  TermGenParams(
    0.15,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.1,
    0.0,
    0.3,
    0.7,
    0.5,
    0.0,
    0.0,
    0.0,
    OrElse(
      OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
...
typs1T: monix.eval.Task[FiniteDistribution[Typ[Term]]] = Async(
  <function2>,
  false,
  true,
  true
)
In [7]:
val typs1F = typs1T.runToFuture
In [8]:
val lp2 = LocalProver(ts0, tg = tg0, genMaxDepth = Some(2)).noIsles
val typs2T = lp2.nextState.map(_.typs).memoize
Out[8]:
lp2: LocalProver = LocalProver(
  TermState(
    FiniteDistribution(
      Vector(
        Weighted(eqM, 0.2),
        Weighted(mul, 0.35),
        Weighted(m, 0.15),
        Weighted(n, 0.15),
        Weighted(mul(m)(n), 0.15)
      )
    ),
    FiniteDistribution(Vector(Weighted(M, 1.0))),
    Vector(),
    FiniteDistribution(Vector()),
    FiniteDistribution(Vector()),
    Empty
  ),
  TermGenParams(
    0.15,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.1,
    0.0,
    0.3,
    0.7,
    0.5,
    0.0,
    0.0,
    0.0,
    OrElse(
      OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
...
typs2T: monix.eval.Task[FiniteDistribution[Typ[Term]]] = Async(
  <function2>,
  false,
  true,
  true
)
In [9]:
val typs2F = typs2T.runToFuture
In [13]:
val tg1 = TermGenParams.zero.copy(appW = 0.2, typAsCodW = 0.1, argAppW = 0.2)
val lp3 = LocalProver(ts0, tg = tg1, genMaxDepth = Some(3)).noIsles.sharpen(10)
Out[13]:
tg1: TermGenParams = TermGenParams(
  0.2,
  0.0,
  0.2,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.1,
  0.0,
  0.3,
  0.7,
  0.5,
  0.0,
  0.0,
  0.0,
  OrElse(
    OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
    <function1>
  )
)
lp3: LocalProverStep = LocalProver(
  TermState(
    FiniteDistribution(
      Vector(
        Weighted(eqM, 0.2),
        Weighted(mul, 0.35),
        Weighted(m, 0.15),
        Weighted(n, 0.15),
        Weighted(mul(m)(n), 0.15)
      )
    ),
    FiniteDistribution(Vector(Weighted(M, 1.0))),
    Vector(),
    FiniteDistribution(Vector()),
    FiniteDistribution(Vector()),
    Empty
  ),
  TermGenParams(
    0.2,
    0.0,
    0.2,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.1,
    0.0,
    0.3,
    0.7,
    0.5,
    0.0,
    0.0,
    0.0,
    OrElse(
      OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
...
In [14]:
val typs3T = lp3.nextState.map(_.typs).memoize
Out[14]:
typs3T: monix.eval.Task[FiniteDistribution[Typ[Term]]] = Async(
  <function2>,
  false,
  true,
  true
)
In [15]:
val typs3F = typs3T.runToFuture

First conclusion

With a bound on depth, this finishes in a couple of seconds even if sharpened.

In [16]:
val Thm = eqM(mul(m)(n))(mul(n)(m))

val Lemmas =
     Map(
        1 -> eqM(m)(mul(mul(m)(n))(n)),
        2 -> eqM(n)(mul(mul(m)(n))(mul(mul(m)(n))(n))),
        3 -> eqM(mul(mul(m)(n))(m))(mul(mul(m)(n))(mul(mul(m)(n))(n))),
        4 -> eqM(mul(mul(mul(m)(n))(m))(m))(mul(m)(n)),
        5 -> eqM(mul(mul(m)(n))(m))(n),
        6 -> eqM(mul(mul(mul(m)(n))(m))(m))(mul(n)(m)),
        7 -> eqM(mul(mul(m)(n))(n))(m),
        8 -> eqM(n)(mul(mul(m)(n))(mul(mul(m)(n))(n)))
         )

val claims = Lemmas.values.toSet + Thm
Out[16]:
Thm: Typ[Term] = eqM(mul(m)(n))(mul(n)(m))
Lemmas: Map[Int, Typ[Term]] = Map(
  5 -> eqM(mul(mul(m)(n))(m))(n),
  1 -> eqM(m)(mul(mul(m)(n))(n)),
  6 -> eqM(mul(mul(mul(m)(n))(m))(m))(mul(n)(m)),
  2 -> eqM(n)(mul(mul(m)(n))(mul(mul(m)(n))(n))),
  7 -> eqM(mul(mul(m)(n))(n))(m),
  3 -> eqM(mul(mul(m)(n))(m))(mul(mul(m)(n))(mul(mul(m)(n))(n))),
  8 -> eqM(n)(mul(mul(m)(n))(mul(mul(m)(n))(n))),
  4 -> eqM(mul(mul(mul(m)(n))(m))(m))(mul(m)(n))
)
claims: Set[Typ[Term]] = Set(
  eqM(mul(m)(n))(mul(n)(m)),
  eqM(mul(mul(mul(m)(n))(m))(m))(mul(n)(m)),
  eqM(mul(mul(m)(n))(n))(m),
  eqM(n)(mul(mul(m)(n))(mul(mul(m)(n))(n))),
  eqM(mul(mul(m)(n))(m))(mul(mul(m)(n))(mul(mul(m)(n))(n))),
  eqM(m)(mul(mul(m)(n))(n)),
  eqM(mul(mul(m)(n))(m))(n),
  eqM(mul(mul(mul(m)(n))(m))(m))(mul(m)(n))
)
In [17]:
val c3T = typs3T.map(typs => claims.map(c => c -> typs(c)))
Out[17]:
c3T: monix.eval.Task[Set[(Typ[Term], Double)]] = Map(
  Async(<function2>, false, true, true),
  ammonite.$sess.cmd16$Helper$$Lambda$3068/423345724@5133877e,
  0
)
In [18]:
val c3F = c3T.runToFuture
In [19]:
c3F.value
Out[19]:
res18: Option[scala.util.Try[Set[(Typ[Term], Double)]]] = Some(
  Success(
    Set(
      (eqM(mul(mul(m)(n))(m))(mul(mul(m)(n))(mul(mul(m)(n))(n))), 0.0),
      (eqM(mul(mul(mul(m)(n))(m))(m))(mul(n)(m)), 0.0),
      (eqM(mul(mul(m)(n))(m))(n), 1.4280604212495474E-4),
      (eqM(n)(mul(mul(m)(n))(mul(mul(m)(n))(n))), 2.1434429618186857E-4),
      (eqM(m)(mul(mul(m)(n))(n)), 0.004677507525737643),
      (eqM(mul(mul(m)(n))(n))(m), 1.4280604212495474E-4),
      (eqM(mul(mul(mul(m)(n))(m))(m))(mul(m)(n)), 0.0),
      (eqM(mul(m)(n))(mul(n)(m)), 0.004814047772453706)
    )
  )
)
In [20]:
val lp4 = LocalProver(ts0, tg = tg1, genMaxDepth = Some(4)).noIsles.sharpen(10)
val typs4T = lp4.nextState.map(_.typs).memoize
Out[20]:
lp4: LocalProverStep = LocalProver(
  TermState(
    FiniteDistribution(
      Vector(
        Weighted(eqM, 0.2),
        Weighted(mul, 0.35),
        Weighted(m, 0.15),
        Weighted(n, 0.15),
        Weighted(mul(m)(n), 0.15)
      )
    ),
    FiniteDistribution(Vector(Weighted(M, 1.0))),
    Vector(),
    FiniteDistribution(Vector()),
    FiniteDistribution(Vector()),
    Empty
  ),
  TermGenParams(
    0.2,
    0.0,
    0.2,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.1,
    0.0,
    0.3,
    0.7,
    0.5,
    0.0,
    0.0,
    0.0,
    OrElse(
      OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
...
typs4T: monix.eval.Task[FiniteDistribution[Typ[Term]]] = Async(
  <function2>,
  false,
  true,
  true
)
In [21]:
val typs4F = typs4T.runToFuture
In [24]:
typs4F.value
Out[24]:
res23: Option[scala.util.Try[FiniteDistribution[Typ[Term]]]] = Some(
  Success(
    FiniteDistribution(
      Vector(
        Weighted(eqM(mul(m)(mul(n)(m)))(mul(n)(n)), 1.3255085340793911E-5),
        Weighted(
          eqM(mul(mul(m)(n))(mul(m)(mul(m)(n))))(mul(n)(m)),
          1.3255085340793911E-5
        ),
        Weighted(
          eqM(mul(m)(n))(mul(mul(n)(mul(m)(n)))(mul(m)(mul(m)(n)))),
          1.3385040324168072E-5
        ),
        Weighted(eqM(mul(m)(n))(mul(mul(m)(n))(m)), 0.0016834328882907985),
        Weighted(eqM(mul(n)(n))(mul(mul(n)(n))(n)), 1.4590938767613E-5),
        Weighted(
          eqM(m)(mul(mul(m)(n))(mul(n)(mul(m)(m)))),
          1.2060214553322172E-5
        ),
        Weighted(
          eqM(mul(n)(n))(mul(mul(m)(mul(m)(n)))(mul(m)(n))),
          2.836528667080381E-5
        ),
        Weighted(
          eqM(n)(mul(n)(mul(mul(m)(n))(mul(mul(m)(n))(m)))),
          1.1632113631044007E-5
        ),
        Weighted(
          eqM(mul(n)(mul(m)(n)))(mul(n)(mul(n)(m))),
          1.4642485580471375E-4
        ),
        Weighted(
          eqM(n)(mul(mul(n)(n))(mul(m)(mul(m)(n)))),
          1.0287910529780654E-5
        ),
        Weighted(
          eqM(mul(mul(m)(n))(mul(n)(n)))(mul(m)(mul(m)(n))),
          1.7132491288925626E-5
        ),
...
In [25]:
val c4T = typs4T.map(typs => claims.map(c => c -> typs(c))).memoize
Out[25]:
c4T: monix.eval.Task[Set[(Typ[Term], Double)]] = Async(
  <function2>,
  false,
  true,
  true
)
In [26]:
val c4F = c4T.runToFuture
In [27]:
val tg2 = TermGenParams.zero.copy(appW = 0.2, typAsCodW = 0.1)
val lp5 = LocalProver(ts0, tg = tg2, genMaxDepth = Some(5)).noIsles.sharpen(10)
val typs5T = lp5.nextState.map(_.typs).memoize
Out[27]:
tg2: TermGenParams = TermGenParams(
  0.2,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.1,
  0.0,
  0.3,
  0.7,
  0.5,
  0.0,
  0.0,
  0.0,
  OrElse(
    OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
    <function1>
  )
)
lp5: LocalProverStep = LocalProver(
  TermState(
    FiniteDistribution(
      Vector(
        Weighted(eqM, 0.2),
        Weighted(mul, 0.35),
        Weighted(m, 0.15),
        Weighted(n, 0.15),
        Weighted(mul(m)(n), 0.15)
      )
    ),
    FiniteDistribution(Vector(Weighted(M, 1.0))),
    Vector(),
    FiniteDistribution(Vector()),
    FiniteDistribution(Vector()),
    Empty
  ),
  TermGenParams(
    0.2,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.1,
    0.0,
    0.3,
    0.7,
    0.5,
    0.0,
    0.0,
    0.0,
    OrElse(
      OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
...
typs5T: monix.eval.Task[FiniteDistribution[Typ[Term]]] = Async(
  <function2>,
  false,
  true,
  true
)
In [28]:
val typs5F = typs5T.runToFuture
In [31]:
typs5F.value
Out[31]:
res30: Option[scala.util.Try[FiniteDistribution[Typ[Term]]]] = Some(
  Success(
    FiniteDistribution(
      Vector(
        Weighted(
          eqM(mul(n)(mul(n)(m)))(mul(mul(m)(n))(mul(mul(m)(n))(n))),
          1.2591619570343608E-5
        ),
        Weighted(
          eqM(n)(mul(mul(mul(m)(n))(n))(mul(m)(mul(mul(m)(n))(n)))),
          1.0556167986993053E-5
        ),
        Weighted(
          eqM(n)(mul(mul(n)(mul(m)(n)))(mul(m)(mul(mul(m)(n))(m)))),
          1.0556167986993053E-5
        ),
        Weighted(eqM(mul(m)(mul(n)(m)))(mul(n)(n)), 3.2146044893724026E-5),
        Weighted(
          eqM(mul(m)(mul(m)(n)))(mul(n)(mul(mul(m)(n))(mul(mul(m)(n))(n)))),
          1.40741393833317E-5
        ),
        Weighted(
          eqM(mul(mul(m)(n))(mul(m)(n)))(mul(mul(n)(n))(mul(mul(m)(n))(mul(m)(n)))),
          1.2158987505220138E-5
        ),
        Weighted(
          eqM(mul(mul(m)(n))(mul(n)(n)))(mul(mul(mul(m)(n))(mul(m)(n)))(m)),
          1.727734716760031E-5
        ),
        Weighted(
          eqM(mul(mul(m)(n))(mul(m)(mul(m)(n))))(mul(n)(m)),
          3.2146044893724026E-5
        ),
        Weighted(
          eqM(mul(n)(mul(mul(m)(n))(mul(m)(n))))(mul(mul(m)(n))(mul(n)(m))),
          1.2591619570343608E-5
        ),
        Weighted(
...
In [33]:
val c5T = typs5T.map(typs => claims.map(c => c -> typs(c))).memoize
Out[33]:
c5T: monix.eval.Task[Set[(Typ[Term], Double)]] = Async(
  <function2>,
  false,
  true,
  true
)
In [34]:
val c5F = c5T.runToFuture
In [35]:
val flipped = eqM(mul(m)(n))(mul(mul(mul(m)(n))(m))(m))
Out[35]:
flipped: Typ[Term] = eqM(mul(m)(n))(mul(mul(mul(m)(n))(m))(m))
In [36]:
val pF = typs4T.map(_(flipped)).runToFuture
In [37]:
val flipped2 = eqM(mul(n)(m))(mul(mul(mul(m)(n))(m))(m))
Out[37]:
flipped2: Typ[Term] = eqM(mul(n)(m))(mul(mul(mul(m)(n))(m))(m))
In [38]:
val pF2 = typs4T.map(_(flipped2)).runToFuture

Conclusions

  • The depth worked correctly
  • However we could not reach all the lemmas.
  • Flipping let us reach the lemmas, which is equivalent to having the mirror of equality.
In [39]:
val eqFlip = a :-> (b :-> eqM(b)(a))
Out[39]:
eqFlip: Func[Term, Func[Term, Typ[Term]]] = (a : M) ↦ (b : M) ↦ eqM(b)(a)
In [40]:
val ts1 = TermState(FiniteDistribution(eqM -> 0.1, eqFlip -> 0.1, mul -> 0.35, m -> 0.15, n -> 0.15, mul(m)(n) -> 0.15), FiniteDistribution.unif(M))
Out[40]:
ts1: TermState = TermState(
  FiniteDistribution(
    Vector(
      Weighted(eqM, 0.1),
      Weighted((a : M) ↦ (b : M) ↦ eqM(b)(a), 0.1),
      Weighted(mul, 0.35),
      Weighted(m, 0.15),
      Weighted(n, 0.15),
      Weighted(mul(m)(n), 0.15)
    )
  ),
  FiniteDistribution(Vector(Weighted(M, 1.0))),
  Vector(),
  FiniteDistribution(Vector()),
  FiniteDistribution(Vector()),
  Empty
)
In [41]:
val tg2 = TermGenParams.zero.copy(appW = 0.2, typAsCodW = 0.1)
val lp6 = LocalProver(ts1, tg = tg2, genMaxDepth = Some(4)).noIsles.sharpen(10)
val typs6T = lp6.nextState.map(_.typs).memoize
Out[41]:
tg2: TermGenParams = TermGenParams(
  0.2,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.0,
  0.1,
  0.0,
  0.3,
  0.7,
  0.5,
  0.0,
  0.0,
  0.0,
  OrElse(
    OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
    <function1>
  )
)
lp6: LocalProverStep = LocalProver(
  TermState(
    FiniteDistribution(
      Vector(
        Weighted(eqM, 0.1),
        Weighted((a : M) ↦ (b : M) ↦ eqM(b)(a), 0.1),
        Weighted(mul, 0.35),
        Weighted(m, 0.15),
        Weighted(n, 0.15),
        Weighted(mul(m)(n), 0.15)
      )
    ),
    FiniteDistribution(Vector(Weighted(M, 1.0))),
    Vector(),
    FiniteDistribution(Vector()),
    FiniteDistribution(Vector()),
    Empty
  ),
  TermGenParams(
    0.2,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.0,
    0.1,
    0.0,
    0.3,
    0.7,
    0.5,
    0.0,
    0.0,
    0.0,
    OrElse(
      OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>)...
typs6T: monix.eval.Task[FiniteDistribution[Typ[Term]]] = Async(
  <function2>,
  false,
  true,
  true
)
In [42]:
val typs6F = typs6T.runToFuture
In [46]:
typs6F.value
Out[46]:
res45: Option[scala.util.Try[FiniteDistribution[Typ[Term]]]] = Some(
  Success(
    FiniteDistribution(
      Vector(
        Weighted(eqM(mul(m)(mul(n)(m)))(mul(n)(n)), 7.928206678585266E-5),
        Weighted(
          eqM(mul(mul(m)(n))(mul(m)(mul(m)(n))))(mul(n)(m)),
          9.199602368088775E-5
        ),
        Weighted(eqM(mul(mul(m)(m))(m))(mul(m)(m)), 1.6089700563711417E-5),
        Weighted(eqM(mul(m)(n))(mul(mul(m)(n))(m)), 0.0012924242940704665),
        Weighted(eqM(mul(n)(n))(mul(mul(n)(n))(n)), 1.6089700563711417E-5),
        Weighted(
          eqM(mul(mul(mul(m)(n))(mul(m)(n)))(mul(m)(n)))(mul(mul(m)(n))(n)),
          2.5691581679902662E-5
        ),
        Weighted(
          eqM(mul(n)(n))(mul(mul(m)(mul(m)(n)))(mul(m)(n))),
          2.5691581679902662E-5
        ),
        Weighted(
          eqM(mul(n)(mul(m)(n)))(mul(n)(mul(n)(m))),
          8.623107692266906E-5
        ),
        Weighted(
          eqM(mul(mul(n)(m))(mul(m)(n)))(mul(mul(m)(n))(n)),
          2.5691581679902662E-5
        ),
        Weighted(
          eqM(mul(mul(m)(n))(mul(n)(n)))(mul(m)(mul(m)(n))),
          9.520501275961725E-5
        ),
        Weighted(
          eqM(mul(m)(mul(mul(m)(n))(mul(m)(n))))(mul(m)(n)),
          2.632062558832602E-4
        ),
        Weighted(
          eqM(mul(mul(m)(n))(mul(mul(m)(n))(m)))(mul(n)(n)),
          8.773127367768097E-5
...
In [47]:
val c6T = typs6T.map(typs => claims.map(c => c -> typs(c))).memoize
Out[47]:
c6T: monix.eval.Task[Set[(Typ[Term], Double)]] = Async(
  <function2>,
  false,
  true,
  true
)
In [48]:
val c6F = c6T.runToFuture

Final conclusion

  • After all this persuasion and fairly long running time (but less than the 12 minute timeout), we get the statements of all theorems.