Solving ../../benchmarks/smtlib/false/tree_shallow_subtree_error.smt2... Inference procedure has parameters: Ice fuel: 200 Timeout: Some(60.) (sec) Teacher_type: Checks all clauses every time Approximation method: remove every clause that can be safely removed Learning problem is: env: { elt -> {a, b} ; etree -> {leaf, node} ; nat -> {s, z} } definition: { (leq_nat, P: { leq_nat(z, n2) <= True leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) False <= leq_nat(s(nn1), z) } ) (le_nat, P: { le_nat(z, s(nn2)) <= True le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) False <= le_nat(s(nn1), z) False <= le_nat(z, z) } ) (subtree, P: { subtree(leaf, t) <= True subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) False <= subtree(node(ea, ta1, ta2), leaf) eq_elt(ea, eb) <= subtree(node(ea, ta1, ta2), node(eb, tb1, tb2)) subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) } ) (max, F: { le_nat(n, m) \/ max(n, m, n) <= True max(n, m, m) <= le_nat(n, m) } eq_nat(_vfb, _wfb) <= max(_tfb, _ufb, _vfb) /\ max(_tfb, _ufb, _wfb) ) (height, F: { height(leaf, z) <= True height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) } eq_nat(_cgb, _dgb) <= height(_bgb, _cgb) /\ height(_bgb, _dgb) ) (shallower, P: { shallower(leaf, n) <= True shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) False <= shallower(node(e, t1, t2), z) } ) } properties: { leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) } over-approximation: {height, le_nat, max, shallower, subtree} under-approximation: {height, le_nat, leq_nat, max} Clause system for inference is: { shallower(leaf, n) <= True -> 0 subtree(leaf, t) <= True -> 0 height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) -> 0 height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 False <= leq_nat(s(nn1), z) -> 0 shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) -> 0 shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) -> 0 leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) -> 0 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) -> 0 subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 } Solving took 0.179416 seconds. No: Contradictory set of ground constraints: { False <= True leq_nat(s(z), s(z)) <= True leq_nat(z, s(z)) <= True leq_nat(z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True subtree(leaf, leaf) <= True subtree(leaf, node(a, leaf, leaf)) <= True subtree(node(a, leaf, leaf), node(a, node(a, leaf, leaf), node(a, leaf, leaf))) <= True False <= leq_nat(s(s(z)), s(z)) False <= leq_nat(s(z), z) False <= shallower(node(a, leaf, leaf), z) /\ subtree(node(a, leaf, leaf), node(a, leaf, leaf)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, leaf, leaf), node(a, leaf, leaf)) /\ subtree(node(a, node(a, leaf, leaf), node(a, leaf, leaf)), node(a, node(a, leaf, leaf), leaf)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, node(a, leaf, leaf), leaf), node(a, leaf, leaf)) } ------------------- STEPS: ------------------------------------------- Step 0, which took 0.006334 s (model generation: 0.006233, model checking: 0.000101): Clauses: { shallower(leaf, n) <= True -> 0 subtree(leaf, t) <= True -> 0 height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) -> 0 height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 False <= leq_nat(s(nn1), z) -> 0 shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) -> 0 shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) -> 0 leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) -> 0 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) -> 0 subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 } Accumulated learning constraints: { } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { } ] ; leq_nat -> [ leq_nat : { } ] ; shallower -> [ shallower : { } ] ; subtree -> [ subtree : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: shallower(leaf, n) <= True : Yes: { n -> z } subtree(leaf, t) <= True : Yes: { t -> node(_hnjuw_0, _hnjuw_1, _hnjuw_2) } height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) : No: () height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () False <= leq_nat(s(nn1), z) : No: () shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) : No: () shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) : No: () leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) : No: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) : No: () subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () ------------------------------------------- Step 1, which took 0.006616 s (model generation: 0.006504, model checking: 0.000112): Clauses: { shallower(leaf, n) <= True -> 0 subtree(leaf, t) <= True -> 0 height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) -> 0 height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 False <= leq_nat(s(nn1), z) -> 0 shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) -> 0 shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) -> 0 leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) -> 0 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) -> 0 subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 } Accumulated learning constraints: { shallower(leaf, z) <= True subtree(leaf, node(a, leaf, leaf)) <= True } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { } ] ; leq_nat -> [ leq_nat : { } ] ; shallower -> [ shallower : { shallower(leaf, z) <= True } ] ; subtree -> [ subtree : { subtree(leaf, node(x_1_0, x_1_1, x_1_2)) <= True } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: shallower(leaf, n) <= True : Yes: { n -> s(_injuw_0) } subtree(leaf, t) <= True : Yes: { t -> leaf } height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) : No: () height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () False <= leq_nat(s(nn1), z) : No: () shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) : Yes: { m -> z ; t1 -> leaf ; t2 -> leaf } shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) : No: () leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) : No: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) : Yes: { ta1 -> leaf ; ta2 -> leaf ; tb1 -> node(_pnjuw_0, _pnjuw_1, _pnjuw_2) ; tb2 -> node(_qnjuw_0, _qnjuw_1, _qnjuw_2) } subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () ------------------------------------------- Step 2, which took 0.008201 s (model generation: 0.008038, model checking: 0.000163): Clauses: { shallower(leaf, n) <= True -> 0 subtree(leaf, t) <= True -> 0 height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) -> 0 height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 False <= leq_nat(s(nn1), z) -> 0 shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) -> 0 shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) -> 0 leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) -> 0 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) -> 0 subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 } Accumulated learning constraints: { shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True subtree(leaf, leaf) <= True subtree(leaf, node(a, leaf, leaf)) <= True subtree(node(a, leaf, leaf), node(a, node(a, leaf, leaf), node(a, leaf, leaf))) <= True } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { } ] ; leq_nat -> [ leq_nat : { } ] ; shallower -> [ shallower : { shallower(leaf, s(x_1_0)) <= True shallower(leaf, z) <= True shallower(node(x_0_0, x_0_1, x_0_2), s(x_1_0)) <= True } ] ; subtree -> [ subtree : { subtree(leaf, leaf) <= True subtree(leaf, node(x_1_0, x_1_1, x_1_2)) <= True subtree(node(x_0_0, x_0_1, x_0_2), node(x_1_0, x_1_1, x_1_2)) <= True } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: shallower(leaf, n) <= True : No: () subtree(leaf, t) <= True : No: () height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) : No: () height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () False <= leq_nat(s(nn1), z) : No: () shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) : No: () shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) : Yes: { m -> z ; t1 -> leaf ; t2 -> node(_tnjuw_0, _tnjuw_1, _tnjuw_2) } leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) : Yes: { n1 -> z ; n2 -> z ; t1 -> leaf ; t2 -> leaf } shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : Yes: { m -> z ; t1 -> node(_xojuw_0, _xojuw_1, _xojuw_2) } subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) : No: () subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : Yes: { ta1 -> node(_gpjuw_0, _gpjuw_1, _gpjuw_2) ; ta2 -> node(_hpjuw_0, _hpjuw_1, _hpjuw_2) ; tb1 -> node(_ipjuw_0, _ipjuw_1, _ipjuw_2) ; tb2 -> leaf } subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : Yes: { ta1 -> node(_kpjuw_0, _kpjuw_1, _kpjuw_2) ; tb1 -> leaf } ------------------------------------------- Step 3, which took 0.011244 s (model generation: 0.011016, model checking: 0.000228): Clauses: { shallower(leaf, n) <= True -> 0 subtree(leaf, t) <= True -> 0 height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) -> 0 height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 False <= leq_nat(s(nn1), z) -> 0 shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) -> 0 shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) -> 0 leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) -> 0 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) -> 0 subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 } Accumulated learning constraints: { leq_nat(z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True subtree(leaf, leaf) <= True subtree(leaf, node(a, leaf, leaf)) <= True subtree(node(a, leaf, leaf), node(a, node(a, leaf, leaf), node(a, leaf, leaf))) <= True shallower(node(a, leaf, leaf), z) <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, leaf, leaf), node(a, leaf, leaf)) /\ subtree(node(a, node(a, leaf, leaf), node(a, leaf, leaf)), node(a, node(a, leaf, leaf), leaf)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, node(a, leaf, leaf), leaf), node(a, leaf, leaf)) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { } ] ; leq_nat -> [ leq_nat : { leq_nat(z, z) <= True } ] ; shallower -> [ shallower : { shallower(leaf, s(x_1_0)) <= True shallower(leaf, z) <= True shallower(node(x_0_0, x_0_1, x_0_2), s(x_1_0)) <= True shallower(node(x_0_0, x_0_1, x_0_2), z) <= True } ] ; subtree -> [ subtree : { subtree(leaf, leaf) <= True subtree(leaf, node(x_1_0, x_1_1, x_1_2)) <= True subtree(node(x_0_0, x_0_1, x_0_2), leaf) <= True subtree(node(x_0_0, x_0_1, x_0_2), node(x_1_0, x_1_1, x_1_2)) <= True } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: shallower(leaf, n) <= True : No: () subtree(leaf, t) <= True : No: () height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) : No: () height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : Yes: { nn1 -> z ; nn2 -> z } leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () False <= leq_nat(s(nn1), z) : No: () shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) : No: () shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) : No: () leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) : Yes: { n1 -> z ; n2 -> s(_zqjuw_0) ; t1 -> leaf ; t2 -> node(_brjuw_0, _brjuw_1, _brjuw_2) } shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) : No: () subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () ------------------------------------------- Step 4, which took 0.011167 s (model generation: 0.010973, model checking: 0.000194): Clauses: { shallower(leaf, n) <= True -> 0 subtree(leaf, t) <= True -> 0 height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) -> 0 height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 False <= leq_nat(s(nn1), z) -> 0 shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) -> 0 shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) -> 0 leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) -> 0 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) -> 0 subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 } Accumulated learning constraints: { leq_nat(s(z), s(z)) <= True leq_nat(z, s(z)) <= True leq_nat(z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True subtree(leaf, leaf) <= True subtree(leaf, node(a, leaf, leaf)) <= True subtree(node(a, leaf, leaf), node(a, node(a, leaf, leaf), node(a, leaf, leaf))) <= True shallower(node(a, leaf, leaf), z) <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, leaf, leaf), node(a, leaf, leaf)) /\ subtree(node(a, node(a, leaf, leaf), node(a, leaf, leaf)), node(a, node(a, leaf, leaf), leaf)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, node(a, leaf, leaf), leaf), node(a, leaf, leaf)) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { } ] ; leq_nat -> [ leq_nat : { leq_nat(s(x_0_0), s(x_1_0)) <= True leq_nat(z, s(x_1_0)) <= True leq_nat(z, z) <= True } ] ; shallower -> [ shallower : { shallower(leaf, s(x_1_0)) <= True shallower(leaf, z) <= True shallower(node(x_0_0, x_0_1, x_0_2), s(x_1_0)) <= True shallower(node(x_0_0, x_0_1, x_0_2), z) <= True } ] ; subtree -> [ subtree : { subtree(leaf, leaf) <= True subtree(leaf, node(x_1_0, x_1_1, x_1_2)) <= True subtree(node(x_0_0, x_0_1, x_0_2), leaf) <= True subtree(node(x_0_0, x_0_1, x_0_2), node(x_1_0, x_1_1, x_1_2)) <= True } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: shallower(leaf, n) <= True : No: () subtree(leaf, t) <= True : No: () height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) : No: () height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : Yes: { nn1 -> s(_krjuw_0) ; nn2 -> z } False <= leq_nat(s(nn1), z) : No: () shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) : No: () shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) : No: () leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) : Yes: { n1 -> s(_yrjuw_0) ; n2 -> z ; t1 -> node(_asjuw_0, _asjuw_1, _asjuw_2) ; t2 -> node(_bsjuw_0, _bsjuw_1, _bsjuw_2) } shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) : No: () subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () ------------------------------------------- Step 5, which took 0.010734 s (model generation: 0.010605, model checking: 0.000129): Clauses: { shallower(leaf, n) <= True -> 0 subtree(leaf, t) <= True -> 0 height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) -> 0 height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 False <= leq_nat(s(nn1), z) -> 0 shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) -> 0 shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) -> 0 leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) -> 0 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) -> 0 subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 } Accumulated learning constraints: { leq_nat(s(z), s(z)) <= True leq_nat(z, s(z)) <= True leq_nat(z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True subtree(leaf, leaf) <= True subtree(leaf, node(a, leaf, leaf)) <= True subtree(node(a, leaf, leaf), node(a, node(a, leaf, leaf), node(a, leaf, leaf))) <= True leq_nat(s(z), z) <= leq_nat(s(s(z)), s(z)) leq_nat(s(z), z) <= shallower(node(a, leaf, leaf), z) /\ subtree(node(a, leaf, leaf), node(a, leaf, leaf)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, leaf, leaf), node(a, leaf, leaf)) /\ subtree(node(a, node(a, leaf, leaf), node(a, leaf, leaf)), node(a, node(a, leaf, leaf), leaf)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, node(a, leaf, leaf), leaf), node(a, leaf, leaf)) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { } ] ; leq_nat -> [ leq_nat : { leq_nat(s(x_0_0), s(x_1_0)) <= True leq_nat(s(x_0_0), z) <= True leq_nat(z, s(x_1_0)) <= True leq_nat(z, z) <= True } ] ; shallower -> [ shallower : { shallower(leaf, s(x_1_0)) <= True shallower(leaf, z) <= True shallower(node(x_0_0, x_0_1, x_0_2), s(x_1_0)) <= True shallower(node(x_0_0, x_0_1, x_0_2), z) <= True } ] ; subtree -> [ subtree : { subtree(leaf, leaf) <= True subtree(leaf, node(x_1_0, x_1_1, x_1_2)) <= True subtree(node(x_0_0, x_0_1, x_0_2), leaf) <= True subtree(node(x_0_0, x_0_1, x_0_2), node(x_1_0, x_1_1, x_1_2)) <= True } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: shallower(leaf, n) <= True : No: () subtree(leaf, t) <= True : No: () height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) : No: () height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () False <= leq_nat(s(nn1), z) : Yes: { } shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) : No: () shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) : No: () leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) : No: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) : No: () subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () ------------------------------------------- Step 6, which took 0.114165 s (model generation: 0.011064, model checking: 0.103101): Clauses: { shallower(leaf, n) <= True -> 0 subtree(leaf, t) <= True -> 0 height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) -> 0 height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 False <= leq_nat(s(nn1), z) -> 0 shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) -> 0 shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) -> 0 leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) -> 0 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) -> 0 subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) -> 0 } Accumulated learning constraints: { leq_nat(s(z), s(z)) <= True leq_nat(z, s(z)) <= True leq_nat(z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True subtree(leaf, leaf) <= True subtree(leaf, node(a, leaf, leaf)) <= True subtree(node(a, leaf, leaf), node(a, node(a, leaf, leaf), node(a, leaf, leaf))) <= True False <= leq_nat(s(s(z)), s(z)) False <= leq_nat(s(z), z) False <= shallower(node(a, leaf, leaf), z) /\ subtree(node(a, leaf, leaf), node(a, leaf, leaf)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, leaf, leaf), node(a, leaf, leaf)) /\ subtree(node(a, node(a, leaf, leaf), node(a, leaf, leaf)), node(a, node(a, leaf, leaf), leaf)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, node(a, leaf, leaf), leaf), node(a, leaf, leaf)) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { } ] ; leq_nat -> [ leq_nat : { leq_nat(s(x_0_0), s(x_1_0)) <= leq_nat(x_0_0, x_1_0) leq_nat(z, s(x_1_0)) <= True leq_nat(z, z) <= True } ] ; shallower -> [ shallower : { shallower(leaf, s(x_1_0)) <= True shallower(leaf, z) <= True shallower(node(x_0_0, x_0_1, x_0_2), s(x_1_0)) <= shallower(x_0_1, x_1_0) /\ shallower(x_0_2, x_1_0) } ] ; subtree -> [ subtree : { subtree(leaf, leaf) <= True subtree(leaf, node(x_1_0, x_1_1, x_1_2)) <= True subtree(node(x_0_0, x_0_1, x_0_2), leaf) <= True subtree(node(x_0_0, x_0_1, x_0_2), node(x_1_0, x_1_1, x_1_2)) <= True } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: shallower(leaf, n) <= True : No: () subtree(leaf, t) <= True : No: () height(node(e, t1, t2), s(_agb)) \/ le_nat(_xfb, _yfb) <= height(t1, _agb) /\ height(t1, _xfb) /\ height(t2, _yfb) : No: () height(node(e, t1, t2), s(_zfb)) <= height(t1, _xfb) /\ height(t2, _yfb) /\ height(t2, _zfb) /\ le_nat(_xfb, _yfb) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () False <= leq_nat(s(nn1), z) : No: () shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) : No: () shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) : No: () leq_nat(n1, n2) <= shallower(t1, n1) /\ shallower(t2, n2) /\ subtree(t1, t2) : Yes: { n1 -> s(_vujuw_0) ; n2 -> z ; t1 -> leaf ; t2 -> leaf } shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) <= subtree(ta1, tb1) /\ subtree(ta2, tb2) : No: () subtree(ta2, tb2) <= subtree(ta1, tb1) /\ subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () subtree(ta1, tb1) <= subtree(node(eb, ta1, ta2), node(eb, tb1, tb2)) : No: () Total time: 0.179416 Learner time: 0.064433 Teacher time: 0.104028 Reasons for stopping: No: Contradictory set of ground constraints: { False <= True leq_nat(s(z), s(z)) <= True leq_nat(z, s(z)) <= True leq_nat(z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True subtree(leaf, leaf) <= True subtree(leaf, node(a, leaf, leaf)) <= True subtree(node(a, leaf, leaf), node(a, node(a, leaf, leaf), node(a, leaf, leaf))) <= True False <= leq_nat(s(s(z)), s(z)) False <= leq_nat(s(z), z) False <= shallower(node(a, leaf, leaf), z) /\ subtree(node(a, leaf, leaf), node(a, leaf, leaf)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) shallower(node(a, leaf, leaf), z) <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, leaf, leaf), node(a, leaf, leaf)) /\ subtree(node(a, node(a, leaf, leaf), node(a, leaf, leaf)), node(a, node(a, leaf, leaf), leaf)) subtree(node(a, leaf, leaf), leaf) <= subtree(node(a, node(a, leaf, leaf), leaf), node(a, leaf, leaf)) }