Solving ../../benchmarks/smtlib/false/insert_length_eq.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} ; eltlist -> {cons, nil} ; nat -> {s, z} } definition: { (leq, P: { leq(a, y) <= True leq(b, b) <= True False <= leq(b, a) } ) (insert, F: { insert(x, nil, cons(x, nil)) <= True insert(x, cons(y, z), cons(y, _qcb)) \/ leq(x, y) <= insert(x, z, _qcb) insert(x, cons(y, z), cons(x, cons(y, z))) <= leq(x, y) } eq_eltlist(_tcb, _ucb) <= insert(_rcb, _scb, _tcb) /\ insert(_rcb, _scb, _ucb) ) (length, F: { length(nil, z) <= True length(cons(x, ll), s(_vcb)) <= length(ll, _vcb) } eq_nat(_xcb, _ycb) <= length(_wcb, _xcb) /\ length(_wcb, _ycb) ) (leqnat, P: { leqnat(z, s(nn2)) <= True leqnat(z, z) <= True leqnat(s(nn1), s(nn2)) <= leqnat(nn1, nn2) leqnat(nn1, nn2) <= leqnat(s(nn1), s(nn2)) False <= leqnat(s(nn1), z) } ) } properties: { eq_nat(_zcb, _bdb) <= insert(x, l, _adb) /\ length(_adb, _bdb) /\ length(l, _zcb) } over-approximation: {insert, length, leqnat} under-approximation: {leqnat} Clause system for inference is: { insert(x, nil, cons(x, nil)) <= True -> 0 length(nil, z) <= True -> 0 leq(a, y) <= True -> 0 leq(b, b) <= True -> 0 eq_nat(_zcb, _bdb) <= insert(x, l, _adb) /\ length(_adb, _bdb) /\ length(l, _zcb) -> 0 insert(x, cons(y, z), cons(y, _qcb)) \/ leq(x, y) <= insert(x, z, _qcb) -> 0 length(cons(x, ll), s(_vcb)) <= length(ll, _vcb) -> 0 insert(x, cons(y, z), cons(x, cons(y, z))) <= leq(x, y) -> 0 False <= leq(b, a) -> 0 leqnat(s(nn1), s(nn2)) <= leqnat(nn1, nn2) -> 0 leqnat(nn1, nn2) <= leqnat(s(nn1), s(nn2)) -> 0 } Solving took 0.030725 seconds. No: Contradictory set of ground constraints: { False <= True insert(a, cons(b, nil), cons(a, cons(b, nil))) <= True insert(a, nil, cons(a, nil)) <= True insert(b, cons(b, nil), cons(b, cons(b, nil))) <= True insert(b, nil, cons(b, nil)) <= True length(cons(a, nil), s(z)) <= True length(nil, z) <= True leq(a, a) <= True leq(a, b) <= True leq(b, b) <= True insert(b, cons(a, nil), cons(a, cons(a, nil))) <= insert(b, nil, cons(a, nil)) False <= leq(b, a) } ------------------- STEPS: ------------------------------------------- Step 0, which took 0.005876 s (model generation: 0.005786, model checking: 0.000090): Clauses: { insert(x, nil, cons(x, nil)) <= True -> 0 length(nil, z) <= True -> 0 leq(a, y) <= True -> 0 leq(b, b) <= True -> 0 eq_nat(_zcb, _bdb) <= insert(x, l, _adb) /\ length(_adb, _bdb) /\ length(l, _zcb) -> 0 insert(x, cons(y, z), cons(y, _qcb)) \/ leq(x, y) <= insert(x, z, _qcb) -> 0 length(cons(x, ll), s(_vcb)) <= length(ll, _vcb) -> 0 insert(x, cons(y, z), cons(x, cons(y, z))) <= leq(x, y) -> 0 False <= leq(b, a) -> 0 leqnat(s(nn1), s(nn2)) <= leqnat(nn1, nn2) -> 0 leqnat(nn1, nn2) <= leqnat(s(nn1), s(nn2)) -> 0 } Accumulated learning constraints: { } Current best model: |_ name: None insert -> [ insert : { } ] ; length -> [ length : { } ] ; leq -> [ leq : { } ] ; leqnat -> [ leqnat : { } ] -- Equality automata are defined for: {elt, eltlist, nat} _| Answer of teacher: insert(x, nil, cons(x, nil)) <= True : Yes: { x -> b } length(nil, z) <= True : Yes: { } leq(a, y) <= True : Yes: { y -> b } leq(b, b) <= True : Yes: { } eq_nat(_zcb, _bdb) <= insert(x, l, _adb) /\ length(_adb, _bdb) /\ length(l, _zcb) : No: () insert(x, cons(y, z), cons(y, _qcb)) \/ leq(x, y) <= insert(x, z, _qcb) : No: () length(cons(x, ll), s(_vcb)) <= length(ll, _vcb) : No: () insert(x, cons(y, z), cons(x, cons(y, z))) <= leq(x, y) : No: () False <= leq(b, a) : No: () leqnat(s(nn1), s(nn2)) <= leqnat(nn1, nn2) : No: () leqnat(nn1, nn2) <= leqnat(s(nn1), s(nn2)) : No: () ------------------------------------------- Step 1, which took 0.006883 s (model generation: 0.006784, model checking: 0.000099): Clauses: { insert(x, nil, cons(x, nil)) <= True -> 0 length(nil, z) <= True -> 0 leq(a, y) <= True -> 0 leq(b, b) <= True -> 0 eq_nat(_zcb, _bdb) <= insert(x, l, _adb) /\ length(_adb, _bdb) /\ length(l, _zcb) -> 0 insert(x, cons(y, z), cons(y, _qcb)) \/ leq(x, y) <= insert(x, z, _qcb) -> 0 length(cons(x, ll), s(_vcb)) <= length(ll, _vcb) -> 0 insert(x, cons(y, z), cons(x, cons(y, z))) <= leq(x, y) -> 0 False <= leq(b, a) -> 0 leqnat(s(nn1), s(nn2)) <= leqnat(nn1, nn2) -> 0 leqnat(nn1, nn2) <= leqnat(s(nn1), s(nn2)) -> 0 } Accumulated learning constraints: { insert(b, nil, cons(b, nil)) <= True length(nil, z) <= True leq(a, b) <= True leq(b, b) <= True } Current best model: |_ name: None insert -> [ insert : { insert(b, nil, cons(x_2_0, x_2_1)) <= True } ] ; length -> [ length : { length(nil, z) <= True } ] ; leq -> [ leq : { leq(a, b) <= True leq(b, b) <= True } ] ; leqnat -> [ leqnat : { } ] -- Equality automata are defined for: {elt, eltlist, nat} _| Answer of teacher: insert(x, nil, cons(x, nil)) <= True : Yes: { x -> a } length(nil, z) <= True : No: () leq(a, y) <= True : Yes: { y -> a } leq(b, b) <= True : No: () eq_nat(_zcb, _bdb) <= insert(x, l, _adb) /\ length(_adb, _bdb) /\ length(l, _zcb) : No: () insert(x, cons(y, z), cons(y, _qcb)) \/ leq(x, y) <= insert(x, z, _qcb) : Yes: { _qcb -> cons(_otoqw_0, _otoqw_1) ; x -> b ; y -> a ; z -> nil } length(cons(x, ll), s(_vcb)) <= length(ll, _vcb) : Yes: { _vcb -> z ; ll -> nil } insert(x, cons(y, z), cons(x, cons(y, z))) <= leq(x, y) : Yes: { x -> b ; y -> b } False <= leq(b, a) : No: () leqnat(s(nn1), s(nn2)) <= leqnat(nn1, nn2) : No: () leqnat(nn1, nn2) <= leqnat(s(nn1), s(nn2)) : No: () ------------------------------------------- Step 2, which took 0.009327 s (model generation: 0.009121, model checking: 0.000206): Clauses: { insert(x, nil, cons(x, nil)) <= True -> 0 length(nil, z) <= True -> 0 leq(a, y) <= True -> 0 leq(b, b) <= True -> 0 eq_nat(_zcb, _bdb) <= insert(x, l, _adb) /\ length(_adb, _bdb) /\ length(l, _zcb) -> 0 insert(x, cons(y, z), cons(y, _qcb)) \/ leq(x, y) <= insert(x, z, _qcb) -> 0 length(cons(x, ll), s(_vcb)) <= length(ll, _vcb) -> 0 insert(x, cons(y, z), cons(x, cons(y, z))) <= leq(x, y) -> 0 False <= leq(b, a) -> 0 leqnat(s(nn1), s(nn2)) <= leqnat(nn1, nn2) -> 0 leqnat(nn1, nn2) <= leqnat(s(nn1), s(nn2)) -> 0 } Accumulated learning constraints: { insert(a, nil, cons(a, nil)) <= True insert(b, cons(b, nil), cons(b, cons(b, nil))) <= True insert(b, nil, cons(b, nil)) <= True length(cons(a, nil), s(z)) <= True length(nil, z) <= True leq(a, a) <= True leq(a, b) <= True leq(b, b) <= True insert(b, cons(a, nil), cons(a, cons(a, nil))) \/ leq(b, a) <= insert(b, nil, cons(a, nil)) } Current best model: |_ name: None insert -> [ insert : { insert(a, nil, cons(x_2_0, x_2_1)) <= True insert(b, cons(x_1_0, x_1_1), cons(x_2_0, x_2_1)) <= True insert(b, nil, cons(x_2_0, x_2_1)) <= True } ] ; length -> [ length : { length(cons(x_0_0, x_0_1), s(x_1_0)) <= True length(nil, z) <= True } ] ; leq -> [ leq : { leq(a, a) <= True leq(a, b) <= True leq(b, a) <= True leq(b, b) <= True } ] ; leqnat -> [ leqnat : { } ] -- Equality automata are defined for: {elt, eltlist, nat} _| Answer of teacher: insert(x, nil, cons(x, nil)) <= True : No: () length(nil, z) <= True : No: () leq(a, y) <= True : No: () leq(b, b) <= True : No: () eq_nat(_zcb, _bdb) <= insert(x, l, _adb) /\ length(_adb, _bdb) /\ length(l, _zcb) : Yes: { _adb -> cons(_ytoqw_0, _ytoqw_1) ; _bdb -> s(_ztoqw_0) ; _zcb -> z ; l -> nil ; x -> a } insert(x, cons(y, z), cons(y, _qcb)) \/ leq(x, y) <= insert(x, z, _qcb) : No: () length(cons(x, ll), s(_vcb)) <= length(ll, _vcb) : No: () insert(x, cons(y, z), cons(x, cons(y, z))) <= leq(x, y) : Yes: { x -> a ; y -> b } False <= leq(b, a) : Yes: { } leqnat(s(nn1), s(nn2)) <= leqnat(nn1, nn2) : No: () leqnat(nn1, nn2) <= leqnat(s(nn1), s(nn2)) : No: () Total time: 0.030725 Learner time: 0.021691 Teacher time: 0.000395 Reasons for stopping: No: Contradictory set of ground constraints: { False <= True insert(a, cons(b, nil), cons(a, cons(b, nil))) <= True insert(a, nil, cons(a, nil)) <= True insert(b, cons(b, nil), cons(b, cons(b, nil))) <= True insert(b, nil, cons(b, nil)) <= True length(cons(a, nil), s(z)) <= True length(nil, z) <= True leq(a, a) <= True leq(a, b) <= True leq(b, b) <= True insert(b, cons(a, nil), cons(a, cons(a, nil))) <= insert(b, nil, cons(a, nil)) False <= leq(b, a) }