Solving ../../benchmarks/smtlib/true/length_take_if.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: { elist -> {econs, enil} ; elt -> {a, b} ; nat -> {s, z} } definition: { (take_elt, F: { take_elt(s(u), enil, enil) <= True take_elt(z, y, enil) <= True take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) } eq_elist(_mx, _nx) <= take_elt(_kx, _lx, _mx) /\ take_elt(_kx, _lx, _nx) ) (length_elt, F: { length_elt(enil, z) <= True length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) } eq_nat(_qx, _rx) <= length_elt(_px, _qx) /\ length_elt(_px, _rx) ) (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) } ) } properties: { eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) } over-approximation: {length_elt, leq_nat, take_elt} under-approximation: {} Clause system for inference is: { length_elt(enil, z) <= True -> 0 leq_nat(z, n2) <= True -> 0 take_elt(s(u), enil, enil) <= True -> 0 take_elt(z, y, enil) <= True -> 0 eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) -> 0 length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) -> 0 } Solving took 0.068019 seconds. Yes: |_ name: None length_elt -> [ length_elt : { length_elt(econs(x_0_0, x_0_1), s(x_1_0)) <= length_elt(x_0_1, x_1_0) length_elt(enil, z) <= True } ] ; 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 } ] ; take_elt -> [ take_elt : { take_elt(s(x_0_0), econs(x_1_0, x_1_1), econs(x_2_0, x_2_1)) <= take_elt(x_0_0, x_1_1, x_2_1) take_elt(s(x_0_0), enil, enil) <= True take_elt(z, econs(x_1_0, x_1_1), enil) <= True take_elt(z, enil, enil) <= True } ] -- Equality automata are defined for: {elist, elt, nat} _| ------------------- STEPS: ------------------------------------------- Step 0, which took 0.006005 s (model generation: 0.005944, model checking: 0.000061): Clauses: { length_elt(enil, z) <= True -> 0 leq_nat(z, n2) <= True -> 0 take_elt(s(u), enil, enil) <= True -> 0 take_elt(z, y, enil) <= True -> 0 eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) -> 0 length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) -> 0 } Accumulated learning constraints: { } Current best model: |_ name: None length_elt -> [ length_elt : { } ] ; leq_nat -> [ leq_nat : { } ] ; take_elt -> [ take_elt : { } ] -- Equality automata are defined for: {elist, elt, nat} _| Answer of teacher: length_elt(enil, z) <= True : Yes: { } leq_nat(z, n2) <= True : Yes: { n2 -> z } take_elt(s(u), enil, enil) <= True : Yes: { } take_elt(z, y, enil) <= True : Yes: { y -> enil } eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) : No: () length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) : No: () ------------------------------------------- Step 1, which took 0.006544 s (model generation: 0.006450, model checking: 0.000094): Clauses: { length_elt(enil, z) <= True -> 0 leq_nat(z, n2) <= True -> 0 take_elt(s(u), enil, enil) <= True -> 0 take_elt(z, y, enil) <= True -> 0 eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) -> 0 length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) -> 0 } Accumulated learning constraints: { length_elt(enil, z) <= True leq_nat(z, z) <= True take_elt(s(z), enil, enil) <= True take_elt(z, enil, enil) <= True } Current best model: |_ name: None length_elt -> [ length_elt : { length_elt(enil, z) <= True } ] ; leq_nat -> [ leq_nat : { leq_nat(z, z) <= True } ] ; take_elt -> [ take_elt : { take_elt(s(x_0_0), enil, enil) <= True take_elt(z, enil, enil) <= True } ] -- Equality automata are defined for: {elist, elt, nat} _| Answer of teacher: length_elt(enil, z) <= True : No: () leq_nat(z, n2) <= True : Yes: { n2 -> s(_ejfs_0) } take_elt(s(u), enil, enil) <= True : No: () take_elt(z, y, enil) <= True : Yes: { y -> econs(_fjfs_0, _fjfs_1) } eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) : No: () length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) : Yes: { _ox -> z ; ll -> enil } 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: () take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) : Yes: { _jx -> enil ; u -> z ; x3 -> enil } ------------------------------------------- Step 2, which took 0.009953 s (model generation: 0.009854, model checking: 0.000099): Clauses: { length_elt(enil, z) <= True -> 0 leq_nat(z, n2) <= True -> 0 take_elt(s(u), enil, enil) <= True -> 0 take_elt(z, y, enil) <= True -> 0 eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) -> 0 length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) -> 0 } Accumulated learning constraints: { length_elt(econs(a, enil), s(z)) <= True length_elt(enil, z) <= True leq_nat(s(z), s(z)) <= True leq_nat(z, s(z)) <= True leq_nat(z, z) <= True take_elt(s(z), econs(a, enil), econs(a, enil)) <= True take_elt(s(z), enil, enil) <= True take_elt(z, econs(a, enil), enil) <= True take_elt(z, enil, enil) <= True } Current best model: |_ name: None length_elt -> [ length_elt : { length_elt(econs(x_0_0, x_0_1), s(x_1_0)) <= True length_elt(enil, z) <= True } ] ; 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 } ] ; take_elt -> [ take_elt : { take_elt(s(x_0_0), econs(x_1_0, x_1_1), econs(x_2_0, x_2_1)) <= True take_elt(s(x_0_0), enil, enil) <= True take_elt(z, econs(x_1_0, x_1_1), enil) <= True take_elt(z, enil, enil) <= True } ] -- Equality automata are defined for: {elist, elt, nat} _| Answer of teacher: length_elt(enil, z) <= True : No: () leq_nat(z, n2) <= True : No: () take_elt(s(u), enil, enil) <= True : No: () take_elt(z, y, enil) <= True : No: () eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) : Yes: { _sx -> s(_qjfs_0) ; _tx -> econs(_rjfs_0, _rjfs_1) ; _ux -> s(z) ; l -> econs(_tjfs_0, _tjfs_1) ; n -> s(s(_ckfs_0)) } length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) : 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(_vjfs_0) ; nn2 -> z } take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) : No: () ------------------------------------------- Step 3, which took 0.014422 s (model generation: 0.014277, model checking: 0.000145): Clauses: { length_elt(enil, z) <= True -> 0 leq_nat(z, n2) <= True -> 0 take_elt(s(u), enil, enil) <= True -> 0 take_elt(z, y, enil) <= True -> 0 eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) -> 0 length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) -> 0 } Accumulated learning constraints: { length_elt(econs(a, enil), s(z)) <= True length_elt(enil, z) <= True leq_nat(s(z), s(z)) <= True leq_nat(z, s(z)) <= True leq_nat(z, z) <= True take_elt(s(z), econs(a, enil), econs(a, enil)) <= True take_elt(s(z), enil, enil) <= True take_elt(z, econs(a, enil), enil) <= True take_elt(z, enil, enil) <= True leq_nat(s(z), z) <= leq_nat(s(s(z)), s(z)) False <= leq_nat(s(s(z)), s(z)) /\ take_elt(s(s(z)), econs(a, enil), econs(a, enil)) } Current best model: |_ name: None length_elt -> [ length_elt : { length_elt(econs(x_0_0, x_0_1), s(x_1_0)) <= True length_elt(enil, z) <= True } ] ; 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 } ] ; take_elt -> [ take_elt : { take_elt(s(x_0_0), econs(x_1_0, x_1_1), econs(x_2_0, x_2_1)) <= True take_elt(s(x_0_0), enil, enil) <= True take_elt(z, econs(x_1_0, x_1_1), enil) <= True take_elt(z, enil, enil) <= True } ] -- Equality automata are defined for: {elist, elt, nat} _| Answer of teacher: length_elt(enil, z) <= True : No: () leq_nat(z, n2) <= True : No: () take_elt(s(u), enil, enil) <= True : No: () take_elt(z, y, enil) <= True : No: () eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) : Yes: { _sx -> s(z) ; _tx -> econs(_ekfs_0, _ekfs_1) ; _ux -> s(s(_dlfs_0)) ; l -> econs(_gkfs_0, _gkfs_1) ; n -> s(z) } length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) : No: () ------------------------------------------- Step 4, which took 0.012091 s (model generation: 0.011787, model checking: 0.000304): Clauses: { length_elt(enil, z) <= True -> 0 leq_nat(z, n2) <= True -> 0 take_elt(s(u), enil, enil) <= True -> 0 take_elt(z, y, enil) <= True -> 0 eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) -> 0 length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) -> 0 leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) -> 0 leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) -> 0 take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) -> 0 } Accumulated learning constraints: { length_elt(econs(a, enil), s(z)) <= True length_elt(enil, z) <= True leq_nat(s(z), s(z)) <= True leq_nat(z, s(z)) <= True leq_nat(z, z) <= True take_elt(s(z), econs(a, enil), econs(a, enil)) <= True take_elt(s(z), enil, enil) <= True take_elt(z, econs(a, enil), enil) <= True take_elt(z, enil, enil) <= True False <= length_elt(econs(a, enil), s(s(z))) leq_nat(s(z), z) <= leq_nat(s(s(z)), s(z)) False <= leq_nat(s(s(z)), s(z)) /\ take_elt(s(s(z)), econs(a, enil), econs(a, enil)) } Current best model: |_ name: None length_elt -> [ length_elt : { length_elt(econs(x_0_0, x_0_1), s(x_1_0)) <= length_elt(x_0_1, x_1_0) length_elt(enil, z) <= True } ] ; 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 } ] ; take_elt -> [ take_elt : { take_elt(s(x_0_0), econs(x_1_0, x_1_1), econs(x_2_0, x_2_1)) <= True take_elt(s(x_0_0), enil, enil) <= True take_elt(z, econs(x_1_0, x_1_1), enil) <= True take_elt(z, enil, enil) <= True } ] -- Equality automata are defined for: {elist, elt, nat} _| Answer of teacher: length_elt(enil, z) <= True : No: () leq_nat(z, n2) <= True : No: () take_elt(s(u), enil, enil) <= True : No: () take_elt(z, y, enil) <= True : No: () eq_nat(_ux, n) <= length_elt(_tx, _ux) /\ length_elt(l, _sx) /\ leq_nat(n, _sx) /\ take_elt(n, l, _tx) : Yes: { _sx -> s(z) ; _tx -> econs(_flfs_0, econs(_omfs_0, enil)) ; _ux -> s(s(z)) ; l -> econs(_hlfs_0, enil) ; n -> s(z) } length_elt(econs(x, ll), s(_ox)) <= length_elt(ll, _ox) : No: () leq_nat(s(nn1), s(nn2)) <= leq_nat(nn1, nn2) : No: () leq_nat(nn1, nn2) <= leq_nat(s(nn1), s(nn2)) : No: () take_elt(s(u), econs(x2, x3), econs(x2, _jx)) <= take_elt(u, x3, _jx) : No: () Total time: 0.068019 Learner time: 0.048312 Teacher time: 0.000703 Reasons for stopping: Yes: |_ name: None length_elt -> [ length_elt : { length_elt(econs(x_0_0, x_0_1), s(x_1_0)) <= length_elt(x_0_1, x_1_0) length_elt(enil, z) <= True } ] ; 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 } ] ; take_elt -> [ take_elt : { take_elt(s(x_0_0), econs(x_1_0, x_1_1), econs(x_2_0, x_2_1)) <= take_elt(x_0_0, x_1_1, x_2_1) take_elt(s(x_0_0), enil, enil) <= True take_elt(z, econs(x_1_0, x_1_1), enil) <= True take_elt(z, enil, enil) <= True } ] -- Equality automata are defined for: {elist, elt, nat} _|