Solving ../../benchmarks/smtlib/true/length_cons_le.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: { nat -> {s, z} ; natlist -> {cons, nil} } definition: { (le, P: { le(z, s(nn2)) <= True False <= le(n1, z) le(s(nn1), s(nn2)) <= le(nn1, nn2) le(nn1, nn2) <= le(s(nn1), s(nn2)) } ) (length, F: { length(nil, z) <= True length(cons(x, ll), s(_gs)) <= length(ll, _gs) } eq_nat(_is, _js) <= length(_hs, _is) /\ length(_hs, _js) ) } properties: { le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) } over-approximation: {length} under-approximation: {le} Clause system for inference is: { length(nil, z) <= True -> 0 False <= le(n1, z) -> 0 le(s(nn1), s(nn2)) <= le(nn1, nn2) -> 0 le(nn1, nn2) <= le(s(nn1), s(nn2)) -> 0 le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) -> 0 length(cons(x, ll), s(_gs)) <= length(ll, _gs) -> 0 } Solving took 0.066882 seconds. Yes: |_ name: None le -> [ le : { le(s(x_0_0), s(x_1_0)) <= le(x_0_0, x_1_0) le(z, s(x_1_0)) <= True } ] ; length -> [ length : { length(cons(x_0_0, x_0_1), s(x_1_0)) <= length(x_0_1, x_1_0) length(nil, z) <= True } ] -- Equality automata are defined for: {nat, natlist} _| ------------------- STEPS: ------------------------------------------- Step 0, which took 0.006085 s (model generation: 0.006039, model checking: 0.000046): Clauses: { length(nil, z) <= True -> 0 False <= le(n1, z) -> 0 le(s(nn1), s(nn2)) <= le(nn1, nn2) -> 0 le(nn1, nn2) <= le(s(nn1), s(nn2)) -> 0 le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) -> 0 length(cons(x, ll), s(_gs)) <= length(ll, _gs) -> 0 } Accumulated learning constraints: { } Current best model: |_ name: None le -> [ le : { } ] ; length -> [ length : { } ] -- Equality automata are defined for: {nat, natlist} _| Answer of teacher: length(nil, z) <= True : Yes: { } False <= le(n1, z) : No: () le(s(nn1), s(nn2)) <= le(nn1, nn2) : No: () le(nn1, nn2) <= le(s(nn1), s(nn2)) : No: () le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) : No: () length(cons(x, ll), s(_gs)) <= length(ll, _gs) : No: () ------------------------------------------- Step 1, which took 0.005933 s (model generation: 0.005884, model checking: 0.000049): Clauses: { length(nil, z) <= True -> 0 False <= le(n1, z) -> 0 le(s(nn1), s(nn2)) <= le(nn1, nn2) -> 0 le(nn1, nn2) <= le(s(nn1), s(nn2)) -> 0 le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) -> 0 length(cons(x, ll), s(_gs)) <= length(ll, _gs) -> 0 } Accumulated learning constraints: { length(nil, z) <= True } Current best model: |_ name: None le -> [ le : { } ] ; length -> [ length : { length(nil, z) <= True } ] -- Equality automata are defined for: {nat, natlist} _| Answer of teacher: length(nil, z) <= True : No: () False <= le(n1, z) : No: () le(s(nn1), s(nn2)) <= le(nn1, nn2) : No: () le(nn1, nn2) <= le(s(nn1), s(nn2)) : No: () le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) : No: () length(cons(x, ll), s(_gs)) <= length(ll, _gs) : Yes: { _gs -> z ; ll -> nil } ------------------------------------------- Step 2, which took 0.006359 s (model generation: 0.006313, model checking: 0.000046): Clauses: { length(nil, z) <= True -> 0 False <= le(n1, z) -> 0 le(s(nn1), s(nn2)) <= le(nn1, nn2) -> 0 le(nn1, nn2) <= le(s(nn1), s(nn2)) -> 0 le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) -> 0 length(cons(x, ll), s(_gs)) <= length(ll, _gs) -> 0 } Accumulated learning constraints: { length(cons(z, nil), s(z)) <= True length(nil, z) <= True } Current best model: |_ name: None le -> [ le : { } ] ; length -> [ length : { length(cons(x_0_0, x_0_1), s(x_1_0)) <= True length(nil, z) <= True } ] -- Equality automata are defined for: {nat, natlist} _| Answer of teacher: length(nil, z) <= True : No: () False <= le(n1, z) : No: () le(s(nn1), s(nn2)) <= le(nn1, nn2) : No: () le(nn1, nn2) <= le(s(nn1), s(nn2)) : No: () le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) : Yes: { _ks -> z ; _ls -> s(_fygq_0) ; l -> nil } length(cons(x, ll), s(_gs)) <= length(ll, _gs) : No: () ------------------------------------------- Step 3, which took 0.007280 s (model generation: 0.007217, model checking: 0.000063): Clauses: { length(nil, z) <= True -> 0 False <= le(n1, z) -> 0 le(s(nn1), s(nn2)) <= le(nn1, nn2) -> 0 le(nn1, nn2) <= le(s(nn1), s(nn2)) -> 0 le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) -> 0 length(cons(x, ll), s(_gs)) <= length(ll, _gs) -> 0 } Accumulated learning constraints: { le(z, s(z)) <= True length(cons(z, nil), s(z)) <= True length(nil, z) <= True } Current best model: |_ name: None le -> [ le : { le(z, s(x_1_0)) <= True } ] ; length -> [ length : { length(cons(x_0_0, x_0_1), s(x_1_0)) <= True length(nil, z) <= True } ] -- Equality automata are defined for: {nat, natlist} _| Answer of teacher: length(nil, z) <= True : No: () False <= le(n1, z) : No: () le(s(nn1), s(nn2)) <= le(nn1, nn2) : Yes: { nn1 -> z ; nn2 -> s(_iygq_0) } le(nn1, nn2) <= le(s(nn1), s(nn2)) : No: () le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) : Yes: { _ks -> s(_jygq_0) ; _ls -> s(_kygq_0) ; l -> cons(_lygq_0, _lygq_1) } length(cons(x, ll), s(_gs)) <= length(ll, _gs) : No: () ------------------------------------------- Step 4, which took 0.011958 s (model generation: 0.011908, model checking: 0.000050): Clauses: { length(nil, z) <= True -> 0 False <= le(n1, z) -> 0 le(s(nn1), s(nn2)) <= le(nn1, nn2) -> 0 le(nn1, nn2) <= le(s(nn1), s(nn2)) -> 0 le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) -> 0 length(cons(x, ll), s(_gs)) <= length(ll, _gs) -> 0 } Accumulated learning constraints: { le(s(z), s(s(z))) <= True le(z, s(z)) <= True length(cons(z, nil), s(z)) <= True length(nil, z) <= True le(s(z), s(z)) <= length(cons(z, cons(z, nil)), s(z)) } Current best model: |_ name: None le -> [ le : { le(s(x_0_0), s(x_1_0)) <= True le(z, s(x_1_0)) <= True } ] ; length -> [ length : { length(cons(x_0_0, x_0_1), s(x_1_0)) <= True length(nil, z) <= True } ] -- Equality automata are defined for: {nat, natlist} _| Answer of teacher: length(nil, z) <= True : No: () False <= le(n1, z) : No: () le(s(nn1), s(nn2)) <= le(nn1, nn2) : No: () le(nn1, nn2) <= le(s(nn1), s(nn2)) : Yes: { nn1 -> z ; nn2 -> z } le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) : No: () length(cons(x, ll), s(_gs)) <= length(ll, _gs) : No: () ------------------------------------------- Step 5, which took 0.009425 s (model generation: 0.009379, model checking: 0.000046): Clauses: { length(nil, z) <= True -> 0 False <= le(n1, z) -> 0 le(s(nn1), s(nn2)) <= le(nn1, nn2) -> 0 le(nn1, nn2) <= le(s(nn1), s(nn2)) -> 0 le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) -> 0 length(cons(x, ll), s(_gs)) <= length(ll, _gs) -> 0 } Accumulated learning constraints: { le(s(z), s(s(z))) <= True le(z, s(z)) <= True length(cons(z, nil), s(z)) <= True length(nil, z) <= True le(z, z) <= le(s(z), s(z)) le(s(z), s(z)) <= length(cons(z, cons(z, nil)), s(z)) } Current best model: |_ name: None le -> [ le : { le(s(x_0_0), s(x_1_0)) <= True le(z, s(x_1_0)) <= True le(z, z) <= True } ] ; length -> [ length : { length(cons(x_0_0, x_0_1), s(x_1_0)) <= True length(nil, z) <= True } ] -- Equality automata are defined for: {nat, natlist} _| Answer of teacher: length(nil, z) <= True : No: () False <= le(n1, z) : Yes: { n1 -> z } le(s(nn1), s(nn2)) <= le(nn1, nn2) : No: () le(nn1, nn2) <= le(s(nn1), s(nn2)) : Yes: { nn1 -> s(_rygq_0) ; nn2 -> z } le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) : No: () length(cons(x, ll), s(_gs)) <= length(ll, _gs) : No: () ------------------------------------------- Step 6, which took 0.008263 s (model generation: 0.008159, model checking: 0.000104): Clauses: { length(nil, z) <= True -> 0 False <= le(n1, z) -> 0 le(s(nn1), s(nn2)) <= le(nn1, nn2) -> 0 le(nn1, nn2) <= le(s(nn1), s(nn2)) -> 0 le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) -> 0 length(cons(x, ll), s(_gs)) <= length(ll, _gs) -> 0 } Accumulated learning constraints: { le(s(z), s(s(z))) <= True le(z, s(z)) <= True length(cons(z, nil), s(z)) <= True length(nil, z) <= True le(s(z), z) <= le(s(s(z)), s(z)) False <= le(s(z), s(z)) False <= le(z, z) False <= length(cons(z, cons(z, nil)), s(z)) } Current best model: |_ name: None le -> [ le : { le(s(x_0_0), s(x_1_0)) <= le(x_0_0, x_1_0) le(s(x_0_0), z) <= True le(z, s(x_1_0)) <= True } ] ; length -> [ length : { length(cons(x_0_0, x_0_1), s(x_1_0)) <= length(x_0_1, x_1_0) length(nil, z) <= True } ] -- Equality automata are defined for: {nat, natlist} _| Answer of teacher: length(nil, z) <= True : No: () False <= le(n1, z) : Yes: { n1 -> s(_tygq_0) } le(s(nn1), s(nn2)) <= le(nn1, nn2) : No: () le(nn1, nn2) <= le(s(nn1), s(nn2)) : No: () le(_ks, _ls) <= length(l, _ks) /\ length(cons(x, l), _ls) : No: () length(cons(x, ll), s(_gs)) <= length(ll, _gs) : No: () Total time: 0.066882 Learner time: 0.054899 Teacher time: 0.000404 Reasons for stopping: Yes: |_ name: None le -> [ le : { le(s(x_0_0), s(x_1_0)) <= le(x_0_0, x_1_0) le(z, s(x_1_0)) <= True } ] ; length -> [ length : { length(cons(x_0_0, x_0_1), s(x_1_0)) <= length(x_0_1, x_1_0) length(nil, z) <= True } ] -- Equality automata are defined for: {nat, natlist} _|