Solving ../../benchmarks/true/nat_double_is_zero_ite.smt2... Inference procedure has parameters: Ice fuel: 200 Timeout: 30s Convolution: complete Learning problem is: env: { nat -> {s, z} } definition: { (double, F: {() -> double([z, z]) (double([nn, _rl])) -> double([s(nn), s(s(_rl))])} (double([_sl, _tl]) /\ double([_sl, _ul])) -> eq_nat([_tl, _ul]) ) (is_zero, P: {(double([n, _vl]) /\ is_zero([n]) /\ not eq_nat([_vl, z])) -> BOT (double([n, z])) -> is_zero([n])} ) } properties: {() -> is_zero([z])} over-approximation: {double} under-approximation: {is_zero} Clause system for inference is: { () -> double([z, z]) -> 0 ; () -> is_zero([z]) -> 0 ; (double([n, _vl]) /\ is_zero([n]) /\ not eq_nat([_vl, z])) -> BOT -> 0 ; (double([n, z])) -> is_zero([n]) -> 0 ; (double([nn, _rl])) -> double([s(nn), s(s(_rl))]) -> 0 } Solving took 0.069310 seconds. Proved Model: |_ { double -> {{{ Q={q_gen_4756, q_gen_4758, q_gen_4759}, Q_f={q_gen_4756}, Delta= { (q_gen_4759) -> q_gen_4759 () -> q_gen_4759 (q_gen_4756) -> q_gen_4756 (q_gen_4758) -> q_gen_4756 () -> q_gen_4756 (q_gen_4759) -> q_gen_4758 } Datatype: Convolution form: complete }}} ; is_zero -> {{{ Q={q_gen_4755}, Q_f={q_gen_4755}, Delta= { () -> q_gen_4755 } Datatype: Convolution form: complete }}} } -- Equality automata are defined for: {eq_nat} _| ------------------- STEPS: ------------------------------------------- Step 0, which took 0.010331 s (model generation: 0.010166, model checking: 0.000165): Model: |_ { double -> {{{ Q={}, Q_f={}, Delta= { } Datatype: Convolution form: complete }}} ; is_zero -> {{{ Q={}, Q_f={}, Delta= { } Datatype: Convolution form: complete }}} } -- Equality automata are defined for: {eq_nat} _| Teacher's answer: New clause system: { () -> double([z, z]) -> 0 ; () -> is_zero([z]) -> 3 ; (double([n, _vl]) /\ is_zero([n]) /\ not eq_nat([_vl, z])) -> BOT -> 1 ; (double([n, z])) -> is_zero([n]) -> 1 ; (double([nn, _rl])) -> double([s(nn), s(s(_rl))]) -> 1 } Sat witness: Yes: (() -> is_zero([z]), { }) ------------------------------------------- Step 1, which took 0.010270 s (model generation: 0.010191, model checking: 0.000079): Model: |_ { double -> {{{ Q={}, Q_f={}, Delta= { } Datatype: Convolution form: complete }}} ; is_zero -> {{{ Q={q_gen_4755}, Q_f={q_gen_4755}, Delta= { () -> q_gen_4755 } Datatype: Convolution form: complete }}} } -- Equality automata are defined for: {eq_nat} _| Teacher's answer: New clause system: { () -> double([z, z]) -> 3 ; () -> is_zero([z]) -> 3 ; (double([n, _vl]) /\ is_zero([n]) /\ not eq_nat([_vl, z])) -> BOT -> 1 ; (double([n, z])) -> is_zero([n]) -> 1 ; (double([nn, _rl])) -> double([s(nn), s(s(_rl))]) -> 1 } Sat witness: Yes: (() -> double([z, z]), { }) ------------------------------------------- Step 2, which took 0.013372 s (model generation: 0.010331, model checking: 0.003041): Model: |_ { double -> {{{ Q={q_gen_4756}, Q_f={q_gen_4756}, Delta= { () -> q_gen_4756 } Datatype: Convolution form: complete }}} ; is_zero -> {{{ Q={q_gen_4755}, Q_f={q_gen_4755}, Delta= { () -> q_gen_4755 } Datatype: Convolution form: complete }}} } -- Equality automata are defined for: {eq_nat} _| Teacher's answer: New clause system: { () -> double([z, z]) -> 3 ; () -> is_zero([z]) -> 3 ; (double([n, _vl]) /\ is_zero([n]) /\ not eq_nat([_vl, z])) -> BOT -> 1 ; (double([n, z])) -> is_zero([n]) -> 1 ; (double([nn, _rl])) -> double([s(nn), s(s(_rl))]) -> 4 } Sat witness: Yes: ((double([nn, _rl])) -> double([s(nn), s(s(_rl))]), { _rl -> z ; nn -> z }) ------------------------------------------- Step 3, which took 0.011324 s (model generation: 0.011163, model checking: 0.000161): Model: |_ { double -> {{{ Q={q_gen_4756, q_gen_4759}, Q_f={q_gen_4756}, Delta= { () -> q_gen_4759 (q_gen_4756) -> q_gen_4756 (q_gen_4759) -> q_gen_4756 () -> q_gen_4756 } Datatype: Convolution form: complete }}} ; is_zero -> {{{ Q={q_gen_4755}, Q_f={q_gen_4755}, Delta= { () -> q_gen_4755 } Datatype: Convolution form: complete }}} } -- Equality automata are defined for: {eq_nat} _| Teacher's answer: New clause system: { () -> double([z, z]) -> 3 ; () -> is_zero([z]) -> 3 ; (double([n, _vl]) /\ is_zero([n]) /\ not eq_nat([_vl, z])) -> BOT -> 4 ; (double([n, z])) -> is_zero([n]) -> 2 ; (double([nn, _rl])) -> double([s(nn), s(s(_rl))]) -> 4 } Sat witness: Yes: ((double([n, _vl]) /\ is_zero([n]) /\ not eq_nat([_vl, z])) -> BOT, { _vl -> s(z) ; n -> z }) ------------------------------------------- Step 4, which took 0.011264 s (model generation: 0.010843, model checking: 0.000421): Model: |_ { double -> {{{ Q={q_gen_4756, q_gen_4758, q_gen_4759}, Q_f={q_gen_4756}, Delta= { () -> q_gen_4759 (q_gen_4758) -> q_gen_4756 () -> q_gen_4756 (q_gen_4759) -> q_gen_4758 } Datatype: Convolution form: complete }}} ; is_zero -> {{{ Q={q_gen_4755}, Q_f={q_gen_4755}, Delta= { () -> q_gen_4755 } Datatype: Convolution form: complete }}} } -- Equality automata are defined for: {eq_nat} _| Teacher's answer: New clause system: { () -> double([z, z]) -> 4 ; () -> is_zero([z]) -> 4 ; (double([n, _vl]) /\ is_zero([n]) /\ not eq_nat([_vl, z])) -> BOT -> 4 ; (double([n, z])) -> is_zero([n]) -> 3 ; (double([nn, _rl])) -> double([s(nn), s(s(_rl))]) -> 7 } Sat witness: Yes: ((double([nn, _rl])) -> double([s(nn), s(s(_rl))]), { _rl -> s(s(z)) ; nn -> s(z) }) Total time: 0.069310 Reason for stopping: Proved