Solving ../../benchmarks/smtlib/true/tree_shallow_max.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(_qv, _rv) <= max(_ov, _pv, _qv) /\ max(_ov, _pv, _rv) ) (height, F: { height(leaf, z) <= True height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) } eq_nat(_xv, _yv) <= height(_wv, _xv) /\ height(_wv, _yv) ) (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) } ) (taller, P: { taller(leaf, z) <= True taller(node(e, t1, t2), z) <= True taller(node(e, t1, t2), s(m)) <= taller(t1, m) taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) False <= taller(leaf, s(m)) taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) } ) } properties: { shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) } over-approximation: {height, leq_nat, max, subtree, taller} under-approximation: {height, leq_nat, subtree, taller} Clause system for inference is: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Solving took 0.915764 seconds. Yes: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { _r_1(s(x_0_0), s(x_1_0)) <= _r_1(x_0_0, x_1_0) _r_1(z, s(x_1_0)) <= True _r_1(z, z) <= True max(s(x_0_0), s(x_1_0), s(x_2_0)) <= _r_1(x_0_0, x_2_0) /\ _r_1(x_1_0, x_2_0) max(s(x_0_0), z, s(x_2_0)) <= _r_1(x_0_0, x_2_0) max(z, s(x_1_0), s(x_2_0)) <= _r_1(x_1_0, x_2_0) max(z, 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 : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| ------------------- STEPS: ------------------------------------------- Step 0, which took 0.006528 s (model generation: 0.006378, model checking: 0.000150): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { } ] ; shallower -> [ shallower : { } ] ; subtree -> [ subtree : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : Yes: { m -> z ; n -> z } le_nat(z, s(nn2)) <= True : Yes: { } shallower(leaf, n) <= True : Yes: { n -> z } height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : 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: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 1, which took 0.007551 s (model generation: 0.007368, model checking: 0.000183): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(z, s(z)) <= True le_nat(z, z) \/ max(z, z, z) <= True shallower(leaf, z) <= True } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(z, s(x_1_0)) <= True le_nat(z, z) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { max(z, z, z) <= True } ] ; shallower -> [ shallower : { shallower(leaf, z) <= True } ] ; subtree -> [ subtree : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : Yes: { m -> z ; n -> s(_mnzmw_0) } le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : Yes: { n -> s(_nnzmw_0) } height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : Yes: { m -> s(_onzmw_0) ; n -> z } le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : Yes: { nn1 -> z ; nn2 -> z } le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : Yes: { } leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : Yes: { _zv -> z ; n1 -> z ; n2 -> z ; t1 -> leaf ; t2 -> leaf } 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: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 2, which took 0.008578 s (model generation: 0.008336, model checking: 0.000242): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(z), z) \/ max(s(z), z, s(z)) <= True le_nat(z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True False <= le_nat(z, z) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), z) <= True le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { max(s(x_0_0), z, s(x_2_0)) <= True max(z, s(x_1_0), s(x_2_0)) <= True max(z, 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 } ] ; subtree -> [ subtree : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : Yes: { m -> s(_cozmw_0) ; n -> s(_dozmw_0) } le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : Yes: { m -> z ; n -> s(_fozmw_0) } le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : Yes: { nn1 -> z ; nn2 -> s(_jozmw_0) } le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : Yes: { } False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : 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(_mozmw_0, _mozmw_1, _mozmw_2) } shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : Yes: { m -> z ; t1 -> node(_oozmw_0, _oozmw_1, _oozmw_2) } False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 3, which took 0.012021 s (model generation: 0.011816, model checking: 0.000205): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(z), s(s(z))) <= True le_nat(s(z), s(z)) \/ max(s(z), s(z), s(z)) <= True le_nat(z, s(z)) <= True max(s(z), z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True False <= le_nat(s(z), z) False <= le_nat(z, z) 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)) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= True le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { max(s(x_0_0), s(x_1_0), s(x_2_0)) <= True max(s(x_0_0), z, s(x_2_0)) <= True max(z, s(x_1_0), s(x_2_0)) <= True max(z, 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 : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : No: () le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : Yes: { nn1 -> z ; nn2 -> z } False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : 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: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : Yes: { } 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 4, which took 0.151839 s (model generation: 0.009657, model checking: 0.142182): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(z), s(s(z))) <= True le_nat(z, s(z)) <= True max(s(z), s(z), s(z)) <= True max(s(z), z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True False <= le_nat(s(z), s(z)) False <= le_nat(s(z), z) False <= le_nat(z, z) False <= shallower(node(a, leaf, leaf), z) False <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) False <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { max(s(x_0_0), s(x_1_0), s(x_2_0)) <= True max(s(x_0_0), z, s(x_2_0)) <= True max(z, s(x_1_0), s(x_2_0)) <= True max(z, 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 : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : No: () le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : Yes: { _zv -> s(z) ; n1 -> s(s(z)) ; n2 -> s(_zpzmw_0) ; t1 -> node(_aqzmw_0, leaf, node(_owzmw_0, leaf, leaf)) ; t2 -> leaf } 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: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 5, which took 0.099266 s (model generation: 0.011438, model checking: 0.087828): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(z), s(s(z))) <= True le_nat(z, s(z)) <= True max(s(z), s(z), s(z)) <= True max(s(z), z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True False <= le_nat(s(z), s(z)) False <= le_nat(s(z), z) False <= le_nat(z, z) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), s(z), s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) False <= shallower(node(a, leaf, leaf), z) False <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) False <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { max(s(x_0_0), s(x_1_0), s(x_2_0)) <= max(x_0_0, x_1_0, x_2_0) max(s(x_0_0), z, s(x_2_0)) <= True max(z, s(x_1_0), s(x_2_0)) <= True max(z, 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 : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : No: () le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : Yes: { _zv -> s(z) ; n1 -> s(s(z)) ; n2 -> z ; t1 -> node(_ikdnw_0, leaf, node(_ypdnw_0, leaf, leaf)) ; t2 -> leaf } 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: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 6, which took 0.019651 s (model generation: 0.019008, model checking: 0.000643): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(z), s(s(z))) <= True le_nat(z, s(z)) <= True max(s(z), s(z), s(z)) <= True max(s(z), z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True False <= le_nat(s(z), s(z)) False <= le_nat(s(z), z) False <= le_nat(z, z) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), s(z), s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), z, s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) False <= shallower(node(a, leaf, leaf), z) False <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) False <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { max(s(x_0_0), s(x_1_0), s(x_2_0)) <= True max(s(x_0_0), z, s(x_2_0)) <= True max(z, s(x_1_0), s(x_2_0)) <= True max(z, z, z) <= True } ] ; shallower -> [ shallower : { _r_1(leaf) <= True 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)) <= _r_1(x_0_1) /\ _r_1(x_0_2) } ] ; subtree -> [ subtree : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : No: () le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : Yes: { _zv -> s(_rpgnw_0) ; n1 -> s(_spgnw_0) ; n2 -> z ; t1 -> node(_upgnw_0, leaf, leaf) ; t2 -> leaf } shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) : Yes: { m -> s(_xrgnw_0) ; t1 -> node(_yrgnw_0, leaf, leaf) ; t2 -> leaf } shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) : No: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 7, which took 0.021430 s (model generation: 0.020748, model checking: 0.000682): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(z), s(s(z))) <= True le_nat(z, s(z)) <= True max(s(z), s(z), s(z)) <= True max(s(z), z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True shallower(node(a, node(a, leaf, leaf), leaf), s(s(z))) <= True False <= le_nat(s(z), s(z)) False <= le_nat(s(z), z) False <= le_nat(z, z) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), s(z), s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), z, s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) False <= shallower(node(a, leaf, leaf), z) False <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) False <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { max(s(x_0_0), s(x_1_0), s(x_2_0)) <= True max(s(x_0_0), z, s(x_2_0)) <= True max(z, s(x_1_0), s(x_2_0)) <= True max(z, z, z) <= True } ] ; shallower -> [ shallower : { _r_1(leaf, s(x_1_0)) <= True _r_1(leaf, z) <= True _r_1(node(x_0_0, x_0_1, x_0_2), s(x_1_0)) <= True 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)) <= _r_1(x_0_1, x_1_0) /\ _r_1(x_0_2, x_1_0) } ] ; subtree -> [ subtree : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : No: () le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : 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 -> s(z) ; t1 -> leaf ; t2 -> node(_mygnw_0, _mygnw_1, node(_kzgnw_0, _kzgnw_1, _kzgnw_2)) } shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : Yes: { m -> s(z) ; t1 -> node(_zygnw_0, _zygnw_1, node(_qzgnw_0, _qzgnw_1, _qzgnw_2)) ; t2 -> node(_ozgnw_0, _ozgnw_1, _ozgnw_2) } False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 8, which took 0.022734 s (model generation: 0.021855, model checking: 0.000879): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(z), s(s(z))) <= True le_nat(z, s(z)) <= True max(s(z), s(z), s(z)) <= True max(s(z), z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True shallower(node(a, node(a, leaf, leaf), leaf), s(s(z))) <= True False <= le_nat(s(z), s(z)) False <= le_nat(s(z), z) False <= le_nat(z, z) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), s(z), s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), z, s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) False <= shallower(node(a, leaf, leaf), z) False <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) False <= shallower(node(a, leaf, node(a, leaf, node(a, leaf, leaf))), s(s(z))) False <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) False <= shallower(node(a, node(a, leaf, node(a, leaf, leaf)), node(a, leaf, leaf)), s(s(z))) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { max(s(x_0_0), s(x_1_0), s(x_2_0)) <= True max(s(x_0_0), z, s(x_2_0)) <= True max(z, s(x_1_0), s(x_2_0)) <= True max(z, z, z) <= True } ] ; shallower -> [ shallower : { _r_1(leaf) <= True 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)) <= _r_1(x_0_2) /\ shallower(x_0_1, x_1_0) } ] ; subtree -> [ subtree : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : No: () le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : Yes: { _zv -> s(_tchnw_0) ; n1 -> z ; n2 -> s(s(z)) ; t1 -> leaf ; t2 -> node(_xchnw_0, node(_bghnw_0, leaf, leaf), leaf) } shallower(node(e, t1, t2), s(m)) <= shallower(t1, m) /\ shallower(t2, m) : Yes: { m -> s(s(z)) ; t1 -> leaf ; t2 -> node(_vdhnw_0, node(_bghnw_0, leaf, leaf), leaf) } shallower(t2, m) <= shallower(t1, m) /\ shallower(node(e, t1, t2), s(m)) : No: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 9, which took 0.140603 s (model generation: 0.031153, model checking: 0.109450): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(z), s(s(z))) <= True le_nat(z, s(z)) <= True max(s(z), s(z), s(z)) <= True max(s(z), z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True shallower(node(a, node(a, leaf, leaf), leaf), s(s(z))) <= True False <= le_nat(s(z), s(z)) False <= le_nat(s(z), z) False <= le_nat(z, z) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), s(z), s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), z, s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, leaf, node(a, node(a, leaf, leaf), leaf)), s(s(z))) <= max(z, s(s(z)), s(z)) shallower(node(a, leaf, node(a, node(a, leaf, leaf), leaf)), s(s(s(z)))) <= shallower(leaf, s(s(z))) False <= shallower(node(a, leaf, leaf), z) False <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) False <= shallower(node(a, leaf, node(a, leaf, node(a, leaf, leaf))), s(s(z))) False <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) False <= shallower(node(a, node(a, leaf, node(a, leaf, leaf)), node(a, leaf, leaf)), s(s(z))) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { _r_1(z) <= True max(s(x_0_0), s(x_1_0), s(x_2_0)) <= _r_1(x_0_0) max(s(x_0_0), z, s(x_2_0)) <= _r_1(x_0_0) max(z, s(x_1_0), s(x_2_0)) <= _r_1(x_1_0) max(z, 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 : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : Yes: { m -> z ; n -> s(s(_pmhnw_0)) } le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : Yes: { m -> s(s(_pmhnw_0)) ; n -> z } le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : Yes: { _zv -> s(z) ; n1 -> s(z) ; n2 -> s(s(z)) ; t1 -> leaf ; t2 -> node(_xhhnw_0, leaf, node(_zohnw_0, leaf, leaf)) } 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: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 10, which took 0.119284 s (model generation: 0.034303, model checking: 0.084981): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(s(z)), z) \/ max(s(s(z)), z, s(s(z))) <= True le_nat(s(z), s(s(z))) <= True le_nat(z, s(z)) <= True max(s(z), s(z), s(z)) <= True max(s(z), z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True shallower(node(a, node(a, leaf, leaf), leaf), s(s(z))) <= True False <= le_nat(s(z), s(z)) False <= le_nat(s(z), z) max(z, s(s(z)), s(s(z))) <= le_nat(z, s(s(z))) False <= le_nat(z, z) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), s(z), s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), z, s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) False <= max(s(z), s(s(z)), s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, leaf, node(a, node(a, leaf, leaf), leaf)), s(s(z))) <= max(z, s(s(z)), s(z)) shallower(node(a, leaf, node(a, node(a, leaf, leaf), leaf)), s(s(s(z)))) <= shallower(leaf, s(s(z))) False <= shallower(node(a, leaf, leaf), z) False <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) False <= shallower(node(a, leaf, node(a, leaf, node(a, leaf, leaf))), s(s(z))) False <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) False <= shallower(node(a, node(a, leaf, node(a, leaf, leaf)), node(a, leaf, leaf)), s(s(z))) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { _r_1(s(x_0_0), s(x_1_0)) <= True _r_1(z, z) <= True max(s(x_0_0), s(x_1_0), s(x_2_0)) <= _r_1(x_0_0, x_1_0) max(s(x_0_0), z, s(x_2_0)) <= _r_1(x_0_0, x_2_0) max(z, s(x_1_0), s(x_2_0)) <= _r_1(x_1_0, x_2_0) max(z, 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 : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : Yes: { m -> s(z) ; n -> s(s(_adlnw_0)) } le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : Yes: { m -> s(s(_ddlnw_0)) ; n -> s(z) } le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : Yes: { _zv -> s(z) ; n1 -> s(s(_ujlnw_0)) ; n2 -> s(s(z)) ; t1 -> leaf ; t2 -> node(_dyknw_0, leaf, node(_wjlnw_0, leaf, leaf)) } 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: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () ------------------------------------------- Step 11, which took 0.129642 s (model generation: 0.039169, model checking: 0.090473): Clauses: { le_nat(n, m) \/ max(n, m, n) <= True -> 0 le_nat(z, s(nn2)) <= True -> 0 shallower(leaf, n) <= True -> 0 height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) -> 0 height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) -> 0 max(n, m, m) <= le_nat(n, m) -> 0 le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) -> 0 le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) -> 0 False <= le_nat(s(nn1), z) -> 0 False <= le_nat(z, z) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) -> 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 shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) -> 0 False <= shallower(node(e, t1, t2), z) -> 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 taller(node(e, t1, t2), s(m)) <= taller(t1, m) -> 0 taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) -> 0 taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) -> 0 } Accumulated learning constraints: { le_nat(s(s(z)), s(z)) \/ max(s(s(z)), s(z), s(s(z))) <= True le_nat(s(s(z)), z) \/ max(s(s(z)), z, s(s(z))) <= True le_nat(s(z), s(s(z))) <= True le_nat(z, s(z)) <= True max(s(z), s(s(z)), s(s(z))) <= True max(s(z), s(z), s(z)) <= True max(s(z), z, s(z)) <= True max(z, s(z), s(z)) <= True max(z, z, z) <= True shallower(leaf, s(z)) <= True shallower(leaf, z) <= True shallower(node(a, leaf, leaf), s(z)) <= True shallower(node(a, node(a, leaf, leaf), leaf), s(s(z))) <= True False <= le_nat(s(z), s(z)) False <= le_nat(s(z), z) max(z, s(s(z)), s(s(z))) <= le_nat(z, s(s(z))) False <= le_nat(z, z) False <= max(s(s(z)), s(s(z)), s(z)) /\ shallower(leaf, s(s(z))) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), s(z), s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, node(a, leaf, node(a, leaf, leaf)), leaf), s(s(z))) <= max(s(s(z)), z, s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) False <= max(s(z), s(s(z)), s(z)) /\ shallower(node(a, leaf, node(a, leaf, leaf)), s(s(z))) shallower(node(a, leaf, node(a, node(a, leaf, leaf), leaf)), s(s(z))) <= max(z, s(s(z)), s(z)) shallower(node(a, leaf, node(a, node(a, leaf, leaf), leaf)), s(s(s(z)))) <= shallower(leaf, s(s(z))) False <= shallower(node(a, leaf, leaf), z) False <= shallower(node(a, leaf, node(a, leaf, leaf)), s(z)) False <= shallower(node(a, leaf, node(a, leaf, node(a, leaf, leaf))), s(s(z))) False <= shallower(node(a, node(a, leaf, leaf), leaf), s(z)) False <= shallower(node(a, node(a, leaf, node(a, leaf, leaf)), node(a, leaf, leaf)), s(s(z))) } Current best model: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { _r_1(s(x_0_0), s(x_1_0)) <= True _r_1(z, s(x_1_0)) <= True _r_1(z, z) <= True max(s(x_0_0), s(x_1_0), s(x_2_0)) <= _r_1(x_0_0, x_2_0) /\ _r_1(x_1_0, x_2_0) max(s(x_0_0), z, s(x_2_0)) <= _r_1(x_0_0, x_2_0) max(z, s(x_1_0), s(x_2_0)) <= _r_1(x_1_0, x_2_0) max(z, 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 : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _| Answer of teacher: le_nat(n, m) \/ max(n, m, n) <= True : No: () le_nat(z, s(nn2)) <= True : No: () shallower(leaf, n) <= True : No: () height(node(e, t1, t2), s(_vv)) \/ le_nat(_sv, _tv) <= height(t1, _sv) /\ height(t1, _vv) /\ height(t2, _tv) : No: () height(node(e, t1, t2), s(_uv)) <= height(t1, _sv) /\ height(t2, _tv) /\ height(t2, _uv) /\ le_nat(_sv, _tv) : No: () max(n, m, m) <= le_nat(n, m) : No: () le_nat(s(nn1), s(nn2)) <= le_nat(nn1, nn2) : No: () le_nat(nn1, nn2) <= le_nat(s(nn1), s(nn2)) : No: () False <= le_nat(s(nn1), z) : No: () False <= le_nat(z, z) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () shallower(node(e, t1, t2), s(_zv)) <= max(n1, n2, _zv) /\ shallower(t1, n1) /\ shallower(t2, n2) : Yes: { _zv -> s(s(z)) ; n1 -> s(s(s(z))) ; n2 -> z ; t1 -> node(_tgonw_0, leaf, node(_ylonw_0, leaf, node(_foonw_0, leaf, leaf))) ; t2 -> leaf } 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: () shallower(t1, m) <= shallower(node(e, t1, t2), s(m)) : No: () False <= shallower(node(e, t1, t2), z) : 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: () taller(node(e, t1, t2), s(m)) <= taller(t1, m) : No: () taller(t1, m) \/ taller(node(e, t1, t2), s(m)) <= taller(t2, m) : No: () taller(t1, m) \/ taller(t2, m) <= taller(node(e, t1, t2), s(m)) : No: () Total time: 0.915764 Learner time: 0.221229 Teacher time: 0.517898 Reasons for stopping: Yes: |_ name: None height -> [ height : { } ] ; le_nat -> [ le_nat : { le_nat(s(x_0_0), s(x_1_0)) <= le_nat(x_0_0, x_1_0) le_nat(z, s(x_1_0)) <= True } ] ; leq_nat -> [ leq_nat : { } ] ; max -> [ max : { _r_1(s(x_0_0), s(x_1_0)) <= _r_1(x_0_0, x_1_0) _r_1(z, s(x_1_0)) <= True _r_1(z, z) <= True max(s(x_0_0), s(x_1_0), s(x_2_0)) <= _r_1(x_0_0, x_2_0) /\ _r_1(x_1_0, x_2_0) max(s(x_0_0), z, s(x_2_0)) <= _r_1(x_0_0, x_2_0) max(z, s(x_1_0), s(x_2_0)) <= _r_1(x_1_0, x_2_0) max(z, 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 : { } ] ; taller -> [ taller : { } ] -- Equality automata are defined for: {elt, etree, nat} _|