Proof Generated By Lemma Propagation

Problem Statement

Let $*$ be a commutative and associative binary operation on a set $S.$ Assume that for every $x$ and $y$ in $S,$ there exists $z$ in $S$ such that $x*z=y.$ (This $z$ may depend on $x$ and $y.$) Show that if $p,q,r$ are in $S$ and $p*r=q*r,$ then $p=q.$

Definitions

  1. Identity Element- A element $e$ is a Identity Element if $\exists x \in S$ such that $x*e=x$.
  2. Universal Identity-A Identity Element $e$ is called a Universal Identity if $\forall x\in S \ \ x*e=x $ is satisfied.

Solving Strategy

Part1 : Proving the existence and uniqueness of universal identity

  1. Prove that all identity elements are universal identities for the set $ S $ $i.e$
  2. $\\$ $$\exists x \ \exists e \ [(x*e = e) \implies \forall y \in S \ (y*e \ = \ y)]\\$$

  • Prove that the set of all universal identities is singleton $i.e$
  • $\\$ $$\forall x \ \exists e_{1} \exists e_{2} \ [[(x*e_{1} = x) \land (x*e_{2} =x )] \implies (e_{1} = e_{2})]$$

    </ol>

    Part2 : Elimination

    We have now proved the exists a unique Universal Identity, namely $e$ for the set $S$.Now for every pair $(x,e)$ we can find a $y$ (depending on $x$ and $e$) such that $x*y=e$ .Using this observation we can eliminate $c$ from the equation $a*c=b*c$.

    Proof

    
    
    In [1]:
    import $cp.bin.`provingground-core-jvm-2312478e00.fat.jar`
    
    
    
    
    Out[1]:
    import $cp.$                                              
    
    
    In [2]:
    import provingground._ , interface._, HoTT._, learning._ 
    repl.pprinter() = {
      val p = repl.pprinter()
      p.copy(
        additionalHandlers = p.additionalHandlers.orElse {
          translation.FansiShow.fansiHandler
        }
      )
    }
    
    
    
    
    Out[2]:
    import provingground._ , interface._, HoTT._, learning._ 
    
    
    
    In [3]:
    import provingground._ , interface._, HoTT._
    import learning._
    import library._, MonoidSimple._
    import FineDeducer.unif
    import monix.execution.Scheduler.Implicits.global
    import scala.concurrent._
    import duration._
    
    
    
    
    Out[3]:
    import provingground._ , interface._, HoTT._
    
    import learning._
    
    import library._, MonoidSimple._
    
    import FineDeducer.unif
    
    import monix.execution.Scheduler.Implicits.global
    
    import scala.concurrent._
    
    import duration._
    In the following section we are defining all the variables we are going to use in the proof.All the variables are terms of type M
    
    
    In [4]:
    val M = "M" ::Type
    val a = "a" :: M
    val b = "b" :: M
    val c = "c" :: M
    val d = "d" :: M
    val x = "x" :: M
    val y = "y" :: M
    val z = "z" :: M
    val e = "e" :: M
    val p = "p" :: M
    val q = "q" :: M
    val r = "r" :: M
    val s = "s" :: M
    val t = "t" :: M
    val e1 = "e1" :: M
    val e2 = "e2" :: M
    
    
    
    
    Out[4]:
    M: Typ[Term] = M
    a: Term = a
    b: Term = b
    c: Term = c
    d: Term = d
    x: Term = x
    y: Term = y
    z: Term = z
    e: Term = e
    p: Term = p
    q: Term = q
    r: Term = r
    s: Term = s
    t: Term = t
    e1: Term = e1
    e2: Term = e2

    In the section below we define the following operators:-

    1. eqM - This operation is defined on set $S$ and is equivalent to the Equality operator $i.e$, eqM$($a$)($b$) \iff a=b$.Bascillay treat it as truth assignment.
    2. op - This operation is defined on set $S$ and is equivalent to the $*$ operation $i.e$, $op($a$)($b$) \iff a*b$.
    3. op_2 - This opeartion is defined on the set $S$ and is used to encompass the associative nature of the binary operation $*$.op_2($a$)($b$)($c$) returns a term $a*b*c$.Now since the operation $*$ is associative therfore any order of bracketting will evalute the same result $i.e$, $(a*b)*c = a*(b*c)$.This is done to avoid the extra information of bracketing.
    4. inv - This opeartion is defined on the set $S$ and takes in elements say $x$ and $y$ as inputs and returns the element $z$ such that $x*z=y$ is satisfied.We know that such a mapping exists because of the condition given in the question.

    
    
    In [5]:
    val eqM = "eqM" :: M ->: M ->: Type
    val op  = "op" :: M ->: M ->: M
    val op_2 = "op_2" :: M ->: M ->: M ->: M
    val inv = "inv" :: M ->: M ->: M
    
    
    
    
    Out[5]:
    eqM: Func[Term, Func[Term, Typ[Term]]] = eqM
    op: Func[Term, Func[Term, Term]] = op
    op_2: Func[Term, Func[Term, Func[Term, Term]]] = op_2
    inv: Func[Term, Func[Term, Term]] = inv

    One of the best festures of this notebook is that after this step every step of the proof can be executed independently.

    Section0 : Existence Of Identity Element

    For the existence of identity we have to prove there exists $x,e \in S $ such that $x*e=x$ then e is called the identity for x.

    
    
    In [24]:
    val one_ :FiniteDistribution[Term] = unif(a,b)(x,e,op,eqM,inv)(
        a ~>: b ~>: (eqM(op(a)(inv(a)(b)))(b))
    )*0.5++(FiniteDistribution.unif(op:Term)*0.5)++(FiniteDistribution.unif(eqM:Term)*0.5)++(FiniteDistribution.unif(inv:Term)*0.5)
    val one_1 = one_.filter((t) => !Set(a, b).contains(t)).normalized()
    val ts_0 = TermState(one_1,one_1.map(_.typ))
    
    
    
    
    Out[24]:
    one_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.0625),
        Weighted(b, 0.0625),
        Weighted(x, 0.0625),
        Weighted(e, 0.0625),
        Weighted(op, 0.0625),
        Weighted(eqM, 0.0625),
        Weighted(inv, 0.0625),
        Weighted(
          axiom_{(\prod\limits_{a : M} (\prod\limits_{b : M} eqM(op(a)(inv(a)(b)))(b)))},
          0.0625
        ),
        Weighted(op, 0.5),
        Weighted(eqM, 0.5),
        Weighted(inv, 0.5)
      )
    )
    one_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.03333333333333333),
        Weighted(e, 0.03333333333333333),
        Weighted(op, 0.03333333333333333),
        Weighted(eqM, 0.03333333333333333),
        Weighted(inv, 0.03333333333333333),
        Weighted(
          axiom_{(\prod\limits_{a : M} (\prod\limits_{b : M} eqM(op(a)(inv(a)(b)))(b)))},
          0.03333333333333333
        ),
        Weighted(op, 0.26666666666666666),
        Weighted(eqM, 0.26666666666666666),
        Weighted(inv, 0.26666666666666666)
      )
    )
    ts_0: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.03333333333333333),
          Weighted(e, 0.03333333333333333),
          Weighted(op, 0.03333333333333333),
          Weighted(eqM, 0.03333333333333333),
          Weighted(inv, 0.03333333333333333),
          Weighted(
            axiom_{(\prod\limits_{a : M} (\prod\limits_{b : M} eqM(op(a)(inv(a)(b)))(b)))},
            0.03333333333333333
          ),
          Weighted(op, 0.26666666666666666),
          Weighted(eqM, 0.26666666666666666),
          Weighted(inv, 0.26666666666666666)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03333333333333333),
          Weighted(M, 0.03333333333333333),
          Weighted((M → (M → M)), 0.03333333333333333),
          Weighted((M → (M → 𝒰 )), 0.03333333333333333),
          Weighted((M → (M → M)), 0.03333333333333333),
          Weighted(
            ∏(a : M){ ∏(b : M){ eqM(op(a)(inv(a)(b)))(b) } },
            0.03333333333333333
          ),
          Weighted((M → (M → M)), 0.26666666666666666),
          Weighted((M → (M → 𝒰 )), 0.26666666666666666),
          Weighted((M → (M → M)), 0.26666666666666666)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    
    
    In [25]:
    val lp_0 = LocalProver(ts_0,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[25]:
    lp_0: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03333333333333333),
            Weighted(e, 0.03333333333333333),
            Weighted(op, 0.03333333333333333),
            Weighted(eqM, 0.03333333333333333),
            Weighted(inv, 0.03333333333333333),
            Weighted(
              axiom_{(\prod\limits_{a : M} (\prod\limits_{b : M} eqM(op(a)(inv(a)(b)))(b)))},
              0.03333333333333333
            ),
            Weighted(op, 0.26666666666666666),
            Weighted(eqM, 0.26666666666666666),
            Weighted(inv, 0.26666666666666666)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03333333333333333),
            Weighted(M, 0.03333333333333333),
            Weighted((M → (M → M)), 0.03333333333333333),
            Weighted((M → (M → 𝒰 )), 0.03333333333333333),
            Weighted((M → (M → M)), 0.03333333333333333),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(inv(a)(b)))(b) } },
              0.03333333333333333
            ),
            Weighted((M → (M → M)), 0.26666666666666666),
            Weighted((M → (M → 𝒰 )), 0.26666666666666666),
            Weighted((M → (M → M)), 0.26666666666666666)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(Vector()),
        Empty
    ...
    
    
    In [26]:
    val lem_0 = lp_0.lemmas.runSyncUnsafe()
    
    
    
    
    Out[26]:
    lem_0: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(e)(inv(e)(x)))(x), 9.774035574270451E-6),
      (eqM(op(x)(inv(x)(e)))(e), 9.774035574270451E-6),
      (eqM(op(x)(inv(x)(x)))(x), 9.774035574270451E-6),
      (eqM(op(e)(inv(e)(e)))(e), 9.774035574270451E-6)
    )

    Section1 : Existence Of Universal Identity

    Step1:

    $$(x*e)=x \implies (x*e)*inv(x)(y)=x*inv(x)(y)$$

    
    
    In [6]:
    val zero: FiniteDistribution[Term] = unif(a,b,c,d)(op(x)(e),x,inv(x)(y),op,eqM)(
        eqM(a)(b) ->: eqM(op(a)(c))(op(b)(c)),
        eqM(op(x)(e))(x)
      ) * 0.5 ++ (FiniteDistribution.unif(eqM: Term)*0.5) ++(FiniteDistribution.unif(op: Term)*0.25) 
    val zero1 = zero.filter((t) => !Set(a, b, c, d).contains(t)).normalized()
    val ts_ = TermState(zero1,zero1.map(_.typ))
    val ts_1 = TermState(zero1,zero1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(x)(e))(x) ->: eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))))
    
    
    
    
    Out[6]:
    zero: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.045454545454545456),
        Weighted(b, 0.045454545454545456),
        Weighted(c, 0.045454545454545456),
        Weighted(d, 0.045454545454545456),
        Weighted(op(x)(e), 0.045454545454545456),
        Weighted(x, 0.045454545454545456),
        Weighted(inv(x)(y), 0.045454545454545456),
        Weighted(op, 0.045454545454545456),
        Weighted(eqM, 0.045454545454545456),
        Weighted(
          axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
          0.045454545454545456
        ),
        Weighted(axiom_{eqM(op(x)(e))(x)}, 0.045454545454545456),
        Weighted(eqM, 0.5),
        Weighted(op, 0.25)
      )
    )
    zero1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(op(x)(e), 0.0425531914893617),
        Weighted(x, 0.0425531914893617),
        Weighted(inv(x)(y), 0.0425531914893617),
        Weighted(op, 0.0425531914893617),
        Weighted(eqM, 0.0425531914893617),
        Weighted(
          axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
          0.0425531914893617
        ),
        Weighted(axiom_{eqM(op(x)(e))(x)}, 0.0425531914893617),
        Weighted(eqM, 0.4680851063829787),
        Weighted(op, 0.23404255319148934)
      )
    )
    ts_: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(op(x)(e), 0.0425531914893617),
          Weighted(x, 0.0425531914893617),
          Weighted(inv(x)(y), 0.0425531914893617),
          Weighted(op, 0.0425531914893617),
          Weighted(eqM, 0.0425531914893617),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
            0.0425531914893617
          ),
          Weighted(axiom_{eqM(op(x)(e))(x)}, 0.0425531914893617),
          Weighted(eqM, 0.4680851063829787),
          Weighted(op, 0.23404255319148934)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.0425531914893617),
          Weighted(M, 0.0425531914893617),
          Weighted(M, 0.0425531914893617),
          Weighted((M → (M → M)), 0.0425531914893617),
          Weighted((M → (M → 𝒰 )), 0.0425531914893617),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(a)(c))(op(b)(c))) } } },
            0.0425531914893617
          ),
          Weighted(eqM(op(x)(e))(x), 0.0425531914893617),
          Weighted((M → (M → 𝒰 )), 0.4680851063829787),
          Weighted((M → (M → M)), 0.23404255319148934)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    ts_1: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(op(x)(e), 0.0425531914893617),
          Weighted(x, 0.0425531914893617),
          Weighted(inv(x)(y), 0.0425531914893617),
          Weighted(op, 0.0425531914893617),
          Weighted(eqM, 0.0425531914893617),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
            0.0425531914893617
          ),
          Weighted(axiom_{eqM(op(x)(e))(x)}, 0.0425531914893617),
          Weighted(eqM, 0.4680851063829787),
          Weighted(op, 0.23404255319148934)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.0425531914893617),
          Weighted(M, 0.0425531914893617),
          Weighted(M, 0.0425531914893617),
          Weighted((M → (M → M)), 0.0425531914893617),
          Weighted((M → (M → 𝒰 )), 0.0425531914893617),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(a)(c))(op(b)(c))) } } },
            0.0425531914893617
          ),
          Weighted(eqM(op(x)(e))(x), 0.0425531914893617),
          Weighted((M → (M → 𝒰 )), 0.4680851063829787),
          Weighted((M → (M → M)), 0.23404255319148934)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(
        Vector(
          Weighted(
    ...
    
    
    In [12]:
    val lp_ = LocalProver(ts_,cutoff=5*math.pow(10,-6)).noIsles
    val lp_1 = LocalProver(ts_1,cutoff=5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[12]:
    lp_: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(op(x)(e), 0.0425531914893617),
            Weighted(x, 0.0425531914893617),
            Weighted(inv(x)(y), 0.0425531914893617),
            Weighted(op, 0.0425531914893617),
            Weighted(eqM, 0.0425531914893617),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
              0.0425531914893617
            ),
            Weighted(axiom_{eqM(op(x)(e))(x)}, 0.0425531914893617),
            Weighted(eqM, 0.4680851063829787),
            Weighted(op, 0.23404255319148934)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.0425531914893617),
            Weighted(M, 0.0425531914893617),
            Weighted(M, 0.0425531914893617),
            Weighted((M → (M → M)), 0.0425531914893617),
            Weighted((M → (M → 𝒰 )), 0.0425531914893617),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(a)(c))(op(b)(c))) } } },
              0.0425531914893617
            ),
            Weighted(eqM(op(x)(e))(x), 0.0425531914893617),
            Weighted((M → (M → 𝒰 )), 0.4680851063829787),
            Weighted((M → (M → M)), 0.23404255319148934)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(Vector()),
        Empty
    ...
    lp_1: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(op(x)(e), 0.0425531914893617),
            Weighted(x, 0.0425531914893617),
            Weighted(inv(x)(y), 0.0425531914893617),
            Weighted(op, 0.0425531914893617),
            Weighted(eqM, 0.0425531914893617),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
              0.0425531914893617
            ),
            Weighted(axiom_{eqM(op(x)(e))(x)}, 0.0425531914893617),
            Weighted(eqM, 0.4680851063829787),
            Weighted(op, 0.23404255319148934)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.0425531914893617),
            Weighted(M, 0.0425531914893617),
            Weighted(M, 0.0425531914893617),
            Weighted((M → (M → M)), 0.0425531914893617),
            Weighted((M → (M → 𝒰 )), 0.0425531914893617),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(a)(c))(op(b)(c))) } } },
              0.0425531914893617
            ),
            Weighted(eqM(op(x)(e))(x), 0.0425531914893617),
            Weighted((M → (M → 𝒰 )), 0.4680851063829787),
            Weighted((M → (M → M)), 0.23404255319148934)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(
    ...

    Importance Of Including Goal in Term State

    We will see that when we do not put goals in the TermState then the prover generates the desired lemma with low wieghtage or does not generate the desired and some time even does not genrate any lemma(this is the case is when the cutoff is set very low is order to capture the desired lemma but before the program could finish the generation of lemmas the program timeouts).This is common when many terms and axioms are given to the prover.Including goals becomes a crucial part in these cases as they drastically change the wieghtage of terms and hence change the generation process too.Thus helping the prover in generation of desired lemma.

    
    
    In [13]:
    val lem_ = lp_.lemmas.runSyncUnsafe()
    
    
    
    
    Out[13]:
    lem_: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(x)(e))(op(x)(e)))(op(x)(op(x)(e))), 1.0137580491037564E-5),
      (eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y))), 1.0137580491037564E-5),
      (eqM(op(op(x)(e))(x))(op(x)(x)), 1.0137580491037564E-5)
    )
    
    
    In [14]:
    val lem_1 = lp_1.lemmas.runSyncUnsafe()
    
    
    
    
    Out[14]:
    lem_1: Vector[(Typ[Term], Double)] = Vector(
      (
        (eqM(op(x)(e))(x) → eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))),
        0.894125408326361
      ),
      (eqM(op(op(x)(e))(op(x)(e)))(op(x)(op(x)(e))), 9.207734038248953E-6),
      (eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y))), 9.207734038248953E-6),
      (eqM(op(op(x)(e))(x))(op(x)(x)), 9.207734038248953E-6)
    )

    Step2:

    $$(x*e)*inv(x)(y) = x*(e*inv(x)(y))$$

    
    
    In [6]:
    val negative1_ : FiniteDistribution[Term] = unif(a,b,c)(x,e,inv(x)(y),eqM,op)(
       eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.7)++(FiniteDistribution.unif(op:Term)*0.9)
    val negative1_1 = negative1_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_3 = TermState(negative1_1,negative1_1.map(_.typ))
    val ts_4 = TermState(negative1_1,negative1_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(e)(inv(x)(y))))))
    
    
    
    
    Out[6]:
    negative1_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05555555555555555),
        Weighted(b, 0.05555555555555555),
        Weighted(c, 0.05555555555555555),
        Weighted(x, 0.05555555555555555),
        Weighted(e, 0.05555555555555555),
        Weighted(inv(x)(y), 0.05555555555555555),
        Weighted(eqM, 0.05555555555555555),
        Weighted(op, 0.05555555555555555),
        Weighted(axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))}, 0.05555555555555555),
        Weighted(eqM, 0.7),
        Weighted(op, 0.9)
      )
    )
    negative1_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.028735632183908046),
        Weighted(e, 0.028735632183908046),
        Weighted(inv(x)(y), 0.028735632183908046),
        Weighted(eqM, 0.028735632183908046),
        Weighted(op, 0.028735632183908046),
        Weighted(
          axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
          0.028735632183908046
        ),
        Weighted(eqM, 0.3620689655172414),
        Weighted(op, 0.4655172413793104)
      )
    )
    ts_3: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.028735632183908046),
          Weighted(e, 0.028735632183908046),
          Weighted(inv(x)(y), 0.028735632183908046),
          Weighted(eqM, 0.028735632183908046),
          Weighted(op, 0.028735632183908046),
          Weighted(
            axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
            0.028735632183908046
          ),
          Weighted(eqM, 0.3620689655172414),
          Weighted(op, 0.4655172413793104)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.028735632183908046),
          Weighted(M, 0.028735632183908046),
          Weighted(M, 0.028735632183908046),
          Weighted((M → (M → 𝒰 )), 0.028735632183908046),
          Weighted((M → (M → M)), 0.028735632183908046),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
            0.028735632183908046
          ),
          Weighted((M → (M → 𝒰 )), 0.3620689655172414),
          Weighted((M → (M → M)), 0.4655172413793104)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    ts_4: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.028735632183908046),
          Weighted(e, 0.028735632183908046),
          Weighted(inv(x)(y), 0.028735632183908046),
          Weighted(eqM, 0.028735632183908046),
          Weighted(op, 0.028735632183908046),
          Weighted(
            axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
            0.028735632183908046
          ),
          Weighted(eqM, 0.3620689655172414),
          Weighted(op, 0.4655172413793104)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.028735632183908046),
          Weighted(M, 0.028735632183908046),
          Weighted(M, 0.028735632183908046),
          Weighted((M → (M → 𝒰 )), 0.028735632183908046),
          Weighted((M → (M → M)), 0.028735632183908046),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
            0.028735632183908046
          ),
          Weighted((M → (M → 𝒰 )), 0.3620689655172414),
          Weighted((M → (M → M)), 0.4655172413793104)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(
        Vector(Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(e)(inv(x)(y)))), 1.0))
      ),
      Empty
    )
    
    
    In [ ]:
    val lp_2 = LocalProver(ts_3,cutoff=5*math.pow(10,-6)).noIsles
    val lp_3 = LocalProver(ts_4,cutoff=5*math.pow(10,-6)).noIsles
    val lp_4 = LocalProver(ts_3,cutoff=math.pow(10,-6)).noIsles
    
    
    
    In [13]:
    val lem_2 = lp_2.lemmas.runSyncUnsafe()
    
    
    
    
    Out[13]:
    lem_3: Vector[(Typ[Term], Double)] = Vector()

    There were a large number of terms in the term state so the expexted lemmas had too low wieghtage to get generated.Thus no lemma was generated.So now we try to generate the desired lemma by,

    • Adding goal to the term state and not lowering the cutoff.
    • Lowering the cutoff and not including goals as a part of Term State
    • .

    
    
    In [12]:
    val lem_3 = lp_3.lemmas.runSyncUnsafe()
    
    
    
    
    Out[12]:
    lem_4: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(e)(inv(x)(y)))), 0.8884378382021705)
    )
    
    
    In [16]:
    val lem_4 = lp_4.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd15$Helper.<init>(cmd15.sc:1)
      ammonite.$sess.cmd15$.<init>(cmd15.sc:7)
      ammonite.$sess.cmd15$.<clinit>(cmd15.sc:-1)

    Step3:

    $$e*inv(x)(y)=inv(x)(y)*e $$ $$\implies x*(e*inv(x)(y)) = x*(inv(x)(y)*e) \\$$

    
    
    In [7]:
    val negative2_ : FiniteDistribution[Term] = unif(a,b,c)(x,e,inv(x)(y),eqM,op)(
        eqM(a)(b) ->: eqM(op(c)(a))(op(c)(b)),
        eqM(op(a)(b))(op(b)(a))
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.3)++(FiniteDistribution.unif(op:Term,eqM(a)(b) ->: eqM(op(c)(a))(op(c)(b)))*0.9)
    val negative2_1 = negative2_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_5 = TermState(negative2_1,negative2_1.map(_.typ))
    val ts_6 = TermState(negative2_1,negative2_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(x)(op(e)(inv(x)(y))))(op(x)(op(inv(x)(y))(e)))))
    
    
    
    
    Out[7]:
    negative2_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05),
        Weighted(b, 0.05),
        Weighted(c, 0.05),
        Weighted(x, 0.05),
        Weighted(e, 0.05),
        Weighted(inv(x)(y), 0.05),
        Weighted(eqM, 0.05),
        Weighted(op, 0.05),
        Weighted(axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))}, 0.05),
        Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.05),
        Weighted(eqM, 0.3),
        Weighted(op, 0.45),
        Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.45)
      )
    )
    negative2_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.03225806451612904),
        Weighted(e, 0.03225806451612904),
        Weighted(inv(x)(y), 0.03225806451612904),
        Weighted(eqM, 0.03225806451612904),
        Weighted(op, 0.03225806451612904),
        Weighted(
          axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
          0.03225806451612904
        ),
        Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
        Weighted(eqM, 0.19354838709677422),
        Weighted(op, 0.29032258064516137),
        Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
      )
    )
    ts_5: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.03225806451612904),
          Weighted(e, 0.03225806451612904),
          Weighted(inv(x)(y), 0.03225806451612904),
          Weighted(eqM, 0.03225806451612904),
          Weighted(op, 0.03225806451612904),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
            0.03225806451612904
          ),
          Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
          Weighted(eqM, 0.19354838709677422),
          Weighted(op, 0.29032258064516137),
          Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03225806451612904),
          Weighted(M, 0.03225806451612904),
          Weighted(M, 0.03225806451612904),
          Weighted((M → (M → 𝒰 )), 0.03225806451612904),
          Weighted((M → (M → M)), 0.03225806451612904),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
            0.03225806451612904
          ),
          Weighted(
            ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
            0.03225806451612904
          ),
          Weighted((M → (M → 𝒰 )), 0.19354838709677422),
          Weighted((M → (M → M)), 0.29032258064516137),
          Weighted(𝒰 , 0.29032258064516137)
        )
      ),
    ...
    ts_6: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.03225806451612904),
          Weighted(e, 0.03225806451612904),
          Weighted(inv(x)(y), 0.03225806451612904),
          Weighted(eqM, 0.03225806451612904),
          Weighted(op, 0.03225806451612904),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
            0.03225806451612904
          ),
          Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
          Weighted(eqM, 0.19354838709677422),
          Weighted(op, 0.29032258064516137),
          Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03225806451612904),
          Weighted(M, 0.03225806451612904),
          Weighted(M, 0.03225806451612904),
          Weighted((M → (M → 𝒰 )), 0.03225806451612904),
          Weighted((M → (M → M)), 0.03225806451612904),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
            0.03225806451612904
          ),
          Weighted(
            ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
            0.03225806451612904
          ),
          Weighted((M → (M → 𝒰 )), 0.19354838709677422),
          Weighted((M → (M → M)), 0.29032258064516137),
          Weighted(𝒰 , 0.29032258064516137)
        )
      ),
    ...
    
    
    In [18]:
    val tg = TermGenParams(unAppW=0.3)
    val tg1 = TermGenParams(appW=0.3)
    val tg2 = TermGenParams(unAppW=0.2,appW = 0.2)
    val tg3 = TermGenParams(appW = 0.2)
    val tg4 = TermGenParams(unAppW = 0.2)
    val lp_5 = LocalProver(ts_6,cutoff=5*math.pow(10,-6)).noIsles
    val lp_6 = LocalProver(ts_6,tg,cutoff=5*math.pow(10,-5)).noIsles
    val lp_7 = LocalProver(ts_6,tg1,cutoff=5*math.pow(10,-6)).noIsles
    val lp_8 = LocalProver(ts_6,tg2,cutoff=5*math.pow(10,-6)).noIsles
    val lp_9 = LocalProver(ts_6,tg,cutoff=8*math.pow(10,-6)).noIsles
    val lp_10 = LocalProver(ts_6,tg1,cutoff=8*math.pow(10,-6)).noIsles
    val lp_11 = LocalProver(ts_6,tg2,cutoff=8*math.pow(10,-6)).noIsles
    val lp_12 = LocalProver(ts_6,tg3,cutoff=math.pow(10,-5)).noIsles
    val lp_13 = LocalProver(ts_6,tg3,cutoff=8*math.pow(10,-5)).noIsles
    val lp_14 = LocalProver(ts_6,tg4,cutoff=5*math.pow(10,-5)).noIsles
    val lp_15 = LocalProver(ts_6,tg4,cutoff=3*math.pow(10,-5)).noIsles
    
    
    
    
    Out[18]:
    tg: TermGenParams = TermGenParams(
      0.1,
      0.3,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    tg1: TermGenParams = TermGenParams(
      0.3,
      0.1,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    tg2: TermGenParams = TermGenParams(
      0.2,
      0.2,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    tg3: TermGenParams = TermGenParams(
      0.2,
      0.1,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    tg4: TermGenParams = TermGenParams(
      0.1,
      0.2,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    lp_5: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_6: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_7: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_8: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_9: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_10: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_11: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_12: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_13: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_14: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    lp_15: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03225806451612904),
            Weighted(e, 0.03225806451612904),
            Weighted(inv(x)(y), 0.03225806451612904),
            Weighted(eqM, 0.03225806451612904),
            Weighted(op, 0.03225806451612904),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03225806451612904
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.03225806451612904),
            Weighted(eqM, 0.19354838709677422),
            Weighted(op, 0.29032258064516137),
            Weighted((eqM(a)(b) → eqM(op(c)(a))(op(c)(b))), 0.29032258064516137)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted(M, 0.03225806451612904),
            Weighted((M → (M → 𝒰 )), 0.03225806451612904),
            Weighted((M → (M → M)), 0.03225806451612904),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03225806451612904
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.03225806451612904
            ),
            Weighted((M → (M → 𝒰 )), 0.19354838709677422),
            Weighted((M → (M → M)), 0.29032258064516137),
            Weighted(𝒰 , 0.29032258064516137)
          )
    ...
    
    
    In [19]:
    val lem_5 = lp_5.lemmas.runSyncUnsafe()
    
    
    
    
    Out[19]:
    lem_5: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(x)(inv(x)(y)))(op(inv(x)(y))(x)), 1.0798085676176734E-5),
      (
        eqM(op(inv(x)(y))(inv(x)(y)))(op(inv(x)(y))(inv(x)(y))),
        1.0798085676176734E-5
      ),
      (eqM(op(x)(x))(op(x)(x)), 1.0798085676176734E-5),
      (eqM(op(x)(e))(op(e)(x)), 1.0798085676176734E-5),
      (eqM(op(e)(x))(op(x)(e)), 1.0798085676176734E-5),
      (eqM(op(e)(e))(op(e)(e)), 1.0798085676176734E-5),
      (eqM(op(inv(x)(y))(e))(op(e)(inv(x)(y))), 1.0798085676176734E-5),
      (eqM(op(inv(x)(y))(x))(op(x)(inv(x)(y))), 1.0798085676176734E-5),
      (eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 1.0798085676176734E-5)
    )
    
    
    In [19]:
    val lem_6 = lp_6.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd18$Helper.<init>(cmd18.sc:1)
      ammonite.$sess.cmd18$.<init>(cmd18.sc:7)
      ammonite.$sess.cmd18$.<clinit>(cmd18.sc:-1)
    
    
    In [24]:
    val lem_7 = lp_7.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd23$Helper.<init>(cmd23.sc:1)
      ammonite.$sess.cmd23$.<init>(cmd23.sc:7)
      ammonite.$sess.cmd23$.<clinit>(cmd23.sc:-1)
    
    
    In [ ]:
    val lem_8 = lp_8.lemmas.runSyncUnsafe()
    
    
    
    In [27]:
    val lem_9 = lp_9.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
    	at monix.eval.Task.timeout(Task.scala:2220)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
    	at provingground.learning.MonixFiniteDistributionEq.$anonfun$nodeDist$2(MonixFiniteDistributionEq.scala:584)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.MonixFiniteDistributionEq.nodeDist(MonixFiniteDistributionEq.scala:350)
    	at provingground.learning.GenMonixFiniteDistributionEq.nodeCoeffDist(MonixFiniteDistributionEq.scala:183)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$nodeCoeffDist$4(MonixFiniteDistributionEq.scala:197)
    	at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:170)
    	at monix.eval.internal.TaskRunLoop$.$anonfun$restartAsync$1(TaskRunLoop.scala:222)
    	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source)
    	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source)
    	at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    	at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
    	at monix.eval.Task.timeout(Task.scala:2220)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
    	at provingground.learning.MonixFiniteDistributionEq.$anonfun$nodeDist$2(MonixFiniteDistributionEq.scala:584)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.MonixFiniteDistributionEq.nodeDist(MonixFiniteDistributionEq.scala:350)
    	at provingground.learning.MonixFiniteDistributionEq.$anonfun$nodeDist$2(MonixFiniteDistributionEq.scala:633)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.MonixFiniteDistributionEq.nodeDist(MonixFiniteDistributionEq.scala:350)
    	at provingground.learning.GenMonixFiniteDistributionEq.nodeCoeffDist(MonixFiniteDistributionEq.scala:183)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$nodeCoeffDist$4(MonixFiniteDistributionEq.scala:197)
    	at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:170)
    	at monix.eval.internal.TaskRunLoop$.$anonfun$restartAsync$1(TaskRunLoop.scala:222)
    	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source)
    	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source)
    	at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    	at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd26$Helper.<init>(cmd26.sc:1)
      ammonite.$sess.cmd26$.<init>(cmd26.sc:7)
      ammonite.$sess.cmd26$.<clinit>(cmd26.sc:-1)
    
    
    In [26]:
    val lem_10 = lp_10.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
    	at monix.eval.Task.timeout(Task.scala:2220)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
    	at provingground.learning.MonixFiniteDistributionEq.$anonfun$nodeDist$2(MonixFiniteDistributionEq.scala:584)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.MonixFiniteDistributionEq.nodeDist(MonixFiniteDistributionEq.scala:350)
    	at provingground.learning.GenMonixFiniteDistributionEq.nodeCoeffDist(MonixFiniteDistributionEq.scala:183)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$nodeCoeffDist$4(MonixFiniteDistributionEq.scala:197)
    	at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:170)
    	at monix.eval.internal.TaskRunLoop$.$anonfun$restartAsync$1(TaskRunLoop.scala:222)
    	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source)
    	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source)
    	at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    	at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
    	at monix.eval.Task.timeout(Task.scala:2220)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
    	at provingground.learning.MonixFiniteDistributionEq.$anonfun$nodeDist$2(MonixFiniteDistributionEq.scala:584)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.MonixFiniteDistributionEq.nodeDist(MonixFiniteDistributionEq.scala:350)
    	at provingground.learning.MonixFiniteDistributionEq.$anonfun$nodeDist$2(MonixFiniteDistributionEq.scala:633)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.MonixFiniteDistributionEq.nodeDist(MonixFiniteDistributionEq.scala:350)
    	at provingground.learning.GenMonixFiniteDistributionEq.nodeCoeffDist(MonixFiniteDistributionEq.scala:183)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$nodeCoeffDist$4(MonixFiniteDistributionEq.scala:197)
    	at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:170)
    	at monix.eval.internal.TaskRunLoop$.$anonfun$restartAsync$1(TaskRunLoop.scala:222)
    	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source)
    	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source)
    	at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    	at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
    	at monix.eval.Task.timeout(Task.scala:2220)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
    	at provingground.learning.MonixFiniteDistributionEq.$anonfun$nodeDist$2(MonixFiniteDistributionEq.scala:584)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.MonixFiniteDistributionEq.nodeDist(MonixFiniteDistributionEq.scala:350)
    	at provingground.learning.MonixFiniteDistributionEq.$anonfun$nodeDist$2(MonixFiniteDistributionEq.scala:633)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.MonixFiniteDistributionEq.nodeDist(MonixFiniteDistributionEq.scala:350)
    	at provingground.learning.GenMonixFiniteDistributionEq.nodeCoeffDist(MonixFiniteDistributionEq.scala:183)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$nodeCoeffDist$4(MonixFiniteDistributionEq.scala:197)
    	at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:170)
    	at monix.eval.internal.TaskRunLoop$.$anonfun$restartAsync$1(TaskRunLoop.scala:222)
    	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source)
    	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source)
    	at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    	at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd25$Helper.<init>(cmd25.sc:1)
      ammonite.$sess.cmd25$.<init>(cmd25.sc:7)
      ammonite.$sess.cmd25$.<clinit>(cmd25.sc:-1)
    
    
    In [ ]:
    val lem_11 = lp_11.lemmas.runSyncUnsafe()
    
    
    
    In [29]:
    val lem_12 = lp_12.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
    	at monix.eval.Task.timeout(Task.scala:2220)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
    	at provingground.learning.MonixFiniteDistributionEq.$anonfun$nodeDist$2(MonixFiniteDistributionEq.scala:584)
    	at scala.Option.getOrElse(Option.scala:189)
    	at provingground.learning.MonixFiniteDistributionEq.nodeDist(MonixFiniteDistributionEq.scala:350)
    	at provingground.learning.GenMonixFiniteDistributionEq.nodeCoeffDist(MonixFiniteDistributionEq.scala:183)
    	at provingground.learning.GenMonixFiniteDistributionEq.$anonfun$nodeCoeffDist$4(MonixFiniteDistributionEq.scala:197)
    	at monix.eval.internal.TaskRunLoop$.startFull(TaskRunLoop.scala:170)
    	at monix.eval.internal.TaskRunLoop$.$anonfun$restartAsync$1(TaskRunLoop.scala:222)
    	at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source)
    	at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(Unknown Source)
    	at java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    	at java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd28$Helper.<init>(cmd28.sc:1)
      ammonite.$sess.cmd28$.<init>(cmd28.sc:7)
      ammonite.$sess.cmd28$.<clinit>(cmd28.sc:-1)
    
    
    In [17]:
    val lem_13 = lp_13.lemmas.runSyncUnsafe()
    
    
    
    
    Out[17]:
    lem_13: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(x)(inv(x)(y)))(op(inv(x)(y))(x)), 1.2228198738523114E-5),
      (
        eqM(op(inv(x)(y))(inv(x)(y)))(op(inv(x)(y))(inv(x)(y))),
        1.2228198738523114E-5
      ),
      (eqM(op(x)(x))(op(x)(x)), 1.2228198738523114E-5),
      (eqM(op(x)(e))(op(e)(x)), 1.2228198738523114E-5),
      (eqM(op(e)(x))(op(x)(e)), 1.2228198738523114E-5),
      (eqM(op(e)(e))(op(e)(e)), 1.2228198738523114E-5),
      (eqM(op(inv(x)(y))(e))(op(e)(inv(x)(y))), 1.2228198738523114E-5),
      (eqM(op(inv(x)(y))(x))(op(x)(inv(x)(y))), 1.2228198738523114E-5),
      (eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 1.2228198738523114E-5)
    )
    
    
    In [11]:
    val lem_14 = lp_14.lemmas.runSyncUnsafe()
    
    
    
    
    Out[11]:
    lem_14: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(x)(inv(x)(y)))(op(inv(x)(y))(x)), 1.2153081495026338E-5),
      (
        eqM(op(inv(x)(y))(inv(x)(y)))(op(inv(x)(y))(inv(x)(y))),
        1.2153081495026338E-5
      ),
      (eqM(op(x)(x))(op(x)(x)), 1.2153081495026338E-5),
      (eqM(op(x)(e))(op(e)(x)), 1.2153081495026338E-5),
      (eqM(op(e)(x))(op(x)(e)), 1.2153081495026338E-5),
      (eqM(op(e)(e))(op(e)(e)), 1.2153081495026338E-5),
      (eqM(op(inv(x)(y))(e))(op(e)(inv(x)(y))), 1.2153081495026338E-5),
      (eqM(op(inv(x)(y))(x))(op(x)(inv(x)(y))), 1.2153081495026338E-5),
      (eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 1.2153081495026338E-5)
    )
    
    
    In [15]:
    val lem_15=lp_15.lemmas.runSyncUnsafe()
    
    
    
    
    Out[15]:
    lem_15: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(x)(inv(x)(y)))(op(inv(x)(y))(x)), 1.2273495253360917E-5),
      (
        eqM(op(inv(x)(y))(inv(x)(y)))(op(inv(x)(y))(inv(x)(y))),
        1.2273495253360917E-5
      ),
      (eqM(op(x)(x))(op(x)(x)), 1.2273495253360917E-5),
      (eqM(op(x)(e))(op(e)(x)), 1.2273495253360917E-5),
      (eqM(op(e)(x))(op(x)(e)), 1.2273495253360917E-5),
      (eqM(op(e)(e))(op(e)(e)), 1.2273495253360917E-5),
      (eqM(op(inv(x)(y))(e))(op(e)(inv(x)(y))), 1.2273495253360917E-5),
      (eqM(op(inv(x)(y))(x))(op(x)(inv(x)(y))), 1.2273495253360917E-5),
      (eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 1.2273495253360917E-5)
    )

    In the above cases we could clearly see that either the prover is only using the commutivity axiom to produce lemmas or it is not producing any.In the above case various combination of Term generation parameters as well as cutoff levels were tested in hope of obtaining the desired lemma.In the coming sections of the proof we will see that a similar situation ocuurs where prover has to use a axiom to generate some terms which will be used with some other axiom to generate the desired lemma.In some cases the prover would succesfully generate the lemmas because the number of terms in the Term State were fairly less.

    
    
    In [20]:
    val negative3_ : FiniteDistribution[Term] = unif(a,b,c)(x,inv(x)(y),e,eqM,op)(
        eqM(a)(b) ->: eqM(op(c)(a))(op(c)(b)),
        eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e))
    )*0.5++(FiniteDistribution.unif(eqM:Term,op:Term)*0.5)
    val negative3_1 = negative3_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_7 = TermState(negative3_1,negative3_1.map(_.typ))
    val ts_8 = TermState(negative3_1,negative3_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(x)(op(e)(inv(x)(y))))(op(x)(op(inv(x)(y))(e)))))
    
    
    
    
    Out[20]:
    negative3_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05),
        Weighted(b, 0.05),
        Weighted(c, 0.05),
        Weighted(x, 0.05),
        Weighted(inv(x)(y), 0.05),
        Weighted(e, 0.05),
        Weighted(eqM, 0.05),
        Weighted(op, 0.05),
        Weighted(axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))}, 0.05),
        Weighted(axiom_{eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e))}, 0.05),
        Weighted(eqM, 0.25),
        Weighted(op, 0.25)
      )
    )
    negative3_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.05882352941176471),
        Weighted(inv(x)(y), 0.05882352941176471),
        Weighted(e, 0.05882352941176471),
        Weighted(eqM, 0.05882352941176471),
        Weighted(op, 0.05882352941176471),
        Weighted(
          axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
          0.05882352941176471
        ),
        Weighted(
          axiom_{eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e))},
          0.05882352941176471
        ),
        Weighted(eqM, 0.29411764705882354),
        Weighted(op, 0.29411764705882354)
      )
    )
    ts_7: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.05882352941176471),
          Weighted(inv(x)(y), 0.05882352941176471),
          Weighted(e, 0.05882352941176471),
          Weighted(eqM, 0.05882352941176471),
          Weighted(op, 0.05882352941176471),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
            0.05882352941176471
          ),
          Weighted(
            axiom_{eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e))},
            0.05882352941176471
          ),
          Weighted(eqM, 0.29411764705882354),
          Weighted(op, 0.29411764705882354)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.05882352941176471),
          Weighted(M, 0.05882352941176471),
          Weighted(M, 0.05882352941176471),
          Weighted((M → (M → 𝒰 )), 0.05882352941176471),
          Weighted((M → (M → M)), 0.05882352941176471),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
            0.05882352941176471
          ),
          Weighted(eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 0.05882352941176471),
          Weighted((M → (M → 𝒰 )), 0.29411764705882354),
          Weighted((M → (M → M)), 0.29411764705882354)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
    ...
    ts_8: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.05882352941176471),
          Weighted(inv(x)(y), 0.05882352941176471),
          Weighted(e, 0.05882352941176471),
          Weighted(eqM, 0.05882352941176471),
          Weighted(op, 0.05882352941176471),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
            0.05882352941176471
          ),
          Weighted(
            axiom_{eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e))},
            0.05882352941176471
          ),
          Weighted(eqM, 0.29411764705882354),
          Weighted(op, 0.29411764705882354)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.05882352941176471),
          Weighted(M, 0.05882352941176471),
          Weighted(M, 0.05882352941176471),
          Weighted((M → (M → 𝒰 )), 0.05882352941176471),
          Weighted((M → (M → M)), 0.05882352941176471),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
            0.05882352941176471
          ),
          Weighted(eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 0.05882352941176471),
          Weighted((M → (M → 𝒰 )), 0.29411764705882354),
          Weighted((M → (M → M)), 0.29411764705882354)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
    ...
    
    
    In [30]:
    val tg5 = TermGenParams(unAppW=0.3)
    val tg6 = TermGenParams(appW=0.2)
    val lp_16 = LocalProver(ts_8,cutoff=5*math.pow(10,-6)).noIsles
    val lp_17 = LocalProver(ts_7,cutoff=5*math.pow(10,-6)).noIsles
    val lp_18 = LocalProver(ts_7,tg5,cutoff=5*math.pow(10,-6)).noIsles
    val lp_19 = LocalProver(ts_7,tg6,cutoff=9*math.pow(10,-5)).noIsles
    
    
    
    
    Out[30]:
    tg5: TermGenParams = TermGenParams(
      0.1,
      0.3,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    tg6: TermGenParams = TermGenParams(
      0.2,
      0.1,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    lp_16: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.05882352941176471),
            Weighted(inv(x)(y), 0.05882352941176471),
            Weighted(e, 0.05882352941176471),
            Weighted(eqM, 0.05882352941176471),
            Weighted(op, 0.05882352941176471),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.05882352941176471
            ),
            Weighted(
              axiom_{eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e))},
              0.05882352941176471
            ),
            Weighted(eqM, 0.29411764705882354),
            Weighted(op, 0.29411764705882354)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.05882352941176471),
            Weighted(M, 0.05882352941176471),
            Weighted(M, 0.05882352941176471),
            Weighted((M → (M → 𝒰 )), 0.05882352941176471),
            Weighted((M → (M → M)), 0.05882352941176471),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.05882352941176471
            ),
            Weighted(eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 0.05882352941176471),
            Weighted((M → (M → 𝒰 )), 0.29411764705882354),
            Weighted((M → (M → M)), 0.29411764705882354)
          )
        ),
        Vector(),
    ...
    lp_17: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.05882352941176471),
            Weighted(inv(x)(y), 0.05882352941176471),
            Weighted(e, 0.05882352941176471),
            Weighted(eqM, 0.05882352941176471),
            Weighted(op, 0.05882352941176471),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.05882352941176471
            ),
            Weighted(
              axiom_{eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e))},
              0.05882352941176471
            ),
            Weighted(eqM, 0.29411764705882354),
            Weighted(op, 0.29411764705882354)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.05882352941176471),
            Weighted(M, 0.05882352941176471),
            Weighted(M, 0.05882352941176471),
            Weighted((M → (M → 𝒰 )), 0.05882352941176471),
            Weighted((M → (M → M)), 0.05882352941176471),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.05882352941176471
            ),
            Weighted(eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 0.05882352941176471),
            Weighted((M → (M → 𝒰 )), 0.29411764705882354),
            Weighted((M → (M → M)), 0.29411764705882354)
          )
        ),
        Vector(),
    ...
    lp_18: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.05882352941176471),
            Weighted(inv(x)(y), 0.05882352941176471),
            Weighted(e, 0.05882352941176471),
            Weighted(eqM, 0.05882352941176471),
            Weighted(op, 0.05882352941176471),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.05882352941176471
            ),
            Weighted(
              axiom_{eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e))},
              0.05882352941176471
            ),
            Weighted(eqM, 0.29411764705882354),
            Weighted(op, 0.29411764705882354)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.05882352941176471),
            Weighted(M, 0.05882352941176471),
            Weighted(M, 0.05882352941176471),
            Weighted((M → (M → 𝒰 )), 0.05882352941176471),
            Weighted((M → (M → M)), 0.05882352941176471),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.05882352941176471
            ),
            Weighted(eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 0.05882352941176471),
            Weighted((M → (M → 𝒰 )), 0.29411764705882354),
            Weighted((M → (M → M)), 0.29411764705882354)
          )
        ),
        Vector(),
    ...
    lp_19: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.05882352941176471),
            Weighted(inv(x)(y), 0.05882352941176471),
            Weighted(e, 0.05882352941176471),
            Weighted(eqM, 0.05882352941176471),
            Weighted(op, 0.05882352941176471),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.05882352941176471
            ),
            Weighted(
              axiom_{eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e))},
              0.05882352941176471
            ),
            Weighted(eqM, 0.29411764705882354),
            Weighted(op, 0.29411764705882354)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.05882352941176471),
            Weighted(M, 0.05882352941176471),
            Weighted(M, 0.05882352941176471),
            Weighted((M → (M → 𝒰 )), 0.05882352941176471),
            Weighted((M → (M → M)), 0.05882352941176471),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.05882352941176471
            ),
            Weighted(eqM(op(e)(inv(x)(y)))(op(inv(x)(y))(e)), 0.05882352941176471),
            Weighted((M → (M → 𝒰 )), 0.29411764705882354),
            Weighted((M → (M → M)), 0.29411764705882354)
          )
        ),
        Vector(),
    ...
    
    
    In [22]:
    val lem_16 = lp_16.lemmas.runSyncUnsafe()
    
    
    
    
    Out[22]:
    lem_16: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(x)(op(e)(inv(x)(y))))(op(x)(op(inv(x)(y))(e))), 0.9019150346958225)
    )
    
    
    In [24]:
    val lem_17 = lp_17.lemmas.runSyncUnsafe()
    
    
    
    
    Out[24]:
    lem_17: Vector[(Typ[Term], Double)] = Vector()
    
    
    In [25]:
    val lem_18 = lp_18.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd24$Helper.<init>(cmd24.sc:1)
      ammonite.$sess.cmd24$.<init>(cmd24.sc:7)
      ammonite.$sess.cmd24$.<clinit>(cmd24.sc:-1)
    
    
    In [31]:
    val lem_19 = lp_19.lemmas.runSyncUnsafe()
    
    
    
    
    Out[31]:
    lem_19: Vector[(Typ[Term], Double)] = Vector()

    Step4:

    $$x*(inv(x)(y)*e)=(x*inv(x)(y))*e$$

    Part 1:

    $$(x*inv(x)(y))*e=x*(inv(x)(y)*e)$$

    
    
    In [6]:
    val negative4_ : FiniteDistribution[Term] = unif(a,b,c)(x,inv(x)(y),e)(
       eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.7)++(FiniteDistribution.unif(op:Term)*0.9)
    val negative4_1 = negative4_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_9 = TermState(negative4_1,negative4_1.map(_.typ))
    val ts_10 = TermState(negative4_1,negative4_1.map(_.typ),goals = FiniteDistribution.unif(a ~>:  b ~>: c ~>: eqM(op(a)(op(b)(c)))(op(op(a)(b))(c))))
    val ts_11 = TermState(negative4_1,negative4_1.map(_.typ))
    val ts_12 = TermState(negative4_1,negative4_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))))
    
    
    
    
    Out[6]:
    negative4_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.07142857142857142),
        Weighted(b, 0.07142857142857142),
        Weighted(c, 0.07142857142857142),
        Weighted(x, 0.07142857142857142),
        Weighted(inv(x)(y), 0.07142857142857142),
        Weighted(e, 0.07142857142857142),
        Weighted(axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))}, 0.07142857142857142),
        Weighted(eqM, 0.7),
        Weighted(op, 0.9)
      )
    )
    negative4_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.03787878787878787),
        Weighted(inv(x)(y), 0.03787878787878787),
        Weighted(e, 0.03787878787878787),
        Weighted(axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))}, 0.03787878787878787),
        Weighted(eqM, 0.37121212121212116),
        Weighted(op, 0.47727272727272724)
      )
    )
    ts_9: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.03787878787878787),
          Weighted(inv(x)(y), 0.03787878787878787),
          Weighted(e, 0.03787878787878787),
          Weighted(
            axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
            0.03787878787878787
          ),
          Weighted(eqM, 0.37121212121212116),
          Weighted(op, 0.47727272727272724)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03787878787878787),
          Weighted(M, 0.03787878787878787),
          Weighted(M, 0.03787878787878787),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
            0.03787878787878787
          ),
          Weighted((M → (M → 𝒰 )), 0.37121212121212116),
          Weighted((M → (M → M)), 0.47727272727272724)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    ts_10: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.03787878787878787),
          Weighted(inv(x)(y), 0.03787878787878787),
          Weighted(e, 0.03787878787878787),
          Weighted(
            axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
            0.03787878787878787
          ),
          Weighted(eqM, 0.37121212121212116),
          Weighted(op, 0.47727272727272724)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03787878787878787),
          Weighted(M, 0.03787878787878787),
          Weighted(M, 0.03787878787878787),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
            0.03787878787878787
          ),
          Weighted((M → (M → 𝒰 )), 0.37121212121212116),
          Weighted((M → (M → M)), 0.47727272727272724)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(
        Vector(
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(a)(op(b)(c)))(op(op(a)(b))(c)) } } },
            1.0
          )
        )
      ),
    ...
    ts_11: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.03787878787878787),
          Weighted(inv(x)(y), 0.03787878787878787),
          Weighted(e, 0.03787878787878787),
          Weighted(
            axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
            0.03787878787878787
          ),
          Weighted(eqM, 0.37121212121212116),
          Weighted(op, 0.47727272727272724)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03787878787878787),
          Weighted(M, 0.03787878787878787),
          Weighted(M, 0.03787878787878787),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
            0.03787878787878787
          ),
          Weighted((M → (M → 𝒰 )), 0.37121212121212116),
          Weighted((M → (M → M)), 0.47727272727272724)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    ts_12: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.03787878787878787),
          Weighted(inv(x)(y), 0.03787878787878787),
          Weighted(e, 0.03787878787878787),
          Weighted(
            axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
            0.03787878787878787
          ),
          Weighted(eqM, 0.37121212121212116),
          Weighted(op, 0.47727272727272724)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03787878787878787),
          Weighted(M, 0.03787878787878787),
          Weighted(M, 0.03787878787878787),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
            0.03787878787878787
          ),
          Weighted((M → (M → 𝒰 )), 0.37121212121212116),
          Weighted((M → (M → M)), 0.47727272727272724)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(
        Vector(Weighted(eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))), 1.0))
      ),
      Empty
    )
    
    
    In [16]:
    val tg7= TermGenParams(unAppW=0.3)
    val lp_20=LocalProver(ts_10,tg7,cutoff=3*math.pow(10,-6),limit=10000.minutes).noIsles
    val lp_21=LocalProver(ts_10,tg7,cutoff=5*math.pow(10,-6),limit=1000.minutes).noIsles
    val lp_22=LocalProver(ts_12,cutoff=5*math.pow(10,-6),limit=1000.minutes).noIsles
    val lp_23=LocalProver(ts_12,tg7,cutoff=5*math.pow(10,-6)).noIsles
    val lp_24 = LocalProver(ts_10,cutoff=5*math.pow(10,-6)).noIsles
    val lp_25 = LocalProver(ts_9,cutoff =1*math.pow(10,-6)).noIsles
    
    
    
    
    Out[16]:
    tg7: TermGenParams = TermGenParams(
      0.1,
      0.3,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    tg8: TermGenParams = TermGenParams(
      0.1,
      0.1,
      0.1,
      0.1,
      0.3,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    lp_20: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(
              axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
              0.05555555555555556
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.05555555555555556),
            Weighted(eqM, 0.3888888888888889),
            Weighted(op, 0.5)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
              0.05555555555555556
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.05555555555555556
            ),
            Weighted((M → (M → 𝒰 )), 0.3888888888888889),
            Weighted((M → (M → M)), 0.5)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(a)(op(b)(c)))(op(op(a)(b))(c)) } } },
              1.0
            )
          )
        ),
    ...
    lp_21: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(
              axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
              0.05555555555555556
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.05555555555555556),
            Weighted(eqM, 0.3888888888888889),
            Weighted(op, 0.5)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
              0.05555555555555556
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.05555555555555556
            ),
            Weighted((M → (M → 𝒰 )), 0.3888888888888889),
            Weighted((M → (M → M)), 0.5)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(a)(op(b)(c)))(op(op(a)(b))(c)) } } },
              1.0
            )
          )
        ),
    ...
    lp_22: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(
              axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
              0.05555555555555556
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.05555555555555556),
            Weighted(eqM, 0.3888888888888889),
            Weighted(op, 0.5)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
              0.05555555555555556
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.05555555555555556
            ),
            Weighted((M → (M → 𝒰 )), 0.3888888888888889),
            Weighted((M → (M → M)), 0.5)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(
            Weighted(eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))), 1.0)
          )
        ),
        Empty
      ),
      TermGenParams(
        0.1,
    ...
    lp_23: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(
              axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
              0.05555555555555556
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.05555555555555556),
            Weighted(eqM, 0.3888888888888889),
            Weighted(op, 0.5)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
              0.05555555555555556
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.05555555555555556
            ),
            Weighted((M → (M → 𝒰 )), 0.3888888888888889),
            Weighted((M → (M → M)), 0.5)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(
            Weighted(eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))), 1.0)
          )
        ),
        Empty
      ),
      TermGenParams(
        0.1,
    ...
    lp_24: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(
              axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
              0.05555555555555556
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.05555555555555556),
            Weighted(eqM, 0.3888888888888889),
            Weighted(op, 0.5)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
              0.05555555555555556
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.05555555555555556
            ),
            Weighted((M → (M → 𝒰 )), 0.3888888888888889),
            Weighted((M → (M → M)), 0.5)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(a)(op(b)(c)))(op(op(a)(b))(c)) } } },
              1.0
            )
          )
        ),
    ...
    lp_25: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(
              axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))},
              0.05555555555555556
            ),
            Weighted(axiom_{eqM(op(a)(b))(op(b)(a))}, 0.05555555555555556),
            Weighted(eqM, 0.3888888888888889),
            Weighted(op, 0.5)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } },
              0.05555555555555556
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ eqM(op(a)(b))(op(b)(a)) } },
              0.05555555555555556
            ),
            Weighted((M → (M → 𝒰 )), 0.3888888888888889),
            Weighted((M → (M → M)), 0.5)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(Vector()),
        Empty
      ),
      TermGenParams(
        0.1,
        0.1,
        0.1,
        0.0,
        0.0,
    ...
    
    
    In [ ]:
    val lem_20 = lp_20.lemmas.runSyncUnsafe()
    
    
    
    
    java.lang.OutOfMemoryError: Java heap space
    
    
    In [9]:
    val lem_22=lp_22.lemmas.runSyncUnsafe()
    
    
    
    
    Out[9]:
    lem_22: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))), 0.8884378382021705)
    )
    
    
    In [14]:
    val lem_21 = lp_21.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 60 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd13$Helper.<init>(cmd13.sc:1)
      ammonite.$sess.cmd13$.<init>(cmd13.sc:7)
      ammonite.$sess.cmd13$.<clinit>(cmd13.sc:-1)
    
    
    In [21]:
    val lem_25 = lp_25.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd20$Helper.<init>(cmd20.sc:1)
      ammonite.$sess.cmd20$.<init>(cmd20.sc:7)
      ammonite.$sess.cmd20$.<clinit>(cmd20.sc:-1)

    Part 2:

    $$x*(inv(x)(y)*e)=(x*inv(x)(y))*e$$

    
    
    In [33]:
    val negative5_ : FiniteDistribution[Term] = unif(a,b,c)()(
       eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))),
       eqM(a)(b) ->: eqM(b)(a)
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.1)++(FiniteDistribution.unif(op:Term)*1)
    val negative5_1 = negative5_.filter((t) => !Set(a, b,c).contains(t)).normalized()
    val negative6_ : FiniteDistribution[Term] = unif(a,b,c)()(
       eqM(op(op(a)(b))(c))(op(a)(op(b)(c))),
       eqM(a)(b) ->: eqM(b)(a)
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.7)++(FiniteDistribution.unif(op:Term)*0.9)
    val negative6_1 = negative6_.filter((t) => !Set(a, b,c).contains(t)).normalized()
    val ts_13 = TermState(negative5_1,negative5_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))))
    val ts_14 = TermState(negative5_1,negative5_1.map(_.typ),goals = FiniteDistribution.unif(a ~>:  b ~>: c ~>: eqM(op(a)(op(b)(c)))(op(op(a)(b))(c))))
    val ts_15 = TermState(negative5_1,negative5_1.map(_.typ))
    
    
    
    
    Out[33]:
    negative5_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.1),
        Weighted(b, 0.1),
        Weighted(c, 0.1),
        Weighted(axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))}, 0.1),
        Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.1),
        Weighted(eqM, 0.1),
        Weighted(op, 1.0)
      )
    )
    negative5_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(
          axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))},
          0.07692307692307693
        ),
        Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.07692307692307693),
        Weighted(eqM, 0.07692307692307693),
        Weighted(op, 0.7692307692307692)
      )
    )
    negative6_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.1),
        Weighted(b, 0.1),
        Weighted(c, 0.1),
        Weighted(axiom_{eqM(op(op(a)(b))(c))(op(a)(op(b)(c)))}, 0.1),
        Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.1),
        Weighted(eqM, 0.7),
        Weighted(op, 0.9)
      )
    )
    negative6_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(
          axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))},
          0.07692307692307693
        ),
        Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.07692307692307693),
        Weighted(eqM, 0.07692307692307693),
        Weighted(op, 0.7692307692307692)
      )
    )
    ts_13: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(
            axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))},
            0.07692307692307693
          ),
          Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.07692307692307693),
          Weighted(eqM, 0.07692307692307693),
          Weighted(op, 0.7692307692307692)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(
            eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))),
            0.07692307692307693
          ),
          Weighted(
            ∏(a : M){ ∏(b : M){ (eqM(a)(b) → eqM(b)(a)) } },
            0.07692307692307693
          ),
          Weighted((M → (M → 𝒰 )), 0.07692307692307693),
          Weighted((M → (M → M)), 0.7692307692307692)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(
        Vector(Weighted(eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e)), 1.0))
      ),
      Empty
    )
    ts_14: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(
            axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))},
            0.07692307692307693
          ),
          Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.07692307692307693),
          Weighted(eqM, 0.07692307692307693),
          Weighted(op, 0.7692307692307692)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(
            eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))),
            0.07692307692307693
          ),
          Weighted(
            ∏(a : M){ ∏(b : M){ (eqM(a)(b) → eqM(b)(a)) } },
            0.07692307692307693
          ),
          Weighted((M → (M → 𝒰 )), 0.07692307692307693),
          Weighted((M → (M → M)), 0.7692307692307692)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(
        Vector(
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(a)(op(b)(c)))(op(op(a)(b))(c)) } } },
            1.0
          )
        )
      ),
      Empty
    )
    ts_15: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(
            axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))},
            0.07692307692307693
          ),
          Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.07692307692307693),
          Weighted(eqM, 0.07692307692307693),
          Weighted(op, 0.7692307692307692)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(
            eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))),
            0.07692307692307693
          ),
          Weighted(
            ∏(a : M){ ∏(b : M){ (eqM(a)(b) → eqM(b)(a)) } },
            0.07692307692307693
          ),
          Weighted((M → (M → 𝒰 )), 0.07692307692307693),
          Weighted((M → (M → M)), 0.7692307692307692)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    
    
    In [42]:
    val tg8= TermGenParams(piW=0.3)
    val tg9 = TermGenParams(unAppW=0.3,appW=0.2)
    val lp_26 = LocalProver(ts_14,tg10,cutoff = 3*math.pow(10,-6))
    val lp_27 = LocalProver(ts_13,cutoff = 5*math.pow(10,-6)).noIsles
    val lp_28 = LocalProver(ts_15,tg9,cutoff = 2*math.pow(10,-6)).noIsles
    
    
    
    
    Out[42]:
    tg8: TermGenParams = TermGenParams(
      0.1,
      0.1,
      0.1,
      0.1,
      0.3,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    tg9: TermGenParams = TermGenParams(
      0.2,
      0.3,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    lp_26: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(
              axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))},
              0.07692307692307693
            ),
            Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.07692307692307693),
            Weighted(eqM, 0.07692307692307693),
            Weighted(op, 0.7692307692307692)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(
              eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))),
              0.07692307692307693
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ (eqM(a)(b) → eqM(b)(a)) } },
              0.07692307692307693
            ),
            Weighted((M → (M → 𝒰 )), 0.07692307692307693),
            Weighted((M → (M → M)), 0.7692307692307692)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(a)(op(b)(c)))(op(op(a)(b))(c)) } } },
              1.0
            )
          )
        ),
        Empty
    ...
    lp_27: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(
              axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))},
              0.07692307692307693
            ),
            Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.07692307692307693),
            Weighted(eqM, 0.07692307692307693),
            Weighted(op, 0.7692307692307692)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(
              eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))),
              0.07692307692307693
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ (eqM(a)(b) → eqM(b)(a)) } },
              0.07692307692307693
            ),
            Weighted((M → (M → 𝒰 )), 0.07692307692307693),
            Weighted((M → (M → M)), 0.7692307692307692)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(
            Weighted(eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e)), 1.0)
          )
        ),
        Empty
      ),
      TermGenParams(
        0.1,
        0.1,
    ...
    lp_28: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(
              axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e)))},
              0.07692307692307693
            ),
            Weighted(axiom_{(eqM(a)(b) \to eqM(b)(a))}, 0.07692307692307693),
            Weighted(eqM, 0.07692307692307693),
            Weighted(op, 0.7692307692307692)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(
              eqM(op(op(x)(inv(x)(y)))(e))(op(x)(op(inv(x)(y))(e))),
              0.07692307692307693
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ (eqM(a)(b) → eqM(b)(a)) } },
              0.07692307692307693
            ),
            Weighted((M → (M → 𝒰 )), 0.07692307692307693),
            Weighted((M → (M → M)), 0.7692307692307692)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(Vector()),
        Empty
      ),
      TermGenParams(
        0.2,
        0.3,
        0.1,
        0.0,
        0.0,
        0.05,
    ...
    
    
    In [29]:
    val lem_26 = lp_26.lemmas.runSyncUnsafe()
    
    
    
    
    Out[29]:
    lem_26: Vector[(Typ[Term], Double)] = Vector(
      ((M → (M → M))×(M → (M → M)), 0.0038228191408910405),
      (((M → (M → M)) → (M → (M → M))×(M → (M → M))), 4.338708406827879E-4),
      (
        ((M → (M → M)) → ∏(a : M){ ∏(b : M){ (eqM(a)(b) → eqM(b)(a)) } }),
        1.0000839848925076E-5
      ),
      (
        ((M → (M → M)) → ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } }),
        1.0000839848925076E-5
      ),
      (((M → (M → M)) → (M → (M → 𝒰 ))), 1.0000839848925076E-5),
      (((M → (M → M))×(M → (M → M)) → (M → (M → M))), 9.8350338217578E-6),
      (((M → (M → 𝒰 )) → (M → (M → M))), 9.811279882485584E-6),
      (
        (∏(a : M){ ∏(b : M){ (eqM(a)(b) → eqM(b)(a)) } } → (M → (M → M))),
        9.811279882485584E-6
      ),
      (
        (∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } } → (M → (M → M))),
        9.811279882485584E-6
      ),
      (
        (((M → (M → M)) → (M → (M → M))) → ∏(a : M){ ∏(b : M){ (eqM(a)(b) → eqM(b)(a)) } }),
        9.809886052212806E-6
      ),
      (
        (((M → (M → M)) → (M → (M → M))) → ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) } } }),
        9.809886052212806E-6
      ),
      ((((M → (M → M)) → (M → (M → M))) → (M → (M → 𝒰 ))), 9.809886052212806E-6),
      (((M → (M → M)) → (M → (M → M))), 9.733083338990583E-6),
      (((M → (M → M)) → ((M → (M → M)) → (M → (M → M)))), 9.722946485130535E-6),
      ((((M → (M → M)) → (M → (M → 𝒰 ))) → (M → (M → M))), 9.648878913981793E-6),
      (
    ...
    
    
    In [12]:
    val goals = a ~>:  b ~>: c ~>: eqM(op(a)(op(b)(c)))(op(op(a)(b))(c))
    
    
    
    
    Out[12]:
    goals: GenFuncTyp[Term, FuncLike[Term, FuncLike[Term, Term]]] = ∏(a : M){ ∏(b : M){ ∏(c : M){ eqM(op(a)(op(b)(c)))(op(op(a)(b))(c)) } } }
    
    
    In [32]:
    val lem_27 = lp_27.lemmas.runSyncUnsafe()
    
    
    
    
    Out[32]:
    lem_27: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e)), 1.3749953944441501E-5)
    )
    
    
    In [43]:
    val lem_28 = lp_28.lemmas.runSyncUnsafe()
    
    
    
    
    Out[43]:
    lem_28: Vector[(Typ[Term], Double)] = Vector()

    Step5:

    $$(x*inv(x)(y))*e=(y*e)$$

    
    
    In [60]:
    val negative7_ : FiniteDistribution[Term] = unif(a,b,c)(x,e,inv(x)(y))(
       eqM(op(x)(inv(x)(y)))(y),
       eqM(a)(b) ->: eqM(op(a)(c))(op(b)(c))
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.3)++(FiniteDistribution.unif(op:Term)*0.4)
    val negative7_1 = negative7_.filter((t) => !Set(a, b,c).contains(t)).normalized()
    val ts_17 = TermState(negative7_1,negative7_1.map(_.typ))
    val ts_16 = TermState(negative7_1,negative7_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))))
    
    
    
    
    Out[60]:
    negative7_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.0625),
        Weighted(b, 0.0625),
        Weighted(c, 0.0625),
        Weighted(x, 0.0625),
        Weighted(e, 0.0625),
        Weighted(inv(x)(y), 0.0625),
        Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.0625),
        Weighted(axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))}, 0.0625),
        Weighted(eqM, 0.3),
        Weighted(op, 0.4)
      )
    )
    negative7_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.061728395061728385),
        Weighted(e, 0.061728395061728385),
        Weighted(inv(x)(y), 0.061728395061728385),
        Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.061728395061728385),
        Weighted(
          axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
          0.061728395061728385
        ),
        Weighted(eqM, 0.2962962962962962),
        Weighted(op, 0.3950617283950617)
      )
    )
    ts_17: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.061728395061728385),
          Weighted(e, 0.061728395061728385),
          Weighted(inv(x)(y), 0.061728395061728385),
          Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.061728395061728385),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
            0.061728395061728385
          ),
          Weighted(eqM, 0.2962962962962962),
          Weighted(op, 0.3950617283950617)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.061728395061728385),
          Weighted(M, 0.061728395061728385),
          Weighted(M, 0.061728395061728385),
          Weighted(eqM(op(x)(inv(x)(y)))(y), 0.061728395061728385),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(a)(c))(op(b)(c))) } } },
            0.061728395061728385
          ),
          Weighted((M → (M → 𝒰 )), 0.2962962962962962),
          Weighted((M → (M → M)), 0.3950617283950617)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    ts_16: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.061728395061728385),
          Weighted(e, 0.061728395061728385),
          Weighted(inv(x)(y), 0.061728395061728385),
          Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.061728395061728385),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
            0.061728395061728385
          ),
          Weighted(eqM, 0.2962962962962962),
          Weighted(op, 0.3950617283950617)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.061728395061728385),
          Weighted(M, 0.061728395061728385),
          Weighted(M, 0.061728395061728385),
          Weighted(eqM(op(x)(inv(x)(y)))(y), 0.061728395061728385),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(a)(c))(op(b)(c))) } } },
            0.061728395061728385
          ),
          Weighted((M → (M → 𝒰 )), 0.2962962962962962),
          Weighted((M → (M → M)), 0.3950617283950617)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(
        Vector(Weighted(eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e)), 1.0))
      ),
      Empty
    )
    
    
    In [61]:
    val lp_28 = LocalProver(ts_16,cutoff=2*math.pow(10,-6)).noIsles
    
    
    
    
    Out[61]:
    lp_28: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.061728395061728385),
            Weighted(e, 0.061728395061728385),
            Weighted(inv(x)(y), 0.061728395061728385),
            Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.061728395061728385),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
              0.061728395061728385
            ),
            Weighted(eqM, 0.2962962962962962),
            Weighted(op, 0.3950617283950617)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.061728395061728385),
            Weighted(M, 0.061728395061728385),
            Weighted(M, 0.061728395061728385),
            Weighted(eqM(op(x)(inv(x)(y)))(y), 0.061728395061728385),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(a)(c))(op(b)(c))) } } },
              0.061728395061728385
            ),
            Weighted((M → (M → 𝒰 )), 0.2962962962962962),
            Weighted((M → (M → M)), 0.3950617283950617)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(Weighted(eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e)), 1.0))
        ),
        Empty
      ),
      TermGenParams(
    ...
    
    
    In [62]:
    val lem_28 = lp_28.lemmas.runSyncUnsafe()
    
    
    
    
    Out[62]:
    lem_28: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e)), 0.9024859640533102)
    )

    Step6:

    $$(x*e)*inv(x)(y) = y*e$$

    Basically we will prove $$\{(x*e)*inv(x)(y) = x*(e*inv(x)(y)) \ \ \land$$ $$x*(e*inv(x)(y)) = x*(inv(x)(y)*e) \ \ \land$$ $$x*(inv(x)(y)*e) = (x*inv(x)(y))*e \ \ \land$$ $$(x*inv(x)(y))*e = y*e \} \implies $$ $$(x*e)*inv(x)(y) = y*e$$

    
    
    In [26]:
    val negative8_ : FiniteDistribution[Term] = unif(a,b,c)(x,e,inv(x)(y))(
       eqM(a)(b) ->: eqM(b)(c) ->: eqM(a)(c),
       eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(e)(inv(x)(y)))),
       eqM(op(x)(op(e)(inv(x)(y))))(op(x)(op(inv(x)(y))(e))),
       eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e)),
       eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))    
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.5)++(FiniteDistribution.unif(op:Term)*0.8)
    val negative8_1 = negative8_.filter((t) => !Set(a, b,c).contains(t)).normalized()
    val ts_18 = TermState(negative8_1,negative8_1.map(_.typ))
    val ts_19 = TermState(negative8_1,negative8_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e))))
    val tg10 = TermGenParams(unAppW =0.2)
    
    
    
    
    Out[26]:
    negative8_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.045454545454545456),
        Weighted(b, 0.045454545454545456),
        Weighted(c, 0.045454545454545456),
        Weighted(x, 0.045454545454545456),
        Weighted(e, 0.045454545454545456),
        Weighted(inv(x)(y), 0.045454545454545456),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.045454545454545456
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(e)(inv(x)(y))))},
          0.045454545454545456
        ),
        Weighted(
          axiom_{eqM(op(x)(op(e)(inv(x)(y))))(op(x)(op(inv(x)(y))(e)))},
          0.045454545454545456
        ),
        Weighted(
          axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
          0.045454545454545456
        ),
        Weighted(
          axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
          0.045454545454545456
        ),
        Weighted(eqM, 0.5),
        Weighted(op, 0.8)
      )
    )
    negative8_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.027322404371584695),
        Weighted(e, 0.027322404371584695),
        Weighted(inv(x)(y), 0.027322404371584695),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.027322404371584695
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(e)(inv(x)(y))))},
          0.027322404371584695
        ),
        Weighted(
          axiom_{eqM(op(x)(op(e)(inv(x)(y))))(op(x)(op(inv(x)(y))(e)))},
          0.027322404371584695
        ),
        Weighted(
          axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
          0.027322404371584695
        ),
        Weighted(
          axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
          0.027322404371584695
        ),
        Weighted(eqM, 0.30054644808743164),
        Weighted(op, 0.48087431693989063)
      )
    )
    ts_18: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.027322404371584695),
          Weighted(e, 0.027322404371584695),
          Weighted(inv(x)(y), 0.027322404371584695),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.027322404371584695
          ),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(e)(inv(x)(y))))},
            0.027322404371584695
          ),
          Weighted(
            axiom_{eqM(op(x)(op(e)(inv(x)(y))))(op(x)(op(inv(x)(y))(e)))},
            0.027322404371584695
          ),
          Weighted(
            axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
            0.027322404371584695
          ),
          Weighted(
            axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
            0.027322404371584695
          ),
          Weighted(eqM, 0.30054644808743164),
          Weighted(op, 0.48087431693989063)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.027322404371584695),
          Weighted(M, 0.027322404371584695),
          Weighted(M, 0.027322404371584695),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.027322404371584695
    ...
    ts_19: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.027322404371584695),
          Weighted(e, 0.027322404371584695),
          Weighted(inv(x)(y), 0.027322404371584695),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.027322404371584695
          ),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(e)(inv(x)(y))))},
            0.027322404371584695
          ),
          Weighted(
            axiom_{eqM(op(x)(op(e)(inv(x)(y))))(op(x)(op(inv(x)(y))(e)))},
            0.027322404371584695
          ),
          Weighted(
            axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
            0.027322404371584695
          ),
          Weighted(
            axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
            0.027322404371584695
          ),
          Weighted(eqM, 0.30054644808743164),
          Weighted(op, 0.48087431693989063)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.027322404371584695),
          Weighted(M, 0.027322404371584695),
          Weighted(M, 0.027322404371584695),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.027322404371584695
    ...
    tg10: TermGenParams = TermGenParams(
      0.1,
      0.2,
      0.1,
      0.1,
      0.1,
      0.0,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    
    
    In [27]:
    val lp_29 = LocalProver(ts_19,tg10,cutoff=2*math.pow(10,-6)).noIsles
    
    
    
    
    Out[27]:
    lp_29: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.027322404371584695),
            Weighted(e, 0.027322404371584695),
            Weighted(inv(x)(y), 0.027322404371584695),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
              0.027322404371584695
            ),
            Weighted(
              axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(e)(inv(x)(y))))},
              0.027322404371584695
            ),
            Weighted(
              axiom_{eqM(op(x)(op(e)(inv(x)(y))))(op(x)(op(inv(x)(y))(e)))},
              0.027322404371584695
            ),
            Weighted(
              axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
              0.027322404371584695
            ),
            Weighted(
              axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
              0.027322404371584695
            ),
            Weighted(eqM, 0.30054644808743164),
            Weighted(op, 0.48087431693989063)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.027322404371584695),
            Weighted(M, 0.027322404371584695),
            Weighted(M, 0.027322404371584695),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
    ...
    
    
    In [18]:
    val lem_29 = lp_29.lemmas.runSyncUnsafe()
    
    
    
    
    Out[18]:
    lem_29: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e))), 0.9014148838516249)
    )
    
    
    In [29]:
    val lem_30 = lp_29.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$4(MonixFiniteDistributionEq.scala:163)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:148)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:182)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:178)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:209)
      provingground.learning.LocalProver.nextState(LocalProver.scala:194)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:333)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:333)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:381)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:379)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd28$Helper.<init>(cmd28.sc:1)
      ammonite.$sess.cmd28$.<init>(cmd28.sc:7)
      ammonite.$sess.cmd28$.<clinit>(cmd28.sc:-1)
    
    
    In [7]:
    val negative9_ : FiniteDistribution[Term] = unif(a,b,c)(x,e,inv(x)(y))(
       eqM(a)(b) ->: eqM(b)(c) ->: eqM(a)(c),
       eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e))),
       eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e)),
       eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))    
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.5)++(FiniteDistribution.unif(op:Term)*0.8)
    val negative9_1 = negative9_.filter((t) => !Set(a, b,c).contains(t)).normalized()
    val ts_20 = TermState(negative9_1,negative9_1.map(_.typ))
    val ts_21 = TermState(negative9_1,negative9_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e))))
    val negative10_ : FiniteDistribution[Term] = unif(a,b,c)(x,e,inv(x)(y))(
       eqM(a)(b) ->: eqM(b)(c) ->: eqM(a)(c),
       eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e)),
       eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))    
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.5)++(FiniteDistribution.unif(op:Term)*0.8)
    val negative10_1 = negative10_.filter((t) => !Set(a, b,c).contains(t)).normalized()
    val ts_22 = TermState(negative10_1,negative10_1.map(_.typ))
    val ts_23 = TermState(negative10_1,negative10_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))))
    
    
    
    
    Out[7]:
    negative9_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05),
        Weighted(b, 0.05),
        Weighted(c, 0.05),
        Weighted(x, 0.05),
        Weighted(e, 0.05),
        Weighted(inv(x)(y), 0.05),
        Weighted(axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))}, 0.05),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e)))},
          0.05
        ),
        Weighted(
          axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
          0.05
        ),
        Weighted(axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))}, 0.05),
        Weighted(eqM, 0.5),
        Weighted(op, 0.8)
      )
    )
    negative9_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.030303030303030304),
        Weighted(e, 0.030303030303030304),
        Weighted(inv(x)(y), 0.030303030303030304),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.030303030303030304
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e)))},
          0.030303030303030304
        ),
        Weighted(
          axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
          0.030303030303030304
        ),
        Weighted(
          axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
          0.030303030303030304
        ),
        Weighted(eqM, 0.30303030303030304),
        Weighted(op, 0.48484848484848486)
      )
    )
    ts_20: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.030303030303030304),
          Weighted(e, 0.030303030303030304),
          Weighted(inv(x)(y), 0.030303030303030304),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.030303030303030304
          ),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e)))},
            0.030303030303030304
          ),
          Weighted(
            axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
            0.030303030303030304
          ),
          Weighted(
            axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
            0.030303030303030304
          ),
          Weighted(eqM, 0.30303030303030304),
          Weighted(op, 0.48484848484848486)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.030303030303030304),
          Weighted(M, 0.030303030303030304),
          Weighted(M, 0.030303030303030304),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.030303030303030304
          ),
          Weighted(
            eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e))),
            0.030303030303030304
    ...
    ts_21: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.030303030303030304),
          Weighted(e, 0.030303030303030304),
          Weighted(inv(x)(y), 0.030303030303030304),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.030303030303030304
          ),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e)))},
            0.030303030303030304
          ),
          Weighted(
            axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
            0.030303030303030304
          ),
          Weighted(
            axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
            0.030303030303030304
          ),
          Weighted(eqM, 0.30303030303030304),
          Weighted(op, 0.48484848484848486)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.030303030303030304),
          Weighted(M, 0.030303030303030304),
          Weighted(M, 0.030303030303030304),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.030303030303030304
          ),
          Weighted(
            eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e))),
            0.030303030303030304
    ...
    negative10_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05555555555555555),
        Weighted(b, 0.05555555555555555),
        Weighted(c, 0.05555555555555555),
        Weighted(x, 0.05555555555555555),
        Weighted(e, 0.05555555555555555),
        Weighted(inv(x)(y), 0.05555555555555555),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.05555555555555555
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e))},
          0.05555555555555555
        ),
        Weighted(
          axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
          0.05555555555555555
        ),
        Weighted(eqM, 0.5),
        Weighted(op, 0.8)
      )
    )
    negative10_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.03401360544217687),
        Weighted(e, 0.03401360544217687),
        Weighted(inv(x)(y), 0.03401360544217687),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.03401360544217687
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e))},
          0.03401360544217687
        ),
        Weighted(
          axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
          0.03401360544217687
        ),
        Weighted(eqM, 0.30612244897959184),
        Weighted(op, 0.489795918367347)
      )
    )
    ts_22: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.03401360544217687),
          Weighted(e, 0.03401360544217687),
          Weighted(inv(x)(y), 0.03401360544217687),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.03401360544217687
          ),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e))},
            0.03401360544217687
          ),
          Weighted(
            axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
            0.03401360544217687
          ),
          Weighted(eqM, 0.30612244897959184),
          Weighted(op, 0.489795918367347)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03401360544217687),
          Weighted(M, 0.03401360544217687),
          Weighted(M, 0.03401360544217687),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.03401360544217687
          ),
          Weighted(
            eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e)),
            0.03401360544217687
          ),
          Weighted(eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e)), 0.03401360544217687),
          Weighted((M → (M → 𝒰 )), 0.30612244897959184),
          Weighted((M → (M → M)), 0.489795918367347)
    ...
    ts_23: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.03401360544217687),
          Weighted(e, 0.03401360544217687),
          Weighted(inv(x)(y), 0.03401360544217687),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.03401360544217687
          ),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e))},
            0.03401360544217687
          ),
          Weighted(
            axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
            0.03401360544217687
          ),
          Weighted(eqM, 0.30612244897959184),
          Weighted(op, 0.489795918367347)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03401360544217687),
          Weighted(M, 0.03401360544217687),
          Weighted(M, 0.03401360544217687),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.03401360544217687
          ),
          Weighted(
            eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e)),
            0.03401360544217687
          ),
          Weighted(eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e)), 0.03401360544217687),
          Weighted((M → (M → 𝒰 )), 0.30612244897959184),
          Weighted((M → (M → M)), 0.489795918367347)
    ...
    
    
    In [8]:
    val lp_30 = LocalProver(ts_21,cutoff=2*math.pow(10,-6)).noIsles
    val lp_31 = LocalProver(ts_23,cutoff=2*math.pow(10,-6)).noIsles
    
    
    
    
    Out[8]:
    lp_30: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.030303030303030304),
            Weighted(e, 0.030303030303030304),
            Weighted(inv(x)(y), 0.030303030303030304),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
              0.030303030303030304
            ),
            Weighted(
              axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e)))},
              0.030303030303030304
            ),
            Weighted(
              axiom_{eqM(op(x)(op(inv(x)(y))(e)))(op(op(x)(inv(x)(y)))(e))},
              0.030303030303030304
            ),
            Weighted(
              axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
              0.030303030303030304
            ),
            Weighted(eqM, 0.30303030303030304),
            Weighted(op, 0.48484848484848486)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.030303030303030304),
            Weighted(M, 0.030303030303030304),
            Weighted(M, 0.030303030303030304),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
              0.030303030303030304
            ),
            Weighted(
              eqM(op(op(x)(e))(inv(x)(y)))(op(x)(op(inv(x)(y))(e))),
    ...
    lp_31: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.03401360544217687),
            Weighted(e, 0.03401360544217687),
            Weighted(inv(x)(y), 0.03401360544217687),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
              0.03401360544217687
            ),
            Weighted(
              axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e))},
              0.03401360544217687
            ),
            Weighted(
              axiom_{eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e))},
              0.03401360544217687
            ),
            Weighted(eqM, 0.30612244897959184),
            Weighted(op, 0.489795918367347)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03401360544217687),
            Weighted(M, 0.03401360544217687),
            Weighted(M, 0.03401360544217687),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
              0.03401360544217687
            ),
            Weighted(
              eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e)),
              0.03401360544217687
            ),
            Weighted(eqM(op(op(x)(inv(x)(y)))(e))(op(y)(e)), 0.03401360544217687),
            Weighted((M → (M → 𝒰 )), 0.30612244897959184),
    ...
    
    
    In [9]:
    val lem_30 = lp_30.lemmas.runSyncUnsafe()
    val lem_31 = lp_31.lemmas.runSyncUnsafe()
    
    
    
    
    Out[9]:
    lem_30: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(x)(e))(inv(x)(y)))(op(op(x)(inv(x)(y)))(e)), 0.9000270836056806)
    )
    lem_31: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.8983792913781188)
    )

    Step7:

    $$(y*e) = y$$

    Basically we wil prove $$[ \{ (x*e)*inv(x)(y) = (y*e) \} \land \{x*inv(x)(y) = y\} \land \{(x*e)*inv(x)(y)) = ((x*inv(x)(y))\} ] \implies (y*e=y)$$ $$\Updownarrow$$ $$\{(a=b) \land (c=d) \land (a=c)\} \implies (b=d)$$ where $$ a= (x*e)*inv(x)(y) \\ b= (y*e) \\ c= x*inv(x)(y) \\ d= y \\ $$

    
    
    In [6]:
    val negative11_ : FiniteDistribution[Term] = unif(a,b,c,d)(x,e,inv(x)(y),y)(
       eqM(a)(b) ->: eqM(c)(d) ->: eqM(a)(c) ->: eqM(b)(d),
       eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)),
       eqM(op(x)(inv(x)(y)))(y),
       eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.5)++(FiniteDistribution.unif(op:Term)*0.8)
    val negative11_1 = negative11_.filter((t) => !Set(a, b,c,d).contains(t)).normalized()
    val ts_24 = TermState(negative11_1,negative11_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(y)(e))(y)))
    
    val negative12_ : FiniteDistribution[Term] = unif(a,b,c,d)(op(op(x)(e))(inv(x)(y)),op(y)(e),op(x)(inv(x)(y)),y,eqM,op)(
       eqM(a)(b) ->: eqM(c)(d) ->: eqM(a)(c) ->: eqM(b)(d),
       eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)),
       eqM(op(x)(inv(x)(y)))(y),
       eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)
    val negative12_1 = negative12_.filter((t) => !Set(a, b,c,d).contains(t)).normalized()
    val ts_25 = TermState(negative12_1,negative12_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(y)(e))(y)))
    
    val negative13 : FiniteDistribution[Term] = unif(a,b,c,d)(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)),eqM(op(x)(inv(x)(y)))(y),eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y))))(
       eqM(a)(b) ->: eqM(c)(d) ->: eqM(a)(c) ->: eqM(b)(d),
       eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)),
       eqM(op(x)(inv(x)(y)))(y),
       eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)
    val negative13_1 = negative13.filter((t) => !Set(a, b,c,d).contains(t)).normalized()
    val ts_26 = TermState(negative13_1,negative13_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(y)(e))(y)))
    
    
    
    
    Out[6]:
    negative11_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.041666666666666664),
        Weighted(b, 0.041666666666666664),
        Weighted(c, 0.041666666666666664),
        Weighted(d, 0.041666666666666664),
        Weighted(x, 0.041666666666666664),
        Weighted(e, 0.041666666666666664),
        Weighted(inv(x)(y), 0.041666666666666664),
        Weighted(y, 0.041666666666666664),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
          0.041666666666666664
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
          0.041666666666666664
        ),
        Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.041666666666666664),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
          0.041666666666666664
        ),
        Weighted(eqM, 0.5),
        Weighted(op, 0.8)
      )
    )
    negative11_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(x, 0.025510204081632654),
        Weighted(e, 0.025510204081632654),
        Weighted(inv(x)(y), 0.025510204081632654),
        Weighted(y, 0.025510204081632654),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
          0.025510204081632654
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
          0.025510204081632654
        ),
        Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.025510204081632654),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
          0.025510204081632654
        ),
        Weighted(eqM, 0.30612244897959184),
        Weighted(op, 0.489795918367347)
      )
    )
    ts_24: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(x, 0.025510204081632654),
          Weighted(e, 0.025510204081632654),
          Weighted(inv(x)(y), 0.025510204081632654),
          Weighted(y, 0.025510204081632654),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
            0.025510204081632654
          ),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
            0.025510204081632654
          ),
          Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.025510204081632654),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
            0.025510204081632654
          ),
          Weighted(eqM, 0.30612244897959184),
          Weighted(op, 0.489795918367347)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.025510204081632654),
          Weighted(M, 0.025510204081632654),
          Weighted(M, 0.025510204081632654),
          Weighted(M, 0.025510204081632654),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ ∏(d : M){ (eqM(a)(b) → (eqM(c)(d) → (eqM(a)(c) → eqM(b)(d)))) } } } },
            0.025510204081632654
          ),
          Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.025510204081632654),
          Weighted(eqM(op(x)(inv(x)(y)))(y), 0.025510204081632654),
          Weighted(
            eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y))),
    ...
    negative12_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.03571428571428571),
        Weighted(b, 0.03571428571428571),
        Weighted(c, 0.03571428571428571),
        Weighted(d, 0.03571428571428571),
        Weighted(op(op(x)(e))(inv(x)(y)), 0.03571428571428571),
        Weighted(op(y)(e), 0.03571428571428571),
        Weighted(op(x)(inv(x)(y)), 0.03571428571428571),
        Weighted(y, 0.03571428571428571),
        Weighted(eqM, 0.03571428571428571),
        Weighted(op, 0.03571428571428571),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
          0.03571428571428571
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
          0.03571428571428571
        ),
        Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.03571428571428571),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
          0.03571428571428571
        ),
        Weighted(eqM, 0.9)
      )
    )
    negative12_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(op(op(x)(e))(inv(x)(y)), 0.02840909090909091),
        Weighted(op(y)(e), 0.02840909090909091),
        Weighted(op(x)(inv(x)(y)), 0.02840909090909091),
        Weighted(y, 0.02840909090909091),
        Weighted(eqM, 0.02840909090909091),
        Weighted(op, 0.02840909090909091),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
          0.02840909090909091
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
          0.02840909090909091
        ),
        Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.02840909090909091),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
          0.02840909090909091
        ),
        Weighted(eqM, 0.7159090909090909)
      )
    )
    ts_25: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(op(op(x)(e))(inv(x)(y)), 0.02840909090909091),
          Weighted(op(y)(e), 0.02840909090909091),
          Weighted(op(x)(inv(x)(y)), 0.02840909090909091),
          Weighted(y, 0.02840909090909091),
          Weighted(eqM, 0.02840909090909091),
          Weighted(op, 0.02840909090909091),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
            0.02840909090909091
          ),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
            0.02840909090909091
          ),
          Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.02840909090909091),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
            0.02840909090909091
          ),
          Weighted(eqM, 0.7159090909090909)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.02840909090909091),
          Weighted(M, 0.02840909090909091),
          Weighted(M, 0.02840909090909091),
          Weighted(M, 0.02840909090909091),
          Weighted((M → (M → 𝒰 )), 0.02840909090909091),
          Weighted((M → (M → M)), 0.02840909090909091),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ ∏(d : M){ (eqM(a)(b) → (eqM(c)(d) → (eqM(a)(c) → eqM(b)(d)))) } } } },
            0.02840909090909091
          ),
          Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.02840909090909091),
    ...
    negative13: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.045454545454545456),
        Weighted(b, 0.045454545454545456),
        Weighted(c, 0.045454545454545456),
        Weighted(d, 0.045454545454545456),
        Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.045454545454545456),
        Weighted(eqM(op(x)(inv(x)(y)))(y), 0.045454545454545456),
        Weighted(
          eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y))),
          0.045454545454545456
        ),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
          0.045454545454545456
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
          0.045454545454545456
        ),
        Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.045454545454545456),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
          0.045454545454545456
        ),
        Weighted(eqM, 0.9)
      )
    )
    negative13_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.03731343283582089),
        Weighted(eqM(op(x)(inv(x)(y)))(y), 0.03731343283582089),
        Weighted(
          eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y))),
          0.03731343283582089
        ),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
          0.03731343283582089
        ),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
          0.03731343283582089
        ),
        Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.03731343283582089),
        Weighted(
          axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
          0.03731343283582089
        ),
        Weighted(eqM, 0.7388059701492536)
      )
    )
    ts_26: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.03731343283582089),
          Weighted(eqM(op(x)(inv(x)(y)))(y), 0.03731343283582089),
          Weighted(
            eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y))),
            0.03731343283582089
          ),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
            0.03731343283582089
          ),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
            0.03731343283582089
          ),
          Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.03731343283582089),
          Weighted(
            axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
            0.03731343283582089
          ),
          Weighted(eqM, 0.7388059701492536)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(𝒰 , 0.03731343283582089),
          Weighted(𝒰 , 0.03731343283582089),
          Weighted(𝒰 , 0.03731343283582089),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ ∏(d : M){ (eqM(a)(b) → (eqM(c)(d) → (eqM(a)(c) → eqM(b)(d)))) } } } },
            0.03731343283582089
          ),
          Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.03731343283582089),
          Weighted(eqM(op(x)(inv(x)(y)))(y), 0.03731343283582089),
          Weighted(
            eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y))),
    ...
    
    
    In [7]:
    val tg11 = TermGenParams(unAppW=0.25)
    val lp_32 = LocalProver(ts_24,cutoff=9*math.pow(10,-6)).noIsles
    val lp_33 = LocalProver(ts_25,tg11,cutoff=9*math.pow(10,-6)).noIsles
    val lp_34 = LocalProver(ts_26,cutoff=5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[7]:
    tg11: TermGenParams = TermGenParams(
      0.1,
      0.25,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    lp_32: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(x, 0.025510204081632654),
            Weighted(e, 0.025510204081632654),
            Weighted(inv(x)(y), 0.025510204081632654),
            Weighted(y, 0.025510204081632654),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
              0.025510204081632654
            ),
            Weighted(
              axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
              0.025510204081632654
            ),
            Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.025510204081632654),
            Weighted(
              axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
              0.025510204081632654
            ),
            Weighted(eqM, 0.30612244897959184),
            Weighted(op, 0.489795918367347)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.025510204081632654),
            Weighted(M, 0.025510204081632654),
            Weighted(M, 0.025510204081632654),
            Weighted(M, 0.025510204081632654),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ ∏(d : M){ (eqM(a)(b) → (eqM(c)(d) → (eqM(a)(c) → eqM(b)(d)))) } } } },
              0.025510204081632654
            ),
            Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.025510204081632654),
            Weighted(eqM(op(x)(inv(x)(y)))(y), 0.025510204081632654),
            Weighted(
    ...
    lp_33: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(op(op(x)(e))(inv(x)(y)), 0.02840909090909091),
            Weighted(op(y)(e), 0.02840909090909091),
            Weighted(op(x)(inv(x)(y)), 0.02840909090909091),
            Weighted(y, 0.02840909090909091),
            Weighted(eqM, 0.02840909090909091),
            Weighted(op, 0.02840909090909091),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
              0.02840909090909091
            ),
            Weighted(
              axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
              0.02840909090909091
            ),
            Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.02840909090909091),
            Weighted(
              axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
              0.02840909090909091
            ),
            Weighted(eqM, 0.7159090909090909)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.02840909090909091),
            Weighted(M, 0.02840909090909091),
            Weighted(M, 0.02840909090909091),
            Weighted(M, 0.02840909090909091),
            Weighted((M → (M → 𝒰 )), 0.02840909090909091),
            Weighted((M → (M → M)), 0.02840909090909091),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ ∏(d : M){ (eqM(a)(b) → (eqM(c)(d) → (eqM(a)(c) → eqM(b)(d)))) } } } },
              0.02840909090909091
            ),
    ...
    lp_34: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.03731343283582089),
            Weighted(eqM(op(x)(inv(x)(y)))(y), 0.03731343283582089),
            Weighted(
              eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y))),
              0.03731343283582089
            ),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(c)(d) \to (eqM(a)(c) \to eqM(b)(d))))},
              0.03731343283582089
            ),
            Weighted(
              axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e))},
              0.03731343283582089
            ),
            Weighted(axiom_{eqM(op(x)(inv(x)(y)))(y)}, 0.03731343283582089),
            Weighted(
              axiom_{eqM(op(op(x)(e))(inv(x)(y)))(op(x)(inv(x)(y)))},
              0.03731343283582089
            ),
            Weighted(eqM, 0.7388059701492536)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(𝒰 , 0.03731343283582089),
            Weighted(𝒰 , 0.03731343283582089),
            Weighted(𝒰 , 0.03731343283582089),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ ∏(d : M){ (eqM(a)(b) → (eqM(c)(d) → (eqM(a)(c) → eqM(b)(d)))) } } } },
              0.03731343283582089
            ),
            Weighted(eqM(op(op(x)(e))(inv(x)(y)))(op(y)(e)), 0.03731343283582089),
            Weighted(eqM(op(x)(inv(x)(y)))(y), 0.03731343283582089),
            Weighted(
    ...
    
    
    In [24]:
    val lem_32 = lp_32.lemmas.runSyncUnsafe()
    
    
    
    
    Out[24]:
    lem_32: Vector[(Typ[Term], Double)] = Vector()
    
    
    In [9]:
    val lem_33 = lp_33.lemmas.runSyncUnsafe()
    
    
    
    
    java.util.concurrent.TimeoutException: Task timed-out after 12 minutes of inactivity
      monix.eval.Task.timeout(Task.scala:2220)
      provingground.learning.GenMonixFiniteDistributionEq.$anonfun$varDist$2(MonixFiniteDistributionEq.scala:159)
      scala.Option.getOrElse(Option.scala:189)
      provingground.learning.GenMonixFiniteDistributionEq.varDist(MonixFiniteDistributionEq.scala:144)
      provingground.learning.LocalProver.tripleT$lzycompute(LocalProver.scala:178)
      provingground.learning.LocalProver.tripleT(LocalProver.scala:174)
      provingground.learning.LocalProver.nextState$lzycompute(LocalProver.scala:205)
      provingground.learning.LocalProver.nextState(LocalProver.scala:190)
      provingground.learning.LocalProverStep.evolvedState(LocalProver.scala:316)
      provingground.learning.LocalProverStep.evolvedState$(LocalProver.scala:316)
      provingground.learning.LocalProver.evolvedState$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.evolvedState(LocalProver.scala:25)
      provingground.learning.LocalProverStep.lemmas(LocalProver.scala:364)
      provingground.learning.LocalProverStep.lemmas$(LocalProver.scala:362)
      provingground.learning.LocalProver.lemmas$lzycompute(LocalProver.scala:25)
      provingground.learning.LocalProver.lemmas(LocalProver.scala:25)
      ammonite.$sess.cmd8$Helper.<init>(cmd8.sc:1)
      ammonite.$sess.cmd8$.<init>(cmd8.sc:7)
      ammonite.$sess.cmd8$.<clinit>(cmd8.sc:-1)
    
    
    In [8]:
    val lem_34 = lp_34.lemmas.runSyncUnsafe()
    
    
    
    
    Out[8]:
    lem_34: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(y)(e))(y), 0.8510794075570274)
    )

    We have proved that all identity elements are universal identities.Now we have to prove that the cardinality of set of all the universal identity is 1.This proof goes similar to Monoid proof.The link to the Monoid proof notebook is https://github.com/siddhartha-gadgil/ProvingGround/blob/master/notes/2019-09-18-monoid.ipynb .

    Section2 : Uniqueness Of Universal Identity

    Assume $e_1$ and $e_2$ be two universal identies.

    Step1:

    $$(e_1*e_2=e_1) \land (e_2*e_1=e_2)$$

    
    
    In [18]:
    val negative14_ : FiniteDistribution[Term] = unif(a)(e1,e2)(
        eqM(op(a)(e1))(a),
        eqM(op(e2)(a))(a),
        eqM(a)(b) ->: eqM(a)(c) ->: eqM(b)(c)
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.5)++(FiniteDistribution.unif(op:Term)*0.4)
    val negative14_1 = negative14_.filter((t) => !Set(a).contains(t)).normalized()
    val ts_27 = TermState(negative14_1,negative14_1.map(_.typ),goals = FiniteDistribution.unif(eqM(e1)(e2)))
    
    
    
    
    Out[18]:
    negative14_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.08333333333333333),
        Weighted(e1, 0.08333333333333333),
        Weighted(e2, 0.08333333333333333),
        Weighted(axiom_{eqM(op(a)(e1))(a)}, 0.08333333333333333),
        Weighted(axiom_{eqM(op(e2)(a))(a)}, 0.08333333333333333),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
          0.08333333333333333
        ),
        Weighted(eqM, 0.5),
        Weighted(op, 0.4)
      )
    )
    negative14_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(e1, 0.06329113924050633),
        Weighted(e2, 0.06329113924050633),
        Weighted(axiom_{eqM(op(a)(e1))(a)}, 0.06329113924050633),
        Weighted(axiom_{eqM(op(e2)(a))(a)}, 0.06329113924050633),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
          0.06329113924050633
        ),
        Weighted(eqM, 0.379746835443038),
        Weighted(op, 0.30379746835443044)
      )
    )
    ts_27: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(e1, 0.06329113924050633),
          Weighted(e2, 0.06329113924050633),
          Weighted(axiom_{eqM(op(a)(e1))(a)}, 0.06329113924050633),
          Weighted(axiom_{eqM(op(e2)(a))(a)}, 0.06329113924050633),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
            0.06329113924050633
          ),
          Weighted(eqM, 0.379746835443038),
          Weighted(op, 0.30379746835443044)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.06329113924050633),
          Weighted(M, 0.06329113924050633),
          Weighted(∏(a : M){ eqM(op(a)(e1))(a) }, 0.06329113924050633),
          Weighted(∏(a : M){ eqM(op(e2)(a))(a) }, 0.06329113924050633),
          Weighted(
            ∏(a : M){ (eqM(a)(b) → (eqM(a)(c) → eqM(b)(c))) },
            0.06329113924050633
          ),
          Weighted((M → (M → 𝒰 )), 0.379746835443038),
          Weighted((M → (M → M)), 0.30379746835443044)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector(Weighted(eqM(e1)(e2), 1.0))),
      Empty
    )
    
    
    In [19]:
    val lp_35 = LocalProver(ts_27,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[19]:
    lp_35: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(e1, 0.06329113924050633),
            Weighted(e2, 0.06329113924050633),
            Weighted(axiom_{eqM(op(a)(e1))(a)}, 0.06329113924050633),
            Weighted(axiom_{eqM(op(e2)(a))(a)}, 0.06329113924050633),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
              0.06329113924050633
            ),
            Weighted(eqM, 0.379746835443038),
            Weighted(op, 0.30379746835443044)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.06329113924050633),
            Weighted(M, 0.06329113924050633),
            Weighted(∏(a : M){ eqM(op(a)(e1))(a) }, 0.06329113924050633),
            Weighted(∏(a : M){ eqM(op(e2)(a))(a) }, 0.06329113924050633),
            Weighted(
              ∏(a : M){ (eqM(a)(b) → (eqM(a)(c) → eqM(b)(c))) },
              0.06329113924050633
            ),
            Weighted((M → (M → 𝒰 )), 0.379746835443038),
            Weighted((M → (M → M)), 0.30379746835443044)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(Vector(Weighted(eqM(e1)(e2), 1.0))),
        Empty
      ),
      TermGenParams(
        0.1,
        0.1,
        0.1,
    ...
    
    
    In [20]:
    val lem_35 = lp_35.lemmas.runSyncUnsafe()
    
    
    
    
    Out[20]:
    lem_35: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(e2)(e2))(e2), 1.1741048016619992E-5),
      (eqM(op(e2)(e1))(e2), 1.1741048016619992E-5),
      (eqM(op(e1)(e1))(e1), 1.1741048016619992E-5),
      (eqM(op(e2)(e1))(e1), 1.1741048016619992E-5)
    )

    Step2:

    $$e_1=e_2$$

    
    
    In [35]:
    val negative15_ : FiniteDistribution[Term] = unif(a,b,c)(e1,e2,op)(
        eqM(op(e2)(e1))(e1),
        eqM(op(e2)(e1))(e2),
        eqM(a)(b) ->: eqM(a)(c) ->: eqM(b)(c)
    )*0.5++(FiniteDistribution.unif(eqM:Term)*0.5)++(FiniteDistribution.unif(op:Term)*0.4)
    val negative15_1 = negative15_.filter((t) => !Set(a,b,c).contains(t)).normalized()
    val ts_28 = TermState(negative15_1,negative15_1.map(_.typ))
    val ts_29 = TermState(negative15_1,negative15_1.map(_.typ),goals = FiniteDistribution.unif(eqM(e1)(e2)))
    
    
    
    
    Out[35]:
    negative15_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05555555555555555),
        Weighted(b, 0.05555555555555555),
        Weighted(c, 0.05555555555555555),
        Weighted(e1, 0.05555555555555555),
        Weighted(e2, 0.05555555555555555),
        Weighted(op, 0.05555555555555555),
        Weighted(axiom_{eqM(op(e2)(e1))(e1)}, 0.05555555555555555),
        Weighted(axiom_{eqM(op(e2)(e1))(e2)}, 0.05555555555555555),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
          0.05555555555555555
        ),
        Weighted(eqM, 0.5),
        Weighted(op, 0.4)
      )
    )
    negative15_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(e1, 0.045045045045045036),
        Weighted(e2, 0.045045045045045036),
        Weighted(op, 0.045045045045045036),
        Weighted(axiom_{eqM(op(e2)(e1))(e1)}, 0.045045045045045036),
        Weighted(axiom_{eqM(op(e2)(e1))(e2)}, 0.045045045045045036),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
          0.045045045045045036
        ),
        Weighted(eqM, 0.4054054054054054),
        Weighted(op, 0.32432432432432434)
      )
    )
    ts_28: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(e1, 0.045045045045045036),
          Weighted(e2, 0.045045045045045036),
          Weighted(op, 0.045045045045045036),
          Weighted(axiom_{eqM(op(e2)(e1))(e1)}, 0.045045045045045036),
          Weighted(axiom_{eqM(op(e2)(e1))(e2)}, 0.045045045045045036),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
            0.045045045045045036
          ),
          Weighted(eqM, 0.4054054054054054),
          Weighted(op, 0.32432432432432434)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.045045045045045036),
          Weighted(M, 0.045045045045045036),
          Weighted((M → (M → M)), 0.045045045045045036),
          Weighted(eqM(op(e2)(e1))(e1), 0.045045045045045036),
          Weighted(eqM(op(e2)(e1))(e2), 0.045045045045045036),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(a)(c) → eqM(b)(c))) } } },
            0.045045045045045036
          ),
          Weighted((M → (M → 𝒰 )), 0.4054054054054054),
          Weighted((M → (M → M)), 0.32432432432432434)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    ts_29: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(e1, 0.045045045045045036),
          Weighted(e2, 0.045045045045045036),
          Weighted(op, 0.045045045045045036),
          Weighted(axiom_{eqM(op(e2)(e1))(e1)}, 0.045045045045045036),
          Weighted(axiom_{eqM(op(e2)(e1))(e2)}, 0.045045045045045036),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
            0.045045045045045036
          ),
          Weighted(eqM, 0.4054054054054054),
          Weighted(op, 0.32432432432432434)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.045045045045045036),
          Weighted(M, 0.045045045045045036),
          Weighted((M → (M → M)), 0.045045045045045036),
          Weighted(eqM(op(e2)(e1))(e1), 0.045045045045045036),
          Weighted(eqM(op(e2)(e1))(e2), 0.045045045045045036),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(a)(c) → eqM(b)(c))) } } },
            0.045045045045045036
          ),
          Weighted((M → (M → 𝒰 )), 0.4054054054054054),
          Weighted((M → (M → M)), 0.32432432432432434)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector(Weighted(eqM(e1)(e2), 1.0))),
      Empty
    )
    
    
    In [39]:
    val lp_36 = LocalProver(ts_28,cutoff = 5*math.pow(10,-6)).noIsles
    val lp_37 = LocalProver(ts_29,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[39]:
    lp_36: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(e1, 0.045045045045045036),
            Weighted(e2, 0.045045045045045036),
            Weighted(op, 0.045045045045045036),
            Weighted(axiom_{eqM(op(e2)(e1))(e1)}, 0.045045045045045036),
            Weighted(axiom_{eqM(op(e2)(e1))(e2)}, 0.045045045045045036),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
              0.045045045045045036
            ),
            Weighted(eqM, 0.4054054054054054),
            Weighted(op, 0.32432432432432434)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.045045045045045036),
            Weighted(M, 0.045045045045045036),
            Weighted((M → (M → M)), 0.045045045045045036),
            Weighted(eqM(op(e2)(e1))(e1), 0.045045045045045036),
            Weighted(eqM(op(e2)(e1))(e2), 0.045045045045045036),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(a)(c) → eqM(b)(c))) } } },
              0.045045045045045036
            ),
            Weighted((M → (M → 𝒰 )), 0.4054054054054054),
            Weighted((M → (M → M)), 0.32432432432432434)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(Vector()),
        Empty
      ),
      TermGenParams(
    ...
    lp_37: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(e1, 0.045045045045045036),
            Weighted(e2, 0.045045045045045036),
            Weighted(op, 0.045045045045045036),
            Weighted(axiom_{eqM(op(e2)(e1))(e1)}, 0.045045045045045036),
            Weighted(axiom_{eqM(op(e2)(e1))(e2)}, 0.045045045045045036),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
              0.045045045045045036
            ),
            Weighted(eqM, 0.4054054054054054),
            Weighted(op, 0.32432432432432434)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.045045045045045036),
            Weighted(M, 0.045045045045045036),
            Weighted((M → (M → M)), 0.045045045045045036),
            Weighted(eqM(op(e2)(e1))(e1), 0.045045045045045036),
            Weighted(eqM(op(e2)(e1))(e2), 0.045045045045045036),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(a)(c) → eqM(b)(c))) } } },
              0.045045045045045036
            ),
            Weighted((M → (M → 𝒰 )), 0.4054054054054054),
            Weighted((M → (M → M)), 0.32432432432432434)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(Vector(Weighted(eqM(e1)(e2), 1.0))),
        Empty
      ),
      TermGenParams(
    ...
    
    
    In [37]:
    val lem_36 = lp_36.lemmas.runSyncUnsafe()
    
    
    
    
    Out[37]:
    lem_36: Vector[(Typ[Term], Double)] = Vector(
      (eqM(e1)(e2), 0.004797460521354881),
      (eqM(e1)(e1), 0.004797460521354881),
      (eqM(e2)(e2), 0.004797460521354881),
      (eqM(e2)(e1), 0.004797460521354881)
    )
    
    
    In [38]:
    val lem_37 = lp_37.lemmas.runSyncUnsafe()
    
    
    
    
    Out[38]:
    lem_37: Vector[(Typ[Term], Double)] = Vector(
      (eqM(e1)(e2), 0.8930287033141091),
      (eqM(e1)(e1), 0.0016057097659929907),
      (eqM(e2)(e2), 0.0016057097659929907),
      (eqM(e2)(e1), 0.0016057097659929907)
    )

    Now we have successfully completed the prove for Part1.

    Part2 : Elimination

    Now we given for some $p,q,r \in S$, we are given $$p*r=q*r$$ holds. and now we have to prove $$p=q$$

    Step1:

    $$(p*r)*inv(r)(e) = (b*r)*inv(r)(e)$$ where e is the identity element for $r$.

    
    
    In [42]:
    val negative16_ : FiniteDistribution[Term] = unif(a,b,c)(op(p)(r),op(q)(r),inv(r)(e),op,eqM)(
        eqM(a)(b) ->: eqM(op(a)(c))(op(b)(c)),
        eqM(op(p)(r))(op(q)(r))
      ) * 0.5++(FiniteDistribution.unif(eqM: Term)*0.5)++(FiniteDistribution.unif(op: Term)*0.25) 
    val negative16_1 = negative16_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_30 = TermState(negative16_1,negative16_1.map(_.typ))
    
    
    
    
    Out[42]:
    negative16_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05),
        Weighted(b, 0.05),
        Weighted(c, 0.05),
        Weighted(op(p)(r), 0.05),
        Weighted(op(q)(r), 0.05),
        Weighted(inv(r)(e), 0.05),
        Weighted(op, 0.05),
        Weighted(eqM, 0.05),
        Weighted(axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))}, 0.05),
        Weighted(axiom_{eqM(op(p)(r))(op(q)(r))}, 0.05),
        Weighted(eqM, 0.5),
        Weighted(op, 0.25)
      )
    )
    negative16_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(op(p)(r), 0.045454545454545456),
        Weighted(op(q)(r), 0.045454545454545456),
        Weighted(inv(r)(e), 0.045454545454545456),
        Weighted(op, 0.045454545454545456),
        Weighted(eqM, 0.045454545454545456),
        Weighted(
          axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
          0.045454545454545456
        ),
        Weighted(axiom_{eqM(op(p)(r))(op(q)(r))}, 0.045454545454545456),
        Weighted(eqM, 0.45454545454545453),
        Weighted(op, 0.22727272727272727)
      )
    )
    ts_30: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(op(p)(r), 0.045454545454545456),
          Weighted(op(q)(r), 0.045454545454545456),
          Weighted(inv(r)(e), 0.045454545454545456),
          Weighted(op, 0.045454545454545456),
          Weighted(eqM, 0.045454545454545456),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
            0.045454545454545456
          ),
          Weighted(axiom_{eqM(op(p)(r))(op(q)(r))}, 0.045454545454545456),
          Weighted(eqM, 0.45454545454545453),
          Weighted(op, 0.22727272727272727)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.045454545454545456),
          Weighted(M, 0.045454545454545456),
          Weighted(M, 0.045454545454545456),
          Weighted((M → (M → M)), 0.045454545454545456),
          Weighted((M → (M → 𝒰 )), 0.045454545454545456),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(a)(c))(op(b)(c))) } } },
            0.045454545454545456
          ),
          Weighted(eqM(op(p)(r))(op(q)(r)), 0.045454545454545456),
          Weighted((M → (M → 𝒰 )), 0.45454545454545453),
          Weighted((M → (M → M)), 0.22727272727272727)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    
    
    In [43]:
    val lp_38 = LocalProver(ts_30,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[43]:
    lp_38: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(op(p)(r), 0.045454545454545456),
            Weighted(op(q)(r), 0.045454545454545456),
            Weighted(inv(r)(e), 0.045454545454545456),
            Weighted(op, 0.045454545454545456),
            Weighted(eqM, 0.045454545454545456),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(a)(c))(op(b)(c)))},
              0.045454545454545456
            ),
            Weighted(axiom_{eqM(op(p)(r))(op(q)(r))}, 0.045454545454545456),
            Weighted(eqM, 0.45454545454545453),
            Weighted(op, 0.22727272727272727)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.045454545454545456),
            Weighted(M, 0.045454545454545456),
            Weighted(M, 0.045454545454545456),
            Weighted((M → (M → M)), 0.045454545454545456),
            Weighted((M → (M → 𝒰 )), 0.045454545454545456),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(a)(c))(op(b)(c))) } } },
              0.045454545454545456
            ),
            Weighted(eqM(op(p)(r))(op(q)(r)), 0.045454545454545456),
            Weighted((M → (M → 𝒰 )), 0.45454545454545453),
            Weighted((M → (M → M)), 0.22727272727272727)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(Vector()),
        Empty
    ...
    
    
    In [44]:
    val lem_38 = lp_38.lemmas.runSyncUnsafe()
    
    
    
    
    Out[44]:
    lem_38: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(p)(r))(op(p)(r)))(op(op(q)(r))(op(p)(r))), 1.011659447219413E-5),
      (eqM(op(op(p)(r))(inv(r)(e)))(op(op(q)(r))(inv(r)(e))), 1.011659447219413E-5),
      (eqM(op(op(p)(r))(op(q)(r)))(op(op(q)(r))(op(q)(r))), 1.011659447219413E-5)
    )

    Step2:

    $$(p*r)*inv(r)(e) = p*r*inv(r)(e)$$ and $$p*(r*inv(r)(e)) = p*r*inv(r)(e)$$ where e is the identity element for $r$.

    In the above equation we haven't applied the bracketting on the first term, this is done to encompass the associative property of the operation *.

    
    
    In [53]:
    val negative17_ : FiniteDistribution[Term] = unif(a,b,c)(op(op(p)(r))(inv(r)(e)),op(p)(op(r)(inv(r)(e))),op_2(p)(r)(inv(r)(e)),eqM)(
    eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) ->: eqM(op(a)(op(b)(c)))(op_2(a)(b)(c)),
    eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))
     )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)
    val negative17_1 = negative17_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_31 = TermState(negative17_1,negative17_1.map(_.typ))
    val ts_32= TermState(negative17_1,negative17_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(q)(inv(r)(e)))))
    
    
    
    
    Out[53]:
    negative17_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05555555555555555),
        Weighted(b, 0.05555555555555555),
        Weighted(c, 0.05555555555555555),
        Weighted(op(op(p)(r))(inv(r)(e)), 0.05555555555555555),
        Weighted(op(p)(op(r)(inv(r)(e))), 0.05555555555555555),
        Weighted(op_2(p)(r)(inv(r)(e)), 0.05555555555555555),
        Weighted(eqM, 0.05555555555555555),
        Weighted(
          axiom_{(eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) \to eqM(op(a)(op(b)(c)))(op_2(a)(b)(c)))},
          0.05555555555555555
        ),
        Weighted(
          axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))},
          0.05555555555555555
        ),
        Weighted(eqM, 0.9)
      )
    )
    negative17_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(op(op(p)(r))(inv(r)(e)), 0.045045045045045036),
        Weighted(op(p)(op(r)(inv(r)(e))), 0.045045045045045036),
        Weighted(op_2(p)(r)(inv(r)(e)), 0.045045045045045036),
        Weighted(eqM, 0.045045045045045036),
        Weighted(
          axiom_{(eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) \to eqM(op(a)(op(b)(c)))(op_2(a)(b)(c)))},
          0.045045045045045036
        ),
        Weighted(
          axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))},
          0.045045045045045036
        ),
        Weighted(eqM, 0.7297297297297297)
      )
    )
    ts_31: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(op(op(p)(r))(inv(r)(e)), 0.045045045045045036),
          Weighted(op(p)(op(r)(inv(r)(e))), 0.045045045045045036),
          Weighted(op_2(p)(r)(inv(r)(e)), 0.045045045045045036),
          Weighted(eqM, 0.045045045045045036),
          Weighted(
            axiom_{(eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) \to eqM(op(a)(op(b)(c)))(op_2(a)(b)(c)))},
            0.045045045045045036
          ),
          Weighted(
            axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))},
            0.045045045045045036
          ),
          Weighted(eqM, 0.7297297297297297)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.045045045045045036),
          Weighted(M, 0.045045045045045036),
          Weighted(M, 0.045045045045045036),
          Weighted((M → (M → 𝒰 )), 0.045045045045045036),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) → eqM(op(a)(op(b)(c)))(op_2(a)(b)(c))) } } },
            0.045045045045045036
          ),
          Weighted(
            eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e)))),
            0.045045045045045036
          ),
          Weighted((M → (M → 𝒰 )), 0.7297297297297297)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
    ...
    ts_32: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(op(op(p)(r))(inv(r)(e)), 0.045045045045045036),
          Weighted(op(p)(op(r)(inv(r)(e))), 0.045045045045045036),
          Weighted(op_2(p)(r)(inv(r)(e)), 0.045045045045045036),
          Weighted(eqM, 0.045045045045045036),
          Weighted(
            axiom_{(eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) \to eqM(op(a)(op(b)(c)))(op_2(a)(b)(c)))},
            0.045045045045045036
          ),
          Weighted(
            axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))},
            0.045045045045045036
          ),
          Weighted(eqM, 0.7297297297297297)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.045045045045045036),
          Weighted(M, 0.045045045045045036),
          Weighted(M, 0.045045045045045036),
          Weighted((M → (M → 𝒰 )), 0.045045045045045036),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) → eqM(op(a)(op(b)(c)))(op_2(a)(b)(c))) } } },
            0.045045045045045036
          ),
          Weighted(
            eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e)))),
            0.045045045045045036
          ),
          Weighted((M → (M → 𝒰 )), 0.7297297297297297)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
    ...
    
    
    In [54]:
    val lp_39 = LocalProver(ts_32,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[54]:
    lp_39: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(op(op(p)(r))(inv(r)(e)), 0.045045045045045036),
            Weighted(op(p)(op(r)(inv(r)(e))), 0.045045045045045036),
            Weighted(op_2(p)(r)(inv(r)(e)), 0.045045045045045036),
            Weighted(eqM, 0.045045045045045036),
            Weighted(
              axiom_{(eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) \to eqM(op(a)(op(b)(c)))(op_2(a)(b)(c)))},
              0.045045045045045036
            ),
            Weighted(
              axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))},
              0.045045045045045036
            ),
            Weighted(eqM, 0.7297297297297297)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.045045045045045036),
            Weighted(M, 0.045045045045045036),
            Weighted(M, 0.045045045045045036),
            Weighted((M → (M → 𝒰 )), 0.045045045045045036),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(op(op(a)(b))(c))(op(a)(op(b)(c))) → eqM(op(a)(op(b)(c)))(op_2(a)(b)(c))) } } },
              0.045045045045045036
            ),
            Weighted(
              eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e)))),
              0.045045045045045036
            ),
            Weighted((M → (M → 𝒰 )), 0.7297297297297297)
          )
        ),
        Vector(),
    ...
    
    
    In [55]:
    val lem_39= lp_39.lemmas.runSyncUnsafe()
    
    
    
    
    Out[55]:
    lem_39: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e))), 0.00285420901552047)
    )
    
    
    In [56]:
    val negative18_ : FiniteDistribution[Term] = unif(a,b,c)(op(op(p)(r))(inv(r)(e)),op(p)(op(r)(inv(r)(e))),op_2(p)(r)(inv(r)(e)),eqM)(
    eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(q)(inv(r)(e))),
    eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e)))),
    eqM(a)(b) ->: eqM(b)(c) ->: eqM(a)(c)
     )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)
    val negative18_1 = negative18_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_33 = TermState(negative18_1,negative18_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(op(p)(r))(inv(r)(e)))(op_2(p)(q)(inv(r)(e)))))
    
    
    
    
    Out[56]:
    negative18_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05),
        Weighted(b, 0.05),
        Weighted(c, 0.05),
        Weighted(op(op(p)(r))(inv(r)(e)), 0.05),
        Weighted(op(p)(op(r)(inv(r)(e))), 0.05),
        Weighted(op_2(p)(r)(inv(r)(e)), 0.05),
        Weighted(eqM, 0.05),
        Weighted(axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(q)(inv(r)(e)))}, 0.05),
        Weighted(
          axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))},
          0.05
        ),
        Weighted(axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))}, 0.05),
        Weighted(eqM, 0.9)
      )
    )
    negative18_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(op(op(p)(r))(inv(r)(e)), 0.04000000000000001),
        Weighted(op(p)(op(r)(inv(r)(e))), 0.04000000000000001),
        Weighted(op_2(p)(r)(inv(r)(e)), 0.04000000000000001),
        Weighted(eqM, 0.04000000000000001),
        Weighted(
          axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(q)(inv(r)(e)))},
          0.04000000000000001
        ),
        Weighted(
          axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))},
          0.04000000000000001
        ),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.04000000000000001
        ),
        Weighted(eqM, 0.7200000000000001)
      )
    )
    ts_33: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(op(op(p)(r))(inv(r)(e)), 0.04000000000000001),
          Weighted(op(p)(op(r)(inv(r)(e))), 0.04000000000000001),
          Weighted(op_2(p)(r)(inv(r)(e)), 0.04000000000000001),
          Weighted(eqM, 0.04000000000000001),
          Weighted(
            axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(q)(inv(r)(e)))},
            0.04000000000000001
          ),
          Weighted(
            axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))},
            0.04000000000000001
          ),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.04000000000000001
          ),
          Weighted(eqM, 0.7200000000000001)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.04000000000000001),
          Weighted(M, 0.04000000000000001),
          Weighted(M, 0.04000000000000001),
          Weighted((M → (M → 𝒰 )), 0.04000000000000001),
          Weighted(
            eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(q)(inv(r)(e))),
            0.04000000000000001
          ),
          Weighted(
            eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e)))),
            0.04000000000000001
          ),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
    ...
    
    
    In [57]:
    val lp_40 = LocalProver(ts_33,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[57]:
    lp_40: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(op(op(p)(r))(inv(r)(e)), 0.04000000000000001),
            Weighted(op(p)(op(r)(inv(r)(e))), 0.04000000000000001),
            Weighted(op_2(p)(r)(inv(r)(e)), 0.04000000000000001),
            Weighted(eqM, 0.04000000000000001),
            Weighted(
              axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(q)(inv(r)(e)))},
              0.04000000000000001
            ),
            Weighted(
              axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e))))},
              0.04000000000000001
            ),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
              0.04000000000000001
            ),
            Weighted(eqM, 0.7200000000000001)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.04000000000000001),
            Weighted(M, 0.04000000000000001),
            Weighted(M, 0.04000000000000001),
            Weighted((M → (M → 𝒰 )), 0.04000000000000001),
            Weighted(
              eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(q)(inv(r)(e))),
              0.04000000000000001
            ),
            Weighted(
              eqM(op(op(p)(r))(inv(r)(e)))(op(p)(op(r)(inv(r)(e)))),
              0.04000000000000001
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } ...
    
    
    In [58]:
    val lem_40 = lp_40.lemmas.runSyncUnsafe()
    
    
    
    
    Out[58]:
    lem_40: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(p)(r))(inv(r)(e)))(op_2(p)(q)(inv(r)(e))), 0.8784421315181933)
    )

    Step3:

    $$p*(r*inv(r)(e)) = p*e $$ $$\implies p*r*inv(r)(e) = p*e$$

    
    
    In [6]:
    val negative19_ : FiniteDistribution[Term] = unif(a,b,c)(p,r,e,inv,op,eqM)(
      eqM(a)(b) ->: eqM(op(c)(a))(op(c)(b)),
        eqM(op(a)(inv(a)(e)))(e)
     )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)
    val negative19_1 = negative19_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_31 = TermState(negative19_1,negative19_1.map(_.typ))
    val ts_32= TermState(negative19_1,negative19_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e))))
    
    
    
    
    Out[6]:
    negative19_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.045454545454545456),
        Weighted(b, 0.045454545454545456),
        Weighted(c, 0.045454545454545456),
        Weighted(p, 0.045454545454545456),
        Weighted(r, 0.045454545454545456),
        Weighted(e, 0.045454545454545456),
        Weighted(inv, 0.045454545454545456),
        Weighted(op, 0.045454545454545456),
        Weighted(eqM, 0.045454545454545456),
        Weighted(
          axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
          0.045454545454545456
        ),
        Weighted(axiom_{eqM(op(a)(inv(a)(e)))(e)}, 0.045454545454545456),
        Weighted(eqM, 0.9)
      )
    )
    negative19_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(p, 0.03597122302158273),
        Weighted(r, 0.03597122302158273),
        Weighted(e, 0.03597122302158273),
        Weighted(inv, 0.03597122302158273),
        Weighted(op, 0.03597122302158273),
        Weighted(eqM, 0.03597122302158273),
        Weighted(
          axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
          0.03597122302158273
        ),
        Weighted(axiom_{eqM(op(a)(inv(a)(e)))(e)}, 0.03597122302158273),
        Weighted(eqM, 0.7122302158273381)
      )
    )
    ts_31: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(p, 0.03597122302158273),
          Weighted(r, 0.03597122302158273),
          Weighted(e, 0.03597122302158273),
          Weighted(inv, 0.03597122302158273),
          Weighted(op, 0.03597122302158273),
          Weighted(eqM, 0.03597122302158273),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
            0.03597122302158273
          ),
          Weighted(axiom_{eqM(op(a)(inv(a)(e)))(e)}, 0.03597122302158273),
          Weighted(eqM, 0.7122302158273381)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03597122302158273),
          Weighted(M, 0.03597122302158273),
          Weighted(M, 0.03597122302158273),
          Weighted((M → (M → M)), 0.03597122302158273),
          Weighted((M → (M → M)), 0.03597122302158273),
          Weighted((M → (M → 𝒰 )), 0.03597122302158273),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
            0.03597122302158273
          ),
          Weighted(∏(a : M){ eqM(op(a)(inv(a)(e)))(e) }, 0.03597122302158273),
          Weighted((M → (M → 𝒰 )), 0.7122302158273381)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector()),
      Empty
    )
    ts_32: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(p, 0.03597122302158273),
          Weighted(r, 0.03597122302158273),
          Weighted(e, 0.03597122302158273),
          Weighted(inv, 0.03597122302158273),
          Weighted(op, 0.03597122302158273),
          Weighted(eqM, 0.03597122302158273),
          Weighted(
            axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
            0.03597122302158273
          ),
          Weighted(axiom_{eqM(op(a)(inv(a)(e)))(e)}, 0.03597122302158273),
          Weighted(eqM, 0.7122302158273381)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.03597122302158273),
          Weighted(M, 0.03597122302158273),
          Weighted(M, 0.03597122302158273),
          Weighted((M → (M → M)), 0.03597122302158273),
          Weighted((M → (M → M)), 0.03597122302158273),
          Weighted((M → (M → 𝒰 )), 0.03597122302158273),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
            0.03597122302158273
          ),
          Weighted(∏(a : M){ eqM(op(a)(inv(a)(e)))(e) }, 0.03597122302158273),
          Weighted((M → (M → 𝒰 )), 0.7122302158273381)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(
        Vector(Weighted(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)), 1.0))
      ),
    ...
    
    
    In [15]:
    val lp_41 = LocalProver(ts_32,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[15]:
    lp_41: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(p, 0.03597122302158273),
            Weighted(r, 0.03597122302158273),
            Weighted(e, 0.03597122302158273),
            Weighted(inv, 0.03597122302158273),
            Weighted(op, 0.03597122302158273),
            Weighted(eqM, 0.03597122302158273),
            Weighted(
              axiom_{(eqM(a)(b) \to eqM(op(c)(a))(op(c)(b)))},
              0.03597122302158273
            ),
            Weighted(axiom_{eqM(op(a)(inv(a)(e)))(e)}, 0.03597122302158273),
            Weighted(eqM, 0.7122302158273381)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.03597122302158273),
            Weighted(M, 0.03597122302158273),
            Weighted(M, 0.03597122302158273),
            Weighted((M → (M → M)), 0.03597122302158273),
            Weighted((M → (M → M)), 0.03597122302158273),
            Weighted((M → (M → 𝒰 )), 0.03597122302158273),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → eqM(op(c)(a))(op(c)(b))) } } },
              0.03597122302158273
            ),
            Weighted(∏(a : M){ eqM(op(a)(inv(a)(e)))(e) }, 0.03597122302158273),
            Weighted((M → (M → 𝒰 )), 0.7122302158273381)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(
          Vector(Weighted(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)), 1.0))
    ...
    
    
    In [16]:
    val lem_41 = lp_41.lemmas.runSyncUnsafe()
    
    
    
    
    Out[16]:
    lem_41: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)), 0.8855928793518824)
    )
    
    
    In [9]:
    val negative20_ :FiniteDistribution[Term] = unif(a,b,c)(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)),eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e))))(
        eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)),
        eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e))),
        eqM(a)(b) ->: eqM(a)(c) ->: eqM(b)(c)
        )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)++(FiniteDistribution.unif(op:Term)*0.6)
    val negative20_1 = negative20_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_33 = TermState(negative20_1,negative20_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op_2(p)(r)(inv(r)(e)))(op(p)(e))))
    
    
    
    
    Out[9]:
    negative20_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.0625),
        Weighted(b, 0.0625),
        Weighted(c, 0.0625),
        Weighted(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)), 0.0625),
        Weighted(eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e))), 0.0625),
        Weighted(axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e))}, 0.0625),
        Weighted(
          axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e)))},
          0.0625
        ),
        Weighted(axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))}, 0.0625),
        Weighted(eqM, 0.9),
        Weighted(op, 0.6)
      )
    )
    negative20_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)), 0.034482758620689655),
        Weighted(
          eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e))),
          0.034482758620689655
        ),
        Weighted(
          axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e))},
          0.034482758620689655
        ),
        Weighted(
          axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e)))},
          0.034482758620689655
        ),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
          0.034482758620689655
        ),
        Weighted(eqM, 0.496551724137931),
        Weighted(op, 0.3310344827586207)
      )
    )
    ts_33: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)), 0.034482758620689655),
          Weighted(
            eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e))),
            0.034482758620689655
          ),
          Weighted(
            axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e))},
            0.034482758620689655
          ),
          Weighted(
            axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e)))},
            0.034482758620689655
          ),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
            0.034482758620689655
          ),
          Weighted(eqM, 0.496551724137931),
          Weighted(op, 0.3310344827586207)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(𝒰 , 0.034482758620689655),
          Weighted(𝒰 , 0.034482758620689655),
          Weighted(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)), 0.034482758620689655),
          Weighted(
            eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e))),
            0.034482758620689655
          ),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(a)(c) → eqM(b)(c))) } } },
            0.034482758620689655
          ),
          Weighted((M → (M → 𝒰 )), 0.496551724137931),
    ...
    
    
    In [10]:
    val lp_42 = LocalProver(ts_33,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[10]:
    lp_42: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)), 0.034482758620689655),
            Weighted(
              eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e))),
              0.034482758620689655
            ),
            Weighted(
              axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e))},
              0.034482758620689655
            ),
            Weighted(
              axiom_{eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e)))},
              0.034482758620689655
            ),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(a)(c) \to eqM(b)(c)))},
              0.034482758620689655
            ),
            Weighted(eqM, 0.496551724137931),
            Weighted(op, 0.3310344827586207)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(𝒰 , 0.034482758620689655),
            Weighted(𝒰 , 0.034482758620689655),
            Weighted(eqM(op(p)(op(r)(inv(r)(e))))(op(p)(e)), 0.034482758620689655),
            Weighted(
              eqM(op(p)(op(r)(inv(r)(e))))(op_2(p)(r)(inv(r)(e))),
              0.034482758620689655
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(a)(c) → eqM(b)(c))) } } },
              0.034482758620689655
            ),
    ...
    
    
    In [11]:
    val lem_42 = lp_42.lemmas.runSyncUnsafe()
    
    
    
    
    Out[11]:
    lem_42: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op_2(p)(r)(inv(r)(e)))(op(p)(e)), 0.8626794089428854)
    )

    Step4:

    $$p*r*inv(r)(e) = p $$

    
    
    In [15]:
    val negative21_ :FiniteDistribution[Term] = unif(a,b,c)(p,eqM,op)(
        eqM(op(a)(e))(a),
        eqM(op_2(a)(r)(inv(r)(e))(op(a)(e)),
        eqM(a)(b) ->: eqM(b)(c) ->: eqM(a)(c)
        )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)++(FiniteDistribution.unif(p:Term)*0.6)
    val negative21_1 = negative21_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_34 = TermState(negative21_1,negative21_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op_2(p)(r)(s))(p)))
    
    
    
    
    Out[15]:
    negative21_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05555555555555555),
        Weighted(b, 0.05555555555555555),
        Weighted(c, 0.05555555555555555),
        Weighted(p, 0.05555555555555555),
        Weighted(eqM, 0.05555555555555555),
        Weighted(op, 0.05555555555555555),
        Weighted(axiom_{eqM(op(a)(e))(a)}, 0.05555555555555555),
        Weighted(axiom_{eqM(op_2(a)(r)(inv(r)(e)))(op(a)(e))}, 0.05555555555555555),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.05555555555555555
        ),
        Weighted(eqM, 0.9),
        Weighted(p, 0.6)
      )
    )
    negative21_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(p, 0.0303030303030303),
        Weighted(eqM, 0.0303030303030303),
        Weighted(op, 0.0303030303030303),
        Weighted(axiom_{eqM(op(a)(e))(a)}, 0.0303030303030303),
        Weighted(axiom_{eqM(op_2(a)(r)(inv(r)(e)))(op(a)(e))}, 0.0303030303030303),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.0303030303030303
        ),
        Weighted(eqM, 0.4909090909090909),
        Weighted(p, 0.3272727272727272)
      )
    )
    ts_34: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(p, 0.0303030303030303),
          Weighted(eqM, 0.0303030303030303),
          Weighted(op, 0.0303030303030303),
          Weighted(axiom_{eqM(op(a)(e))(a)}, 0.0303030303030303),
          Weighted(axiom_{eqM(op_2(a)(r)(inv(r)(e)))(op(a)(e))}, 0.0303030303030303),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.0303030303030303
          ),
          Weighted(eqM, 0.4909090909090909),
          Weighted(p, 0.3272727272727272)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.0303030303030303),
          Weighted((M → (M → 𝒰 )), 0.0303030303030303),
          Weighted((M → (M → M)), 0.0303030303030303),
          Weighted(∏(a : M){ eqM(op(a)(e))(a) }, 0.0303030303030303),
          Weighted(
            ∏(a : M){ eqM(op_2(a)(r)(inv(r)(e)))(op(a)(e)) },
            0.0303030303030303
          ),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.0303030303030303
          ),
          Weighted((M → (M → 𝒰 )), 0.4909090909090909),
          Weighted(M, 0.3272727272727272)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector(Weighted(eqM(op_2(p)(r)(s))(p), 1.0))),
    ...
    
    
    In [16]:
    val tg12 = TermGenParams(unAppW = 0.3)
    val lp_43 = LocalProver(ts_34,tg12,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[16]:
    tg12: TermGenParams = TermGenParams(
      0.1,
      0.3,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    lp_43: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(p, 0.0303030303030303),
            Weighted(eqM, 0.0303030303030303),
            Weighted(op, 0.0303030303030303),
            Weighted(axiom_{eqM(op(a)(e))(a)}, 0.0303030303030303),
            Weighted(
              axiom_{eqM(op_2(a)(r)(inv(r)(e)))(op(a)(e))},
              0.0303030303030303
            ),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
              0.0303030303030303
            ),
            Weighted(eqM, 0.4909090909090909),
            Weighted(p, 0.3272727272727272)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.0303030303030303),
            Weighted((M → (M → 𝒰 )), 0.0303030303030303),
            Weighted((M → (M → M)), 0.0303030303030303),
            Weighted(∏(a : M){ eqM(op(a)(e))(a) }, 0.0303030303030303),
            Weighted(
              ∏(a : M){ eqM(op_2(a)(r)(inv(r)(e)))(op(a)(e)) },
              0.0303030303030303
            ),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
              0.0303030303030303
            ),
            Weighted((M → (M → 𝒰 )), 0.4909090909090909),
            Weighted(M, 0.3272727272727272)
          )
        ),
    ...
    
    
    In [17]:
    val lem_43 = lp_43.lemmas.runSyncUnsafe()
    
    
    
    
    Out[17]:
    lem_43: Vector[(Typ[Term], Double)] = Vector()

    In the following section below we are going to represent inv(r)(e) with variable s.Then we will see that after replacing the inv(r)(e) with s we were able to prove the theorem i.e we are defining $s$ such that $s \in M$ and $s=inv(r)(e)$.And by doing this we are able to get the desired lemma.

    In the program below we have skipped a the following steps:- $$s=inv(r)(e) $$ $$\implies r*s = r*inv(r)(e)$$ $$\implies p*(r*s) = p*(r*inv(r)(e)) $$ $$\implies p*r*s = p*r*inv(r)(e) $$ But since we have done it several times previously we wont repeat it again.

    
    
    In [6]:
    val negative22_ :FiniteDistribution[Term] = unif(a,b,c)(p,eqM,op)(
        eqM(op(a)(e))(a),
        eqM(op_2(a)(r)(s))(op(a)(e)),
        eqM(a)(b) ->: eqM(b)(c) ->: eqM(a)(c)
        )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)++(FiniteDistribution.unif(p:Term)*0.6)
    val negative22_1 = negative22_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_35 = TermState(negative22_1,negative22_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op_2(p)(r)(s))(p)))
    
    
    
    
    Out[6]:
    negative22_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.05555555555555555),
        Weighted(b, 0.05555555555555555),
        Weighted(c, 0.05555555555555555),
        Weighted(p, 0.05555555555555555),
        Weighted(eqM, 0.05555555555555555),
        Weighted(op, 0.05555555555555555),
        Weighted(axiom_{eqM(op(a)(e))(a)}, 0.05555555555555555),
        Weighted(axiom_{eqM(op_2(a)(r)(s))(op(a)(e))}, 0.05555555555555555),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.05555555555555555
        ),
        Weighted(eqM, 0.9),
        Weighted(p, 0.6)
      )
    )
    negative22_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(p, 0.0303030303030303),
        Weighted(eqM, 0.0303030303030303),
        Weighted(op, 0.0303030303030303),
        Weighted(axiom_{eqM(op(a)(e))(a)}, 0.0303030303030303),
        Weighted(axiom_{eqM(op_2(a)(r)(s))(op(a)(e))}, 0.0303030303030303),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.0303030303030303
        ),
        Weighted(eqM, 0.4909090909090909),
        Weighted(p, 0.3272727272727272)
      )
    )
    ts_35: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(p, 0.0303030303030303),
          Weighted(eqM, 0.0303030303030303),
          Weighted(op, 0.0303030303030303),
          Weighted(axiom_{eqM(op(a)(e))(a)}, 0.0303030303030303),
          Weighted(axiom_{eqM(op_2(a)(r)(s))(op(a)(e))}, 0.0303030303030303),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.0303030303030303
          ),
          Weighted(eqM, 0.4909090909090909),
          Weighted(p, 0.3272727272727272)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.0303030303030303),
          Weighted((M → (M → 𝒰 )), 0.0303030303030303),
          Weighted((M → (M → M)), 0.0303030303030303),
          Weighted(∏(a : M){ eqM(op(a)(e))(a) }, 0.0303030303030303),
          Weighted(∏(a : M){ eqM(op_2(a)(r)(s))(op(a)(e)) }, 0.0303030303030303),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.0303030303030303
          ),
          Weighted((M → (M → 𝒰 )), 0.4909090909090909),
          Weighted(M, 0.3272727272727272)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector(Weighted(eqM(op_2(p)(r)(s))(p), 1.0))),
      Empty
    )
    
    
    In [19]:
    val lp_44 = LocalProver(ts_35,tg12,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[19]:
    tg12: TermGenParams = TermGenParams(
      0.1,
      0.3,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    lp_43: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(p, 0.0303030303030303),
            Weighted(eqM, 0.0303030303030303),
            Weighted(op, 0.0303030303030303),
            Weighted(axiom_{eqM(op(a)(e))(a)}, 0.0303030303030303),
            Weighted(axiom_{eqM(op_2(a)(r)(s))(op(a)(e))}, 0.0303030303030303),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
              0.0303030303030303
            ),
            Weighted(eqM, 0.4909090909090909),
            Weighted(p, 0.3272727272727272)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.0303030303030303),
            Weighted((M → (M → 𝒰 )), 0.0303030303030303),
            Weighted((M → (M → M)), 0.0303030303030303),
            Weighted(∏(a : M){ eqM(op(a)(e))(a) }, 0.0303030303030303),
            Weighted(∏(a : M){ eqM(op_2(a)(r)(s))(op(a)(e)) }, 0.0303030303030303),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
              0.0303030303030303
            ),
            Weighted((M → (M → 𝒰 )), 0.4909090909090909),
            Weighted(M, 0.3272727272727272)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
        FiniteDistribution(Vector(Weighted(eqM(op_2(p)(r)(s))(p), 1.0))),
        Empty
      ),
      TermGenParams(
    ...
    
    
    In [20]:
    val lem_44 = lp_44.lemmas.runSyncUnsafe()
    
    
    
    
    Out[20]:
    lem_43: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op_2(p)(r)(s))(p), 0.9160071555311703)
    )
    
    
    In [24]:
    val negative23_ :FiniteDistribution[Term] = unif(a,b,c)(eqM(op_2(p)(r)(s))(p),eqM(op_2(p)(r)(inv(r)(e)))(p))(
        eqM(op_2(p)(r)(inv(r)(e)))(op_2(p)(r)(s)),
        eqM(op_2(p)(r)(s))(p),
        eqM(a)(b) ->: eqM(b)(c) ->: eqM(a)(c)
        )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)++(FiniteDistribution.unif(p:Term)*0.6)
    val negative23_1 = negative23_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_36 = TermState(negative23_1,negative23_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op_2(a)(r)(inv(r)(e)))(p)))
    
    
    
    
    Out[24]:
    negative23_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.0625),
        Weighted(b, 0.0625),
        Weighted(c, 0.0625),
        Weighted(eqM(op_2(p)(r)(s))(p), 0.0625),
        Weighted(eqM(op_2(p)(r)(inv(r)(e)))(p), 0.0625),
        Weighted(axiom_{eqM(op_2(p)(r)(inv(r)(e)))(op_2(p)(r)(s))}, 0.0625),
        Weighted(axiom_{eqM(op_2(p)(r)(s))(p)}, 0.0625),
        Weighted(axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))}, 0.0625),
        Weighted(eqM, 0.9),
        Weighted(p, 0.6)
      )
    )
    negative23_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(eqM(op_2(p)(r)(s))(p), 0.034482758620689655),
        Weighted(eqM(op_2(p)(r)(inv(r)(e)))(p), 0.034482758620689655),
        Weighted(
          axiom_{eqM(op_2(p)(r)(inv(r)(e)))(op_2(p)(r)(s))},
          0.034482758620689655
        ),
        Weighted(axiom_{eqM(op_2(p)(r)(s))(p)}, 0.034482758620689655),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.034482758620689655
        ),
        Weighted(eqM, 0.496551724137931),
        Weighted(p, 0.3310344827586207)
      )
    )
    ts_36: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(eqM(op_2(p)(r)(s))(p), 0.034482758620689655),
          Weighted(eqM(op_2(p)(r)(inv(r)(e)))(p), 0.034482758620689655),
          Weighted(
            axiom_{eqM(op_2(p)(r)(inv(r)(e)))(op_2(p)(r)(s))},
            0.034482758620689655
          ),
          Weighted(axiom_{eqM(op_2(p)(r)(s))(p)}, 0.034482758620689655),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.034482758620689655
          ),
          Weighted(eqM, 0.496551724137931),
          Weighted(p, 0.3310344827586207)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(𝒰 , 0.034482758620689655),
          Weighted(𝒰 , 0.034482758620689655),
          Weighted(eqM(op_2(p)(r)(inv(r)(e)))(op_2(p)(r)(s)), 0.034482758620689655),
          Weighted(eqM(op_2(p)(r)(s))(p), 0.034482758620689655),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.034482758620689655
          ),
          Weighted((M → (M → 𝒰 )), 0.496551724137931),
          Weighted(M, 0.3310344827586207)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector(Weighted(eqM(op_2(a)(r)(inv(r)(e)))(p), 1.0))),
      Empty
    )
    
    
    In [25]:
    val lp_45 = LocalProver(ts_36,cutoff = 5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[25]:
    lp_45: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(eqM(op_2(p)(r)(s))(p), 0.034482758620689655),
            Weighted(eqM(op_2(p)(r)(inv(r)(e)))(p), 0.034482758620689655),
            Weighted(
              axiom_{eqM(op_2(p)(r)(inv(r)(e)))(op_2(p)(r)(s))},
              0.034482758620689655
            ),
            Weighted(axiom_{eqM(op_2(p)(r)(s))(p)}, 0.034482758620689655),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
              0.034482758620689655
            ),
            Weighted(eqM, 0.496551724137931),
            Weighted(p, 0.3310344827586207)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(𝒰 , 0.034482758620689655),
            Weighted(𝒰 , 0.034482758620689655),
            Weighted(
              eqM(op_2(p)(r)(inv(r)(e)))(op_2(p)(r)(s)),
              0.034482758620689655
            ),
            Weighted(eqM(op_2(p)(r)(s))(p), 0.034482758620689655),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
              0.034482758620689655
            ),
            Weighted((M → (M → 𝒰 )), 0.496551724137931),
            Weighted(M, 0.3310344827586207)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
    ...
    
    
    In [26]:
    val lem_45 = lp_45.lemmas.runSyncUnsafe()
    
    
    
    
    Out[26]:
    lem_45: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op_2(p)(r)(inv(r)(e)))(p), 6.694756034589538E-5)
    )

    Step5:

    $$(p*r)*inv(r)(e) = p$$

    Basically we will prove $$[ \{(p*r)*inv(r)(e) = p*r*inv(r)(e)\} \land$$ $$\{p*r*inv(r)(e) = p \}] \implies$$ $$(p*r)*inv(r)(e) = p$$

    
    
    In [38]:
    val negative24_ :FiniteDistribution[Term] = unif(a,b,c)(op_2(p)(r)(inv(r)(e)),op(op(p)(r))(inv(r)(e)))(
        eqM(op(op(p)(r))(inv(r)(e)))(op_2(p)(r)(inv(r)(e))),
        eqM(op_2(p)(r)(inv(r)(e)))(p),
        eqM(a)(b) ->: eqM(b)(c) ->: eqM(a)(c)
        )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)++(FiniteDistribution.unif(p:Term)*0.6)
    val negative24_1 = negative24_.filter((t) => !Set(a, b, c).contains(t)).normalized()
    val ts_37 = TermState(negative24_1,negative24_1.map(_.typ),goals = FiniteDistribution.unif(eqM(op(op(p)(r))(s))(p)))
    
    
    
    
    Out[38]:
    negative24_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.0625),
        Weighted(b, 0.0625),
        Weighted(c, 0.0625),
        Weighted(op_2(p)(r)(inv(r)(e)), 0.0625),
        Weighted(op(op(p)(r))(inv(r)(e)), 0.0625),
        Weighted(
          axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op_2(p)(r)(inv(r)(e)))},
          0.0625
        ),
        Weighted(axiom_{eqM(op_2(p)(r)(inv(r)(e)))(p)}, 0.0625),
        Weighted(axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))}, 0.0625),
        Weighted(eqM, 0.9),
        Weighted(p, 0.6)
      )
    )
    negative24_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(op_2(p)(r)(inv(r)(e)), 0.034482758620689655),
        Weighted(op(op(p)(r))(inv(r)(e)), 0.034482758620689655),
        Weighted(
          axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op_2(p)(r)(inv(r)(e)))},
          0.034482758620689655
        ),
        Weighted(axiom_{eqM(op_2(p)(r)(inv(r)(e)))(p)}, 0.034482758620689655),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
          0.034482758620689655
        ),
        Weighted(eqM, 0.496551724137931),
        Weighted(p, 0.3310344827586207)
      )
    )
    ts_37: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(op_2(p)(r)(inv(r)(e)), 0.034482758620689655),
          Weighted(op(op(p)(r))(inv(r)(e)), 0.034482758620689655),
          Weighted(
            axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op_2(p)(r)(inv(r)(e)))},
            0.034482758620689655
          ),
          Weighted(axiom_{eqM(op_2(p)(r)(inv(r)(e)))(p)}, 0.034482758620689655),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
            0.034482758620689655
          ),
          Weighted(eqM, 0.496551724137931),
          Weighted(p, 0.3310344827586207)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(M, 0.034482758620689655),
          Weighted(M, 0.034482758620689655),
          Weighted(
            eqM(op(op(p)(r))(inv(r)(e)))(op_2(p)(r)(inv(r)(e))),
            0.034482758620689655
          ),
          Weighted(eqM(op_2(p)(r)(inv(r)(e)))(p), 0.034482758620689655),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
            0.034482758620689655
          ),
          Weighted((M → (M → 𝒰 )), 0.496551724137931),
          Weighted(M, 0.3310344827586207)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector(Weighted(eqM(op(op(p)(r))(s))(p), 1.0))),
    ...
    
    
    In [39]:
    val tg13 = TermGenParams(unAppW = 0.2)
    val lp_46 = LocalProver(ts_37,tg13,cutoff = 2*math.pow(10,-6)).noIsles
    
    
    
    
    Out[39]:
    tg13: TermGenParams = TermGenParams(
      0.1,
      0.2,
      0.1,
      0.1,
      0.1,
      0.05,
      0.05,
      0.05,
      0.0,
      0.0,
      0.0,
      0.0,
      0.3,
      0.7,
      0.5,
      0.0,
      0.0,
      0.0,
      OrElse(
        OrElse(OrElse(OrElse(<function1>, <function1>), <function1>), <function1>),
        <function1>
      )
    )
    lp_46: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(op_2(p)(r)(inv(r)(e)), 0.034482758620689655),
            Weighted(op(op(p)(r))(inv(r)(e)), 0.034482758620689655),
            Weighted(
              axiom_{eqM(op(op(p)(r))(inv(r)(e)))(op_2(p)(r)(inv(r)(e)))},
              0.034482758620689655
            ),
            Weighted(axiom_{eqM(op_2(p)(r)(inv(r)(e)))(p)}, 0.034482758620689655),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(b)(c) \to eqM(a)(c)))},
              0.034482758620689655
            ),
            Weighted(eqM, 0.496551724137931),
            Weighted(p, 0.3310344827586207)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(M, 0.034482758620689655),
            Weighted(M, 0.034482758620689655),
            Weighted(
              eqM(op(op(p)(r))(inv(r)(e)))(op_2(p)(r)(inv(r)(e))),
              0.034482758620689655
            ),
            Weighted(eqM(op_2(p)(r)(inv(r)(e)))(p), 0.034482758620689655),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ (eqM(a)(b) → (eqM(b)(c) → eqM(a)(c))) } } },
              0.034482758620689655
            ),
            Weighted((M → (M → 𝒰 )), 0.496551724137931),
            Weighted(M, 0.3310344827586207)
          )
        ),
        Vector(),
        FiniteDistribution(Vector()),
    ...
    
    
    In [40]:
    val lem_46 = lp_46.lemmas.runSyncUnsafe()
    
    
    
    
    Out[40]:
    lem_46: Vector[(Typ[Term], Double)] = Vector(
      (eqM(op(op(p)(r))(inv(r)(e)))(p), 0.007441767680437878)
    )

    If we follow the same set of steps for q then we will get the same set of resuts as we got for p. For this step let, $$t=inv(r)(e)$$

    I have skipped the following steps:- $$t = inv(r)(e)$$ $$\implies r*t = r*inv(r)(e) $$ $$\implies p*(r*t) = p*(r*inv(r)(e))$$ $$\implies p*r*t = p*r*inv(r)(e) $$ Also, $$t = inv(r)(e)$$ $$\implies r*t = r*inv(r)(e) $$ $$\implies q*(r*t) = q*(r*inv(r)(e))$$ $$\implies q*r*t = q*r*inv(r)(e) $$ and, $$p*r*inv(r)(e) = q*r*inv(r)(e)$$ $$\implies p*r*t=q*r*t $$

    
    
    In [10]:
    val negative26_ :FiniteDistribution[Term] = unif(a,b,c,d)(eqM(op_2(q)(r)(t))(q),eqM(op_2(p)(r)(t))(p),eqM(op_2(p)(r)(t))(op_2(q)(r)(t)))(
        eqM(op_2(q)(r)(t))(q),
        eqM(op_2(p)(r)(t))(p),
        eqM(op_2(p)(r)(t))(op_2(q)(r)(t)),
        eqM(a)(b) ->: eqM(a)(c) ->: eqM(b)(d) ->: eqM(c)(d)
        )*0.5++(FiniteDistribution.unif(eqM:Term)*0.9)++(FiniteDistribution.unif(op_2:Term)*0.6)
    val negative26_1 = negative26_.filter((t) => !Set(a, b, c,d).contains(t)).normalized()
    val ts_38 = TermState(negative26_1,negative26_1.map(_.typ),goals = FiniteDistribution.unif(eqM(p)(q)))
    
    
    
    
    Out[10]:
    negative26_: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(a, 0.045454545454545456),
        Weighted(b, 0.045454545454545456),
        Weighted(c, 0.045454545454545456),
        Weighted(d, 0.045454545454545456),
        Weighted(eqM(op_2(q)(r)(t))(q), 0.045454545454545456),
        Weighted(eqM(op_2(p)(r)(t))(p), 0.045454545454545456),
        Weighted(eqM(op_2(p)(r)(t))(op_2(q)(r)(t)), 0.045454545454545456),
        Weighted(axiom_{eqM(op_2(q)(r)(t))(q)}, 0.045454545454545456),
        Weighted(axiom_{eqM(op_2(p)(r)(t))(p)}, 0.045454545454545456),
        Weighted(axiom_{eqM(op_2(p)(r)(t))(op_2(q)(r)(t))}, 0.045454545454545456),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(a)(c) \to (eqM(b)(d) \to eqM(c)(d))))},
          0.045454545454545456
        ),
        Weighted(eqM, 0.9),
        Weighted(op_2, 0.6)
      )
    )
    negative26_1: FiniteDistribution[Term] = FiniteDistribution(
      Vector(
        Weighted(eqM(op_2(q)(r)(t))(q), 0.024999999999999998),
        Weighted(eqM(op_2(p)(r)(t))(p), 0.024999999999999998),
        Weighted(eqM(op_2(p)(r)(t))(op_2(q)(r)(t)), 0.024999999999999998),
        Weighted(axiom_{eqM(op_2(q)(r)(t))(q)}, 0.024999999999999998),
        Weighted(axiom_{eqM(op_2(p)(r)(t))(p)}, 0.024999999999999998),
        Weighted(axiom_{eqM(op_2(p)(r)(t))(op_2(q)(r)(t))}, 0.024999999999999998),
        Weighted(
          axiom_{(eqM(a)(b) \to (eqM(a)(c) \to (eqM(b)(d) \to eqM(c)(d))))},
          0.024999999999999998
        ),
        Weighted(eqM, 0.49499999999999994),
        Weighted(op_2, 0.32999999999999996)
      )
    )
    ts_38: TermState = TermState(
      FiniteDistribution(
        Vector(
          Weighted(eqM(op_2(q)(r)(t))(q), 0.024999999999999998),
          Weighted(eqM(op_2(p)(r)(t))(p), 0.024999999999999998),
          Weighted(eqM(op_2(p)(r)(t))(op_2(q)(r)(t)), 0.024999999999999998),
          Weighted(axiom_{eqM(op_2(q)(r)(t))(q)}, 0.024999999999999998),
          Weighted(axiom_{eqM(op_2(p)(r)(t))(p)}, 0.024999999999999998),
          Weighted(axiom_{eqM(op_2(p)(r)(t))(op_2(q)(r)(t))}, 0.024999999999999998),
          Weighted(
            axiom_{(eqM(a)(b) \to (eqM(a)(c) \to (eqM(b)(d) \to eqM(c)(d))))},
            0.024999999999999998
          ),
          Weighted(eqM, 0.49499999999999994),
          Weighted(op_2, 0.32999999999999996)
        )
      ),
      FiniteDistribution(
        Vector(
          Weighted(𝒰 , 0.024999999999999998),
          Weighted(𝒰 , 0.024999999999999998),
          Weighted(𝒰 , 0.024999999999999998),
          Weighted(eqM(op_2(q)(r)(t))(q), 0.024999999999999998),
          Weighted(eqM(op_2(p)(r)(t))(p), 0.024999999999999998),
          Weighted(eqM(op_2(p)(r)(t))(op_2(q)(r)(t)), 0.024999999999999998),
          Weighted(
            ∏(a : M){ ∏(b : M){ ∏(c : M){ ∏(d : M){ (eqM(a)(b) → (eqM(a)(c) → (eqM(b)(d) → eqM(c)(d)))) } } } },
            0.024999999999999998
          ),
          Weighted((M → (M → 𝒰 )), 0.49499999999999994),
          Weighted((M → (M → (M → M))), 0.32999999999999996)
        )
      ),
      Vector(),
      FiniteDistribution(Vector()),
      FiniteDistribution(Vector(Weighted(eqM(p)(q), 1.0))),
      Empty
    )
    
    
    In [11]:
    val lp_47 = LocalProver(ts_38,cutoff = 1.5*math.pow(10,-6)).noIsles
    
    
    
    
    Out[11]:
    lp_47: LocalProver = LocalProver(
      TermState(
        FiniteDistribution(
          Vector(
            Weighted(eqM(op_2(q)(r)(t))(q), 0.024999999999999998),
            Weighted(eqM(op_2(p)(r)(t))(p), 0.024999999999999998),
            Weighted(eqM(op_2(p)(r)(t))(op_2(q)(r)(t)), 0.024999999999999998),
            Weighted(axiom_{eqM(op_2(q)(r)(t))(q)}, 0.024999999999999998),
            Weighted(axiom_{eqM(op_2(p)(r)(t))(p)}, 0.024999999999999998),
            Weighted(
              axiom_{eqM(op_2(p)(r)(t))(op_2(q)(r)(t))},
              0.024999999999999998
            ),
            Weighted(
              axiom_{(eqM(a)(b) \to (eqM(a)(c) \to (eqM(b)(d) \to eqM(c)(d))))},
              0.024999999999999998
            ),
            Weighted(eqM, 0.49499999999999994),
            Weighted(op_2, 0.32999999999999996)
          )
        ),
        FiniteDistribution(
          Vector(
            Weighted(𝒰 , 0.024999999999999998),
            Weighted(𝒰 , 0.024999999999999998),
            Weighted(𝒰 , 0.024999999999999998),
            Weighted(eqM(op_2(q)(r)(t))(q), 0.024999999999999998),
            Weighted(eqM(op_2(p)(r)(t))(p), 0.024999999999999998),
            Weighted(eqM(op_2(p)(r)(t))(op_2(q)(r)(t)), 0.024999999999999998),
            Weighted(
              ∏(a : M){ ∏(b : M){ ∏(c : M){ ∏(d : M){ (eqM(a)(b) → (eqM(a)(c) → (eqM(b)(d) → eqM(c)(d)))) } } } },
              0.024999999999999998
            ),
            Weighted((M → (M → 𝒰 )), 0.49499999999999994),
            Weighted((M → (M → (M → M))), 0.32999999999999996)
          )
        ),
        Vector(),
    ...
    
    
    In [12]:
    val lem_47 = lp_47.lemmas.runSyncUnsafe()
    
    
    
    
    Out[12]:
    lem_47: Vector[(Typ[Term], Double)] = Vector((eqM(p)(q), 0.8666263127340152))